diff --git a/src/main/java/ru/betterend/entity/EntityEndFish.java b/src/main/java/ru/betterend/entity/EntityEndFish.java index a62b1901..af6304c5 100644 --- a/src/main/java/ru/betterend/entity/EntityEndFish.java +++ b/src/main/java/ru/betterend/entity/EntityEndFish.java @@ -4,15 +4,29 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.passive.SchoolingFishEntity; import net.minecraft.item.ItemStack; import net.minecraft.sound.SoundEvent; import net.minecraft.world.World; public class EntityEndFish extends SchoolingFishEntity { + public static final int VARIANTS = 5; + private static final TrackedData VARIANT = DataTracker.registerData(EntityEndFish.class, TrackedDataHandlerRegistry.BYTE); + private static final TrackedData SCALE = DataTracker.registerData(EntityEndFish.class, TrackedDataHandlerRegistry.BYTE); + public EntityEndFish(EntityType entityType, World world) { super(entityType, world); } + + @Override + protected void initDataTracker() { + super.initDataTracker(); + this.dataTracker.startTracking(VARIANT, (byte) this.getRandom().nextInt(VARIANTS)); + this.dataTracker.startTracking(SCALE, (byte) this.getRandom().nextInt(255)); + } @Override protected ItemStack getFishBucketItem() { @@ -30,4 +44,12 @@ public class EntityEndFish extends SchoolingFishEntity { .add(EntityAttributes.GENERIC_FOLLOW_RANGE, 16.0D) .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.5D); } + + public int getVariant() { + return (int) this.dataTracker.get(VARIANT); + } + + public float getScale() { + return ((int) this.dataTracker.get(SCALE) & 255) / 512F + 0.6F; + } } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java b/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java index b5719da6..1bfc97c0 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java @@ -1,30 +1,53 @@ package ru.betterend.entity.render; +import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.MobEntityRenderer; import net.minecraft.client.render.entity.feature.EyesFeatureRenderer; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; import ru.betterend.BetterEnd; import ru.betterend.entity.EntityEndFish; import ru.betterend.entity.model.ModelEntityEndFish; public class RendererEntityEndFish extends MobEntityRenderer { - private static final Identifier TEXTURE = BetterEnd.makeID("textures/entity/end_fish/end_fish_2.png"); - private static final RenderLayer GLOW = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_fish/end_fish_2_glow.png")); + private static final Identifier[] TEXTURE = new Identifier[EntityEndFish.VARIANTS]; + private static final RenderLayer[] GLOW = new RenderLayer[EntityEndFish.VARIANTS]; public RendererEntityEndFish(EntityRenderDispatcher entityRenderDispatcher) { super(entityRenderDispatcher, new ModelEntityEndFish(), 0.5f); this.addFeature(new EyesFeatureRenderer(this) { @Override public RenderLayer getEyesTexture() { - return GLOW; + return GLOW[0]; + } + + @Override + public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, EntityEndFish entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(GLOW[entity.getVariant()]); + this.getContextModel().render(matrices, vertexConsumer, 15728640, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); } }); } + @Override + protected void scale(EntityEndFish entity, MatrixStack matrixStack, float f) { + float scale = entity.getScale(); + matrixStack.scale(scale, scale, scale); + } + @Override public Identifier getTexture(EntityEndFish entity) { - return TEXTURE; + return TEXTURE[entity.getVariant()]; + } + + static { + for (int i = 0; i < EntityEndFish.VARIANTS; i++) { + TEXTURE[i] = BetterEnd.makeID("textures/entity/end_fish/end_fish_" + i + ".png"); + GLOW[i] = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_fish/end_fish_" + i + "_glow.png")); + } } } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_0.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_0.png new file mode 100644 index 00000000..75ea4153 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_0.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_0_glow.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_0_glow.png new file mode 100644 index 00000000..56d3ba09 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_0_glow.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_1.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_1.png new file mode 100644 index 00000000..90301523 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_1.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_1_glow.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_1_glow.png new file mode 100644 index 00000000..e8a54a44 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_1_glow.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2.png index 75ea4153..16b866b5 100644 Binary files a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2.png and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2_glow.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2_glow.png index 56d3ba09..6169efb9 100644 Binary files a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2_glow.png and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_2_glow.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_3.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_3.png new file mode 100644 index 00000000..c055ee56 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_3.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_3_glow.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_3_glow.png new file mode 100644 index 00000000..8e0b15c7 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_3_glow.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_4.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_4.png new file mode 100644 index 00000000..0a11f0d7 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_4.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_4_glow.png b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_4_glow.png new file mode 100644 index 00000000..76517568 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/end_fish/end_fish_4_glow.png differ