Confirmedusers
637
edits
(Created page with "{{GameVersion112}} == Overview == The most important classes for inventory management are: * InventoryManager: Contains multiple inventories (every player has one with diffe...") |
m (Updated navbox to new code navbox.) |
||
(12 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{GameVersion|1.19.3}} | ||
<languages/> | |||
== Overview == | <translate> | ||
== Overview == <!--T:1--> | |||
The most important classes for inventory management are: | The most important classes for inventory management are: | ||
* InventoryManager: Contains multiple inventories (every player has one with different inventories). Also helps with common tasks like putting items into a valid inventory. | * InventoryManager: Contains multiple inventories (every player has one with different inventories). Also helps with common tasks like putting items into a valid inventory. | ||
Line 8: | Line 9: | ||
* ItemStack: Contains the Item and amount of items (called StackSize), e.g. "block torch-up" and StackSize of 2, for two Torches. | * ItemStack: Contains the Item and amount of items (called StackSize), e.g. "block torch-up" and StackSize of 2, for two Torches. | ||
== Basic Inventory Handling == | == Basic Inventory Handling == <!--T:2--> | ||
<!--T:3--> | |||
To get access to a players inventory, you can use the InventoryManager of the IPlayer. For example, to simply give the player a torch when joining you could use <code>TryGiveItemStack</code>: | |||
</translate> | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
private ICoreServerAPI | private ICoreServerAPI serverApi; | ||
public override void StartServerSide(ICoreServerAPI api) | public override void StartServerSide(ICoreServerAPI api) | ||
{ | { | ||
serverApi = api; | |||
serverApi.Event.PlayerJoin += EventOnPlayerJoin; | |||
} | } | ||
private void | private void EventOnPlayerJoin(IServerPlayer player) | ||
{ | { | ||
ItemStack torch = new ItemStack( | ItemStack torch = new ItemStack(serverApi.World.GetBlock(new AssetLocation("torch-basic-lit-up"))); | ||
player.InventoryManager.TryGiveItemstack(torch); | player.InventoryManager.TryGiveItemstack(torch); | ||
} | } | ||
Line 31: | Line 33: | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
ItemStack torch = new ItemStack( | ItemStack torch = new ItemStack(serverApi.World.GetBlock(new AssetLocation("torch-basic-lit-up"))); | ||
ItemSlot offhandSlot = player.Entity.LeftHandItemSlot; | |||
if (offhandSlot?.Empty == true) | if (offhandSlot?.Empty == true) | ||
{ | { | ||
Line 40: | Line 42: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
If you need access to other inventories like e.g. the backpack inventories, you can use the <code>InventoryManager.Inventories</code> Property. This contains a dictionary with the name of the inventory (for example "hotbar-APlayerUID") and the corresponding inventory. | If you need access to other inventories like e.g. the backpack inventories, you can use the <code>InventoryManager.Inventories</code> Property. This contains a dictionary with the name of the inventory (for example "hotbar-APlayerUID") and the corresponding inventory. Another cleaner looking way if you only need a single inventory would be the <code>InventoryManager.GetOwnInventory()</code> method, which appends the player uid to the classname and returns the inventory. To avoid errors when typing the classnames, check first if the classname is already in the <code>GlobalConstants</code>. | ||
Because backpack inventory contains the bags as well as the slots, you have to check if it is valid to put the item there. For this you can use the <code>ItemSlot.CanHold()</code> method. | |||
If for example you want to fill every empty slot in the backpack with single torches you could do the following: | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
Block torchBlock = serverApi.World.GetBlock(new AssetLocation("torch-basic-lit-up")); | |||
IInventory backpack = player.InventoryManager.GetOwnInventory(GlobalConstants.backpackInvClassName); | |||
if (backpack != null) | if (backpack != null) | ||
{ | { | ||
var dummySlot = new ItemSlot(null) { Itemstack = new ItemStack(torchBlock) }; | var dummySlot = new ItemSlot(null) { Itemstack = new ItemStack(torchBlock) }; | ||
foreach ( | foreach (ItemSlot bag in backpack.Where(b => b.CanHold(dummySlot) && b.Empty)) | ||
{ | { | ||
bag.Itemstack = new ItemStack(torchBlock); | bag.Itemstack = new ItemStack(torchBlock); | ||
Line 55: | Line 61: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Navbox/codemodding}} |