diff --git a/src/main/java/net/id/paradiselost/client/model/ParadiseLostModelLayers.java b/src/main/java/net/id/paradiselost/client/model/ParadiseLostModelLayers.java index 762527db8..5ab203023 100644 --- a/src/main/java/net/id/paradiselost/client/model/ParadiseLostModelLayers.java +++ b/src/main/java/net/id/paradiselost/client/model/ParadiseLostModelLayers.java @@ -8,7 +8,9 @@ import net.id.paradiselost.client.model.armor.PhoenixArmorModel; import net.id.paradiselost.client.model.block.DungeonSwitchModel; import net.id.paradiselost.client.model.entity.*; +import net.minecraft.client.model.Dilation; import net.minecraft.client.model.TexturedModelData; +import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.model.EntityModelLayer; import net.minecraft.util.Identifier; @@ -16,9 +18,16 @@ @Environment(EnvType.CLIENT) public class ParadiseLostModelLayers { + + public static final TexturedModelData INNER_ARMOR_MODEL_DATA = TexturedModelData.of(BipedEntityModel.getModelData(new Dilation(0.5F), 0.0F), 64, 32); + public static final TexturedModelData OUTER_ARMOR_MODEL_DATA = TexturedModelData.of(BipedEntityModel.getModelData(new Dilation(1.0F), 0.0F), 64, 32); + public static final Map ENTRIES = Maps.newHashMap(); public static final EntityModelLayer HELLENROSE = register("hellenrose", "main", ParadiseLostPlantModel.getTexturedModelData()); + public static final EntityModelLayer ENVOY = register("envoy", "main", EnvoyEntityModel.getTexturedModelData()); + public static final EntityModelLayer ENVOY_INNER_ARMOR = register("envoy", "inner_armor", INNER_ARMOR_MODEL_DATA); + public static final EntityModelLayer ENVOY_OUTER_ARMOR = register("envoy", "outer_armor", OUTER_ARMOR_MODEL_DATA); public static final EntityModelLayer PARADISE_HARE = register("corsican_hare", "main", ParadiseHareModel.getTexturedModelData()); public static final EntityModelLayer MOA = register("moa", "main", MoaModel.getTexturedModelData()); public static final EntityModelLayer AMBYST = register("ambyst", "main", AmbystModel.getTexturedModelData()); diff --git a/src/main/java/net/id/paradiselost/client/model/entity/EnvoyEntityModel.java b/src/main/java/net/id/paradiselost/client/model/entity/EnvoyEntityModel.java new file mode 100644 index 000000000..448ab26e7 --- /dev/null +++ b/src/main/java/net/id/paradiselost/client/model/entity/EnvoyEntityModel.java @@ -0,0 +1,14 @@ +package net.id.paradiselost.client.model.entity; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.id.paradiselost.entities.hostile.EnvoyEntity; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.entity.model.SkeletonEntityModel; + +@Environment(EnvType.CLIENT) +public class EnvoyEntityModel extends SkeletonEntityModel { + public EnvoyEntityModel(ModelPart modelPart) { + super(modelPart); + } +} diff --git a/src/main/java/net/id/paradiselost/client/model/entity/EnvoyEyesFeatureRenderer.java b/src/main/java/net/id/paradiselost/client/model/entity/EnvoyEyesFeatureRenderer.java new file mode 100644 index 000000000..cd8539c76 --- /dev/null +++ b/src/main/java/net/id/paradiselost/client/model/entity/EnvoyEyesFeatureRenderer.java @@ -0,0 +1,32 @@ +package net.id.paradiselost.client.model.entity; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.id.paradiselost.ParadiseLost; +import net.id.paradiselost.entities.hostile.EnvoyEntity; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.feature.EyesFeatureRenderer; +import net.minecraft.client.render.entity.feature.FeatureRendererContext; +import net.minecraft.client.util.math.MatrixStack; + +@Environment(EnvType.CLIENT) +public class EnvoyEyesFeatureRenderer extends EyesFeatureRenderer> { + + private static final RenderLayer TEXTURE = RenderLayer.getEyes(ParadiseLost.locate("textures/entity/envoy/envoy_enlightened_eyes.png")); + + public EnvoyEyesFeatureRenderer(FeatureRendererContext> featureRendererContext) { + super(featureRendererContext); + } + + public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, T entity, float limbAngle, float limbDistance, float tickDelta, float animationProgress, float headYaw, float headPitch) { + if (entity.getEnlightened()) { + super.render(matrices, vertexConsumers, light, entity, limbAngle, limbDistance, tickDelta, animationProgress, headYaw, headPitch); + } + } + + @Override + public RenderLayer getEyesTexture() { + return TEXTURE; + } +} diff --git a/src/main/java/net/id/paradiselost/client/rendering/entity/ParadiseLostEntityRenderers.java b/src/main/java/net/id/paradiselost/client/rendering/entity/ParadiseLostEntityRenderers.java index 396daf0bf..5250191c8 100644 --- a/src/main/java/net/id/paradiselost/client/rendering/entity/ParadiseLostEntityRenderers.java +++ b/src/main/java/net/id/paradiselost/client/rendering/entity/ParadiseLostEntityRenderers.java @@ -4,6 +4,7 @@ import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.id.incubus_core.blocklikeentities.api.client.BlockLikeEntityRenderer; +import net.id.paradiselost.client.rendering.entity.hostile.EnvoyEntityRenderer; import net.id.paradiselost.client.rendering.entity.hostile.HellenroseRenderer; import net.id.paradiselost.client.rendering.entity.passive.ParadiseHareRenderer; import net.id.paradiselost.client.rendering.entity.passive.MoaEntityRenderer; @@ -21,6 +22,7 @@ public static void initClient() { // hostile register(ParadiseLostEntityTypes.HELLENROSE, HellenroseRenderer::new); + register(ParadiseLostEntityTypes.ENVOY, EnvoyEntityRenderer::new); // passive register(ParadiseLostEntityTypes.MOA, MoaEntityRenderer::new); diff --git a/src/main/java/net/id/paradiselost/client/rendering/entity/hostile/EnvoyEntityRenderer.java b/src/main/java/net/id/paradiselost/client/rendering/entity/hostile/EnvoyEntityRenderer.java new file mode 100644 index 000000000..f84f09ca2 --- /dev/null +++ b/src/main/java/net/id/paradiselost/client/rendering/entity/hostile/EnvoyEntityRenderer.java @@ -0,0 +1,30 @@ +package net.id.paradiselost.client.rendering.entity.hostile; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.id.paradiselost.ParadiseLost; +import net.id.paradiselost.client.model.ParadiseLostModelLayers; +import net.id.paradiselost.client.model.entity.EnvoyEyesFeatureRenderer; +import net.id.paradiselost.entities.hostile.EnvoyEntity; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.SkeletonEntityRenderer; +import net.minecraft.entity.mob.AbstractSkeletonEntity; +import net.minecraft.util.Identifier; + +@Environment(EnvType.CLIENT) +public class EnvoyEntityRenderer extends SkeletonEntityRenderer { + private static final Identifier TEXTURE = ParadiseLost.locate("textures/entity/envoy/envoy.png"); + private static final Identifier TEXTURE_ENLIGHTENED = ParadiseLost.locate("textures/entity/envoy/envoy_enlightened.png"); + + public EnvoyEntityRenderer(EntityRendererFactory.Context renderManager) { + super(renderManager, ParadiseLostModelLayers.ENVOY, ParadiseLostModelLayers.ENVOY_INNER_ARMOR, ParadiseLostModelLayers.ENVOY_OUTER_ARMOR); + this.addFeature(new EnvoyEyesFeatureRenderer(this)); + } + + public Identifier getTexture(AbstractSkeletonEntity entity) { + if (((EnvoyEntity) entity).getEnlightened()) { + return TEXTURE_ENLIGHTENED; + } + return TEXTURE; + } +} diff --git a/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java b/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java index 5e0a0b3af..9aaed6025 100644 --- a/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java +++ b/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java @@ -7,6 +7,7 @@ import net.id.paradiselost.ParadiseLost; import net.id.paradiselost.entities.block.FloatingBlockEntity; import net.id.paradiselost.entities.block.SliderEntity; +import net.id.paradiselost.entities.hostile.EnvoyEntity; import net.id.paradiselost.entities.hostile.HellenroseEntity; import net.id.paradiselost.entities.passive.ParadiseHareEntity; import net.id.paradiselost.entities.passive.ParadiseLostAnimalEntity; @@ -24,6 +25,7 @@ import net.minecraft.entity.ai.brain.sensor.SensorType; import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.mob.MobEntity; +import net.minecraft.entity.mob.SkeletonEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; @@ -50,6 +52,8 @@ public class ParadiseLostEntityTypes { // Hostile public static final EntityType HELLENROSE = add("hellenrose", of(HellenroseEntity::new, MONSTER, changing(1f, 1f), 5), attributes(HellenroseEntity::createHellenroseAttributes), spawnRestrictions(HellenroseEntity::canSpawn)); + public static final EntityType ENVOY = add("envoy", of(EnvoyEntity::new, MONSTER, changing(1f, 2f), 7), + attributes(EnvoyEntity::createEnvoyAttributes), spawnRestrictions(EnvoyEntity::canMobSpawn)); // passive public static final EntityType MOA = add("moa", of(MoaEntity::new, CREATURE, changing(1.0F, 2.0F), 5), diff --git a/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java b/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java new file mode 100644 index 000000000..7969051df --- /dev/null +++ b/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java @@ -0,0 +1,68 @@ +package net.id.paradiselost.entities.hostile; + +import net.minecraft.entity.Entity; +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.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.entity.mob.SkeletonEntity; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.LocalDifficulty; +import net.minecraft.world.World; + +public class EnvoyEntity extends SkeletonEntity { + private static final TrackedData ENLIGHTENED; + + public EnvoyEntity(EntityType entityType, World world) { + super(entityType, world); + } + + public boolean getEnlightened() { + return this.dataTracker.get(ENLIGHTENED); + } + + protected void initDataTracker() { + super.initDataTracker(); + this.dataTracker.startTracking(ENLIGHTENED, false); + } + + protected void initEquipment(Random random, LocalDifficulty localDifficulty) { + } + + public boolean tryAttack(Entity target) { + if (!super.tryAttack(target)) { + return false; + } else { + if (target instanceof LivingEntity) { + ((LivingEntity) target).addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 200), this); + } + return true; + } + } + public static DefaultAttributeContainer.Builder createEnvoyAttributes() { + return createHostileAttributes() + .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.2D); + } + + @Override + public void writeCustomDataToNbt(NbtCompound compound) { + super.writeCustomDataToNbt(compound); + compound.putBoolean("Enlightened", this.dataTracker.get(ENLIGHTENED)); + } + + @Override + public void readCustomDataFromNbt(NbtCompound compound) { + super.readCustomDataFromNbt(compound); + this.dataTracker.set(ENLIGHTENED, compound.getBoolean("Enlightened")); + } + + static { + ENLIGHTENED = DataTracker.registerData(EnvoyEntity.class, TrackedDataHandlerRegistry.BOOLEAN); + } +} diff --git a/src/main/java/net/id/paradiselost/world/dimension/ParadiseLostBiomes.java b/src/main/java/net/id/paradiselost/world/dimension/ParadiseLostBiomes.java index 6a8e8a577..b6ae4ffc9 100644 --- a/src/main/java/net/id/paradiselost/world/dimension/ParadiseLostBiomes.java +++ b/src/main/java/net/id/paradiselost/world/dimension/ParadiseLostBiomes.java @@ -261,14 +261,18 @@ private static Biome createHighlandsPlains() { .spawnSettings(createSpawnSettings( merge( Map.of( + SpawnGroup.MONSTER, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) + ), SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), - Map.of( - ) + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) + ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.5F).downfall(1) // .category(Biome.Category.PLAINS) @@ -304,15 +308,18 @@ private static Biome createHighlandsForest() { .spawnSettings(createSpawnSettings( merge( Map.of( + SpawnGroup.MONSTER, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) + ), SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 3, 7) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), - - Map.of( - ) + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) + ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.5F).downfall(1) // .category(Biome.Category.FOREST) @@ -344,16 +351,19 @@ private static Biome createTradewinds() { ) )) .spawnSettings(createSpawnSettings( - merge( - Map.of( - SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 3, 7) - ) - ) - ), - + merge( Map.of( + SpawnGroup.MONSTER, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) + ), + SpawnGroup.CREATURE, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) + ) + ) + ), + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.5F).downfall(1) @@ -394,18 +404,17 @@ private static Biome createHighlandsThicket() { merge( Map.of( SpawnGroup.MONSTER, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.HELLENROSE, 50, 1, 2) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) ), SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 10, 1, 5) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), - - Map.of( - ParadiseLostEntityTypes.HELLENROSE, SpawnCost.of(0.75, 0.07) - ) + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) + ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.4F).downfall(2) // .category(Biome.Category.FOREST) @@ -440,20 +449,19 @@ private static Biome createHighlandsGrandGlade() { ) )) .spawnSettings(createSpawnSettings( - merge( - Map.of( - SpawnGroup.MONSTER, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.HELLENROSE, 50, 1, 2) - ), - SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 10, 1, 5) - ) - ) - ), - + merge( Map.of( - ParadiseLostEntityTypes.HELLENROSE, SpawnCost.of(0.75, 0.07) + SpawnGroup.MONSTER, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) + ), + SpawnGroup.CREATURE, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) + ) + ) + ), + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.4F).downfall(2) @@ -489,19 +497,17 @@ private static Biome createWisteriaWoods() { merge( Map.of( SpawnGroup.MONSTER, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.HELLENROSE, 100, 3, 7) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) ), - SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 10, 1, 5) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), - - Map.of( - ParadiseLostEntityTypes.HELLENROSE, SpawnCost.of(0.7, 0.1) - ) + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) + ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.5F).downfall(1) // .category(Biome.Category.FOREST) @@ -541,6 +547,9 @@ private static Biome createAutumnalTundra() { .spawnSettings(createSpawnSettings( merge( Map.of( + SpawnGroup.MONSTER, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) + ), SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13), @@ -548,9 +557,9 @@ private static Biome createAutumnalTundra() { ) ) ), - - Map.of( - ) + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) + ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.1F).downfall(2) // .category(Biome.Category.TAIGA) @@ -588,6 +597,9 @@ private static Biome createContinentalPlateau() { .spawnSettings(createSpawnSettings( merge( Map.of( + SpawnGroup.MONSTER, List.of( + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) + ), SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13), @@ -595,9 +607,9 @@ private static Biome createContinentalPlateau() { ) ) ), - - Map.of( - ) + Map.of( + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) + ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.25F).downfall(0) .build(); @@ -645,7 +657,7 @@ private static Biome createHighlandsShield() { merge( Map.of( SpawnGroup.MONSTER, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.HELLENROSE, 50, 1, 3) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 2, 4) ), SpawnGroup.CREATURE, List.of( new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), @@ -655,7 +667,7 @@ private static Biome createHighlandsShield() { ) ), Map.of( - ParadiseLostEntityTypes.HELLENROSE, SpawnCost.of(1, 0.1) + ParadiseLostEntityTypes.ENVOY, SpawnCost.of(0.1, 2.0) ) )) .precipitation(Biome.Precipitation.RAIN).temperature(0.35F).downfall(2) diff --git a/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy.png b/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy.png new file mode 100644 index 000000000..feb174efa Binary files /dev/null and b/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy.png differ diff --git a/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy_enlightened.png b/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy_enlightened.png new file mode 100644 index 000000000..a01b1dd4f Binary files /dev/null and b/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy_enlightened.png differ diff --git a/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy_enlightened_eyes.png b/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy_enlightened_eyes.png new file mode 100644 index 000000000..8aae72e12 Binary files /dev/null and b/src/main/resources/assets/paradise_lost/textures/entity/envoy/envoy_enlightened_eyes.png differ diff --git a/src/main/resources/data/paradise_lost/dimension_type/paradise_lost.json b/src/main/resources/data/paradise_lost/dimension_type/paradise_lost.json index 9c3464d42..73b1fc645 100644 --- a/src/main/resources/data/paradise_lost/dimension_type/paradise_lost.json +++ b/src/main/resources/data/paradise_lost/dimension_type/paradise_lost.json @@ -2,7 +2,7 @@ "logical_height": 384, "infiniburn": "#minecraft:infiniburn_overworld", "effects": "minecraft:overworld", - "ambient_light": 0.06, + "ambient_light": 0.03, "respawn_anchor_works": false, "has_raids": false, "min_y": -64, @@ -14,6 +14,6 @@ "has_skylight": true, "has_ceiling": false, "ultrawarm": false, - "monster_spawn_light_level": 0, - "monster_spawn_block_light_limit": 0 + "monster_spawn_light_level": 6, + "monster_spawn_block_light_limit": 6 }