From 9dc8ac093d7b0f98e0b8d5e2c92bded5f9661f87 Mon Sep 17 00:00:00 2001 From: Maxx <53229958+MBatt1@users.noreply.github.com> Date: Fri, 3 May 2024 18:19:19 -0500 Subject: [PATCH] vault structures + envoy tweaks - hare --- .../client/model/ParadiseLostModelLayers.java | 1 - .../model/entity/ParadiseHareModel.java | 83 ----- .../entity/ParadiseLostEntityRenderers.java | 2 - .../entity/passive/ParadiseHareRenderer.java | 40 --- .../ParadiseLostEntityExtensions.java | 8 - .../entities/ParadiseLostEntityTypes.java | 3 - .../entities/hostile/EnvoyEntity.java | 18 ++ .../entities/passive/ParadiseHareEntity.java | 284 ------------------ .../paradiselost/items/ParadiseLostItems.java | 1 - .../paradiselost/mixin/block/BlockMixin.java | 1 - .../mixin/entity/LivingEntityMixin.java | 4 - .../mixin/entity/PlayerEntityMixin.java | 21 -- .../gen/structure/JigsawStructureMixin.java | 38 +++ .../tag/ParadiseLostStructureTags.java | 3 + .../util/ParadiseLostDamageSources.java | 1 - .../util/ParadiseLostSoundEvents.java | 8 +- .../world/dimension/ParadiseLostBiomes.java | 18 +- .../assets/paradise_lost/lang/en_us.json | 12 +- .../models/item/corsican_hare_spawn_egg.json | 3 - .../textures/entity/corsican_hare.png | Bin 325 -> 0 bytes .../loot_tables/entities/corsican_hare.json | 88 ------ .../structures/vault/armored_envoy.nbt | Bin 0 -> 928 bytes .../structures/vault/crossways/crossway_1.nbt | Bin 0 -> 3904 bytes .../structures/vault/crossways/crossway_2.nbt | Bin 0 -> 3932 bytes .../structures/vault/crossways/crossway_3.nbt | Bin 0 -> 3819 bytes .../vault/crossways/crossway_clean.nbt | Bin 0 -> 3625 bytes .../structures/vault/enlightened_envoy.nbt | Bin 0 -> 935 bytes .../structures/vault/lobbies/lobby_1.nbt | Bin 0 -> 3114 bytes .../structures/vault/lobbies/lobby_2.nbt | Bin 0 -> 3115 bytes .../structures/vault/lobbies/lobby_3.nbt | Bin 0 -> 3103 bytes .../structures/vault/lobbies/lobby_clean.nbt | Bin 0 -> 2876 bytes .../vault/lobbies/lobby_special.nbt | Bin 0 -> 3284 bytes .../vault/storage_rooms/storage_armory_1.nbt | Bin 0 -> 3538 bytes .../vault/storage_rooms/storage_armory_2.nbt | Bin 0 -> 3466 bytes .../vault/storage_rooms/storage_armory_3.nbt | Bin 0 -> 4005 bytes .../vault/storage_rooms/storage_clean.nbt | Bin 0 -> 2986 bytes .../vault/storage_rooms/storage_stable_1.nbt | Bin 0 -> 3554 bytes .../vault/storage_rooms/storage_stable_2.nbt | Bin 0 -> 3616 bytes .../vault/storage_rooms/storage_stable_3.nbt | Bin 0 -> 3582 bytes .../storage_rooms/storage_valuable_1.nbt | Bin 0 -> 3253 bytes .../storage_rooms/storage_valuable_2.nbt | Bin 0 -> 3571 bytes .../storage_rooms/storage_valuable_3.nbt | Bin 0 -> 4118 bytes .../{orange_ruin.json => vault.json} | 1 + .../worldgen/structure/vault.json | 15 + .../worldgen/structure_set/vault.json | 14 + .../template_pool/vault/armored_envoy.json | 15 + .../template_pool/vault/crossways.json | 33 ++ .../vault/enlightened_envoy.json | 15 + .../worldgen/template_pool/vault/lobbies.json | 42 +++ .../template_pool/vault/storage_rooms.json | 87 ++++++ src/main/resources/paradise_lost.mixins.json | 1 + 51 files changed, 289 insertions(+), 571 deletions(-) delete mode 100644 src/main/java/net/id/paradiselost/client/model/entity/ParadiseHareModel.java delete mode 100644 src/main/java/net/id/paradiselost/client/rendering/entity/passive/ParadiseHareRenderer.java delete mode 100644 src/main/java/net/id/paradiselost/entities/passive/ParadiseHareEntity.java create mode 100644 src/main/java/net/id/paradiselost/mixin/world/gen/structure/JigsawStructureMixin.java delete mode 100644 src/main/resources/assets/paradise_lost/models/item/corsican_hare_spawn_egg.json delete mode 100644 src/main/resources/assets/paradise_lost/textures/entity/corsican_hare.png delete mode 100644 src/main/resources/data/paradise_lost/loot_tables/entities/corsican_hare.json create mode 100644 src/main/resources/data/paradise_lost/structures/vault/armored_envoy.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_1.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_2.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_3.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_clean.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/enlightened_envoy.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_1.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_2.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_3.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_clean.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_special.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_1.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_2.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_3.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_clean.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_stable_1.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_stable_2.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_stable_3.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_1.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_2.nbt create mode 100644 src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_3.nbt rename src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/{orange_ruin.json => vault.json} (87%) create mode 100644 src/main/resources/data/paradise_lost/worldgen/structure/vault.json create mode 100644 src/main/resources/data/paradise_lost/worldgen/structure_set/vault.json create mode 100644 src/main/resources/data/paradise_lost/worldgen/template_pool/vault/armored_envoy.json create mode 100644 src/main/resources/data/paradise_lost/worldgen/template_pool/vault/crossways.json create mode 100644 src/main/resources/data/paradise_lost/worldgen/template_pool/vault/enlightened_envoy.json create mode 100644 src/main/resources/data/paradise_lost/worldgen/template_pool/vault/lobbies.json create mode 100644 src/main/resources/data/paradise_lost/worldgen/template_pool/vault/storage_rooms.json 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 887a91ab7..f2c14ab9c 100644 --- a/src/main/java/net/id/paradiselost/client/model/ParadiseLostModelLayers.java +++ b/src/main/java/net/id/paradiselost/client/model/ParadiseLostModelLayers.java @@ -27,7 +27,6 @@ public class ParadiseLostModelLayers { 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()); public static final EntityModelLayer PHOENIX_ARMOR = register("phoenix_armor", "main", PhoenixArmorModel.getTexturedModelData()); diff --git a/src/main/java/net/id/paradiselost/client/model/entity/ParadiseHareModel.java b/src/main/java/net/id/paradiselost/client/model/entity/ParadiseHareModel.java deleted file mode 100644 index 7cc1d8793..000000000 --- a/src/main/java/net/id/paradiselost/client/model/entity/ParadiseHareModel.java +++ /dev/null @@ -1,83 +0,0 @@ -// Made with Model Converter by Globox_Z -// Generate all required imports -// Made with Blockbench 3.8.3 -// Exported for Minecraft version 1.15 -// Paste this class into your mod and generate all required imports -package net.id.paradiselost.client.model.entity; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.id.paradiselost.entities.passive.ParadiseHareEntity; -import net.minecraft.client.model.*; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.MathHelper; - -@Environment(EnvType.CLIENT) -public class ParadiseHareModel extends EntityModel { - private final ModelPart body; - private final ModelPart fluff; - private final ModelPart head; - private final ModelPart tail; - private final ModelPart left_front_leg; - private final ModelPart right_front_leg; - private final ModelPart back_right_leg; - private final ModelPart back_left_leg; - - private float fluff_scale = 1; - - public ParadiseHareModel(ModelPart root) { - this.body = root.getChild("body"); - this.tail = this.body.getChild("tail"); - this.back_left_leg = this.body.getChild("back_left_leg"); - this.back_right_leg = this.body.getChild("back_right_leg"); - this.right_front_leg = this.body.getChild("right_front_leg"); - this.left_front_leg = this.body.getChild("left_front_leg"); - this.head = this.body.getChild("head"); - this.fluff = root.getChild("fluff"); - } - - public static TexturedModelData getTexturedModelData() { - ModelData modelData = new ModelData(); - ModelPartData modelPartData = modelData.getRoot(); - ModelPartData modelPartData1 = modelPartData.addChild("body", ModelPartBuilder.create(), ModelTransform.pivot(0.0F, 22.8889F, 1.0F)); - modelPartData.addChild("fluff", ModelPartBuilder.create().uv(0, 0).cuboid(-4.0F, -3.5F, -3.5F, 8.0F, 7.0F, 7.0F), ModelTransform.pivot(0.0F, 0F, 0F)); - modelPartData1.addChild("head", ModelPartBuilder.create().uv(18, 26).cuboid(-2.0F, -1.5F, -3.0F, 4.0F, 3.0F, 3.0F).uv(0, 0).cuboid(-2.0F, -5.5F, -2.0F, 1.0F, 4.0F, 1.0F).uv(0, 0).cuboid(1.0F, -5.5F, -2.0F, 1.0F, 4.0F, 1.0F).uv(0, 14).cuboid(-4.0F, -0.5F, -2.0F, 2.0F, 2.0F, 0.0F).uv(0, 14).cuboid(2.0F, -0.5F, -2.0F, 2.0F, 2.0F, 0.0F, true), ModelTransform.pivot(0.0F, -2.3889F, -4.5F)); - modelPartData1.addChild("left_front_leg", ModelPartBuilder.create().uv(0, 21).cuboid(-1.0F, -1.0F, -2.25F, 2.0F, 1.0F, 3.0F), ModelTransform.pivot(-4.0F, 1.1111F, -3.25F)); - modelPartData1.addChild("right_front_leg", ModelPartBuilder.create().uv(0, 21).cuboid(-1.0F, -1.0F, -2.5F, 2.0F, 1.0F, 3.0F), ModelTransform.pivot(4.0F, 1.1111F, -3.0F)); - modelPartData1.addChild("back_right_leg", ModelPartBuilder.create().uv(10, 20).cuboid(-1.0F, 0.0F, -3.0F, 2.0F, 1.0F, 4.0F).uv(22, 20).cuboid(-1.0F, -2.0F, -2.0F, 2.0F, 2.0F, 3.0F), ModelTransform.pivot(4.0F, 0.1111F, 2.5F)); - modelPartData1.addChild("back_left_leg", ModelPartBuilder.create().uv(22, 20).cuboid(-1.0F, -2.0F, -2.0F, 2.0F, 2.0F, 3.0F).uv(10, 20).cuboid(-1.0F, 0.0F, -3.0F, 2.0F, 1.0F, 4.0F), ModelTransform.pivot(-4.0F, 0.1111F, 2.5F)); - modelPartData1.addChild("tail", ModelPartBuilder.create().uv(0, 25).cuboid(-2.0F, -2.0F, 0.0F, 4.0F, 4.0F, 3.0F), ModelTransform.pivot(0.0F, -2.8889F, 2.5F)); - return TexturedModelData.of(modelData, 32, 32); - } - - @Override - public void setAngles(ParadiseHareEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { - head.pitch = headPitch * 0.017453F; - head.yaw = netHeadYaw * 0.017453292F; - back_right_leg.pitch = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; - back_left_leg.pitch = MathHelper.cos(limbSwing * 0.6662F + 3.1415927F) * 1.4F * limbSwingAmount; - right_front_leg.pitch = MathHelper.cos(limbSwing * 0.6662F + 3.1415927F) * 1.4F * limbSwingAmount; - left_front_leg.pitch = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; - float targetFloof = entity.getPuffiness() / 2F; - if (entity.floof < targetFloof) { - entity.floof += 0.025F; - } else if (entity.floof > targetFloof) { - entity.floof -= 0.025F; - } - if (Math.abs(targetFloof - entity.floof) <= 0.03) { - entity.floof = targetFloof; - } - - fluff_scale = entity.floof + 1; - } - - @Override - public void render(MatrixStack matrixStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - body.render(matrixStack, buffer, packedLight, packedOverlay); - matrixStack.translate(0, 1.28, 0); - matrixStack.scale(fluff_scale, fluff_scale, fluff_scale); - fluff.render(matrixStack, buffer, packedLight, packedOverlay); - } -} 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 c73fba28d..e9b127e8f 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 @@ -5,7 +5,6 @@ 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.passive.ParadiseHareRenderer; import net.id.paradiselost.client.rendering.entity.passive.MoaEntityRenderer; import net.id.paradiselost.entities.ParadiseLostEntityTypes; import net.minecraft.client.render.entity.EntityRendererFactory; @@ -24,7 +23,6 @@ public static void initClient() { // passive register(ParadiseLostEntityTypes.MOA, MoaEntityRenderer::new); - register(ParadiseLostEntityTypes.PARADISE_HARE, ParadiseHareRenderer::new); // register(ParadiseLostEntityTypes.AMBYST, AmbystRenderer::new); } diff --git a/src/main/java/net/id/paradiselost/client/rendering/entity/passive/ParadiseHareRenderer.java b/src/main/java/net/id/paradiselost/client/rendering/entity/passive/ParadiseHareRenderer.java deleted file mode 100644 index 329600440..000000000 --- a/src/main/java/net/id/paradiselost/client/rendering/entity/passive/ParadiseHareRenderer.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.id.paradiselost.client.rendering.entity.passive; - -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.ParadiseHareModel; -import net.id.paradiselost.entities.passive.ParadiseHareEntity; -import net.minecraft.client.render.entity.EntityRendererFactory; -import net.minecraft.client.render.entity.MobEntityRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; - -@Environment(EnvType.CLIENT) -public class ParadiseHareRenderer extends MobEntityRenderer { - - private static final Identifier TEXTURE = ParadiseLost.locate("textures/entity/corsican_hare.png"); - - public ParadiseHareRenderer(EntityRendererFactory.Context context) { - super(context, new ParadiseHareModel(context.getPart(ParadiseLostModelLayers.PARADISE_HARE)), 0.3F); - } - - @Override - public ParadiseHareModel getModel() { - return super.getModel(); - } - - @Override - protected void setupTransforms(ParadiseHareEntity entity, MatrixStack matrices, float animationProgress, float bodyYaw, float tickDelta) { - super.setupTransforms(entity, matrices, animationProgress, bodyYaw, tickDelta); - if (entity.isBaby()) { - matrices.scale(0.6F, 0.6F, 0.6F); - } - } - - @Override - public Identifier getTexture(ParadiseHareEntity entity) { - return TEXTURE; - } -} diff --git a/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityExtensions.java b/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityExtensions.java index 1659cde15..271ed84bc 100644 --- a/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityExtensions.java +++ b/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityExtensions.java @@ -4,7 +4,6 @@ public interface ParadiseLostEntityExtensions { boolean flipped = false; boolean paradiseLostFallen = false; - boolean corsican_hareFallen = false; int gravFlipTime = 0; default int getFlipTime() { @@ -22,13 +21,6 @@ default boolean isParadiseLostFallen() { default void setParadiseLostFallen(boolean value) { } - default boolean isParadiseHareFallen() { - return corsican_hareFallen; - } - - default void setParadiseHareFallen(boolean corsican_hareFallen) { - } - void setFlipped(); default void tick() { diff --git a/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java b/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java index 610ed76bd..0a4c83275 100644 --- a/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java +++ b/src/main/java/net/id/paradiselost/entities/ParadiseLostEntityTypes.java @@ -8,7 +8,6 @@ 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.passive.ParadiseHareEntity; import net.id.paradiselost.entities.passive.ParadiseLostAnimalEntity; import net.id.paradiselost.entities.passive.ambyst.FindLogSensor; import net.id.paradiselost.entities.passive.moa.MoaEntity; @@ -54,8 +53,6 @@ public class ParadiseLostEntityTypes { // passive public static final EntityType MOA = add("moa", of(MoaEntity::new, CREATURE, changing(1.0F, 2.0F), 5), attributes(MoaEntity::createMoaAttributes), spawnRestrictions(ParadiseLostAnimalEntity::isValidNaturalParadiseLostSpawn)); - public static final EntityType PARADISE_HARE = add("corsican_hare", of(ParadiseHareEntity::new, CREATURE, changing(0.55F, 0.55F), 5), - attributes(ParadiseHareEntity::createParadiseHareAttributes), spawnRestrictions(ParadiseLostAnimalEntity::isValidNaturalParadiseLostSpawn)); // public static final EntityType AMBYST = add("ambyst", of(AmbystEntity::new, CREATURE, changing(0.6F, 0.42F), 5), // attributes(AmbystEntity::createAmbystAttributes), spawnRestrictions(ParadiseLostAnimalEntity::isValidNaturalParadiseLostSpawn)); diff --git a/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java b/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java index 6356e3232..5ddf1f450 100644 --- a/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java +++ b/src/main/java/net/id/paradiselost/entities/hostile/EnvoyEntity.java @@ -1,23 +1,29 @@ package net.id.paradiselost.entities.hostile; +import net.id.paradiselost.util.ParadiseLostSoundEvents; 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.damage.DamageSource; 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.GuardianEntity; import net.minecraft.entity.mob.SkeletonEntity; import net.minecraft.nbt.NbtCompound; import net.minecraft.particle.ParticleTypes; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; 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) { @@ -51,6 +57,18 @@ public void tick() { super.tick(); } + protected SoundEvent getHurtSound(DamageSource source) { + return this.getEnlightened() ? ParadiseLostSoundEvents.ENTITY_ENVOY_DAMAGE : super.getHurtSound(source); + } + + public boolean damage(DamageSource source, float amount) { + float dmg = amount; + if (this.getEnlightened()) { + dmg /= 2; + } + return super.damage(source, dmg); + } + public boolean tryAttack(Entity target) { if (!super.tryAttack(target)) { return false; diff --git a/src/main/java/net/id/paradiselost/entities/passive/ParadiseHareEntity.java b/src/main/java/net/id/paradiselost/entities/passive/ParadiseHareEntity.java deleted file mode 100644 index f5c3bed64..000000000 --- a/src/main/java/net/id/paradiselost/entities/passive/ParadiseHareEntity.java +++ /dev/null @@ -1,284 +0,0 @@ -package net.id.paradiselost.entities.passive; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.id.paradiselost.blocks.ParadiseLostBlocks; -import net.id.paradiselost.entities.ParadiseLostEntityExtensions; -import net.id.paradiselost.entities.ParadiseLostEntityTypes; -import net.id.paradiselost.items.ParadiseLostItems; -import net.id.paradiselost.util.ParadiseLostSoundEvents; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.SweetBerryBushBlock; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.MovementType; -import net.minecraft.entity.ai.goal.*; -import net.minecraft.entity.ai.pathing.Path; -import net.minecraft.entity.attribute.DefaultAttributeContainer; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.damage.DamageSource; -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.passive.PassiveEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.recipe.Ingredient; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraft.world.WorldView; - -public class ParadiseHareEntity extends ParadiseLostAnimalEntity { - - public static final TrackedData PUFF = DataTracker.registerData(ParadiseHareEntity.class, TrackedDataHandlerRegistry.BYTE); - public float floof; - - public ParadiseHareEntity(EntityType entityType, World world) { - super(entityType, world); - } - - public static DefaultAttributeContainer.Builder createParadiseHareAttributes() { - return createMobAttributes() - .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.25D) - .add(EntityAttributes.GENERIC_MAX_HEALTH, 5.0D); - } - - @Override - protected void initGoals() { - this.goalSelector.add(0, new SwimGoal(this)); - this.goalSelector.add(1, new EscapeDangerGoal(this, 1.25D)); - this.goalSelector.add(2, new WanderAroundFarGoal(this, 1.0D, 20)); - this.goalSelector.add(2, new WanderAroundGoal(this, 1.0D, 15)); - this.goalSelector.add(3, new EatBlueberriesGoal(0.9D, 40, 8)); - this.goalSelector.add(4, new AnimalMateGoal(this, 1.0D)); - this.goalSelector.add(5, new TemptGoal(this, 1.15D, Ingredient.ofItems(ParadiseLostItems.BLACKCURRANT), false)); - this.goalSelector.add(6, new LookAroundGoal(this)); - this.goalSelector.add(7, new LookAtEntityGoal(this, PlayerEntity.class, 4.0F, 32)); - //this.goalSelector.add(6, new EntityAIBunnyHop(this)); - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - this.dataTracker.startTracking(PUFF, (byte) 0); - } - - @Override - @Environment(EnvType.CLIENT) - public boolean shouldRender(double par1) { - return true; - } - - @Override - public double getHeightOffset() { - return 0.4D; - } - - @Override - public void playSpawnEffects() { - if (this.world.isClient) { - for (int i = 0; i < 5; ++i) { - double double_1 = this.random.nextGaussian() * 0.02D; - double double_2 = this.random.nextGaussian() * 0.02D; - double double_3 = this.random.nextGaussian() * 0.02D; - - this.world.addParticle(ParticleTypes.POOF, this.getX() + (double) (this.random.nextFloat() * this.getWidth() * 2.0F) - (double) this.getWidth() - double_1 * 10.0D, this.getY() + (double) (this.random.nextFloat() * this.getHeight()) - double_2 * 10.0D, this.getZ() + (double) (this.random.nextFloat() * this.getWidth() * 2.0F) - (double) this.getWidth() - double_3 * 10.0D, double_1, double_2, double_3); - } - } else { - this.world.sendEntityStatus(this, (byte) 20); - } - } - - //@Override public boolean canRiderInteract() { return true; } - - public int getPuffiness() { - return (int) this.dataTracker.get(PUFF); - } - - public void setPuffiness(int i) { - this.dataTracker.set(PUFF, (byte) i); - } - - @Override - public void tick() { - super.tick(); - int puff = getPuffiness(); - if (puff > 0 && world.getTime() % 4 == 0) { - Vec3d pos = getPos(); - world.addParticle(ParticleTypes.CLOUD, pos.x, pos.y + 0.2, pos.z, 0, 0, 0); - } else if (isOnGround() && puff > 0) { - setPuffiness(0); - } - - if (random.nextFloat() <= 0.03F) { - playSound(ParadiseLostSoundEvents.ENTITY_PARADISE_HARE_SNIFF, 1.0F, 2.0F); - } - - if (this.hasVehicle() && (this.getVehicle().isSneaking() || this.getVehicle().getVelocity().y < -0.7)) { - ((ParadiseLostEntityExtensions) this.getVehicle()).setParadiseHareFallen(true); - this.dismountVehicle(); - } - } - - @Override - public void tickMovement() { - super.tickMovement(); - if (this.isOnGround() && ((getVelocity().x > 0.025 || getVelocity().z > 0.025) && random.nextInt(4) == 0)) { - jump(); - } - // Slows down ParadiseHare while falling - if (!this.isOnGround() && getVelocity().y < 0.0D) { - this.setVelocity(getVelocity().multiply(1.0D, 0.65D, 1.0D)); - } - } - - @Override - protected float getJumpVelocity() { - if (!this.horizontalCollision && (!this.moveControl.isMoving() || !(this.moveControl.getTargetY() > this.getY() + 0.5D))) { - Path path = this.navigation.getCurrentPath(); - if (path != null && !path.isFinished()) { - Vec3d vec3d = path.getNodePosition(this); - if (vec3d.y > this.getY() + 0.5D) { - return 0.45F; - } - } - return this.moveControl.getSpeed() <= 0.6D ? 0.3F : 0.4F; - } else { - return 0.45F; - } - } - - @Override - protected void jump() { - setPuffiness(1); - Vec3d pos = getPos(); - for (int i = 0; i < 4; i++) { - world.addParticle(ParticleTypes.CLOUD, pos.x + (random.nextGaussian() * 0.2), pos.y + (random.nextGaussian() * 0.2), pos.z + (random.nextGaussian() * 0.2), 0, 0, 0); - } - world.playSoundFromEntity(null, this, ParadiseLostSoundEvents.ENTITY_PARADISE_HARE_JUMP, SoundCategory.NEUTRAL, 1, 1); - super.jump(); - } - - @Override - public boolean shouldSpawnSprintingParticles() { - return false; - } - - @Override - public void move(MovementType type, Vec3d movement) { - super.move(type, isOnGround() ? movement : movement.multiply(3.5, (movement.y < 0 && getPuffiness() > 0) ? 0.15 : 1, 3.5)); - } - - @Override - public boolean handleFallDamage(float distance, float damageMultiplier, DamageSource damageSource) { - return false; - } - - @Override - public ActionResult interactMob(PlayerEntity player, Hand hand) { - ItemStack stack = player.getStackInHand(hand); - - if (!stack.isEmpty()) { - return super.interactMob(player, hand); - } else { -// this.world.playSound(this.getX(), this.getY(), this.getZ(), ParadiseLostSounds.PARADISE_HARE_LIFT, SoundCategory.NEUTRAL, 1.0F, (this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F, false); - - if (getPrimaryPassenger() != null) { - stopRiding(); - } else { - startRiding(player); - } - - return ActionResult.SUCCESS; - } - } - - @Override - public boolean damage(DamageSource source, float damage) { - return (this.getPrimaryPassenger() == null || source.getAttacker() != this.getPrimaryPassenger()) && super.damage(source, damage); - } - - @Override - protected SoundEvent getHurtSound(DamageSource source) { - return ParadiseLostSoundEvents.ENTITY_PARADISE_HARE_HURT; - } - - @Override - protected SoundEvent getDeathSound() { - return ParadiseLostSoundEvents.ENTITY_PARADISE_HARE_DEATH; - } - - @Override - public PassiveEntity createChild(ServerWorld world, PassiveEntity mate) { - return ParadiseLostEntityTypes.PARADISE_HARE.create(world); - } - - public class EatBlueberriesGoal extends MoveToTargetPosGoal { - protected int timer; - - public EatBlueberriesGoal(double speed, int range, int maxYDifference) { - super(ParadiseHareEntity.this, speed, range, maxYDifference); - } - - public double getDesiredSquaredDistanceToTarget() { - return 2.0D; - } - - @Override - public boolean shouldResetPath() { - return this.tryingTime % 100 == 0; - } - - @Override - protected boolean isTargetPos(WorldView world, BlockPos pos) { - BlockState blockState = world.getBlockState(pos); - return blockState.isOf(ParadiseLostBlocks.BLACKCURRANT_BUSH) && blockState.get(SweetBerryBushBlock.AGE) >= 3; - } - - @Override - public void tick() { - if (this.hasReached()) { - if (this.timer >= 40) { - this.eatSweetBerry(); - } else { - ++this.timer; - } - } else if (!this.hasReached() && ParadiseHareEntity.this.random.nextFloat() < 0.05F) { - ParadiseHareEntity.this.playSound(ParadiseLostSoundEvents.ENTITY_PARADISE_HARE_SNIFF, 1.0F, 2.0F); - } - super.tick(); - } - - protected void eatSweetBerry() { - BlockState blockState = ParadiseHareEntity.this.world.getBlockState(this.targetPos); - if (blockState.isOf(ParadiseLostBlocks.BLACKCURRANT_BUSH) && blockState.get(SweetBerryBushBlock.AGE) == 3) { - ParadiseHareEntity.this.setLoveTicks(40); - ParadiseHareEntity.this.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 10, 2)); - ParadiseHareEntity.this.playSound(ParadiseLostSoundEvents.BLOCK_BLACKCURRANT_BUSH_PICK_BLUEBERRIES, 1.0F, 1.0F); - ParadiseHareEntity.this.playSound(ParadiseLostSoundEvents.ENTITY_PARADISE_HARE_EAT, 0.8F, 2.0F); - ParadiseHareEntity.this.world.setBlockState(this.targetPos, blockState.with(SweetBerryBushBlock.AGE, 1), Block.NOTIFY_LISTENERS); - } - } - - @Override - public boolean shouldContinue() { - return true; - } - - @Override - public void start() { - this.timer = 0; - super.start(); - } - } - -} diff --git a/src/main/java/net/id/paradiselost/items/ParadiseLostItems.java b/src/main/java/net/id/paradiselost/items/ParadiseLostItems.java index 9e2e1c2d0..b4244a502 100644 --- a/src/main/java/net/id/paradiselost/items/ParadiseLostItems.java +++ b/src/main/java/net/id/paradiselost/items/ParadiseLostItems.java @@ -190,7 +190,6 @@ private static Settings misc() { public static final AurelBucketItem AUREL_MILK_BUCKET = add("aurel_milk_bucket", new AurelBucketItem(aurelBucket)); public static final SpawnEggItem ENVOY_SPAWN_EGG = add("envoy_spawn_egg", new SpawnEggItem(ParadiseLostEntityTypes.ENVOY, 0xc5b1af, 0x993c3c, misc), spawnEggBehavior); - public static final SpawnEggItem PARADISE_HARE_SPAWN_EGG = add("corsican_hare_spawn_egg", new SpawnEggItem(ParadiseLostEntityTypes.PARADISE_HARE, 0xC5D6ED, 0x82A6D9, misc), spawnEggBehavior); public static final SpawnEggItem MOA_SPAWN_EGG = add("moa_spawn_egg", new SpawnEggItem(ParadiseLostEntityTypes.MOA, 0xC55C2E4, 0xB3A8BB, misc), spawnEggBehavior); private static FabricItemSettings building_block() { diff --git a/src/main/java/net/id/paradiselost/mixin/block/BlockMixin.java b/src/main/java/net/id/paradiselost/mixin/block/BlockMixin.java index 36eee151b..726076d07 100644 --- a/src/main/java/net/id/paradiselost/mixin/block/BlockMixin.java +++ b/src/main/java/net/id/paradiselost/mixin/block/BlockMixin.java @@ -17,7 +17,6 @@ public class BlockMixin { public void onLandedUpon(World world, BlockState state, BlockPos pos, Entity entity, float fallDistance, CallbackInfo ci) { if (entity instanceof ParadiseLostEntityExtensions extendedEntity) { extendedEntity.setParadiseLostFallen(false); - extendedEntity.setParadiseHareFallen(false); } } } diff --git a/src/main/java/net/id/paradiselost/mixin/entity/LivingEntityMixin.java b/src/main/java/net/id/paradiselost/mixin/entity/LivingEntityMixin.java index 96651353e..3bb549eed 100644 --- a/src/main/java/net/id/paradiselost/mixin/entity/LivingEntityMixin.java +++ b/src/main/java/net/id/paradiselost/mixin/entity/LivingEntityMixin.java @@ -69,10 +69,6 @@ private double changeGravity(double gravity) { if (isWearingParachute) { gravity -= 0.07; this.fallDistance = 0; - } else if (entity.hasPassengers() && entity.getPassengerList().stream().anyMatch(passenger -> - passenger.getType().equals(ParadiseLostEntityTypes.PARADISE_HARE))) { - gravity -= 0.05; - this.fallDistance = 0; // alternatively, remove & replace with fall damage dampener } } diff --git a/src/main/java/net/id/paradiselost/mixin/entity/PlayerEntityMixin.java b/src/main/java/net/id/paradiselost/mixin/entity/PlayerEntityMixin.java index f88d42c7d..ca02d7e47 100644 --- a/src/main/java/net/id/paradiselost/mixin/entity/PlayerEntityMixin.java +++ b/src/main/java/net/id/paradiselost/mixin/entity/PlayerEntityMixin.java @@ -30,7 +30,6 @@ public abstract class PlayerEntityMixin extends LivingEntity implements ParadiseLostEntityExtensions { private boolean paradise_lost$fallen = false; - public boolean paradise_lost$corsican_hareFallen = false; public PlayerEntityMixin(EntityType type, World world) { super(type, world); @@ -82,14 +81,6 @@ public void setParadiseLostFallen(boolean value) { paradise_lost$fallen = value; } - public boolean isParadise_lost$corsican_hareFallen() { - return paradise_lost$corsican_hareFallen; - } - - public void setPARADISE_HAREFallen(boolean value) { - paradise_lost$corsican_hareFallen = value; - } - @Inject( method = "handleFallDamage", at = @At("HEAD"), @@ -108,17 +99,5 @@ public void handleFallDamage(float fallDistance, float damageMultiplier, DamageS } cir.cancel(); } - if (paradise_lost$corsican_hareFallen) { - paradise_lost$corsican_hareFallen = false; - if (getAbilities().allowFlying) { - cir.setReturnValue(false); - } else { - if (fallDistance >= 2.0F) { - increaseStat(Stats.FALL_ONE_CM, (int) Math.round((double) fallDistance * 100.0D)); - } - cir.setReturnValue(super.handleFallDamage(fallDistance, damageMultiplier, ParadiseLostDamageSources.PARADISE_HARE_FALL)); - } - cir.cancel(); - } } } diff --git a/src/main/java/net/id/paradiselost/mixin/world/gen/structure/JigsawStructureMixin.java b/src/main/java/net/id/paradiselost/mixin/world/gen/structure/JigsawStructureMixin.java new file mode 100644 index 000000000..3109511d8 --- /dev/null +++ b/src/main/java/net/id/paradiselost/mixin/world/gen/structure/JigsawStructureMixin.java @@ -0,0 +1,38 @@ +package net.id.paradiselost.mixin.world.gen.structure; + +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.gen.HeightContext; +import net.minecraft.world.gen.heightprovider.HeightProvider; +import net.minecraft.world.gen.structure.JigsawStructure; +import net.minecraft.world.gen.structure.Structure; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Optional; + +@Mixin(JigsawStructure.class) +public class JigsawStructureMixin { + + @Shadow + @Final + private HeightProvider startHeight; + + @Inject( + method = "getStructurePosition", + at = @At("HEAD"), + cancellable = true + ) + public void getStructurePosition(Structure.Context context, CallbackInfoReturnable> cir) { + ChunkPos chunkPos = context.chunkPos(); + int i = this.startHeight.get(context.random(), new HeightContext(context.chunkGenerator(), context.world())); + if (i <= context.world().getBottomY()) { + cir.setReturnValue(Optional.empty()); + } + + } + +} diff --git a/src/main/java/net/id/paradiselost/tag/ParadiseLostStructureTags.java b/src/main/java/net/id/paradiselost/tag/ParadiseLostStructureTags.java index dc9663cf6..988f9e76a 100644 --- a/src/main/java/net/id/paradiselost/tag/ParadiseLostStructureTags.java +++ b/src/main/java/net/id/paradiselost/tag/ParadiseLostStructureTags.java @@ -10,6 +10,9 @@ public class ParadiseLostStructureTags { public static final TagKey AUREL_TOWER_HAS_STRUCTURE = register("has_structure/aurel_tower"); public static final TagKey WELL_HAS_STRUCTURE = register("has_structure/well"); + // dungeon + public static final TagKey VAULT_HAS_STRUCTURE = register("has_structure/vault"); + private static TagKey register(String id) { return TagKey.of(Registry.BIOME_KEY, ParadiseLost.locate(id)); } diff --git a/src/main/java/net/id/paradiselost/util/ParadiseLostDamageSources.java b/src/main/java/net/id/paradiselost/util/ParadiseLostDamageSources.java index 3b1ef1848..a8f441d8f 100644 --- a/src/main/java/net/id/paradiselost/util/ParadiseLostDamageSources.java +++ b/src/main/java/net/id/paradiselost/util/ParadiseLostDamageSources.java @@ -5,7 +5,6 @@ public class ParadiseLostDamageSources extends DamageSource { public static final DamageSource PARADISE_LOST_FALL = (new ParadiseLostDamageSources("paradise_lost_fall")).setBypassesArmor().setFromFalling(); - public static final DamageSource PARADISE_HARE_FALL = (new ParadiseLostDamageSources("corsican_hare_fall")).setBypassesArmor().setFromFalling(); public static final DamageSource NIGHTMARE = (new ParadiseLostDamageSources("paradise_lost_nightmare").setBypassesArmor().setUsesMagic().setScaledWithDifficulty()); diff --git a/src/main/java/net/id/paradiselost/util/ParadiseLostSoundEvents.java b/src/main/java/net/id/paradiselost/util/ParadiseLostSoundEvents.java index 83c9ee4c6..8a3cd7370 100644 --- a/src/main/java/net/id/paradiselost/util/ParadiseLostSoundEvents.java +++ b/src/main/java/net/id/paradiselost/util/ParadiseLostSoundEvents.java @@ -66,16 +66,12 @@ private ParadiseLostSoundEvents() { public static final SoundEvent ENTITY_MOA_EGG_HATCH = childEvent("entity.moa.egg_hatch", SoundEvents.ENTITY_TURTLE_EGG_HATCH); public static final SoundEvent ENTITY_MOA_STEP = childEvent("entity.moa.step", SoundEvents.ENTITY_PIG_STEP); - public static final SoundEvent ENTITY_PARADISE_HARE_SNIFF = childEvent("entity.corsican_hare.sniff", SoundEvents.ENTITY_FOX_SNIFF); - public static final SoundEvent ENTITY_PARADISE_HARE_JUMP = childEvent("entity.corsican_hare.jump", SoundEvents.ENTITY_RABBIT_JUMP); - public static final SoundEvent ENTITY_PARADISE_HARE_HURT = childEvent("entity.corsican_hare.hurt", SoundEvents.ENTITY_RABBIT_HURT); - public static final SoundEvent ENTITY_PARADISE_HARE_DEATH = childEvent("entity.corsican_hare.death", SoundEvents.ENTITY_RABBIT_DEATH); - public static final SoundEvent ENTITY_PARADISE_HARE_EAT = childEvent("entity.corsican_hare.eat", SoundEvents.ENTITY_LLAMA_EAT); - public static final SoundEvent ENTITY_NIGHTMARE_HURT = event("entity.nightmare.hurt"); public static final SoundEvent ENTITY_NIGHTMARE_DEATH = event("entity.nightmare.death"); public static final SoundEvent ENTITY_NIGHTMARE_AMBIENT = event("entity.nightmare.ambient"); + public static final SoundEvent ENTITY_ENVOY_DAMAGE = childEvent("entity.envoy.damage", SoundEvents.BLOCK_AMETHYST_BLOCK_BREAK); + public static final SoundEvent ITEM_ARMOR_EQUIP_OLVITE = childEvent("item.armor.equip.olvite", SoundEvents.ITEM_ARMOR_EQUIP_IRON); public static final SoundEvent ITEM_ARMOR_EQUIP_GLAZED_GOLD = childEvent("item.armor.equip.glazed_gold", SoundEvents.ITEM_ARMOR_EQUIP_GOLD); 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 d38045b63..9d60c8172 100644 --- a/src/main/java/net/id/paradiselost/world/dimension/ParadiseLostBiomes.java +++ b/src/main/java/net/id/paradiselost/world/dimension/ParadiseLostBiomes.java @@ -265,7 +265,6 @@ private static Biome createHighlandsPlains() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) @@ -312,7 +311,6 @@ private static Biome createHighlandsForest() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) @@ -357,7 +355,6 @@ private static Biome createTradewinds() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) @@ -407,7 +404,6 @@ private static Biome createHighlandsThicket() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) @@ -455,7 +451,6 @@ private static Biome createHighlandsGrandGlade() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) @@ -500,7 +495,6 @@ private static Biome createWisteriaWoods() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) @@ -551,9 +545,7 @@ private static Biome createAutumnalTundra() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 6, 1, 3) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), @@ -601,9 +593,7 @@ private static Biome createContinentalPlateau() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 6, 1, 3) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), @@ -660,9 +650,7 @@ private static Biome createHighlandsShield() { new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.ENVOY, 50, 1, 3) ), SpawnGroup.CREATURE, List.of( - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 12, 4, 4), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13), - new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.PARADISE_HARE, 6, 1, 3) + new SpawnSettings.SpawnEntry(ParadiseLostEntityTypes.MOA, 6, 5, 13) ) ) ), diff --git a/src/main/resources/assets/paradise_lost/lang/en_us.json b/src/main/resources/assets/paradise_lost/lang/en_us.json index e879f640c..080b1d8e3 100644 --- a/src/main/resources/assets/paradise_lost/lang/en_us.json +++ b/src/main/resources/assets/paradise_lost/lang/en_us.json @@ -244,7 +244,6 @@ "entity.paradise_lost.floating_block": "Floating Block", "entity.paradise_lost.hellenrose": "Hellenrose", "entity.paradise_lost.moa": "Moa", - "entity.paradise_lost.corsican_hare": "Corsican Hare", "entity.paradise_lost.rook": "Rook", "entity.paradise_lost.poison_dart": "Poison Dart", "entity.paradise_lost.poison_needle": "Poison Needle", @@ -339,7 +338,6 @@ "item.paradise_lost.hellenrose_spawn_egg": "Hellenrose Spawn Egg", "item.paradise_lost.envoy_spawn_egg": "Envoy Spawn Egg", - "item.paradise_lost.corsican_hare_spawn_egg": "Corsican Hare Spawn Egg", "item.paradise_lost.moa_spawn_egg": "Moa Spawn Egg", "item.paradise_lost.aurel_boat": "Aurel Boat", @@ -359,8 +357,6 @@ "death.attack.fall": "%1$s plummeted from the heavens", "death.attack.fall.player": "%1$s was thrown off the heavens above by %2$s", - "death.attack.corsican_hare_fall": "%1$s got dumped", - "death.attack.corsican_hare_fall.player": "%1$s got dumped whilst trying to escape %2$s", "death.attack.nightmare": "%1$s was consumed by shifting shadows", "death.attack.nightmare.player": "%1$s was fed to the shadows by %2$s", @@ -464,15 +460,11 @@ "subtitles.paradise_lost.entity.moa.egg_hatch": "Moa egg hatches", "subtitles.paradise_lost.entity.moa.step": "Moa walks", - "subtitles.paradise_lost.entity.corsican_hare.sniff": "Corsican Hare sniffs", - "subtitles.paradise_lost.entity.corsican_hare.jump": "Corsican Hare hops", - "subtitles.paradise_lost.entity.corsican_hare.hurt": "Corsican Hare hurts", - "subtitles.paradise_lost.entity.corsican_hare.death": "Corsican Hare dies", - "subtitles.paradise_lost.entity.corsican_hare.eat": "Corsican Hare eats", - "subtitles.paradise_lost.entity.nightmare.hurt": "Nightmare hurts", "subtitles.paradise_lost.entity.nightmare.ambient": "Magpie coos", "subtitles.paradise_lost.entity.nightmare.death": "Nightmare dissipates", + + "subtitles.paradise_lost.entity.envoy.damage": "Envoy Chimes", "subtitles.paradise_lost.item.armor.equip.olvite": "Olvite armor clanks", "subtitles.paradise_lost.item.armor.equip.glazed_gold": "Glazed Gold armor clinks", diff --git a/src/main/resources/assets/paradise_lost/models/item/corsican_hare_spawn_egg.json b/src/main/resources/assets/paradise_lost/models/item/corsican_hare_spawn_egg.json deleted file mode 100644 index cbd5c36b9..000000000 --- a/src/main/resources/assets/paradise_lost/models/item/corsican_hare_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "paradise_lost:item/template_spawn_egg" -} diff --git a/src/main/resources/assets/paradise_lost/textures/entity/corsican_hare.png b/src/main/resources/assets/paradise_lost/textures/entity/corsican_hare.png deleted file mode 100644 index 8a33934ceb8a1137e910ee767ecaa2a6d7b5893d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNN)P)tZ5-qPCY%G1@lz}3st=Gfid%hKlA;_lMi>fq<{&3%L7mX-!!NE%Ce0RR910d!JM zQvg8b*k%9#0LDo~K~#9!)sRsRgdhw=+ft|q>-~?r9Yi)Hg!sEJz?AZ0K%!j9NuiNq zhX!aPa&dBqMHGku)}a7gso14OyQg?Iq`oHoXGyq1~vsM5c|thy~jSa)lk$`=9; zh(p6mLjnWrV10CTXvHKfJ8L0?(cy_#f_dJz24tS7?|`7jm)XUpfYj4Wdq6<(spx?( Xhp!5sZHv+#}2XL1DuFK&H)J_BY}c)vDdpev6PUN z6C;o!COtc~vmN(z4?Q(&ZBE>gAO{YB1d2FtN8(Q4f;jUBa^V6O#2#t0)RF&a`^!30N{S!Y;S{)nj}fg19uLft|JPdxod^g0r)AV#M6;weqThQ1QId1>^=VMueXAC9)8K*w>qgQG;M$P&j**ce*R+S#>E4nW0P*= znK;%Pk*?}fz3&WiLY5ui z$Az>Qdp^`;4C|S&B9=LZ%H(tv_1H{Kr0<8#-~Wi-?A-m-`{?%DR~}w#L+hq-p|qwI zUap^hyx9EZ^SiGtUi3MXSjKny9BJ!13Pq#NBPR%M;EVU;m;zxiZVf(~S#FfB{4=C0N{F1x2_Xuzq}hI-%RrT>pV zd{kcTME9!w*Lyn^@r^y^$T1s~nDciU6>FECW-U?T0mfm%sS6`xDEFY*b*Xm!P9mv8 zt5;RfwB8)Xt7l^x=2=y|E|HNkgCnMXHY8y>C|yRfX-2l6RQKC|PxmMDthGw}G7I&}VhN}YP3|W` zSfHNNsV(VLLV#&T6CYNFQVSJU z*e@-_IoV=Bg~f1eWL!~w0`|U4a&hcKi-b*(mS22E9B?WQk9E#vLLm{B%`h8i=NDi? zT8=j8b910|pCk6zeRy=$ToAaS6XvF%(R>~*x#?z9Pmp-Onm+)mTks#?gZIn*1^@tv CsLH7T literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_1.nbt b/src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..fe7feb8232aa8e225e45e8b9e362c8aa630e5d05 GIT binary patch literal 3904 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 PW`~Tzd!KVoO`G;#0(bzn literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_2.nbt b/src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_2.nbt new file mode 100644 index 0000000000000000000000000000000000000000..2807d3735ff564a7f4eb499266f4115ef39e13ec GIT binary patch literal 3932 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 AHUIzs literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_3.nbt b/src/main/resources/data/paradise_lost/structures/vault/crossways/crossway_3.nbt new file mode 100644 index 0000000000000000000000000000000000000000..b18bb6ad1f9f105697cc008f1f9060db3a966c92 GIT binary patch literal 3819 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 jLjx%-2t|sh5KQ;{C!pUwSC!bxGNL8^Jx-|j{9Y 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 F{{hMxRM-Fj literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/enlightened_envoy.nbt b/src/main/resources/data/paradise_lost/structures/vault/enlightened_envoy.nbt new file mode 100644 index 0000000000000000000000000000000000000000..7c60277e3910133747c2d7cdabb12d9ed099b2ee GIT binary patch literal 935 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 F@n4_-F{=Oo literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_3.nbt b/src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_3.nbt new file mode 100644 index 0000000000000000000000000000000000000000..408b656c9ee937a48c515f41ded1efb780c1c644 GIT binary patch literal 3103 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_special.nbt b/src/main/resources/data/paradise_lost/structures/vault/lobbies/lobby_special.nbt new file mode 100644 index 0000000000000000000000000000000000000000..3229ae077dc695fa1ee672fad6693efea8fd3f0c GIT binary patch literal 3284 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_1.nbt b/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..abe70e1048efff8530e2389daecc5f391dfd8e72 GIT binary patch literal 3538 zcma)73pm^78ZWKxw3J#^!f9n)TT5FL5giQ)t4GZcR?}8hr0F74Eu~aT1zTN)R=a9N z3DS$WWHQUy+!Gzq6^+bw8j)ELmkK7AH5T^8&N{W8v;Cjn^LxJQ`@Qe?{=WAQ%ly}x z(PJ*YHg1$a(BuI&D`%?n*xM?H@S+0xlLuluK0hjTkXLrhY&~pZh^&qTm#j|hP?)5WFy7j zSJhKV#kehmBRXT>+OU(b#1r4-k>U!8M|4^hPDXM7tFgh%s82$5v-10$Y*@B`fg1sz z>C(9jXa8atGDjN9M5B%zXYjMWrV<8^wKr)&YXtOc&?qRG1mMxf^vlgN|}i5CJ!=L$nCY@Rs-yeuwQG zvD}b0OnOMZm^Y5%3CwWn4&9isJajEPcQPlL(&j>Q1JTRlUo)?0%eqzByVsXt*i(jz zi6UF}2CP?y>f-H^(G@P+k>N%ebT7|%UjtfNHb)NxY;_ev9PHfPQlqg>;iotWT6zCKclw|Yzaa?tS=-;!gH))kp_w!PxbSY=5}l=Sp*at589+jl6h?55+< zGH|K!q0ARYgX<{ph`F7N_SPQH-q>U8%6ihRDRfNi(qMUlfqa>2Pl=)2E5J@P=U z@C;*KJnkB;>;sPz9Y58QxhIuBWDb%|jtH6^2>cX6gsb{~>Fx2UhQ|?)T z&cs2rv7|2>T1{!GQS5B}0)`CNq|^I@M|ifrjK@8XN7t3JH_E{T8JVLqK4k35J@p{o z-Jo&t{eB=7%A!>&#lj75;xpv8{+K1+3oN<~oNrs>IeXB6ltg-HM%aK)ryG2^4iRF8 zh%$QvDCxzMF6$UFmQW&gw_e)O+GuL(%5AqqjF}-ypw-LoI41;8EC5=V+01)Uegxu% z2lx?+q05W1uy8PI{$Q5lJ)9~$DN>aJjXm^PBsmA#b{7NBKCOqRO8g~lsZR4L*w&|Xf#MjhO z32iRh`{%6$^Unh14R#$)DAu0VCt(&;ZAH2ig3ry%^2X#Q7q+`}l8U9a-RIk^Y%yH> zhc$(eETYcOD8+xdv@Tz!QUaS zm265FmsuvX2t?jMk?M51*XzAxl9K<~r}g>Zr5{Mv8vFx%Jm%(T9~H`=L)+fI|6c+f zElzF~xEqYZx?ZN^r-<;KH&RzodlDFN*AA~FthS3K7Aymv4VrNFEdd+ac4oJnDSZZ% z2=Bk8)pm>>YoMA68LfLAXh&IJh`j&I-8_T-GDVsf%CV;?whw)=yEZ92o?o|f5^c~) z{dq@dsZU$l{cLC(Wfe`BFAzSVUw#jmdWj|j2w($<_U~!=E(&!R1|Go3%M@vD;oL>G zaV{Xh$t9fxO3vdCCfE;ZnYXZkXr3?MOS=D0E_$0rgp)r9_w!dGxws;8P#&uZlkIch zrZ!R~`}v(@GzxXC?V;JqC1Mt=;hwX>~r% z-@S<^pm_p8IOc*|inR_cRdu~+!&7A^Kz>BE_vuurIo@Pc$rG6LLNsxXCQmrxGfyG; zm3vHuO3pq?W0-2XT|uvZDo-0`Hw$KjLfL7tO11N=sRi%3dg*sZr<+55k;jQ)hODRk zX(crc0TIF{z4^$Sarv?eg#h391B=Bylkr?lnj6-{34>;Y`NM2PUv-+&->=8Do;#iT zlYJ-msOyQCU{=~kU#T4+OALnrc2%&vdG$`dtfaq~25+q5Wj zbrI&tS^p20pmhuOOOww@b3P*o(rh zohal`ts8e+-e{#Lx>>M&iLTCm#8a?3OdW&wrBI!BB`6TB;lX&(8Fl0=MM!J<2vwNG zh=cHWT$QF$Xfzc*cqdairJz$Au?Y*X?rBc&%ms1nNl#&tW?XcTz2|?_CwG9SVTL+}0o|A;YkB~P(98`K&kQy&#AKGSEMG}1Jmvo|%HI_th)X%z9r!r98SsyR_R zC(&Irb70}oI~3-CPj>zI(@0g=56<_doe$}=>R{z5QRA`V*x>}CPciJ|FH(LYV;HfZ zsS{p%O;IN{ZNFD|)TrL?ajfk0(zH>11^L=+wbb(RrDI}?`4$PU9C14zIpHL$@_0UR z4cAIxQe_j;eUqXod%I*Z4<{Wt`D@qM^oBV;=D2BYVnmuUQM7o@gne-a!CTUa-fBV~ IPg%3(H|BixLjV8( literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_2.nbt b/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_armory_2.nbt new file mode 100644 index 0000000000000000000000000000000000000000..fc940de6779dba934b8ee96f97444a389c955aee GIT binary patch literal 3466 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_stable_1.nbt b/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_stable_1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..0d81fa4825bb6ce2b94945e647271e978e003795 GIT binary patch literal 3554 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_1.nbt b/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..be1823960773f8e03bdcb50fc06ae0be6c397875 GIT binary patch literal 3253 zcma)63sjRw7DfWWLLw?f15`O>SIV0pVlWus7^!vTRVY#_7#fOz2s8!=4++K|5(_BD zf*RED@Bt{0C`dJgR~Lyb?~*`D5NM5%5D_Q|!4LvFfx1Q7?e;(4`DXsPGvA#%cjlVs zY}8u$ma7?E2}3^_w^@@riY5|=Z<>1!%_U-9I^^8Uxp|D@8-2_@n!L30!$!$$&=>u#NrB4~#z#6WTV8A^+lY)jdl%wu6fV@Ng(HKhgF1=Z zL~9VJix6k6f!EHN1G%!l!1L2;oi+2961IO?b-t+|<9oga0?-*V}~WZ6~q@b?D;bFKoTHgkRI*K^F$0blcWb z+6(7XnSKxceX1+;dKNjr(omkSx3DE&4a5 zLa&5%20_PdAjGc;McD*_moYu8liP3=fl4=)u=VAkdTC4uMnEA;Jw3V(c*HO)d-D*F zSlNWwTOst=3j|^vg)M9e#Xl>wDBFw4Aw*>(%JWvxv-kd{w#UxFxx7Q(TPgyfbek6b z1`s`PJ#}WgsNwq>KM#QcGQK*ybTL0_32n^NSpdDS-0@b+w-@Zjw%yCulfE!Wx>BQ~ z+(oT9cuy7p{V3^p#IwoB67lX{qKSkJliN{uYjp+b?yue^wPRfVq*`d>O$!!6!hEyh6}ep zMmydg*1AQYF zRK>{FhRs+HH+v(;0faF9Nbe!otHxcxv*LJPlu<>#BR`~`RD$*@@qOSQWo^a_jV$ps zt_akX@+oX-7W#;?P`ZbLjw|sstEh$Zw_wwEgyHbftn^uzmQN@}F|1p$A+T3TiS{|A zjm&d(HdIBujp#)q2>aTIY?+1A_i8D%>@8du$t;{#CQ+vFb=gS(^gs>z?U z0OUdu)K{)A57YyW(O`yA1rI8Zfh2uPL4$=ptT7j=BB=gKn?Kc?HCD%#EHRjoP7hh% zY#%IlIjA}bKYqS6qt3VC(+J?@I|E=DFqy7Q8eg{eguSYCNqO)N0RIO_(yS-L!v9dG ztnOnLGWD#rwzo<6J*_}Jx@F754JXXPC8sPL+dUaJ{^k1oyO5+OkL%v&R>Pg*EfpFDo~rj`xe0(uVO__Kuc0tCs!3dm7U zTdv9u8)mPJhMgxIe+#8mzN-U*ECdNyLG#~o`RLHsV0Ni$$Lt#y>nai01Bjqky=m3S zI%W)OLeWH1bg5yp2;9u#y0SG2ungvPg_S0}#8DrOpZI!*C%rxWKfFDVfl9p;X+DiD z>KUm*2A#bNza{>5Rx3~kA&^=2%Eomus10Q<-aF~GhMkx7#@ivpF$#OOCDbdNX@Lyh zLa*G|xocdR^rOQUpGm<>4~3>VKrq1+@;y(Fpps&#u6i}=n4!yN;4lZ<-r!{xyRYav zAaFs&mc2wHNl32jNYAl-jMX9_3treKbFmDdDa3M_EEdLan-Gfy2sA00*<~<(llXyp zanZEaCAa8<)27)3)9g~`i<)BcUW^sB+qKU>*DcWDy&FEa^AKp;!{$zjNBe|U5aMMD zyS*heGF($rjX&)P3TN7Y4!u&pGpI4#0ev+Fl*X4KJ(u>u+g#yoy-Hu8D`V_=R|KR7 zsZ54t$x6{|-wJdA`I*rx;hp`^@ski@odGc}7=a2_O!&3i>&ihjnlJZ&z{aj5BC|W4AA*gqrzb|G}=Jpz&1-p@erNhN-$0C4;XhOd7?HY78dCNl>SKfH%41gYs^6^-l7We zRcqBHD)8~QC@r4x*79{~Yks*gR@|71(O^%LZ$P4cCuN}~b$sWE0z=zg5O=FSFe~qC z!`uAbt31J}8Xo>rVqpH4$p5MgvclRznjEk@`FYCGOIJT0}Kl*5X`c(~FlYzfQKk0yz5%1PKo=C7~ zMh6H7ef2O_-Sn=eaY}T^r{X1{mf%say-l-~0j-r)t|Q)YN7ef$^8yEosI8@(ee$@Y zJ2|Kf1&21pZyd=}Pa$)8exf}$>N#YRDHY{Bi-gf84RIC;oTsgFQ6&#~ak}0x;(FNV zRNnCC^S@&9(`ZYt$kJp~xw;Z3v>R>iCaX?lPU0B#Llfo2^Q4G*W|#D?+wfeVLgk37 zeDu@Y^nBp%s-~ixW4CX$$r7)R~6m~l>RZ4&;t(2d;4`B~N*yzCA)R8K5sUMR-( zH;(2Fj;rsqm^a(aoS;vsc+B+ub2Meb)WC=&-nC&Wk2BTPoqiM=RWLu`=D$Lybc7=^Cl)jWSi;Bfo7t<+*3Y z+ytdUH1m47Nj>+aaQ>+>Kxp{1Dizg?pMU+OwX%QwXWY{3`)&7kJh_HFcJnsJOO3G8|!Q`p=qf)#7MYQeCxc!@IOKy4? zhNj{s;ngaJjq=c+&8A#R%yP%XGQ=#K<^LPqLjTwQ?)7=S&(1mDbH3m6J?Hl|C4Hkd z_nU3Z^}B3#$oL%F=Fl~MW`_1MpC7;364|)9gudlOhK{Gss}M)`4tsyM((7UFnf-?E z=@v;cG!7+j;ko+gSUb>NXc4Bv8&s@%y(mCwi+D- zzNZ#{go5}n7Bc9<+e*Qtpj}9S?k*!wcrFmqWb9Md*Eo`Di2O=LV)MF6xmi<(DMV7G zBdqya!5T{j6AXl3RJv@=@4R;vW5XA?2YeT-J+r9^^MCYw>HbUH)dXuU9a$1&@QS}N zsO*4_BR!sQmT}zbuBsQV0uRb>%f3e*R2MzvII`ac`GW_=2wyPDonD6(Wl8%bwfky| zS2eXBh!JHYdqR;t_&XFkaC&<==v|!dSc2}Wmz(Kj+nVlUbc5sd#|l=LAUM;A`{qU! zBFl1-%O~Zzl;>?NH-TJw?#*EkTQ%sb$->SWPzi#JLwWn^M-HnAxtA%|o_mwK6_({m zkW!}$Xr>QY?1wZ^FI)}wkA?W9pz(p^>coanqe2Tw{_L+Tw}6^m;$q;oX;kn^d_$l= z#a!;&>gAj|nH4Q+iB`*w%geI5p?;KV2j*_G(l8ok4`EN?Gdk(tl*H-=^EQ{~Spow4 zZ-j0*9TUOu*cI=X%4ncQ7_wKz=ture_>IWsU{AUK5XRGkyPxYcYs!T{Y}zl<@=pEp z_oDBNhqrkbt_4eacY~yQRjh`FdVkFKv%f zF_BbE3^i1%2;EW#C8-5Pb9ZKcTg-tns&)&{(_ZfZ+)wmqG$AzSw4zBDKAlx+3)wG5 zDYd}>-B$s88)5)|l+KMu6C_~*U7Q{>*<;IU=Q;SM1BX^Pk3PuYYbE}q>gogN@u(Mgtzi_ zaA_L1#;6#ke`XW$!NC>b=V|hwR6`_}8SDq*?ZO+IdIl z3)ydftTj3Xp+T`MkAY0O?Pxs^3%r@%r(T5m)wOR0bM0>O?CkwZx3*y$DhI_4l{K4) z$8Ez#RTfek;_;uc%z$IN9^G)Wmhf~sdaK^NK5Q6@i&LGhcYTcx{85FbZA0M5{WYab z$1{*MXCQ2H=Dn;TXb`9)JS5(jvWGK0&7eez)C)miAipapE_Dv-F~*SxfqVEaH{UCg zYH9B;nbulgw6?^X?79Kj)1@Qi5{;5}G*r?zHRWnSBqz?JW8tbPi{%-Hev#DZIjItr zFzbc)21Tn4y8?580$q45%#YWk2RBZsv5+u}Ky4|8z=Xq_b4D#{T0q|Heq0XZ4b-Mb zRbM}bH2ACXe5waHCDCZ`oJvVy=V=1J48sXv{lbFOb9$~!L`Ok@j04pO?wq;w!-h)v zYQoYrDg!`Q?VJDlJ3mmm^8&gIzwUDxgClZ*9g>sG<||N)E`>c`iaIPHrAZ_-5Uyh5 zdrxw;O#{?crAo0U`QBb+=%odF$Xxs9!k!O)K7RDexuHY1REyf&%@!9pVtA%+_<6MQ zQ|SfqlQIpFZ&^9Oh06Hzn^lb#iakNfUf_hl*ihW#d|xo|YPD|3MyWVCSHoVL9HePf zVGBV;&?{aYilSg5BPQxtqEvkAaz*yaDMtbcZ><%i*%|s-F`YB0t+FeIq&k*CD&BgT zB1B{A(SP1qFC$?u5eOU=%%mYBtlbFwJ^rPbV}2Qa|%30fi{B@mX#8aM_m7C$lcQt@-Yi9uv3t5lv8h!h);Cu57BGSV9x1}hu zkCQhxXVyWlKHCMy2bq{@1xP*W0!{Wfat0tSX-F!t;H7HSXY@Gh3FW8s+X6w+uop`) zy7$gIZ~1xJA~jYm@Hqha!C&{0gx97r-)!fYWDXllb$a0pP1% z?XpeD8OIB+~>J6>C)2S+%}H&<1MKPorjY-_?;Herfo8(ni7sp6SF4LIgng25s< z=mFiuaO?oP!;n3Q4qSIG7irOcWiehL^x;|8fo&K!{ud^7fr-U%a*ty4>{)-2_7z^< zHELn1&c6sA?J1{XRsi-?L@JPi*n>9#i!A-47Q|CA#eD(hMlBhtH4ETPwA+#khg{v{ zQy-+g1`M>SPLNi-@f9x3Lwwe5%g}bfWGO;d0D*R0{(IOmHRHQ318MpS!;}S=_xTz< zg3djNkUK9A0!7zO#%mS=Hba9TU&vME3!X6rX`#5YKH1?(;FKBgfWH9dC-sTgvz_=} zbI9xqwiaj)XsO=Qx}_*@K1vZYfK&`G#UH>c=luX|z5w`=KCiu!ytV8Cd9mOf5y=>> z=$;ySeAs{#rg&hLjOI(aV{_mYy;Es@6ZLJQ-Gh9rKxXURUo~3MSl0Vf_#>z8J~|su zfYzXD-M5p>59NeahY4D<$Q2{uCy9y5gj&W77Qu1iU6e(j68Qrx=6a9W;}bJ&tZ)Nq znJia2iPn9Z*U6V0m>s!X z+2L)~tS3q!z-k48n&9N;vIqjhILRUL$v{48s=C_rpqKOp4Tq8aTp+mLcQ)-p>CRH- zJ5ggb_QMTj8|rfY32DD6e?U~_IwNj#x3a_UP|A=V9zINYoIpFm#LFf*=asC$6_m!4 zJp82t^|OQuwHaondGYsURZ}K&?ehQaM40jZGnS4V=beOcMn#IZM_7Z(sV*!X*Q-r0 zkQdZ;U7FRhlIA;Ivn0X#HNzuD6gR~6Y?Lb*Rwf$}OUG?TcSwV~C#B7%mwn^;sOlqc z({a-YZnp{S(Bi?t`#KZihO-}sEaY@)$79oINfLjRug&nc8D!bG#*QlVxC~F=kEHoI zb*6YJT19~zRt`22M<0DGG|dmNelwI<0u}DI?H(D3ITJjXcHyb=W8Ww@{drD~qQB4f z_D3xB&54LwAKvhXXHMq|v_5XNrYc&cQs`4*E=y6Kok$N@nfxC65D$CLd$y;n>Uc$3 z6k|P$DY+bqq;OAjHocdpY_n-+vE=pKC%0 zX)bb3Dy!lTMDbBYwWhCIljY+mxx%}rHCa(F%X51mn{9q)`+DTS-nB|;e~<0!=c0i# ziLaxIjJxX(;G8=_)=^JC^dsFL-)j9h7UfScZ_&>As5m}*%cRD1SUD@}A&hqAPb&N> zHf(4q6zI32OQfyRV^nWO18hcw#aCyK)w4%L|CqjDrmXBHt`_E)PwuzS7S49ZY^V=o gS&+;LsI(~o|Kq=U_KkB*Nwdo)u%=$&L^ZYl0y85fhyVZp literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_3.nbt b/src/main/resources/data/paradise_lost/structures/vault/storage_rooms/storage_valuable_3.nbt new file mode 100644 index 0000000000000000000000000000000000000000..10354ba6042303de1bb635f97d4945b4ea89cfdb GIT binary patch literal 4118 zcmah~3pmtS8`p)@&ZJ#m&B&symX^v4h9#G6XH(m{q{xaHgHZB~tqhH8vovarT5E;e zR>B~LG=womtfWCTh3m9EoHcq{Kuiy)bRjh#u{&sdJ2)+9oITQ0A@%QWHJ@T7 zAq*CxlEh@Zl>EkASxWwL_LqmgvxY7ACX1g_MiP#TC;qph#rU;*sGf`S@}o*MN(K99#c4`rD0D>-omP(9RO`XA8^avGi-Qw?!Gd-ABI;Nf+R3dZg zN(*=zAlR&wr+M{uZ~iVsf0lsh11Buyy5S#w6tYPj_UWk*%sye<(6D-ol8>*AriVx3)@{)G|3{(t)svCm z{Uei*iMf zm03PYy$_|1l3m@0blZL+mGeU(=akl`be{Ml?oyB9@kEs|9Rr${9!+aEvISWZo@%*| zyOcQiF?B&*m30&Dp-^Js822$1ccj>jd+P%T9rxs@1xbXB1M-P=98@TPmqI9~$V?vA zeTFlypoyXx8=zt-ZZZV2G@O#8f*igvf@2dumo(-k<`X(x_Xio379-Rb%me$sB?Jk^AqVMCxR!}u!a^kpP!o0Y?g zS1VFs$ID<}dK^-?pK79yRYUoh*|+aOGS!JJBe0(UI|)OIrsBi|eh{5Cb$BHIoD#NQ z9vS~xZ5qM@v?P~}DEXK=L`M0D;5QHidpuZ`BM{2i)LhUor=A({r{ScH*whaVq5oKt zXA&HuXWlhoI zpCVciJ9EXd?ZBF`wPu6~7jDn2w_h`@XzxM?*$8ZlN<3&-F*O&n4M;qO*3Y{D+;zK_ zN=T!{0IVPb{wxvb%(0xw8!XMlXF(BLDrME}p<=ugIq!liw$_1A4xM(sHA)omWcfSKty!NT<3InEO0d6sYWI(JPG4VCv|JGy zK|%o}Bx5fsQX$+7eg_h>C)$CrRDNu1ljYE^EG1;NEf_qoWDA0QDRj_j2_2X)9S7JA zxs;Xs?Z{SRo2U>5abXTgO$ZN#%$b(qarIfgqCN)2rr4F+%wfnhwte9&m;oJ3nrsKi z3pj)P6`lb>l-v9n#1mdO2L%sISFrT7$m%Cn8KJagU%;nxAEn=mTD6cs7M-?GE*4pC z7hdjw@gUF|!=Tat^&0v_jzOK-?^ak80FZ#9OyqzG|0w;nmilNY4OoLTfVC1be(_iE z9?YLqCyV4i#A9v`ZeKVBZXd#e@@2b8UsYGnNE9>m&Mz-D>cY-HSPIR=8s~-Ej`9E< zQ9j%_3i=LOTSFq=s^(#DZV#%&_z*-09q==g@ft)HbrKu?RjuxAl#qE8;zTJPWWMU@ zX0WLBQUr({3RXiKguiNuGPs~%>e0Nt=*)ooDm5Np;PAO~gp zM|Iiv@v2azED&ecumMtAggR>-MJvLLqie`nb0;f2dX>1fG#QRU1Yw>*%&iT9rFCaj zeTC=0u3D7pT=R;w>trm4$$Nli0N+Rtd&zjUYYj5=yX zt83f+kh^R4VTe60L+xdw@ONV$T zMzdqE+S%iUS-*!wi8+YE2v0#9(aL*hdTcv6%r;`Onp~bzrmCjIir7M8HVX|~dQ!H( zR+_0#cA2;xQXZblUkDOWW7Arl`qiB$8~pHE2@b^#jSG!UL(!C@;uyM3%ZQqpg?3)m zlI!G=i6v=;T&>6Qls;|oR{pC8MDw1dQ%~a_U#QT@uln8_?{6G^{F^6k zU98K9;TVc{Zt~ruak?(OMY+vgyxu@h2iH(Uig)mv3X>KezZqdGx0`3+?AsEU)^2pe zP(R1!R<}-#a!Ib{RD76o0b`hR>iJQM4R7H5)rk|+ zMaI^+xjLtmfJ^Oog!6{u@5gY#y&DtSn?}g*#`lJm^89j+JEwbQj`XE?N=2n3sWaV9 zJT;3_FW)SS=Z%BOah|-8$WV`|_wL)v_ZH$iRi8Risc$yB=;jIQKY!9HHbxdk*K*A8~#CMJZ!_3pIIUD?%*!fe&(z;Orha(~myGmM*Za{mEK CSNT@} literal 0 HcmV?d00001 diff --git a/src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/orange_ruin.json b/src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/vault.json similarity index 87% rename from src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/orange_ruin.json rename to src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/vault.json index eaaf3d46a..ff11399f3 100644 --- a/src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/orange_ruin.json +++ b/src/main/resources/data/paradise_lost/tags/worldgen/biome/has_structure/vault.json @@ -4,6 +4,7 @@ "paradise_lost:highlands", "paradise_lost:highlands_forest", "paradise_lost:highlands_thicket", + "paradise_lost:highlands_grand_glade", "paradise_lost:wisteria_woods", "paradise_lost:autumnal_tundra", "paradise_lost:continental_plateau", diff --git a/src/main/resources/data/paradise_lost/worldgen/structure/vault.json b/src/main/resources/data/paradise_lost/worldgen/structure/vault.json new file mode 100644 index 000000000..49e9e2ad8 --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/structure/vault.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:jigsaw", + "biomes": "#paradise_lost:has_structure/vault", + "step": "underground_structures", + "spawn_overrides": {}, + "terrain_adaptation": "bury", + "start_pool": "paradise_lost:vault/lobbies", + "size": 7, + "start_height": { + "absolute": -25 + }, + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "max_distance_from_center": 116, + "use_expansion_hack": false +} \ No newline at end of file diff --git a/src/main/resources/data/paradise_lost/worldgen/structure_set/vault.json b/src/main/resources/data/paradise_lost/worldgen/structure_set/vault.json new file mode 100644 index 000000000..b9bb2f1f7 --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/structure_set/vault.json @@ -0,0 +1,14 @@ +{ + "structures": [ + { + "structure": "paradise_lost:vault", + "weight": 1 + } + ], + "placement": { + "salt": 60000, + "spacing": 40, + "separation": 25, + "type": "minecraft:random_spread" + } +} diff --git a/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/armored_envoy.json b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/armored_envoy.json new file mode 100644 index 000000000..ddd7e7140 --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/armored_envoy.json @@ -0,0 +1,15 @@ +{ + "name": "paradise_lost:vault/lobbies", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/armored_envoy", + "projection": "rigid", + "processors": "minecraft:empty" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/crossways.json b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/crossways.json new file mode 100644 index 000000000..22b0fa2ff --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/crossways.json @@ -0,0 +1,33 @@ +{ + "name": "paradise_lost:vault/lobbies", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/crossways/crossway_1", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/crossways/crossway_2", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/crossways/crossway_3", + "projection": "rigid", + "processors": "minecraft:empty" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/enlightened_envoy.json b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/enlightened_envoy.json new file mode 100644 index 000000000..94e528b0d --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/enlightened_envoy.json @@ -0,0 +1,15 @@ +{ + "name": "paradise_lost:vault/lobbies", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/enlightened_envoy", + "projection": "rigid", + "processors": "minecraft:empty" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/lobbies.json b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/lobbies.json new file mode 100644 index 000000000..b056dad53 --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/lobbies.json @@ -0,0 +1,42 @@ +{ + "name": "paradise_lost:vault/lobbies", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 4, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/lobbies/lobby_1", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 4, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/lobbies/lobby_2", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 4, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/lobbies/lobby_3", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/lobbies/lobby_special", + "projection": "rigid", + "processors": "minecraft:empty" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/storage_rooms.json b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/storage_rooms.json new file mode 100644 index 000000000..bdd11dc6e --- /dev/null +++ b/src/main/resources/data/paradise_lost/worldgen/template_pool/vault/storage_rooms.json @@ -0,0 +1,87 @@ +{ + "name": "paradise_lost:vault/lobbies", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_armory_1", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_armory_2", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_armory_3", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_stable_1", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_stable_2", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_stable_3", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_valuable_1", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_valuable_2", + "projection": "rigid", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "location": "paradise_lost:vault/storage_rooms/storage_valuable_3", + "projection": "rigid", + "processors": "minecraft:empty" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/paradise_lost.mixins.json b/src/main/resources/paradise_lost.mixins.json index 6baabdab8..bb870cb5c 100644 --- a/src/main/resources/paradise_lost.mixins.json +++ b/src/main/resources/paradise_lost.mixins.json @@ -34,6 +34,7 @@ "server.PlayerManagerMixin", "server.ServerPlayerEntityMixin", "server.ServerPlayNetworkHandlerMixin", + "world.gen.structure.JigsawStructureMixin", "world.ExplosionMixin", "util.DefaultedRegistryMixin", "util.NbtCompoundAccessor",