From d75dbbea58ca85a9d2293e709eb2fba1f3a70c63 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sun, 5 Jul 2026 21:06:23 -0500 Subject: [PATCH] nightmare fixes, new scorpion variant with emmesive texture --- .../content/client/model/ScorpionModel.java | 26 ++++++++- .../client/renderer/ScorpionRenderer.java | 40 ++++++++++++++ .../content/entity/ScorpionEntity.java | 52 ++++++++++++++++++ .../entity/nightmare/NightmareEntity.java | 14 ++--- .../assets/antarchy/geo/scorpion.geo.json | 2 +- .../entity/scorpion/scorpion_blue.png | Bin 0 -> 4006 bytes .../scorpion/scorpion_blue_emissive.png | Bin 0 -> 562 bytes .../entity/scorpion/scorpion_green.png | Bin 0 -> 3958 bytes .../scorpion/scorpion_green_emissive.png | Bin 0 -> 569 bytes 9 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue_emissive.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java index 5b23cbc6..c408ff34 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/ScorpionModel.java @@ -6,19 +6,39 @@ import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib.model.GeoModel; public class ScorpionModel extends GeoModel { + private static final ResourceLocation MODEL = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/scorpion.geo.json"); + private static final ResourceLocation BLUE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_blue.png"); + private static final ResourceLocation GREEN_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_green.png"); + private static final ResourceLocation BLUE_EMISSIVE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_blue_emissive.png"); + private static final ResourceLocation GREEN_EMISSIVE_TEXTURE = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion/scorpion_green_emissive.png"); + private static final ResourceLocation ANIMATION = + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/scorpion.animation.json"); @Override public ResourceLocation getModelResource(ScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/scorpion.geo.json"); + return MODEL; } @Override public ResourceLocation getTextureResource(ScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/scorpion.png"); + return textureFor(animatable); } @Override public ResourceLocation getAnimationResource(ScorpionEntity animatable) { - return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/scorpion.animation.json"); + return ANIMATION; + } + + public static ResourceLocation textureFor(ScorpionEntity animatable) { + return animatable.getTextureVariant() == ScorpionEntity.GREEN_VARIANT ? GREEN_TEXTURE : BLUE_TEXTURE; + } + + public static ResourceLocation emissiveTextureFor(ScorpionEntity animatable) { + return animatable.getTextureVariant() == ScorpionEntity.GREEN_VARIANT ? GREEN_EMISSIVE_TEXTURE : BLUE_EMISSIVE_TEXTURE; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java index 892679a9..c37d5202 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ScorpionRenderer.java @@ -2,13 +2,53 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.ScorpionModel; import com.craisinlord.antarchy.content.entity.ScorpionEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.renderer.layer.GeoRenderLayer; public class ScorpionRenderer extends GeoEntityRenderer { public ScorpionRenderer(EntityRendererProvider.Context context) { super(context, new ScorpionModel()); this.shadowRadius = 0.6F; + this.addRenderLayer(new ScorpionEmissiveLayer(this)); + } + + @Override + public RenderType getRenderType(ScorpionEntity animatable, net.minecraft.resources.ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return RenderType.entityCutoutNoCull(texture); + } + + private static final class ScorpionEmissiveLayer extends GeoRenderLayer { + private ScorpionEmissiveLayer(GeoEntityRenderer renderer) { + super(renderer); + } + + @Override + public void render(PoseStack poseStack, ScorpionEntity animatable, BakedGeoModel bakedModel, @Nullable RenderType renderType, + MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, float partialTick, + int packedLight, int packedOverlay) { + RenderType emissiveType = RenderType.eyes(ScorpionModel.emissiveTextureFor(animatable)); + VertexConsumer emissiveBuffer = bufferSource.getBuffer(emissiveType); + this.getRenderer().reRender( + bakedModel, + poseStack, + bufferSource, + animatable, + emissiveType, + emissiveBuffer, + partialTick, + 0xF000F0, + OverlayTexture.NO_OVERLAY, + 0xFFFFFFFF + ); + } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java index 16999635..40437f18 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ScorpionEntity.java @@ -2,8 +2,13 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.AntarchySoundEvents; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; @@ -13,6 +18,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.SpawnGroupData; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; @@ -39,6 +45,11 @@ import org.jetbrains.annotations.Nullable; public class ScorpionEntity extends Monster implements GeoEntity { private static final byte ATTACK_ANIM_EVENT = 4; + private static final EntityDataAccessor TEXTURE_VARIANT = + SynchedEntityData.defineId(ScorpionEntity.class, EntityDataSerializers.INT); + private static final String TEXTURE_VARIANT_KEY = "TextureVariant"; + public static final int BLUE_VARIANT = 0; + public static final int GREEN_VARIANT = 1; private static final int ATTACK_ANIM_TICKS = 12; private static final int ATTACK_HIT_TICK = 6; @@ -82,6 +93,12 @@ public class ScorpionEntity extends Monster implements GeoEntity { && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); } + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(TEXTURE_VARIANT, BLUE_VARIANT); + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -93,6 +110,13 @@ public class ScorpionEntity extends Monster implements GeoEntity { this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } + @Nullable + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnType, @Nullable SpawnGroupData spawnGroupData) { + this.assignRandomTextureVariant(); + return super.finalizeSpawn(level, difficulty, spawnType, spawnGroupData); + } + @Override public void tick() { super.tick(); @@ -208,6 +232,22 @@ public class ScorpionEntity extends Monster implements GeoEntity { return this.geoCache; } + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(TEXTURE_VARIANT_KEY, this.getTextureVariant()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + if (tag.contains(TEXTURE_VARIANT_KEY)) { + this.setTextureVariant(tag.getInt(TEXTURE_VARIANT_KEY)); + } else { + this.assignRandomTextureVariant(); + } + } + @Override protected SoundEvent getAmbientSound() { return AntarchySoundEvents.SCORPION_AMBIENT.get(); @@ -228,6 +268,18 @@ public class ScorpionEntity extends Monster implements GeoEntity { return 0.6F; } + public int getTextureVariant() { + return this.entityData.get(TEXTURE_VARIANT); + } + + public void setTextureVariant(int variant) { + this.entityData.set(TEXTURE_VARIANT, variant == GREEN_VARIANT ? GREEN_VARIANT : BLUE_VARIANT); + } + + private void assignRandomTextureVariant() { + this.setTextureVariant(this.random.nextBoolean() ? BLUE_VARIANT : GREEN_VARIANT); + } + private final class ScorpionMeleeAttackGoal extends MeleeAttackGoal { private ScorpionMeleeAttackGoal() { super(ScorpionEntity.this, 1.15D, true); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index 6c296799..93ffbfed 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -82,6 +82,7 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int COMBAT_ROAR_TICKS = 30; private static final int DEATH_TICKS = 30; private static final int TARGET_RESET_TICKS = 60; + private static final int MIN_AIRBORNE_TICKS_FOR_FLY_ANIM = 4; private static final int DREAD_TICKS = 160; private static final int WEAKNESS_TICKS = 100; private static final int BLOCK_BREAK_TICKS = 10; @@ -644,23 +645,18 @@ public class NightmareEntity extends Monster implements GeoEntity { return; } if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.onGround() ? ANIM_ATTACK : ANIM_FLY_ATTACK); + this.setAnimationState(this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM ? ANIM_FLY_ATTACK : ANIM_ATTACK); this.groundMoveTicks = 0; this.tickWingFlapSound(); return; } if (this.flyingToTarget) { this.groundMoveTicks = 0; - if (this.onGround() || this.airborneTicks <= 8) { - this.setAnimationState(ANIM_FLY); - this.wingFlapCooldown = 0; - } else { - this.setAnimationState(ANIM_FLY); - this.tickWingFlapSound(); - } + this.setAnimationState(ANIM_FLY); + this.tickWingFlapSound(); return; } - if (!this.onGround()) { + if (this.isNoGravity() || this.airborneTicks >= MIN_AIRBORNE_TICKS_FOR_FLY_ANIM) { this.groundMoveTicks = 0; this.setAnimationState(ANIM_FLY); this.tickWingFlapSound(); diff --git a/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json b/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json index a52b3951..0e3340b6 100644 --- a/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/scorpion.geo.json @@ -99,7 +99,7 @@ "pivot": [1, 1, 24], "cubes": [ {"origin": [-5, 1, 24], "size": [10, 7, 8], "inflate": 0.01, "uv": [28, 35]}, - {"origin": [-0.5, 8, 28], "size": [1, 5, 3], "inflate": 0.01, "uv": [28, 35]} + {"origin": [-0.5, 8, 28], "size": [1, 8, 3], "uv": [28, 50]} ] }, { diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..658b7180f421025e008ae7377536248d4749baa3 GIT binary patch literal 4006 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green.png new file mode 100644 index 0000000000000000000000000000000000000000..8737db9b8130d4fcbbc3fec3f1bb3cc4c7bab33c GIT binary patch literal 3958 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 QNdN!<07*qoM6N<$g0N^OJpcdz literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png b/common/src/main/resources/assets/antarchy/textures/entity/scorpion/scorpion_green_emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..03dc179d10084cf938d065b5180d7a7f751a27db GIT binary patch literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|@Xb>Eakt!T4s%#y}QB0hafi zT>Ty#3{DCxP7MqS96lcm4lLkcn5?nj-i`IzwXvSN-@i!zHRr15YVET=^Yz5!ve_99 zSp7?7WMD8TKM-SQ&cHCkIzex~Gy}sKS%azan|3lD;=Ihou$Hu+7A z3UdtBG9*aVoM3AxIJAYSA@al87={d4!)kVh%?F})GF-4q`o_nQ*0{ZhaY5;kH?j<8 znDU>_V>xj7?CtoP0^2^zSAY2CupIdM_^O`Dy5olKbB{N!ojir%#{akF)A`%?+uQ9k zm4AKZr;G;Uhp#{P*8JHcxANvJ`>d2CDRwW0JNxgyi>sT@f4zRi%~}1WuWI;~Fh<1x zRet!z0G;PZ%A}D}F3x5a6u{5o74FQoY5_u;^gl zDW-!^VWoMGOkBXGGXDbg<5v%FGaX z{Kzjx2b~LRWEf6Zsa@k|NNP-b%HVL#aAO^V0OuAhX1KFf8!;?+HRpsKP