Skip to content

Instantly share code, notes, and snippets.

@MasterMank
Created June 10, 2023 15:07
Show Gist options
  • Save MasterMank/00ac46e4b9506a63c55c827fcf4abdac to your computer and use it in GitHub Desktop.
Save MasterMank/00ac46e4b9506a63c55c827fcf4abdac to your computer and use it in GitHub Desktop.
package net.mastermank.corridorsbackrooms.block.entity;
import net.mastermank.corridorsbackrooms.block.custom.WoodenCrateBlock;
import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Container;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ChestMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.ContainerOpenersCounter;
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable;
public class WoodenCrateBlockEntity extends RandomizableContainerBlockEntity {
private NonNullList<ItemStack> items = NonNullList.withSize(18, ItemStack.EMPTY);
private ContainerOpenersCounter openersCounter = new ContainerOpenersCounter() {
@Override
protected void onOpen(Level level, BlockPos pos, BlockState state) {
WoodenCrateBlockEntity.this.updateBlockState(state, true);
}
@Override
protected void onClose(Level level, BlockPos pos, BlockState state) {
WoodenCrateBlockEntity.this.updateBlockState(state, false);
}
@Override
protected void openerCountChanged(Level level, BlockPos pos, BlockState state, int i, int i1) {
}
@Override
protected boolean isOwnContainer(Player player) {
if (player.containerMenu instanceof ChestMenu) {
Container container = ((ChestMenu) player.containerMenu).getContainer();
return container == WoodenCrateBlockEntity.this;
} else {
return false;
}
}
};
public WoodenCrateBlockEntity(BlockPos pos, BlockState state) {
super(ModBlockEntities.CRATE.get(), pos, state);
}
@Override
protected void saveAdditional(CompoundTag tag) {
super.saveAdditional(tag);
if (!this.trySaveLootTable(tag)) {
ContainerHelper.saveAllItems(tag, this.items);
}
}
@Override
public void load(CompoundTag tag) {
super.load(tag);
this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
if (!this.tryLoadLootTable(tag)) {
ContainerHelper.loadAllItems(tag, this.items);
}
}
@Override
public int getContainerSize() {
return 18;
}
@Override
protected NonNullList<ItemStack> getItems() {
return this.items;
}
protected void setItems(NonNullList<ItemStack> stacks) {
this.items = stacks;
}
@Nullable
@Override
public Component getDisplayName() {
return Component.literal("Supply Crate");
}
@Override
protected Component getDefaultName() {
return Component.translatable("container.crate");
}
@Override
protected AbstractContainerMenu createMenu(int i, Inventory inventory) {
return ChestMenu.twoRows(i, inventory);
}
@Override
public void startOpen(Player p_58616_) {
if (!this.remove && !p_58616_.isSpectator()) {
this.openersCounter.incrementOpeners(p_58616_, this.getLevel(), this.getBlockPos(), this.getBlockState());
}
}
@Override
public void stopOpen(Player p_58614_) {
if (!this.remove && !p_58614_.isSpectator()) {
this.openersCounter.decrementOpeners(p_58614_, this.getLevel(), this.getBlockPos(), this.getBlockState());
}
}
public void recheckOpen() {
if (!this.remove) {
this.openersCounter.recheckOpeners(this.getLevel(), this.getBlockPos(), this.getBlockState());
}
}
void updateBlockState(BlockState p_58607_, boolean p_58608_) {
this.level.setBlock(this.getBlockPos(), p_58607_.setValue(WoodenCrateBlock.OPEN, Boolean.valueOf(p_58608_)), 3);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment