Advertisement
Guest User

Untitled

a guest
Jul 18th, 2022
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.76 KB | None | 0 0
  1. /*
  2.  
  3. CRATE BLOCK ENTITY CODE
  4.  
  5. */
  6. package com.masterquentus.hexcraft.block.entity.custom;
  7.  
  8. import com.masterquentus.hexcraft.block.entity.HexcraftBlockEntities;
  9. import com.masterquentus.hexcraft.world.inventory.Crate_WhiteOakGUIMenu;
  10. import net.minecraftforge.items.wrapper.SidedInvWrapper;
  11. import net.minecraftforge.items.IItemHandler;
  12. import net.minecraftforge.items.CapabilityItemHandler;
  13. import net.minecraftforge.common.util.LazyOptional;
  14. import net.minecraftforge.common.capabilities.Capability;
  15. import net.minecraft.world.level.block.state.BlockState;
  16. import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
  17. import net.minecraft.world.item.ItemStack;
  18. import net.minecraft.world.inventory.AbstractContainerMenu;
  19. import net.minecraft.world.entity.player.Inventory;
  20. import net.minecraft.world.WorldlyContainer;
  21. import net.minecraft.world.ContainerHelper;
  22. import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
  23. import net.minecraft.network.chat.Component;
  24. import net.minecraft.network.FriendlyByteBuf;
  25. import net.minecraft.nbt.CompoundTag;
  26. import net.minecraft.core.NonNullList;
  27. import net.minecraft.core.Direction;
  28. import net.minecraft.core.BlockPos;
  29. import javax.annotation.Nullable;
  30. import java.util.stream.IntStream;
  31. import io.netty.buffer.Unpooled;
  32.  
  33. public class Crate_WhiteOakBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
  34. private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(27, ItemStack.EMPTY);
  35. private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
  36. public Crate_WhiteOakBlockEntity(BlockPos position, BlockState state) {
  37. super(HexcraftBlockEntities.CRATE_WHITE_OAK.get(), position, state);
  38. }
  39. @Override
  40. public void load(CompoundTag compound) {
  41. super.load(compound);
  42. if (!this.tryLoadLootTable(compound))
  43. this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
  44. ContainerHelper.loadAllItems(compound, this.stacks);
  45. }
  46. @Override
  47. public void saveAdditional(CompoundTag compound) {
  48. super.saveAdditional(compound);
  49. if (!this.trySaveLootTable(compound)) {
  50. ContainerHelper.saveAllItems(compound, this.stacks);
  51. }
  52. }
  53. @Override
  54. public ClientboundBlockEntityDataPacket getUpdatePacket() {
  55. return ClientboundBlockEntityDataPacket.create(this);
  56. }
  57. @Override
  58. public CompoundTag getUpdateTag() {
  59. return this.saveWithFullMetadata();
  60. }
  61. @Override
  62. public int getContainerSize() {
  63. return stacks.size();
  64. }
  65. @Override
  66. public boolean isEmpty() {
  67. for (ItemStack itemstack : this.stacks)
  68. if (!itemstack.isEmpty())
  69. return false;
  70. return true;
  71. }
  72. @Override
  73. public Component getDefaultName() {
  74. return Component.literal("crate_white_oak");
  75. }
  76. @Override
  77. public int getMaxStackSize() {
  78. return 64;
  79. }
  80. @Override
  81. public AbstractContainerMenu createMenu(int id, Inventory inventory) {
  82. return new Crate_WhiteOakGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
  83. }
  84. @Override
  85. public Component getDisplayName() {
  86. return Component.literal("White Oak Crate");
  87. }
  88. @Override
  89. protected NonNullList<ItemStack> getItems() {
  90. return this.stacks;
  91. }
  92. @Override
  93. protected void setItems(NonNullList<ItemStack> stacks) {
  94. this.stacks = stacks;
  95. }
  96. @Override
  97. public boolean canPlaceItem(int index, ItemStack stack) {
  98. return true;
  99. }
  100. @Override
  101. public int[] getSlotsForFace(Direction side) {
  102. return IntStream.range(0, this.getContainerSize()).toArray();
  103. }
  104. @Override
  105. public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
  106. return this.canPlaceItem(index, stack);
  107. }
  108. @Override
  109. public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
  110. return true;
  111. }
  112. @Override
  113. public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
  114. if (!this.remove && facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  115. return handlers[facing.ordinal()].cast();
  116. return super.getCapability(capability, facing);
  117. }
  118. @Override
  119. public void setRemoved() {
  120. super.setRemoved();
  121. for (LazyOptional<? extends IItemHandler> handler : handlers)
  122. handler.invalidate();
  123. }
  124. }
  125.  
  126. /*
  127.  
  128. CRATE BLOCK CODE
  129.  
  130. */
  131.  
  132. package com.masterquentus.hexcraft.block.custom;
  133.  
  134. import com.masterquentus.hexcraft.block.entity.custom.Crate_WhiteOakBlockEntity;
  135. import com.masterquentus.hexcraft.world.inventory.Crate_WhiteOakGUIMenu;
  136. import net.minecraftforge.network.NetworkHooks;
  137. import net.minecraft.world.phys.BlockHitResult;
  138. import net.minecraft.world.level.storage.loot.LootContext;
  139. import net.minecraft.world.level.material.Material;
  140. import net.minecraft.world.level.block.state.BlockState;
  141. import net.minecraft.world.level.block.state.BlockBehaviour;
  142. import net.minecraft.world.level.block.entity.BlockEntity;
  143. import net.minecraft.world.level.block.SoundType;
  144. import net.minecraft.world.level.block.EntityBlock;
  145. import net.minecraft.world.level.block.Block;
  146. import net.minecraft.world.level.Level;
  147. import net.minecraft.world.level.BlockGetter;
  148. import net.minecraft.world.item.TieredItem;
  149. import net.minecraft.world.item.ItemStack;
  150. import net.minecraft.world.inventory.AbstractContainerMenu;
  151. import net.minecraft.world.entity.player.Player;
  152. import net.minecraft.world.entity.player.Inventory;
  153. import net.minecraft.world.MenuProvider;
  154. import net.minecraft.world.InteractionResult;
  155. import net.minecraft.world.InteractionHand;
  156. import net.minecraft.world.Containers;
  157. import net.minecraft.server.level.ServerPlayer;
  158. import net.minecraft.network.chat.Component;
  159. import net.minecraft.network.FriendlyByteBuf;
  160. import net.minecraft.core.BlockPos;
  161. import java.util.List;
  162. import java.util.Collections;
  163. import io.netty.buffer.Unpooled;
  164.  
  165. public class Crate_WhiteOakBlock extends Block implements EntityBlock {
  166. public Crate_WhiteOakBlock() {
  167. super(BlockBehaviour.Properties.of(Material.STONE).sound(SoundType.WOOD).strength(2.5f, 12.5f).requiresCorrectToolForDrops());
  168. }
  169. @Override
  170. public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
  171. return 15;
  172. }
  173. @Override
  174. public boolean canHarvestBlock(BlockState state, BlockGetter world, BlockPos pos, Player player) {
  175. if (player.getInventory().getSelected().getItem() instanceof TieredItem tieredItem)
  176. return tieredItem.getTier().getLevel() >= 0;
  177. return false;
  178. }
  179. @Override
  180. public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
  181. List<ItemStack> dropsOriginal = super.getDrops(state, builder);
  182. if (!dropsOriginal.isEmpty())
  183. return dropsOriginal;
  184. return Collections.singletonList(new ItemStack(this, 1));
  185. }
  186. @Override
  187. public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
  188. super.use(blockstate, world, pos, entity, hand, hit);
  189. if (entity instanceof ServerPlayer player) {
  190. NetworkHooks.openGui(player, new MenuProvider() {
  191. @Override
  192. public Component getDisplayName() {
  193. return Component.literal("White Oak Crate");
  194. }
  195.  
  196. @Override
  197. public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
  198. return new Crate_WhiteOakGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
  199. }
  200. }, pos);
  201. }
  202. return InteractionResult.SUCCESS;
  203. }
  204. @Override
  205. public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
  206. BlockEntity tileEntity = worldIn.getBlockEntity(pos);
  207. return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
  208. }
  209. @Override
  210. public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
  211. return new Crate_WhiteOakBlockEntity(pos, state);
  212. }
  213. @Override
  214. public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
  215. super.triggerEvent(state, world, pos, eventID, eventParam);
  216. BlockEntity blockEntity = world.getBlockEntity(pos);
  217. return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
  218. }
  219. @Override
  220. public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
  221. if (state.getBlock() != newState.getBlock()) {
  222. BlockEntity blockEntity = world.getBlockEntity(pos);
  223. if (blockEntity instanceof Crate_WhiteOakBlockEntity be) {
  224. Containers.dropContents(world, pos, be);
  225. world.updateNeighbourForOutputSignal(pos, this);
  226. }
  227. super.onRemove(state, world, pos, newState, isMoving);
  228. }
  229. }
  230. @Override
  231. public boolean hasAnalogOutputSignal(BlockState state) {
  232. return true;
  233. }
  234. @Override
  235. public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
  236. BlockEntity tileentity = world.getBlockEntity(pos);
  237. if (tileentity instanceof Crate_WhiteOakBlockEntity be)
  238. return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
  239. else
  240. return 0;
  241. }
  242. }
  243.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement