Amber slimes

This commit is contained in:
paulevsGitch 2021-01-13 04:09:55 +03:00
parent 878f4bbe63
commit 179d2a0035
6 changed files with 43 additions and 7 deletions

View file

@ -82,6 +82,9 @@ public class EntityEndSlime extends SlimeEntity {
else if (biome == EndBiomes.MEGALAKE || biome == EndBiomes.MEGALAKE_GROVE) { else if (biome == EndBiomes.MEGALAKE || biome == EndBiomes.MEGALAKE_GROVE) {
this.setLake(true); this.setLake(true);
} }
else if (biome == EndBiomes.AMBER_LAND) {
this.setAmber(true);
}
this.calculateDimensions(); this.calculateDimensions();
return data; return data;
} }
@ -179,6 +182,14 @@ public class EntityEndSlime extends SlimeEntity {
return this.dataTracker.get(VARIANT) == 2; return this.dataTracker.get(VARIANT) == 2;
} }
protected void setAmber(boolean mossy) {
this.dataTracker.set(VARIANT, (byte) 3);
}
public boolean isAmber() {
return this.dataTracker.get(VARIANT) == 3;
}
public static boolean canSpawn(EntityType<EntityEndSlime> type, ServerWorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) { public static boolean canSpawn(EntityType<EntityEndSlime> type, ServerWorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) {
return isPermanentBiome(world, pos) || (notManyEntities(world, pos, 32, 3) && isWaterNear(world, pos, 32, 8)); return isPermanentBiome(world, pos) || (notManyEntities(world, pos, 32, 3) && isWaterNear(world, pos, 32, 8));
} }

View file

@ -11,12 +11,13 @@ import ru.betterend.entity.EntityEndSlime;
public class EndSlimeEntityModel<T extends EntityEndSlime> extends CompositeEntityModel<T> { public class EndSlimeEntityModel<T extends EntityEndSlime> extends CompositeEntityModel<T> {
private final ModelPart flower; private final ModelPart flower;
private final ModelPart crop;
private final ModelPart innerCube; private final ModelPart innerCube;
private final ModelPart rightEye; private final ModelPart rightEye;
private final ModelPart leftEye; private final ModelPart leftEye;
private final ModelPart mouth; private final ModelPart mouth;
public EndSlimeEntityModel(boolean onlyShell, int type) { public EndSlimeEntityModel(boolean onlyShell) {
super(RenderLayer::getEntityCutout); super(RenderLayer::getEntityCutout);
this.innerCube = new ModelPart(this, 0, 16); this.innerCube = new ModelPart(this, 0, 16);
@ -24,6 +25,7 @@ public class EndSlimeEntityModel<T extends EntityEndSlime> extends CompositeEnti
this.leftEye = new ModelPart(this, 32, 4); this.leftEye = new ModelPart(this, 32, 4);
this.mouth = new ModelPart(this, 32, 8); this.mouth = new ModelPart(this, 32, 8);
this.flower = new ModelPart(this); this.flower = new ModelPart(this);
this.crop = new ModelPart(this);
if (onlyShell) { if (onlyShell) {
this.innerCube.setTextureOffset(0, 0); this.innerCube.setTextureOffset(0, 0);
@ -46,6 +48,18 @@ public class EndSlimeEntityModel<T extends EntityEndSlime> extends CompositeEnti
this.flower.addChild(petalRot); this.flower.addChild(petalRot);
petalRot.addChild(petal); petalRot.addChild(petal);
} }
for (int i = 0; i < 2; i++) {
ModelPart petalRot = new ModelPart(this);
petalRot.yaw = i * 90F + 45F;
ModelPart petal = new ModelPart(this, 40, 0);
petal.setPivot(-4, 8, 0);
petal.addCuboid(0.0F, 0.0F, 0.0F, 8.0F, 8.0F, 0.0F, 0.0F);
this.crop.addChild(petalRot);
petalRot.addChild(petal);
}
} }
} }
@ -55,6 +69,10 @@ public class EndSlimeEntityModel<T extends EntityEndSlime> extends CompositeEnti
public void renderFlower(MatrixStack matrices, VertexConsumer vertices, int light, int overlay) { public void renderFlower(MatrixStack matrices, VertexConsumer vertices, int light, int overlay) {
flower.render(matrices, vertices, light, overlay); flower.render(matrices, vertices, light, overlay);
} }
public void renderCrop(MatrixStack matrices, VertexConsumer vertices, int light, int overlay) {
crop.render(matrices, vertices, light, overlay);
}
@Override @Override
public Iterable<ModelPart> getParts() { public Iterable<ModelPart> getParts() {

View file

@ -18,11 +18,11 @@ import ru.betterend.entity.EntityEndSlime;
import ru.betterend.entity.model.EndSlimeEntityModel; import ru.betterend.entity.model.EndSlimeEntityModel;
public class RendererEntityEndSlime extends MobEntityRenderer<EntityEndSlime, EndSlimeEntityModel<EntityEndSlime>> { public class RendererEntityEndSlime extends MobEntityRenderer<EntityEndSlime, EndSlimeEntityModel<EntityEndSlime>> {
private static final Identifier TEXTURE[] = new Identifier[3]; private static final Identifier TEXTURE[] = new Identifier[4];
private static final RenderLayer GLOW[] = new RenderLayer[3]; private static final RenderLayer GLOW[] = new RenderLayer[4];
public RendererEntityEndSlime(EntityRenderDispatcher entityRenderDispatcher) { public RendererEntityEndSlime(EntityRenderDispatcher entityRenderDispatcher) {
super(entityRenderDispatcher, new EndSlimeEntityModel<EntityEndSlime>(false, 0), 0.25F); super(entityRenderDispatcher, new EndSlimeEntityModel<EntityEndSlime>(false), 0.25F);
this.addFeature(new OverlayFeatureRenderer<EntityEndSlime>(this)); this.addFeature(new OverlayFeatureRenderer<EntityEndSlime>(this));
this.addFeature(new EyesFeatureRenderer<EntityEndSlime, EndSlimeEntityModel<EntityEndSlime>>(this) { this.addFeature(new EyesFeatureRenderer<EntityEndSlime, EndSlimeEntityModel<EntityEndSlime>>(this) {
@Override @Override
@ -37,6 +37,9 @@ public class RendererEntityEndSlime extends MobEntityRenderer<EntityEndSlime, En
if (entity.isLake()) { if (entity.isLake()) {
this.getContextModel().renderFlower(matrices, vertexConsumer, 15728640, OverlayTexture.DEFAULT_UV); this.getContextModel().renderFlower(matrices, vertexConsumer, 15728640, OverlayTexture.DEFAULT_UV);
} }
else if (entity.isAmber()) {
this.getContextModel().renderCrop(matrices, vertexConsumer, 15728640, OverlayTexture.DEFAULT_UV);
}
} }
}); });
} }
@ -63,8 +66,8 @@ public class RendererEntityEndSlime extends MobEntityRenderer<EntityEndSlime, En
} }
private final class OverlayFeatureRenderer<T extends EntityEndSlime> extends FeatureRenderer<T, EndSlimeEntityModel<T>> { private final class OverlayFeatureRenderer<T extends EntityEndSlime> extends FeatureRenderer<T, EndSlimeEntityModel<T>> {
private final EndSlimeEntityModel<T> modelOrdinal = new EndSlimeEntityModel<T>(true, 0); private final EndSlimeEntityModel<T> modelOrdinal = new EndSlimeEntityModel<T>(true);
private final EndSlimeEntityModel<T> modelLake = new EndSlimeEntityModel<T>(true, 1); private final EndSlimeEntityModel<T> modelLake = new EndSlimeEntityModel<T>(true);
public OverlayFeatureRenderer(FeatureRendererContext<T, EndSlimeEntityModel<T>> featureRendererContext) { public OverlayFeatureRenderer(FeatureRendererContext<T, EndSlimeEntityModel<T>> featureRendererContext) {
super(featureRendererContext); super(featureRendererContext);
@ -91,8 +94,10 @@ public class RendererEntityEndSlime extends MobEntityRenderer<EntityEndSlime, En
TEXTURE[0] = BetterEnd.makeID("textures/entity/end_slime/end_slime.png"); TEXTURE[0] = BetterEnd.makeID("textures/entity/end_slime/end_slime.png");
TEXTURE[1] = BetterEnd.makeID("textures/entity/end_slime/end_slime_mossy.png"); TEXTURE[1] = BetterEnd.makeID("textures/entity/end_slime/end_slime_mossy.png");
TEXTURE[2] = BetterEnd.makeID("textures/entity/end_slime/end_slime_lake.png"); TEXTURE[2] = BetterEnd.makeID("textures/entity/end_slime/end_slime_lake.png");
TEXTURE[3] = BetterEnd.makeID("textures/entity/end_slime/end_slime_amber.png");
GLOW[0] = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_slime/end_slime_glow.png")); GLOW[0] = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_slime/end_slime_glow.png"));
GLOW[1] = GLOW[0]; GLOW[1] = GLOW[0];
GLOW[2] = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_slime/end_slime_lake_glow.png")); GLOW[2] = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_slime/end_slime_lake_glow.png"));
GLOW[3] = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/end_slime/end_slime_amber_glow.png"));
} }
} }

View file

@ -3,6 +3,7 @@ package ru.betterend.world.biome;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.world.gen.feature.ConfiguredStructureFeatures; import net.minecraft.world.gen.feature.ConfiguredStructureFeatures;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndEntities;
import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndFeatures;
import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndParticles;
import ru.betterend.registry.EndSounds; import ru.betterend.registry.EndSounds;
@ -28,6 +29,7 @@ public class BiomeAmberLand extends EndBiome {
.addFeature(EndFeatures.CHARNIA_ORANGE) .addFeature(EndFeatures.CHARNIA_ORANGE)
.addFeature(EndFeatures.CHARNIA_RED) .addFeature(EndFeatures.CHARNIA_RED)
.addStructureFeature(ConfiguredStructureFeatures.END_CITY) .addStructureFeature(ConfiguredStructureFeatures.END_CITY)
.addMobSpawn(EntityType.ENDERMAN, 50, 1, 4)); .addMobSpawn(EntityType.ENDERMAN, 50, 1, 4)
.addMobSpawn(EndEntities.END_SLIME, 10, 1, 2));
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB