Skip to content

Instantly share code, notes, and snippets.

@MasterMank
Created March 12, 2023 20:43
Show Gist options
  • Save MasterMank/dda7629e98ac14354da35b7354a6ac49 to your computer and use it in GitHub Desktop.
Save MasterMank/dda7629e98ac14354da35b7354a6ac49 to your computer and use it in GitHub Desktop.
package net.mastermank.corridorsbackrooms.block.entity;
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.block.entity.RandomizableContainerBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import software.bernie.geckolib3.core.IAnimatable;
import software.bernie.geckolib3.core.PlayState;
import software.bernie.geckolib3.core.builder.AnimationBuilder;
import software.bernie.geckolib3.core.controller.AnimationController;
import software.bernie.geckolib3.core.event.predicate.AnimationEvent;
import software.bernie.geckolib3.core.manager.AnimationData;
import software.bernie.geckolib3.core.manager.AnimationFactory;
public class WoodenCrateBlockEntity extends RandomizableContainerBlockEntity implements IAnimatable {
private NonNullList<ItemStack> items = NonNullList.withSize(18, ItemStack.EMPTY);
private AnimationFactory factory = new AnimationFactory(this);
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.WOODEN_CRATE.get(), pos, state);
}
@Override
public Component getDisplayName() {
return Component.literal("Supply Crate");
}
@Override
protected Component getDefaultName() {
return Component.translatable("container.crate");
}
protected void saveAdditional(CompoundTag tag) {
super.saveAdditional(tag);
if (!this.trySaveLootTable(tag)) {
ContainerHelper.saveAllItems(tag, this.items);
}
}
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);
}
}
public int getContainerSize() {
return 18;
}
protected NonNullList<ItemStack> getItems() {
return this.items;
}
protected void setItems(NonNullList<ItemStack> stacks) {
this.items = stacks;
}
protected AbstractContainerMenu createMenu(int i, Inventory inventory) {
return ChestMenu.twoRows(i, inventory);
}
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) {
if (event.isMoving()) {
event.getController().setAnimation(new AnimationBuilder().addAnimation("crate.model.opencrate", true));
return PlayState.CONTINUE;
}
event.getController().setAnimation(new AnimationBuilder().addAnimation("crate.model.closecrate", true));
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData data) {
data.addAnimationController(new AnimationController(this, "controller",
0, this::predicate));
}
@Override
public AnimationFactory getFactory() {
return this.factory;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment