From 45ba5a6d5532fe0da4d35955af800283acdd2b13 Mon Sep 17 00:00:00 2001 From: GearShocky Date: Sun, 9 Mar 2025 19:55:42 +0500 Subject: [PATCH] cleaner drone wip --- .../datagen/advancements/AdvancementData.kt | 5 +- .../mc/otm/datagen/advancements/Helpers.kt | 5 +- .../mc/otm/datagen/lang/English.kt | 2 +- .../mc/otm/datagen/lang/Russian.kt | 2 +- .../client/animation/CleanerAnimation.java | 19 +++++ .../otm/client/model/entity/CleanerModel.java | 76 ++++++++++++++++++ .../otm/client/model/entity/LoaderModel.java | 2 +- .../client/render/entity/CleanerRenderer.kt | 18 +++++ .../ru/dbotthepony/mc/otm/entity/Cleaner.kt | 56 +++++++++++++ .../mc/otm/item/weapon/FallingSunItem.kt | 3 +- .../ru/dbotthepony/mc/otm/registry/MNames.kt | 1 + .../mc/otm/registry/game/MEntityTypes.kt | 15 ++++ .../textures/entity/cleaner.png | Bin 0 -> 713 bytes .../structure/laboratory/reward/reward.nbt | Bin 553 -> 549 bytes .../laboratory/reward/reward_ominous_wall.nbt | Bin 932 -> 907 bytes .../laboratory/reward/reward_wall.nbt | Bin 652 -> 625 bytes .../worldgen/structure/laboratory.json | 24 +++--- 17 files changed, 206 insertions(+), 22 deletions(-) create mode 100644 src/main/java/ru/dbotthepony/mc/otm/client/animation/CleanerAnimation.java create mode 100644 src/main/java/ru/dbotthepony/mc/otm/client/model/entity/CleanerModel.java create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/CleanerRenderer.kt create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/entity/Cleaner.kt create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/entity/cleaner.png diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AdvancementData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AdvancementData.kt index e25459b5a..e4e0b0024 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AdvancementData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/AdvancementData.kt @@ -4,15 +4,18 @@ import net.minecraft.advancements.AdvancementHolder import net.minecraft.advancements.AdvancementRewards import net.minecraft.advancements.AdvancementRequirements.Strategy import net.minecraft.advancements.AdvancementType -import net.minecraft.advancements.critereon.InventoryChangeTrigger +import net.minecraft.advancements.Criterion +import net.minecraft.advancements.critereon.* import net.minecraft.world.item.DyeColor import net.minecraft.world.item.ItemStack +import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.modLocation import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MRegistry +import ru.dbotthepony.mc.otm.registry.game.MEntityTypes import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger import java.util.function.Consumer diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/Helpers.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/Helpers.kt index d68c23aae..aa9956a80 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/Helpers.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/advancements/Helpers.kt @@ -6,10 +6,7 @@ import net.minecraft.advancements.AdvancementRewards import net.minecraft.advancements.AdvancementType import net.minecraft.advancements.Criterion import net.minecraft.advancements.DisplayInfo -import net.minecraft.advancements.critereon.ContextAwarePredicate -import net.minecraft.advancements.critereon.EntityPredicate -import net.minecraft.advancements.critereon.InventoryChangeTrigger -import net.minecraft.advancements.critereon.ItemPredicate +import net.minecraft.advancements.critereon.* import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceKey diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 0c9af9f67..447315e46 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -874,7 +874,7 @@ private fun items(provider: MatteryLanguageProvider) { add(MItems.FALLING_SUN, "desc2", "Deals extra damage to androids when empowered") add(MItems.FALLING_SUN, "desc3", "Always strikes surrounding enemies with full damage if empowered") add(MItems.FALLING_SUN, "desc4", "Does not benefit from Sweeping Edge enchantment") - add(MItems.FALLING_SUN, "desc5", "§oHas my judgement come so soon?") + add(MItems.FALLING_SUN, "desc5", "Has my judgement come so soon?") add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive") add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 1dc5fa71f..2b75e8a87 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -867,7 +867,7 @@ private fun items(provider: MatteryLanguageProvider) { add(MItems.FALLING_SUN, "desc2", "Наносит дополнительный урон андроидам если имеет заряд") add(MItems.FALLING_SUN, "desc3", "Всегда наносит полный урон по площади если имеет заряд") add(MItems.FALLING_SUN, "desc4", "Зачарование 'Разящий клинок' не имеет никакого эффекта на данном оружии") - add(MItems.FALLING_SUN, "desc5", "§oМой судный день пришел так скоро?") + add(MItems.FALLING_SUN, "desc5", "Мой судный день пришел так скоро?") add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive") add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive") diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/animation/CleanerAnimation.java b/src/main/java/ru/dbotthepony/mc/otm/client/animation/CleanerAnimation.java new file mode 100644 index 000000000..c91e061d5 --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/client/animation/CleanerAnimation.java @@ -0,0 +1,19 @@ +package ru.dbotthepony.mc.otm.client.animation; + +import net.minecraft.client.animation.AnimationChannel; +import net.minecraft.client.animation.AnimationDefinition; +import net.minecraft.client.animation.Keyframe; +import net.minecraft.client.animation.KeyframeAnimations; + +public class CleanerAnimation { + public static final AnimationDefinition MOVE = AnimationDefinition.Builder.withLength(0.48F).looping() + .addAnimation("brushR", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.48F, KeyframeAnimations.degreeVec(0.0F, -360.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .addAnimation("brushL", new AnimationChannel(AnimationChannel.Targets.ROTATION, + new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.LINEAR), + new Keyframe(0.48F, KeyframeAnimations.degreeVec(0.0F, 360.0F, 0.0F), AnimationChannel.Interpolations.LINEAR) + )) + .build(); +} diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/CleanerModel.java b/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/CleanerModel.java new file mode 100644 index 000000000..97092881e --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/CleanerModel.java @@ -0,0 +1,76 @@ +package ru.dbotthepony.mc.otm.client.model.entity; + +import net.minecraft.client.model.HierarchicalModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import org.jetbrains.annotations.NotNull; +import ru.dbotthepony.mc.otm.client.animation.BreadMonsterAnimation; +import ru.dbotthepony.mc.otm.client.animation.CleanerAnimation; +import ru.dbotthepony.mc.otm.entity.Cleaner; +import ru.dbotthepony.mc.otm.registry.MNames; + +import static ru.dbotthepony.mc.otm.OverdriveThatMatters.loc; + +public class CleanerModel { + public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(loc(MNames.CLEANER), "main"); + + private static HierarchicalModel model; + private static LayerDefinition def; + + public static HierarchicalModel getModel() { + if (def == null) { + def = createBodyLayer(); + } + + if (model == null) { + return model = new CleanerHierarchicalModel<>(def.bakeRoot()); + } + + return model; + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); + + PartDefinition root = partdefinition.addOrReplaceChild("root", CubeListBuilder.create().texOffs(0, 0).addBox(-7.0F, -3.3F, -7.0F, 14.0F, 3.0F, 14.0F, new CubeDeformation(0.0F)) + .texOffs(0, 17).addBox(-3.0F, -3.8F, 0.0F, 6.0F, 1.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 7).addBox(-6.0F, -1.0F, 3.0F, 1.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(0, 7).addBox(5.0F, -1.0F, 3.0F, 1.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition brushR = root.addOrReplaceChild("brushR", CubeListBuilder.create(), PartPose.offset(-4.5F, -0.1F, -4.5F)); + + PartDefinition brushr_r1 = brushR.addOrReplaceChild("brushr_r1", CubeListBuilder.create().texOffs(7, 0).addBox(10.5F, -1.0F, -3.5F, -7.0F, 0.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(7.0F, -1.1F, 0.0F, 0.0F, 0.0F, -3.1416F)); + + PartDefinition brushL = root.addOrReplaceChild("brushL", CubeListBuilder.create().texOffs(-7, 0).addBox(-3.5F, -0.1F, -3.5F, 7.0F, 0.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offset(4.5F, -0.1F, -4.5F)); + + model = null; + return def = LayerDefinition.create(meshdefinition, 64, 32); + } + + private static class CleanerHierarchicalModel extends HierarchicalModel { + private final ModelPart root; + public CleanerHierarchicalModel(ModelPart root) { + this.root = root.getChild("root"); + } + + @Override + public void setupAnim(@NotNull T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + this.root().getAllParts().forEach(ModelPart::resetPose); + + this.animate(entity.getIdleState(), CleanerAnimation.MOVE, ageInTicks, 1.0F); + } + + @Override + public @NotNull ModelPart root() { + return this.root; + } + } + + public static void register(EntityRenderersEvent.RegisterLayerDefinitions event) { + event.registerLayerDefinition(LAYER_LOCATION, CleanerModel::createBodyLayer); + } +} diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/LoaderModel.java b/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/LoaderModel.java index 03d63a3e6..cd7605133 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/LoaderModel.java +++ b/src/main/java/ru/dbotthepony/mc/otm/client/model/entity/LoaderModel.java @@ -21,7 +21,7 @@ public class LoaderModel { public static HierarchicalModel getModel() { if (def == null) { - def = createBodyLayer(); // Ensure def is created before using it + def = createBodyLayer(); } if (model == null) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/CleanerRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/CleanerRenderer.kt new file mode 100644 index 000000000..d96febf28 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/entity/CleanerRenderer.kt @@ -0,0 +1,18 @@ +package ru.dbotthepony.mc.otm.client.render.entity + +import net.minecraft.client.model.HierarchicalModel +import net.minecraft.client.renderer.entity.EntityRendererProvider +import net.minecraft.client.renderer.entity.MobRenderer +import net.minecraft.resources.ResourceLocation +import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc +import ru.dbotthepony.mc.otm.client.model.entity.CleanerModel +import ru.dbotthepony.mc.otm.entity.Cleaner + +class CleanerRenderer(context: EntityRendererProvider.Context) + : MobRenderer>(context, CleanerModel.getModel(), 0.5f) { + override fun getTextureLocation(entity: Cleaner): ResourceLocation = TEXTURE_LOCATION + + companion object { + private val TEXTURE_LOCATION = loc("textures/entity/cleaner.png") + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Cleaner.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Cleaner.kt new file mode 100644 index 000000000..73f0e1b69 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/entity/Cleaner.kt @@ -0,0 +1,56 @@ +package ru.dbotthepony.mc.otm.entity + +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.AnimationState +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.entity.ai.attributes.AttributeSupplier +import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation +import net.minecraft.world.entity.ai.navigation.PathNavigation +import net.minecraft.world.entity.monster.Monster +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.Level + +class Cleaner(type: EntityType, level: Level) : Monster(type, level) { + val idleState = AnimationState() + init { + idleState.start(tickCount) + } + + override fun registerGoals() { + goalSelector.addGoal(7, WaterAvoidingRandomStrollGoal(this, 0.8)) + } + + override fun createNavigation(level: Level): PathNavigation = GroundPathNavigation(this, level) + + override fun isPushable(): Boolean { + return false + } + + override fun getControllingPassenger(): LivingEntity? { + return null + } + + override fun isMultipartEntity(): Boolean { + return false + } + + override fun mobInteract(player: Player, hand: InteractionHand): InteractionResult { + if (!this.level().isClientSide) { + player.startRiding(this) + return InteractionResult.SUCCESS + } + return InteractionResult.CONSUME + } + + companion object { + fun createAttributes() : AttributeSupplier.Builder { + return createMonsterAttributes() + .add(Attributes.MAX_HEALTH, 4.0) + .add(Attributes.MOVEMENT_SPEED, 0.2) + } + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/weapon/FallingSunItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/weapon/FallingSunItem.kt index 3db52961a..dc790c149 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/weapon/FallingSunItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/weapon/FallingSunItem.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.item.weapon +import net.minecraft.ChatFormatting import net.minecraft.core.BlockPos import net.minecraft.core.component.DataComponents import net.minecraft.tags.BlockTags @@ -130,7 +131,7 @@ class FallingSunItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.EPIC)) addSimpleDescription("2") addSimpleDescription("3") addSimpleDescription("4") - addSimpleDescription("5") + addSimpleDescription("5",ChatFormatting.ITALIC) } override fun mineBlock( diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt index 9ce6e5de6..ccec07410 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt @@ -334,6 +334,7 @@ object MNames { const val RIDEABLE_DUMMY = "rideable_dummy" const val BREAD_MONSTER = "bread_monster" const val LOADER = "loader" + const val CLEANER = "cleaner" const val ANDROID_MELEE = "android_melee" const val ANDROID_RANGED = "android_ranged" diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt index c2ae4a178..886909307 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MEntityTypes.kt @@ -15,6 +15,7 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent import ru.dbotthepony.mc.otm.client.render.entity.BreadMonsterRenderer import ru.dbotthepony.mc.otm.client.render.entity.LoaderRenderer +import ru.dbotthepony.mc.otm.client.render.entity.CleanerRenderer import ru.dbotthepony.mc.otm.client.render.entity.PlasmaProjectileRenderer import ru.dbotthepony.mc.otm.client.render.entity.RogueAndroidRenderer import ru.dbotthepony.mc.otm.entity.* @@ -49,6 +50,15 @@ object MEntityTypes { .build(MNames.BREAD_MONSTER) } + val CLEANER: EntityType by registry.register(MNames.CLEANER) { + EntityType.Builder.of(::Cleaner, MobCategory.AMBIENT) + .sized(0.9f, 0.225f) + .eyeHeight(0.1875f) + .passengerAttachments(0.225f) + .clientTrackingRange(8) + .build(MNames.CLEANER) + } + val LOADER: EntityType by registry.register(MNames.LOADER) { EntityType.Builder.of(::Loader, MobCategory.MONSTER) .sized(1.2f, 2.5f) @@ -77,7 +87,10 @@ object MEntityTypes { private fun registerAttributes(event: EntityAttributeCreationEvent) { event.put(BREAD_MONSTER, BreadMonster.createAttributes().build()) event.put(LOADER, Loader.createAttributes().build()) + event.put(ANDROID_MELEE, AndroidMelee.createAttributes().build()) + + event.put(CLEANER, Cleaner.createAttributes().build()) } @Suppress("unchecked_cast") @@ -93,6 +106,8 @@ object MEntityTypes { EntityRenderers.register(BREAD_MONSTER, ::BreadMonsterRenderer) EntityRenderers.register(LOADER, ::LoaderRenderer) + EntityRenderers.register(CLEANER, ::CleanerRenderer) + EntityRenderers.register(ANDROID_MELEE) { context -> RogueAndroidRenderer(context, ANDROID_MELEE, "melee",context.modelManager) } diff --git a/src/main/resources/assets/overdrive_that_matters/textures/entity/cleaner.png b/src/main/resources/assets/overdrive_that_matters/textures/entity/cleaner.png new file mode 100644 index 0000000000000000000000000000000000000000..ca2614444022c5b1f9edf67f2199d4937cb6cc52 GIT binary patch literal 713 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`jRSl_TuVwyw6(Qk^Q+P;Ti32#8x#~|V`Br9v~u%Vv0}x|n>TZt`Y&I; z{QC9l|3CngU|_H{Owa~Wf+azI!5~3oz@WNzW)e`6v%n*=n1O-sFbFdq&tH)O6qG1& zjVKAuPb(=;EJ|evNX*PD(erZ+Q83jr)HC|MhZ*GJZK)BSX`Y^13>-iXD}xjxD+42t zkOkFcXkY-6eR=hp#i?64RY2QhJY5_^ zJiOmdzCEp3fyY&_Yq8R_|Nn1Us=F-QwzO~G*;ntH7n)Q*4f6F`<}H2AGCTi36pND` zlov42~Xm zR%tyEM}fvmc?X|MykVK8Yr=BZs_}BuCU>rqLZu0eoVt$jZ48aY#s^FcUGle`Kgh+@ z$-vK5Wc_33T8teU&_E_lS>q^cMAsnuU!IPb&y<6pS>nc{?c zKerWJ`jb+zveV(v9j4hD;XRd)=C;hz7kzWHtL|X1vlVlg+4;)HKW8sq(;CbrRSOLDg3D)MIbG^;+$@=c=b(M;`Jm~|TbUtqM0Fw^zlMe8c-qk7~^K;2z{1&Vi$T>KNb4NLhJk|u?!H{NroHlS;gg;v%`1_m_}mdH479R!PgzY zw2dCEUmB*^))WoO>B-sqycotBTc<=%s$bb<0r@*^jTNd@uMDm4N|Sxnmvfb{)zK+b z2@4m380ogt+okRsC*!bgjP+U|)cLz2pKjCyyRcm9-Hph% z9+8?vholQwouJn-`yirm(!^nxF35dgS?MxQ#UIjjTmKvs5!!e#sNt)y)F8lk$E5vJQwvCvgaf9ZDqYB!xFc!}^I&NKVG5(WSOoZSsA literal 553 zcmV+^0@nQ>iwFP!00000|BX~lkJ>;CbrN7hP_-33_1Ifa?X}u-&sC*Ly^c(9V0I@n zk;j1Oudl;5EJ2ABMPZ)bd$u1b0LCzg_8(;caJ6VH6ZPRNTWP7nr02lRn@{?r7ceBzLsBc+v+vX^+0rJ6c^lkNSe6rwdHl zfk}E`(g&EN2PW;|C+*=Uy{lC~=4X<_@HJR3kaKVjXO40hc&rJ&hBfh=?V5}%QA~{@ z#POvflogXHgZETQU@d4uaPVAP{eiKP7pfcC<}j(OM`!k$AI`^UIfH5Au%ucOZW^|M zt!($bP9r%bw!vQ=L?6&^xPkHcpF^n~?oDz*xzp{%0@;BNVD^#mq8CJe6P4-ov&Q-!z zN2gFFEL;d;q}@(um%6*asNHS9Gi{LP(0X4Y(|qUs-k`lq0Xu!;wR8omlk4FU{z rTq>~J_961Q#$SWHJ~wh33th$Jr*7x3cGFsd=Lr7+RG?aN5(WSOHcbn@ diff --git a/src/main/resources/data/overdrive_that_matters/structure/laboratory/reward/reward_ominous_wall.nbt b/src/main/resources/data/overdrive_that_matters/structure/laboratory/reward/reward_ominous_wall.nbt index 67aa402f135a68293ac124b0386920aa6c54843f..f5e82a57a37078248f7c203eff677f6247790743 100644 GIT binary patch literal 907 zcmV;619bc!iwFS!r_5&n|D~6~kJC65#$RK%lSzR=XfNzayV~2{0Koxq;lg>fr@dNk z`jQ%)II^9A&R@?<+q4;zG)9b6P1Ah-z4t!9yt)~{EpVqEkO4sVTAp6)7E-Le@(SI8 zu1UArXp?_&8C`t51=bkXFY5mm43^GIk8oTurbz~xMW9*qqJbuv&k! z^3s;*v6WtOczF{#IFz8;knm{Xx zU#K#J^b78V@>o&4+_ZJKba7nu$7PkFx2AQ%TSb=95&~!17%zOcbMR`STH04*B~`h9 z)gulGKv&96THGE=3C~9TGd%3kJJQ@VQX`SOqwVtyvj41U&~`^(Y6baCIaoYUX8hl4 zZFJoB4a!R7wBKmYD}KKeyhUuB?%ds2MTcn!qOHHuJ*!Pw;ue;L)DF*>`F;y&r`*3q zBD&ls5c{7&^wKvIQrc}VYt>fb@QXrdRqnhft=xyvnN~iu;r#^FqN)pHbJ}~_f9Fk& zLd&WVs-^{={0!i$Lgv)ou&j;syEFf<%WidjRBHJ^|0sl&x$)Fgz3|VAFyE=}c_vv~ z6cbzfgOl-%G~XmAtGKr>*(;rYvKfB)a|@)=c33pLRs`18aVPo}bDCtLS$Ue(Aev~BfMyzt1T?o|B@vt? zf-}~3BWDs3i$uht5kAuh4)h*PIW(YI+Ap884rr1anq)?^nek^S7Kw;OBWkBJoH-AZ z2oIA84}Hzuj6c36ovD3^LnCsg5jn$<`$Fv`qIRD%*FQdIu77-v-#pVGc$<2 z&<5idvdkd;Bu-2^QDMAXw{^F4by@Y@b(O}Cy0y$1iI(9K1ZPTX$6U8_@Fq|#?yEK& zt316K5a$G-E9J2|6U<+BNYrzz+8YXL8;LuMGzA1Q)cL=O&ZQOC>|8U){ zt`$qgAMp={Fg(}J@lp8wRhS=THxf|R7DZrdpE()dNXt#qTSc8|@$+5I>x07Ib*r~y zw6C9*by190UtX_r`F{fbz7Q~mOx>vwK%8zy*sqJNgm=~cMknoXN~4*)8`_YbcN}Nr z$bUAp{q=YKs2VDM+C0cVkFfsXlH!8~9}f>#fBj*L<7oFDhul9{M3)iVTlg0|Hjq86 G4*&ogHo&$3 diff --git a/src/main/resources/data/overdrive_that_matters/structure/laboratory/reward/reward_wall.nbt b/src/main/resources/data/overdrive_that_matters/structure/laboratory/reward/reward_wall.nbt index 4d87bed6d54fe479afa32bfb6b36db76ab83311f..e4a0e0903cca955436d769b1d4c8abaefe315cd1 100644 GIT binary patch literal 625 zcmV-%0*?J3iwFSor_5&n|CLnBj+;ObY#ZB)v7(JOr+h#j$|cum&pAgqZ%+`06&~Gp{$K zxI|VJGLsLFIUzTmRO+myl%1D?+BpOFm6jJCbAF_%=3NY{Tw65ip!x3n8MTk#p*EOO zB^$14ubtPtJM{4o$Oy4^_TobfQ=P&4Gs}}M0&ZhiF#3Y{?S@Czr$55QaXbmE0(s$8 z88Xh`;~t=zS{}76l&8>C6cqAl-;X|f!`NVBglHl9xh@ijpJ}HwQzd$-YiwIOIaGZ( zSFzVJI)MsdVw_{e?dgnmDQD+AN_V^Op0?;SXuX%{DcgG=3i|a@+zIBcMngi`-Z8Np z?XPwhzKw`xXbYK55VJL@{pBRG$#3s!^6kA9Lu53=JVz4?+yMt@Q1UD+-}Lc$7TI&}#82O`$GI zNys9{R1RCdxQ5Hl!BqRo5`78r=6veck&rc9{glo8Bi36>a3A0w LLc_yQ4hH}LDOxxc literal 652 zcmV;70(1QziwFP!00000|CLnBZreZ%q$NLOrA6BG)DP$bJ+#*%=bnq8hh7(qM9G`1 zc7HC=tPv5;Ih*4!(+kMRMosm;G)nLjoN9xJ|3g?F6%~I~pd6eun-#k5_&!P3cLQnbDdkU{|9i-+@w4GVmpnHSm${q&EJtena0!jg%gBpLT9e4%a%(7w$rg+ m5s9n|8T|F})=$Ss+VJ9sbn|bq-dcjo0RI5MV?+8v2LJ$8WJ&b^ diff --git a/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json b/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json index e44388a0b..68417512b 100644 --- a/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json +++ b/src/main/resources/data/overdrive_that_matters/worldgen/structure/laboratory.json @@ -1,34 +1,32 @@ { "type": "minecraft:jigsaw", "biomes": "#overdrive_that_matters:laboratory", + "dimension_padding": 10, "max_distance_from_center": 80, "liquid_settings": "ignore_waterlogging", "size": 20, "start_height": { - "type": "minecraft:biased_to_bottom", + "type": "minecraft:uniform", "max_inclusive": { - "absolute": 0 + "absolute": -20 }, "min_inclusive": { - "absolute": -16 + "absolute": -40 } }, "spawn_overrides": { + "ambient": { + "bounding_box": "piece", + "spawns": [] + }, "monster": { "bounding_box": "piece", - "spawns": [ - { - "type": "overdrive_that_matters:android_melee", - "weight": 1, - "minCount": 1, - "maxCount": 2 - } - ] + "spawns": [] } }, "start_jigsaw_name": "overdrive_that_matters:laboratory_anchor", "start_pool": "overdrive_that_matters:laboratory/entrance", - "step": "underground_decoration", - "terrain_adaption": "encapsulate", + "step": "underground_structures", + "terrain_adaptation": "encapsulate", "use_expansion_hack": false } \ No newline at end of file