Amber slimes
This commit is contained in:
parent
878f4bbe63
commit
179d2a0035
6 changed files with 43 additions and 7 deletions
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +70,10 @@ public class EndSlimeEntityModel<T extends EntityEndSlime> extends CompositeEnti
|
||||||
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() {
|
||||||
return ImmutableList.of(this.innerCube, this.rightEye, this.leftEye, this.mouth);
|
return ImmutableList.of(this.innerCube, this.rightEye, this.leftEye, this.mouth);
|
||||||
|
|
|
@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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 |
Loading…
Add table
Add a link
Reference in a new issue