diff --git a/common/src/vanillin/java/dev/engine_room/vanillin/visuals/ItemVisual.java b/common/src/vanillin/java/dev/engine_room/vanillin/visuals/ItemVisual.java index f7521151e..5e3aadc64 100644 --- a/common/src/vanillin/java/dev/engine_room/vanillin/visuals/ItemVisual.java +++ b/common/src/vanillin/java/dev/engine_room/vanillin/visuals/ItemVisual.java @@ -26,18 +26,17 @@ public class ItemVisual extends AbstractEntityVisual implements Simp private static final ThreadLocal RANDOM = ThreadLocal.withInitial(RandomSource::createNewThreadLocalInstance); private final PoseStack pPoseStack = new PoseStack(); - private final BakedModel bakedModel; + private BakedModel bakedModel; + private ItemStack currentStack; - private final InstanceRecycler instances; + private InstanceRecycler instances; public ItemVisual(VisualizationContext ctx, ItemEntity entity, float partialTick) { super(ctx, entity, partialTick); - var item = entity.getItem(); - bakedModel = ItemModels.getModel(item); - - var model = ItemModels.get(level, item, ItemDisplayContext.GROUND); - + currentStack = entity.getItem(); + bakedModel = ItemModels.getModel(currentStack); + var model = ItemModels.get(level, currentStack, ItemDisplayContext.GROUND); instances = new InstanceRecycler<>(() -> ctx.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, model) .createInstance()); @@ -63,8 +62,18 @@ private void animate(float partialTick) { TransformStack.of(pPoseStack) .translate(getVisualPosition(partialTick)); - instances.resetCount(); ItemStack itemstack = entity.getItem(); + if (!ItemStack.matches(itemstack, currentStack)) { + instances.delete(); + currentStack = itemstack.copy(); + bakedModel = ItemModels.getModel(currentStack); + var model = ItemModels.get(level, currentStack, ItemDisplayContext.GROUND); + instances = new InstanceRecycler<>(() -> visualizationContext.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, model) + .createInstance()); + } + instances.resetCount(); + int i = itemstack.isEmpty() ? 187 : Item.getId(itemstack.getItem()) + itemstack.getDamageValue(); var random = RANDOM.get(); random.setSeed(i);