From ddaf67ca8724034311f3a15391b031766ebef66c Mon Sep 17 00:00:00 2001 From: AmyMialee <10999535+AmyMialee@users.noreply.github.com> Date: Tue, 15 Apr 2025 20:47:43 +0100 Subject: [PATCH] Fix infinite sculk foxes --- .../vulpine/FoxFollowPlayerGoal.java | 6 ++--- .../sh/talonfloof/vulpine/FoxSitGoal.java | 2 +- .../vulpine/FoxVariantSelector.java | 25 +++++++++++-------- .../talonfloof/vulpine/FoxVariantTexture.java | 4 +-- .../talonfloof/vulpine/IFoxTypeCreator.java | 4 +-- .../sh/talonfloof/vulpine/ModFoxType.java | 6 ++--- .../vulpine/datagen/ModBiomeTagProvider.java | 18 ++++++------- .../vulpine/datagen/ModBlockTagProvider.java | 7 ++---- .../vulpine/datagen/ModDataGenerator.java | 8 +++--- .../vulpine/datagen/ModLanguageProvider.java | 5 ++-- .../vulpine/datagen/ModRecipeProvider.java | 10 ++++---- .../vulpine/mixin/AnimalEntityMixin.java | 11 ++++---- .../vulpine/mixin/FoxEntityMateGoalMixin.java | 5 ++-- .../world/generation/ModEntityGeneration.java | 10 ++++---- 14 files changed, 57 insertions(+), 64 deletions(-) diff --git a/src/main/java/sh/talonfloof/vulpine/FoxFollowPlayerGoal.java b/src/main/java/sh/talonfloof/vulpine/FoxFollowPlayerGoal.java index 1d7a3a4..29e4893 100644 --- a/src/main/java/sh/talonfloof/vulpine/FoxFollowPlayerGoal.java +++ b/src/main/java/sh/talonfloof/vulpine/FoxFollowPlayerGoal.java @@ -28,7 +28,7 @@ public class FoxFollowPlayerGoal extends Goal { private float oldWaterPathfindingPenalty; public FoxFollowPlayerGoal(FoxEntity entity, double speed, float minDistance, float maxDistance) { this.fop = entity; - this.navigation = fop.getNavigation(); + this.navigation = this.fop.getNavigation(); this.speed = speed; this.minDistance = minDistance; this.maxDistance = maxDistance; @@ -50,7 +50,7 @@ public boolean canStart() { if (this.fop.squaredDistanceTo(livingEntity) < (double)(this.minDistance * this.minDistance)) { return false; } - owner = livingEntity; + this.owner = livingEntity; return true; } @@ -115,7 +115,7 @@ private boolean tryTeleportTo(int x, int y, int z) { } private boolean canTeleportTo(BlockPos pos) { - PathNodeType pathNodeType = LandPathNodeMaker.getLandNodeType(fop, pos.mutableCopy()); + PathNodeType pathNodeType = LandPathNodeMaker.getLandNodeType(this.fop, pos.mutableCopy()); if (pathNodeType != PathNodeType.WALKABLE) { return false; } diff --git a/src/main/java/sh/talonfloof/vulpine/FoxSitGoal.java b/src/main/java/sh/talonfloof/vulpine/FoxSitGoal.java index f817c3f..8c74c12 100644 --- a/src/main/java/sh/talonfloof/vulpine/FoxSitGoal.java +++ b/src/main/java/sh/talonfloof/vulpine/FoxSitGoal.java @@ -44,7 +44,7 @@ public boolean canStart() { if (this.fop.squaredDistanceTo(livingEntity) < 144.0 && livingEntity.getAttacker() != null) { return false; } - owner = livingEntity; + this.owner = livingEntity; return this.fop.isSitting(); } diff --git a/src/main/java/sh/talonfloof/vulpine/FoxVariantSelector.java b/src/main/java/sh/talonfloof/vulpine/FoxVariantSelector.java index dc12df8..32c5dad 100644 --- a/src/main/java/sh/talonfloof/vulpine/FoxVariantSelector.java +++ b/src/main/java/sh/talonfloof/vulpine/FoxVariantSelector.java @@ -7,6 +7,7 @@ import net.minecraft.world.World; import net.minecraft.world.biome.Biome; import net.minecraft.world.dimension.DimensionType; +import org.jetbrains.annotations.NotNull; import sh.talonfloof.vulpine.registry.ModMobTags; import java.util.ArrayList; @@ -66,35 +67,37 @@ private static boolean shouldSpawnMonster(World foxWorld){ return shouldSpawnMonster & rand.nextInt(100)<15; //15% to spawn monster version at night in overwolrd. } - public static FoxEntity.Type selectFoxVariant(FoxEntity foxEntity, RegistryEntry foxBiome){ + public static FoxEntity.Type selectFoxVariant(@NotNull FoxEntity foxEntity, RegistryEntry foxBiome){ - if(shouldSpawnMonster(foxEntity.getEntityWorld())) + if (shouldSpawnMonster(foxEntity.getEntityWorld())) { return randomMonsterVariant(); + } - if(foxBiome.isIn(ModMobTags.HAS_NETHER_FOX)){ + if (foxBiome.isIn(ModMobTags.HAS_NETHER_FOX)){ return randomNetherVariant(); } - if(foxBiome.isIn(ModMobTags.HAS_DESERT_FOX)){ + if (foxBiome.isIn(ModMobTags.HAS_DESERT_FOX)){ return randomDesertVariant(); } - if(foxBiome.isIn(ModMobTags.HAS_SNOW_FOX)){ + if (foxBiome.isIn(ModMobTags.HAS_SNOW_FOX)){ return randomSnowVariant(); } - if(foxBiome.isIn(ModMobTags.HAS_TAIGA_FOX)){ - if(foxBiome.isIn(ConventionalBiomeTags.IS_SNOWY)) - return randomSnowVariant(); - else + if (foxBiome.isIn(ModMobTags.HAS_TAIGA_FOX)){ + if (!foxBiome.isIn(ConventionalBiomeTags.IS_SNOWY)) { return randomTaigaVariant(); + } else { + return randomSnowVariant(); + } } - if(foxBiome.isIn(ModMobTags.HAS_SCULK_FOX)){ + if (foxBiome.isIn(ModMobTags.HAS_SCULK_FOX)){ return randomSculkVariant(); } - if(foxBiome.isIn(ModMobTags.HAS_ENDER_FOX)){ + if (foxBiome.isIn(ModMobTags.HAS_ENDER_FOX)){ return randomEnderVariant(); } diff --git a/src/main/java/sh/talonfloof/vulpine/FoxVariantTexture.java b/src/main/java/sh/talonfloof/vulpine/FoxVariantTexture.java index 6d7cbe5..8a57363 100644 --- a/src/main/java/sh/talonfloof/vulpine/FoxVariantTexture.java +++ b/src/main/java/sh/talonfloof/vulpine/FoxVariantTexture.java @@ -18,10 +18,10 @@ public FoxVariantTexture(Identifier normalTexture, Identifier sleepTexture) { } public static Identifier getTexture(FoxEntity fox) { - if("Talon".equals(fox.getName().getString())) { + if ("Talon".equals(fox.getName().getString())) { return foxTextures.get(Vulpine.TALON).getTextureIdentifier(fox.isSleeping()); } - if(foxTextures.containsKey(fox.getVariant())) { + if (foxTextures.containsKey(fox.getVariant())) { return foxTextures.get(fox.getVariant()).getTextureIdentifier(fox.isSleeping()); } return null; diff --git a/src/main/java/sh/talonfloof/vulpine/IFoxTypeCreator.java b/src/main/java/sh/talonfloof/vulpine/IFoxTypeCreator.java index 565d573..f940500 100644 --- a/src/main/java/sh/talonfloof/vulpine/IFoxTypeCreator.java +++ b/src/main/java/sh/talonfloof/vulpine/IFoxTypeCreator.java @@ -4,6 +4,4 @@ public interface IFoxTypeCreator { FoxEntity.Type vulpine$newFoxVariant(String enumName, int ordinal, String typeName); - - -} +} \ No newline at end of file diff --git a/src/main/java/sh/talonfloof/vulpine/ModFoxType.java b/src/main/java/sh/talonfloof/vulpine/ModFoxType.java index afba6b1..97f4896 100644 --- a/src/main/java/sh/talonfloof/vulpine/ModFoxType.java +++ b/src/main/java/sh/talonfloof/vulpine/ModFoxType.java @@ -9,11 +9,11 @@ public class ModFoxType { public ModFoxType(String variantName) { this.variantName = variantName; - textureIdentifier = Identifier.of(Vulpine.MOD_ID,"textures/entity/fox/"+variantName+".png"); - sleepingTextureIdentifier = Identifier.of(Vulpine.MOD_ID,"textures/entity/fox/"+variantName+"_sleep.png"); + this.textureIdentifier = Identifier.of(Vulpine.MOD_ID,"textures/entity/fox/"+variantName+".png"); + this.sleepingTextureIdentifier = Identifier.of(Vulpine.MOD_ID,"textures/entity/fox/"+variantName+"_sleep.png"); ; } public Identifier getTextureIdentifier(boolean isSleepling) { - return isSleepling?sleepingTextureIdentifier:textureIdentifier; + return isSleepling? this.sleepingTextureIdentifier : this.textureIdentifier; } } diff --git a/src/main/java/sh/talonfloof/vulpine/datagen/ModBiomeTagProvider.java b/src/main/java/sh/talonfloof/vulpine/datagen/ModBiomeTagProvider.java index 8e2340e..a9b23a3 100644 --- a/src/main/java/sh/talonfloof/vulpine/datagen/ModBiomeTagProvider.java +++ b/src/main/java/sh/talonfloof/vulpine/datagen/ModBiomeTagProvider.java @@ -1,6 +1,5 @@ package sh.talonfloof.vulpine.datagen; - import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; import net.fabricmc.fabric.api.tag.convention.v2.ConventionalBiomeTags; @@ -15,8 +14,6 @@ import java.util.concurrent.CompletableFuture; public class ModBiomeTagProvider extends FabricTagProvider { - - public ModBiomeTagProvider(FabricDataOutput output, CompletableFuture registriesFuture) { super(output, RegistryKeys.BIOME, registriesFuture); } @@ -27,27 +24,26 @@ protected void configure(RegistryWrapper.WrapperLookup lookup) { //Some tag entries are redundant but this allows to potential compat with mode and/or configurability - getOrCreateTagBuilder(ModMobTags.HAS_NETHER_FOX) + this.getOrCreateTagBuilder(ModMobTags.HAS_NETHER_FOX) .forceAddTag(ConventionalBiomeTags.IS_NETHER_FOREST) .add(BiomeKeys.SOUL_SAND_VALLEY) .add(BiomeKeys.NETHER_WASTES); - getOrCreateTagBuilder(ModMobTags.HAS_DESERT_FOX) + this.getOrCreateTagBuilder(ModMobTags.HAS_DESERT_FOX) .forceAddTag(ConventionalBiomeTags.IS_DESERT) .add(BiomeKeys.BADLANDS); - getOrCreateTagBuilder(ModMobTags.HAS_SNOW_FOX) + this.getOrCreateTagBuilder(ModMobTags.HAS_SNOW_FOX) .forceAddTag(BiomeTags.SPAWNS_SNOW_FOXES); - getOrCreateTagBuilder(ModMobTags.HAS_TAIGA_FOX) + this.getOrCreateTagBuilder(ModMobTags.HAS_TAIGA_FOX) .forceAddTag(ConventionalBiomeTags.IS_TAIGA); - getOrCreateTagBuilder(ModMobTags.HAS_ENDER_FOX) + this.getOrCreateTagBuilder(ModMobTags.HAS_ENDER_FOX) .forceAddTag(ConventionalBiomeTags.IS_OUTER_END_ISLAND) .add(BiomeKeys.THE_END); - getOrCreateTagBuilder(ModMobTags.HAS_SCULK_FOX) + this.getOrCreateTagBuilder(ModMobTags.HAS_SCULK_FOX) .add(BiomeKeys.DEEP_DARK); - } -} +} \ No newline at end of file diff --git a/src/main/java/sh/talonfloof/vulpine/datagen/ModBlockTagProvider.java b/src/main/java/sh/talonfloof/vulpine/datagen/ModBlockTagProvider.java index 67c8f48..120104a 100644 --- a/src/main/java/sh/talonfloof/vulpine/datagen/ModBlockTagProvider.java +++ b/src/main/java/sh/talonfloof/vulpine/datagen/ModBlockTagProvider.java @@ -9,9 +9,7 @@ import java.util.concurrent.CompletableFuture; - public class ModBlockTagProvider extends FabricTagProvider.BlockTagProvider { - public ModBlockTagProvider(FabricDataOutput output, CompletableFuture registriesFuture) { super(output, registriesFuture); } @@ -22,8 +20,7 @@ public ModBlockTagProvider(FabricDataOutput output, CompletableFuture cir){ - AnimalEntity animal = (AnimalEntity) (Object)this; - if(animal instanceof FoxEntity foxEntity){ + public void vulpine$overrideLightLevel(BlockPos pos, WorldView world, CallbackInfoReturnable cir){ + var animal = (AnimalEntity) (Object) this; + if (animal instanceof FoxEntity){ cir.setReturnValue(10.f); cir.cancel(); } } -} +} \ No newline at end of file diff --git a/src/main/java/sh/talonfloof/vulpine/mixin/FoxEntityMateGoalMixin.java b/src/main/java/sh/talonfloof/vulpine/mixin/FoxEntityMateGoalMixin.java index ba664fd..f8c0014 100644 --- a/src/main/java/sh/talonfloof/vulpine/mixin/FoxEntityMateGoalMixin.java +++ b/src/main/java/sh/talonfloof/vulpine/mixin/FoxEntityMateGoalMixin.java @@ -1,6 +1,7 @@ package sh.talonfloof.vulpine.mixin; import net.minecraft.server.world.ServerWorld; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -13,11 +14,11 @@ @SuppressWarnings("unused") public class FoxEntityMateGoalMixin { @Inject(method = "breed", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;spawnEntityAndPassengers(Lnet/minecraft/entity/Entity;)V"), locals = LocalCapture.CAPTURE_FAILHARD) - public void increaseTameProgress(CallbackInfo ci, ServerWorld serverWorld, FoxEntity foxEntity) { + public void increaseTameProgress(CallbackInfo ci, ServerWorld serverWorld, @NotNull FoxEntity foxEntity) { int prog1 = ((FoxEntity)((FoxEntity.MateGoal)(Object)this).animal).getDataTracker().get(Vulpine.TAME_PROGRESS); int prog2 = ((FoxEntity)((FoxEntity.MateGoal)(Object)this).mate).getDataTracker().get(Vulpine.TAME_PROGRESS); int newStage = Math.min(4, Math.min(prog1, prog2) + 1); foxEntity.getDataTracker().set(Vulpine.TAME_PROGRESS, newStage); Vulpine.addFoxGoals(foxEntity,newStage); } -} +} \ No newline at end of file diff --git a/src/main/java/sh/talonfloof/vulpine/world/generation/ModEntityGeneration.java b/src/main/java/sh/talonfloof/vulpine/world/generation/ModEntityGeneration.java index 5c92c75..840d3dd 100644 --- a/src/main/java/sh/talonfloof/vulpine/world/generation/ModEntityGeneration.java +++ b/src/main/java/sh/talonfloof/vulpine/world/generation/ModEntityGeneration.java @@ -22,24 +22,24 @@ public static void addFoxSpawns(){ } if(Vulpine.config.spawning.enableNetherFoxes.get()) { - BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_NETHER_FOX), SpawnGroup.MONSTER, + BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_NETHER_FOX), SpawnGroup.CREATURE, EntityType.FOX, 1, 1, 2); } if(Vulpine.config.spawning.enableEndFoxes.get()) { - BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_ENDER_FOX), SpawnGroup.MONSTER, + BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_ENDER_FOX), SpawnGroup.CREATURE, EntityType.FOX, 1, 1, 2); } if(Vulpine.config.spawning.enableSculkFoxes.get()) { - BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_SCULK_FOX), SpawnGroup.MONSTER, + BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_SCULK_FOX), SpawnGroup.CREATURE, EntityType.FOX, 10, 1, 2); } - BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_ZOMBIE_FOX), SpawnGroup.MONSTER, + BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_ZOMBIE_FOX), SpawnGroup.CREATURE, EntityType.FOX,10,1,2); - BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_SKELETON_FOX), SpawnGroup.MONSTER, + BiomeModifications.addSpawn(BiomeSelectors.tag(ModMobTags.HAS_SKELETON_FOX), SpawnGroup.CREATURE, EntityType.FOX,10,1,2); } }