Guest User

Untitled

a guest
Mar 26th, 2022
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. public class CrafterBlockEntity extends InventoryBlockEntity implements MenuProvider {
  2.  
  3. private final ItemStackHandler itemHandler = new ItemStackHandler();
  4. private final LazyOptional<ItemStackHandler> handler = LazyOptional.of(() -> itemHandler);
  5. public static final Component TITLE = new TranslatableComponent(
  6. "container." + TankMod.MOD_ID + ".crafter");
  7.  
  8. public CrafterBlockEntity(BlockPos pos, BlockState state) {
  9. super(TankModBlockEntities.CRAFTER.get(), pos, state, 9);
  10. }
  11.  
  12. @Override
  13. public Component getDisplayName() {
  14. return new TextComponent("Tank Crafter");
  15. }
  16.  
  17. @Nullable
  18. @Override
  19. public AbstractContainerMenu createMenu(int syncId, Inventory p_39955_, Player p_39956_) {
  20. return null;
  21. }
  22.  
  23. public static void tick(Level world, CrafterBlockEntity entity) {
  24. if (hasRecipe(entity)) {
  25. craftItem(entity);
  26. }
  27. }
  28.  
  29.  
  30. private static boolean hasRecipe(CrafterBlockEntity entity) {
  31. Level world = entity.level;
  32. SimpleContainer inventory = new SimpleContainer(entity.inventory.getSlots());
  33. for (int i = 0; i < entity.inventory.getSlots(); i++) {
  34. inventory.setItem(i, entity.getItemInSlot(i));
  35. }
  36.  
  37. Optional<TankCrafterRecipe> match = world.getRecipeManager()
  38. .getRecipeFor(TankCrafterRecipe.Type.INSTANCE, inventory, world);
  39.  
  40. return match.isPresent()
  41. && canInsertAmountIntoOutputSlot(inventory)
  42. && canInsertItemIntoOutputSlot(inventory, match.get().getResultItem());
  43.  
  44. }
  45.  
  46.  
  47. private static void craftItem(CrafterBlockEntity entity) {
  48. Level world = entity.level;
  49. SimpleContainer inventory = new SimpleContainer(entity.inventory.getSlots());
  50. for (int i = 0; i < entity.inventory.getSlots(); i++) {
  51. inventory.setItem(i, entity.getItemInSlot(i));
  52. }
  53.  
  54. Optional<TankCrafterRecipe> match = world.getRecipeManager()
  55. .getRecipeFor(TankCrafterRecipe.Type.INSTANCE, inventory, world);
  56.  
  57. if (match.isPresent()) {
  58. entity.extractItem(0);
  59. entity.extractItem(1);
  60. entity.extractItem(2);
  61. entity.extractItem(3);
  62. entity.extractItem(4);
  63. entity.extractItem(5);
  64. entity.extractItem(6);
  65. entity.insertItem(8, new ItemStack(match.get().getResultItem().getItem(),
  66. entity.getItemInSlot(8).getCount() + 1));
  67. }
  68. }
  69.  
  70. private static boolean canInsertItemIntoOutputSlot(SimpleContainer inventory, ItemStack output) {
  71. return inventory.getItem(8).getItem() == output.getItem() || inventory.getItem(8).isEmpty();
  72. }
  73.  
  74. private static boolean canInsertAmountIntoOutputSlot(SimpleContainer inventory) {
  75. return inventory.getItem(8).getCount() > inventory.getItem(8).getCount();
  76. }
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment