Advertisement
Guest User

Untitled

a guest
Jul 28th, 2020
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. package binary404.mystictools.common.tile;
  2.  
  3. import binary404.mystictools.common.loot.LootItemHelper;
  4. import net.minecraft.block.BlockState;
  5. import net.minecraft.entity.player.PlayerEntity;
  6. import net.minecraft.entity.player.PlayerInventory;
  7. import net.minecraft.inventory.IInventory;
  8. import net.minecraft.inventory.container.Container;
  9. import net.minecraft.inventory.container.INamedContainerProvider;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.nbt.CompoundNBT;
  12. import net.minecraft.network.NetworkManager;
  13. import net.minecraft.network.play.server.SUpdateTileEntityPacket;
  14. import net.minecraft.tileentity.ITickableTileEntity;
  15. import net.minecraft.tileentity.LockableTileEntity;
  16. import net.minecraft.tileentity.TileEntity;
  17. import net.minecraft.tileentity.TileEntityType;
  18. import net.minecraft.util.Direction;
  19. import net.minecraft.util.text.ITextComponent;
  20. import net.minecraft.util.text.TranslationTextComponent;
  21. import net.minecraftforge.common.capabilities.Capability;
  22. import net.minecraftforge.common.util.LazyOptional;
  23. import net.minecraftforge.items.CapabilityItemHandler;
  24. import net.minecraftforge.items.IItemHandler;
  25. import net.minecraftforge.items.ItemStackHandler;
  26.  
  27. import javax.annotation.Nonnull;
  28. import javax.annotation.Nullable;
  29.  
  30. public class TileEntityUpgrader extends TileEntity implements INamedContainerProvider {
  31.  
  32. protected ItemStackHandler storage;
  33. private final LazyOptional<IItemHandler> storageHolder = LazyOptional.of(() -> storage);
  34.  
  35. public TileEntityUpgrader() {
  36. super(ModTiles.UPGRADER);
  37. storage = new StackHandler(this, 3);
  38. }
  39.  
  40. public void upgrade() {
  41. System.out.println("Upgrading");
  42. }
  43.  
  44. public void reroll() {
  45. ItemStack stack = this.storage.getStackInSlot(0);
  46. LootItemHelper.rerollStats(stack);
  47. this.markDirty();
  48. }
  49.  
  50. @Nonnull
  51. @Override
  52. public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
  53. if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
  54. this.markDirty();
  55. return storageHolder.cast();
  56. }
  57. return super.getCapability(cap, side);
  58. }
  59.  
  60. @Override
  61. public ITextComponent getDisplayName() {
  62. return new TranslationTextComponent("container.mystictools.upgrader");
  63. }
  64.  
  65. @Nullable
  66. @Override
  67. public Container createMenu(int p_createMenu_1_, PlayerInventory p_createMenu_2_, PlayerEntity p_createMenu_3_) {
  68. return new UpgraderContainer(p_createMenu_1_, p_createMenu_2_, storage, this);
  69. }
  70.  
  71. @Override
  72. public CompoundNBT write(CompoundNBT compound) {
  73. CompoundNBT c = super.write(compound);
  74. c.put("storage", storage.serializeNBT());
  75.  
  76. return super.write(compound);
  77. }
  78.  
  79. @Override
  80. public void read(BlockState stateIn, CompoundNBT nbtIn) {
  81. super.read(stateIn, nbtIn);
  82. storage.deserializeNBT(nbtIn.getCompound("storage"));
  83. }
  84.  
  85. @Nullable
  86. @Override
  87. public SUpdateTileEntityPacket getUpdatePacket() {
  88. return new SUpdateTileEntityPacket(this.getPos(), 42, this.getUpdateTag());
  89. }
  90.  
  91. @Override
  92. public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) {
  93. this.read(null, pkt.getNbtCompound());
  94. }
  95.  
  96. @Override
  97. public CompoundNBT getUpdateTag() {
  98. CompoundNBT nbt = new CompoundNBT();
  99. write(nbt);
  100. return nbt;
  101. }
  102.  
  103. public static class StackHandler extends ItemStackHandler {
  104. TileEntity tileEntity;
  105.  
  106. public StackHandler(TileEntity tile, int size) {
  107. super(size);
  108. this.tileEntity = tile;
  109. }
  110.  
  111. @Nonnull
  112. @Override
  113. public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
  114. if (slot == 0 || slot == 1) {
  115. this.tileEntity.markDirty();
  116. return super.insertItem(slot, stack, simulate);
  117. } else
  118. return stack;
  119. }
  120.  
  121. @Nonnull
  122. @Override
  123. public ItemStack extractItem(int slot, int amount, boolean simulate) {
  124. if (slot == 2) {
  125. this.tileEntity.markDirty();
  126. return super.extractItem(slot, amount, simulate);
  127. } else
  128. return ItemStack.EMPTY;
  129. }
  130.  
  131.  
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement