Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- CRATE BLOCK ENTITY CODE
- */
- package com.masterquentus.hexcraft.block.entity.custom;
- import com.masterquentus.hexcraft.block.entity.HexcraftBlockEntities;
- import com.masterquentus.hexcraft.world.inventory.Crate_WhiteOakGUIMenu;
- import net.minecraftforge.items.wrapper.SidedInvWrapper;
- import net.minecraftforge.items.IItemHandler;
- import net.minecraftforge.items.CapabilityItemHandler;
- import net.minecraftforge.common.util.LazyOptional;
- import net.minecraftforge.common.capabilities.Capability;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
- import net.minecraft.world.item.ItemStack;
- import net.minecraft.world.inventory.AbstractContainerMenu;
- import net.minecraft.world.entity.player.Inventory;
- import net.minecraft.world.WorldlyContainer;
- import net.minecraft.world.ContainerHelper;
- import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
- import net.minecraft.network.chat.Component;
- import net.minecraft.network.FriendlyByteBuf;
- import net.minecraft.nbt.CompoundTag;
- import net.minecraft.core.NonNullList;
- import net.minecraft.core.Direction;
- import net.minecraft.core.BlockPos;
- import javax.annotation.Nullable;
- import java.util.stream.IntStream;
- import io.netty.buffer.Unpooled;
- public class Crate_WhiteOakBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
- private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(27, ItemStack.EMPTY);
- private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
- public Crate_WhiteOakBlockEntity(BlockPos position, BlockState state) {
- super(HexcraftBlockEntities.CRATE_WHITE_OAK.get(), position, state);
- }
- @Override
- public void load(CompoundTag compound) {
- super.load(compound);
- if (!this.tryLoadLootTable(compound))
- this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
- ContainerHelper.loadAllItems(compound, this.stacks);
- }
- @Override
- public void saveAdditional(CompoundTag compound) {
- super.saveAdditional(compound);
- if (!this.trySaveLootTable(compound)) {
- ContainerHelper.saveAllItems(compound, this.stacks);
- }
- }
- @Override
- public ClientboundBlockEntityDataPacket getUpdatePacket() {
- return ClientboundBlockEntityDataPacket.create(this);
- }
- @Override
- public CompoundTag getUpdateTag() {
- return this.saveWithFullMetadata();
- }
- @Override
- public int getContainerSize() {
- return stacks.size();
- }
- @Override
- public boolean isEmpty() {
- for (ItemStack itemstack : this.stacks)
- if (!itemstack.isEmpty())
- return false;
- return true;
- }
- @Override
- public Component getDefaultName() {
- return Component.literal("crate_white_oak");
- }
- @Override
- public int getMaxStackSize() {
- return 64;
- }
- @Override
- public AbstractContainerMenu createMenu(int id, Inventory inventory) {
- return new Crate_WhiteOakGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
- }
- @Override
- public Component getDisplayName() {
- return Component.literal("White Oak Crate");
- }
- @Override
- protected NonNullList<ItemStack> getItems() {
- return this.stacks;
- }
- @Override
- protected void setItems(NonNullList<ItemStack> stacks) {
- this.stacks = stacks;
- }
- @Override
- public boolean canPlaceItem(int index, ItemStack stack) {
- return true;
- }
- @Override
- public int[] getSlotsForFace(Direction side) {
- return IntStream.range(0, this.getContainerSize()).toArray();
- }
- @Override
- public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
- return this.canPlaceItem(index, stack);
- }
- @Override
- public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
- return true;
- }
- @Override
- public <T> LazyOptional<T> getCapability(Capability<T> capability, @Nullable Direction facing) {
- if (!this.remove && facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
- return handlers[facing.ordinal()].cast();
- return super.getCapability(capability, facing);
- }
- @Override
- public void setRemoved() {
- super.setRemoved();
- for (LazyOptional<? extends IItemHandler> handler : handlers)
- handler.invalidate();
- }
- }
- /*
- CRATE BLOCK CODE
- */
- package com.masterquentus.hexcraft.block.custom;
- import com.masterquentus.hexcraft.block.entity.custom.Crate_WhiteOakBlockEntity;
- import com.masterquentus.hexcraft.world.inventory.Crate_WhiteOakGUIMenu;
- import net.minecraftforge.network.NetworkHooks;
- import net.minecraft.world.phys.BlockHitResult;
- import net.minecraft.world.level.storage.loot.LootContext;
- import net.minecraft.world.level.material.Material;
- import net.minecraft.world.level.block.state.BlockState;
- import net.minecraft.world.level.block.state.BlockBehaviour;
- import net.minecraft.world.level.block.entity.BlockEntity;
- import net.minecraft.world.level.block.SoundType;
- import net.minecraft.world.level.block.EntityBlock;
- import net.minecraft.world.level.block.Block;
- import net.minecraft.world.level.Level;
- import net.minecraft.world.level.BlockGetter;
- import net.minecraft.world.item.TieredItem;
- import net.minecraft.world.item.ItemStack;
- import net.minecraft.world.inventory.AbstractContainerMenu;
- import net.minecraft.world.entity.player.Player;
- import net.minecraft.world.entity.player.Inventory;
- import net.minecraft.world.MenuProvider;
- import net.minecraft.world.InteractionResult;
- import net.minecraft.world.InteractionHand;
- import net.minecraft.world.Containers;
- import net.minecraft.server.level.ServerPlayer;
- import net.minecraft.network.chat.Component;
- import net.minecraft.network.FriendlyByteBuf;
- import net.minecraft.core.BlockPos;
- import java.util.List;
- import java.util.Collections;
- import io.netty.buffer.Unpooled;
- public class Crate_WhiteOakBlock extends Block implements EntityBlock {
- public Crate_WhiteOakBlock() {
- super(BlockBehaviour.Properties.of(Material.STONE).sound(SoundType.WOOD).strength(2.5f, 12.5f).requiresCorrectToolForDrops());
- }
- @Override
- public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
- return 15;
- }
- @Override
- public boolean canHarvestBlock(BlockState state, BlockGetter world, BlockPos pos, Player player) {
- if (player.getInventory().getSelected().getItem() instanceof TieredItem tieredItem)
- return tieredItem.getTier().getLevel() >= 0;
- return false;
- }
- @Override
- public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
- List<ItemStack> dropsOriginal = super.getDrops(state, builder);
- if (!dropsOriginal.isEmpty())
- return dropsOriginal;
- return Collections.singletonList(new ItemStack(this, 1));
- }
- @Override
- public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
- super.use(blockstate, world, pos, entity, hand, hit);
- if (entity instanceof ServerPlayer player) {
- NetworkHooks.openGui(player, new MenuProvider() {
- @Override
- public Component getDisplayName() {
- return Component.literal("White Oak Crate");
- }
- @Override
- public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
- return new Crate_WhiteOakGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
- }
- }, pos);
- }
- return InteractionResult.SUCCESS;
- }
- @Override
- public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
- BlockEntity tileEntity = worldIn.getBlockEntity(pos);
- return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
- }
- @Override
- public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
- return new Crate_WhiteOakBlockEntity(pos, state);
- }
- @Override
- public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
- super.triggerEvent(state, world, pos, eventID, eventParam);
- BlockEntity blockEntity = world.getBlockEntity(pos);
- return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
- }
- @Override
- public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
- if (state.getBlock() != newState.getBlock()) {
- BlockEntity blockEntity = world.getBlockEntity(pos);
- if (blockEntity instanceof Crate_WhiteOakBlockEntity be) {
- Containers.dropContents(world, pos, be);
- world.updateNeighbourForOutputSignal(pos, this);
- }
- super.onRemove(state, world, pos, newState, isMoving);
- }
- }
- @Override
- public boolean hasAnalogOutputSignal(BlockState state) {
- return true;
- }
- @Override
- public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
- BlockEntity tileentity = world.getBlockEntity(pos);
- if (tileentity instanceof Crate_WhiteOakBlockEntity be)
- return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
- else
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement