diff --git a/src/main/java/com/atsuishio/superbwarfare/block/display/ContainerDisplayItem.java b/src/main/java/com/atsuishio/superbwarfare/block/display/ContainerDisplayItem.java deleted file mode 100644 index d9f810fb0..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/block/display/ContainerDisplayItem.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.atsuishio.superbwarfare.block.display; - -import com.atsuishio.superbwarfare.block.renderer.ContainerDisplayItemRenderer; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.level.block.Block; -import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.util.GeckoLibUtil; - -import java.util.function.Consumer; - -public class ContainerDisplayItem extends BlockItem implements GeoItem { - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - - public ContainerDisplayItem(Block block, Properties settings) { - super(block, settings); - } - - private PlayState predicate(AnimationState event) { - return PlayState.CONTINUE; - } - - @Override - public void initializeClient(Consumer consumer) { - super.initializeClient(consumer); - consumer.accept(new IClientItemExtensions() { - private final BlockEntityWithoutLevelRenderer renderer = new ContainerDisplayItemRenderer(); - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return renderer; - } - }); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - data.add(new AnimationController(this, "controller", 0, this::predicate)); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerBlockEntity.java b/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerBlockEntity.java new file mode 100644 index 000000000..f75f3a03a --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerBlockEntity.java @@ -0,0 +1,60 @@ +package com.atsuishio.superbwarfare.block.entity; + +import com.atsuishio.superbwarfare.init.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import software.bernie.geckolib.animatable.GeoBlockEntity; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class ContainerBlockEntity extends BlockEntity implements GeoBlockEntity { + + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + + public ContainerBlockEntity(BlockPos pos, BlockState state) { + super(ModBlockEntities.CONTAINER.get(), pos, state); + } + + private PlayState predicate(AnimationState event) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.container.open")); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController<>(this, "controller", 0, this::predicate)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; + } + + @Override + public void load(CompoundTag compound) { + super.load(compound); + } + + @Override + public void saveAdditional(CompoundTag compound) { + super.saveAdditional(compound); + } + + @Override + public ClientboundBlockEntityDataPacket getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public CompoundTag getUpdateTag() { + return this.saveWithFullMetadata(); + } + +} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerTileEntity.java b/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerTileEntity.java deleted file mode 100644 index 03a491403..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/block/entity/ContainerTileEntity.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.atsuishio.superbwarfare.block.entity; - -import com.atsuishio.superbwarfare.init.ModBlockEntities; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.NonNullList; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.world.ContainerHelper; -import net.minecraft.world.WorldlyContainer; -import net.minecraft.world.entity.player.Inventory; -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 net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.wrapper.SidedInvWrapper; -import software.bernie.geckolib.animatable.GeoBlockEntity; -import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.core.animation.AnimatableManager; -import software.bernie.geckolib.core.animation.AnimationController; -import software.bernie.geckolib.core.animation.AnimationState; -import software.bernie.geckolib.core.animation.RawAnimation; -import software.bernie.geckolib.core.object.PlayState; -import software.bernie.geckolib.util.GeckoLibUtil; - -import javax.annotation.Nullable; -import java.util.stream.IntStream; - -public class ContainerTileEntity extends RandomizableContainerBlockEntity implements GeoBlockEntity, WorldlyContainer { - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - private NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); - private final LazyOptional[] handlers = SidedInvWrapper.create(this, Direction.values()); - - public ContainerTileEntity(BlockPos pos, BlockState state) { - super(ModBlockEntities.CONTAINER.get(), pos, state); - } - - private PlayState predicate(AnimationState event) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.container.open")); - } - - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - data.add(new AnimationController(this, "controller", 0, this::predicate)); - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; - } - - @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("container"); - } - - @Override - public int getMaxStackSize() { - return 64; - } - - @Override - public AbstractContainerMenu createMenu(int id, Inventory inventory) { - return ChestMenu.threeRows(id, inventory); - } - - @Override - public Component getDisplayName() { - return Component.literal("Container"); - } - - @Override - protected NonNullList getItems() { - return this.stacks; - } - - @Override - protected void setItems(NonNullList 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 LazyOptional getCapability(Capability capability, @Nullable Direction facing) { - if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER) - return handlers[facing.ordinal()].cast(); - return super.getCapability(capability, facing); - } - - @Override - public void setRemoved() { - super.setRemoved(); - for (LazyOptional handler : handlers) - handler.invalidate(); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java b/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java index de2097a85..d828c1151 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/listener/ClientListener.java @@ -1,7 +1,7 @@ package com.atsuishio.superbwarfare.block.listener; import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.block.renderer.ContainerTileRenderer; +import com.atsuishio.superbwarfare.client.renderer.block.ContainerBlockEntityRenderer; import com.atsuishio.superbwarfare.init.ModBlockEntities; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -14,6 +14,6 @@ public class ClientListener { @OnlyIn(Dist.CLIENT) @SubscribeEvent public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) { - event.registerBlockEntityRenderer(ModBlockEntities.CONTAINER.get(), context -> new ContainerTileRenderer()); + event.registerBlockEntityRenderer(ModBlockEntities.CONTAINER.get(), context -> new ContainerBlockEntityRenderer()); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerBlockModel.java b/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerBlockModel.java deleted file mode 100644 index 7853b069f..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerBlockModel.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.atsuishio.superbwarfare.block.model; - -import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.block.entity.ContainerTileEntity; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class ContainerBlockModel extends GeoModel { - @Override - public ResourceLocation getAnimationResource(ContainerTileEntity animatable) { - return ModUtils.loc("animations/container.animation.json"); - } - - @Override - public ResourceLocation getModelResource(ContainerTileEntity animatable) { - return ModUtils.loc( "geo/container.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(ContainerTileEntity animatable) { - return ModUtils.loc( "textures/block/container.png"); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerDisplayModel.java b/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerDisplayModel.java deleted file mode 100644 index 9c265bfa8..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/block/model/ContainerDisplayModel.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.atsuishio.superbwarfare.block.model; - -import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.block.display.ContainerDisplayItem; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.model.GeoModel; - -public class ContainerDisplayModel extends GeoModel { - @Override - public ResourceLocation getAnimationResource(ContainerDisplayItem animatable) { - return ModUtils.loc( "animations/container.animation.json"); - } - - @Override - public ResourceLocation getModelResource(ContainerDisplayItem animatable) { - return ModUtils.loc("geo/container.geo.json"); - } - - @Override - public ResourceLocation getTextureResource(ContainerDisplayItem entity) { - return ModUtils.loc("textures/block/container.png"); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerDisplayItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerDisplayItemRenderer.java deleted file mode 100644 index 3b0f2d9bb..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerDisplayItemRenderer.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.atsuishio.superbwarfare.block.renderer; - -import com.atsuishio.superbwarfare.block.display.ContainerDisplayItem; -import com.atsuishio.superbwarfare.block.model.ContainerDisplayModel; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.renderer.GeoItemRenderer; - -public class ContainerDisplayItemRenderer extends GeoItemRenderer { - public ContainerDisplayItemRenderer() { - super(new ContainerDisplayModel()); - } - - @Override - public RenderType getRenderType(ContainerDisplayItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(getTextureLocation(animatable)); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerTileRenderer.java b/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerTileRenderer.java deleted file mode 100644 index b39a24c00..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/block/renderer/ContainerTileRenderer.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.atsuishio.superbwarfare.block.renderer; - -import com.atsuishio.superbwarfare.block.entity.ContainerTileEntity; -import com.atsuishio.superbwarfare.block.model.ContainerBlockModel; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.resources.ResourceLocation; -import software.bernie.geckolib.renderer.GeoBlockRenderer; - -public class ContainerTileRenderer extends GeoBlockRenderer { - public ContainerTileRenderer() { - super(new ContainerBlockModel()); - } - - @Override - public RenderType getRenderType(ContainerTileEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { - return RenderType.entityTranslucent(getTextureLocation(animatable)); - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/block/ContainerBlockModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/block/ContainerBlockModel.java new file mode 100644 index 000000000..a97b81e9e --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/block/ContainerBlockModel.java @@ -0,0 +1,24 @@ +package com.atsuishio.superbwarfare.client.model.block; + +import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ContainerBlockModel extends GeoModel { + + @Override + public ResourceLocation getAnimationResource(ContainerBlockEntity animatable) { + return ModUtils.loc("animations/container.animation.json"); + } + + @Override + public ResourceLocation getModelResource(ContainerBlockEntity animatable) { + return ModUtils.loc("geo/container.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(ContainerBlockEntity animatable) { + return ModUtils.loc("textures/block/container.png"); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/block/ContainerDisplayModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/block/ContainerDisplayModel.java new file mode 100644 index 000000000..12af5598c --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/block/ContainerDisplayModel.java @@ -0,0 +1,24 @@ +package com.atsuishio.superbwarfare.client.model.block; + +import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.item.ContainerBlockItem; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class ContainerDisplayModel extends GeoModel { + + @Override + public ResourceLocation getAnimationResource(ContainerBlockItem animatable) { + return ModUtils.loc("animations/container.animation.json"); + } + + @Override + public ResourceLocation getModelResource(ContainerBlockItem animatable) { + return ModUtils.loc("geo/container.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(ContainerBlockItem entity) { + return ModUtils.loc("textures/block/container.png"); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ContainerBlockEntityRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ContainerBlockEntityRenderer.java new file mode 100644 index 000000000..9ec985199 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ContainerBlockEntityRenderer.java @@ -0,0 +1,20 @@ +package com.atsuishio.superbwarfare.client.renderer.block; + +import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity; +import com.atsuishio.superbwarfare.client.model.block.ContainerBlockModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.renderer.GeoBlockRenderer; + +public class ContainerBlockEntityRenderer extends GeoBlockRenderer { + + public ContainerBlockEntityRenderer() { + super(new ContainerBlockModel()); + } + + @Override + public RenderType getRenderType(ContainerBlockEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(getTextureLocation(animatable)); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ContainerBlockItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ContainerBlockItemRenderer.java new file mode 100644 index 000000000..446ebd6ec --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/block/ContainerBlockItemRenderer.java @@ -0,0 +1,20 @@ +package com.atsuishio.superbwarfare.client.renderer.block; + +import com.atsuishio.superbwarfare.client.model.block.ContainerDisplayModel; +import com.atsuishio.superbwarfare.item.ContainerBlockItem; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.renderer.GeoItemRenderer; + +public class ContainerBlockItemRenderer extends GeoItemRenderer { + + public ContainerBlockItemRenderer() { + super(new ContainerDisplayModel()); + } + + @Override + public RenderType getRenderType(ContainerBlockItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityTranslucent(getTextureLocation(animatable)); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java b/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java index 53d30685a..11d684ba6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModBlockEntities.java @@ -1,22 +1,17 @@ - -/* - * MCreator note: This file will be REGENERATED on each build. - */ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.block.entity.ContainerTileEntity; -import net.minecraft.world.level.block.Block; +import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class ModBlockEntities { - public static final DeferredRegister> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ModUtils.MODID); - public static final RegistryObject> CONTAINER = REGISTRY.register("container", () -> BlockEntityType.Builder.of(ContainerTileEntity::new, ModBlocks.CONTAINER.get()).build(null)); - private static RegistryObject> register(String registryname, RegistryObject block, BlockEntityType.BlockEntitySupplier supplier) { - return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null)); - } + public static final DeferredRegister> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ModUtils.MODID); + + public static final RegistryObject> CONTAINER = REGISTRY.register("container", + () -> BlockEntityType.Builder.of(ContainerBlockEntity::new, ModBlocks.CONTAINER.get()).build(null)); + } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java index 8ad8ae9eb..c3467b94b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java @@ -1,7 +1,6 @@ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.block.display.ContainerDisplayItem; import com.atsuishio.superbwarfare.item.*; import com.atsuishio.superbwarfare.item.armor.*; import com.atsuishio.superbwarfare.item.common.BlueprintItem; @@ -111,7 +110,7 @@ public class ModItems { */ public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID); - public static final RegistryObject CONTAINER = ITEMS.register(ModBlocks.CONTAINER.getId().getPath(), () -> new ContainerDisplayItem(ModBlocks.CONTAINER.get(), new Item.Properties())); + public static final RegistryObject CONTAINER = ITEMS.register("container", ContainerBlockItem::new); public static final RegistryObject SENPAI_SPAWN_EGG = ITEMS.register("senpai_spawn_egg", () -> new ForgeSpawnEggItem(ModEntities.SENPAI, -11584987, -14014413, new Item.Properties())); public static final RegistryObject ANCIENT_CPU = ITEMS.register("ancient_cpu", () -> new Item(new Item.Properties().rarity(Rarity.RARE))); public static final RegistryObject PROPELLER = ITEMS.register("propeller", () -> new Item(new Item.Properties())); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java b/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java new file mode 100644 index 000000000..8b81b671c --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java @@ -0,0 +1,53 @@ +package com.atsuishio.superbwarfare.item; + +import com.atsuishio.superbwarfare.client.renderer.block.ContainerBlockItemRenderer; +import com.atsuishio.superbwarfare.init.ModBlocks; +import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.client.extensions.common.IClientItemExtensions; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.function.Consumer; + +public class ContainerBlockItem extends BlockItem implements GeoItem { + + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + + public ContainerBlockItem() { + super(ModBlocks.CONTAINER.get(), new Item.Properties()); + } + + private PlayState predicate(AnimationState event) { + return PlayState.CONTINUE; + } + + @Override + public void initializeClient(Consumer consumer) { + super.initializeClient(consumer); + consumer.accept(new IClientItemExtensions() { + private final BlockEntityWithoutLevelRenderer renderer = new ContainerBlockItemRenderer(); + + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() { + return renderer; + } + }); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController<>(this, "controller", 0, this::predicate)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; + } +}