InventoryCommands.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package me.km.snuviscript.commands;
  2. import me.hammerle.snuviscript.code.ScriptManager;
  3. import me.km.inventory.CustomContainer;
  4. import me.km.inventory.ModInventory;
  5. import me.km.utils.Location;
  6. import net.minecraft.entity.player.PlayerEntity;
  7. import net.minecraft.entity.player.ServerPlayerEntity;
  8. import net.minecraft.inventory.IInventory;
  9. import net.minecraft.item.ItemStack;
  10. import net.minecraft.tileentity.ChestTileEntity;
  11. import net.minecraft.util.NonNullList;
  12. public class InventoryCommands {
  13. public static void registerFunctions(ScriptManager sm) {
  14. sm.registerFunction("inv.new", (sc, in) -> new ModInventory(in[0].getString(sc)));
  15. sm.registerFunction("inv.getid", (sc, in) -> (double) ((ModInventory) in[0].get(sc)).getModId());
  16. sm.registerFunction("inv.loadchest", (sc, in) -> {
  17. Location l = (Location) in[0].get(sc);
  18. ChestTileEntity chest = (ChestTileEntity) l.getWorld().getTileEntity(l.getBlockPos());
  19. int size = chest.getSizeInventory();
  20. if(size % 9 != 0) {
  21. size /= 9;
  22. size++;
  23. size *= 9;
  24. }
  25. ModInventory inv = new ModInventory(size);
  26. for(int i = 0; i < chest.getSizeInventory(); i++) {
  27. inv.setInventorySlotContents(i, chest.getStackInSlot(i).copy());
  28. }
  29. return inv;
  30. });
  31. sm.registerConsumer("inv.setitem", (sc, in) -> {
  32. ((IInventory) in[0].get(sc)).setInventorySlotContents(in[1].getInt(sc), (ItemStack) in[2].get(sc));
  33. });
  34. sm.registerFunction("inv.getitem", (sc, in) -> ((IInventory) in[0].get(sc)).getStackInSlot(in[1].getInt(sc)));
  35. sm.registerFunction("inv.getsize", (sc, in) -> (double) ((IInventory) in[0].get(sc)).getSizeInventory());
  36. sm.registerConsumer("inv.open", (sc, in) -> {
  37. CustomContainer.openForPlayer((ServerPlayerEntity) in[1].get(sc), (ModInventory) in[0].get(sc), in[2].getString(sc), sc);
  38. });
  39. sm.registerConsumer("inv.close", (sc, in) -> {
  40. ((PlayerEntity) in[0].get(sc)).closeScreen();
  41. });
  42. sm.registerConsumer("inv.update", (sc, in) -> {
  43. ServerPlayerEntity p = (ServerPlayerEntity) in[0].get(sc);
  44. NonNullList<ItemStack> list = NonNullList.<ItemStack>create();
  45. int size = p.openContainer.inventorySlots.size();
  46. for(int j = 0; j < size; j++) {
  47. ItemStack itemstack = p.openContainer.inventorySlots.get(j).getStack();
  48. list.add(itemstack.isEmpty() ? ItemStack.EMPTY : itemstack);
  49. }
  50. p.sendAllContents(p.openContainer, list);
  51. });
  52. }
  53. }