From efbab8af13f9d672950eaaf9dae698b23d0aef47 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:34:34 +0300 Subject: [PATCH 01/38] Update default spawn biome tags from the forge namespace to c for 1.21.1 --- .../alexsmobs/config/DefaultBiomes.java | 130 +++++++++--------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/config/DefaultBiomes.java b/src/main/java/com/github/alexthe666/alexsmobs/config/DefaultBiomes.java index 4748bd46b..3fc04dbd4 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/config/DefaultBiomes.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/config/DefaultBiomes.java @@ -43,9 +43,9 @@ public class DefaultBiomes { public static final SpawnBiomeData ROADRUNNER = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_badlands", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_dry/overworld", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_sandy", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_dry/overworld", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_sandy", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ancient_sands", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_canyon", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_oasis", 4) @@ -60,7 +60,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_nether", 0); public static final SpawnBiomeData ALL_NETHER_MONSTER = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_nether", 0); public static final SpawnBiomeData GAZELLE = new SpawnBiomeData() @@ -74,10 +74,10 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:red_oasis", 7); public static final SpawnBiomeData CROCODILE = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_swamp", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:mangrove_swamp", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_river", 2) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_cold", 2) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_cold", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:tropic_beach", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:orchid_swamp", 4) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:red_oasis", 5) @@ -113,7 +113,7 @@ public class DefaultBiomes { public static final SpawnBiomeData ORCA = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_cold/overworld", 0); + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_cold/overworld", 0); public static final SpawnBiomeData SUNBIRD = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) @@ -158,7 +158,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:skylands_summer", 6); public static final SpawnBiomeData CRIMSON_MOSQUITO = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:crimson_forest", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "byg:crimson_gardens", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:visceral_heap", 2) @@ -167,9 +167,9 @@ public class DefaultBiomes { public static final SpawnBiomeData RATTLESNAKE = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_badlands", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_dry/overworld", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_sandy", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_dry/overworld", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_sandy", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ancient_sands", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_canyon", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_oasis", 4) @@ -186,7 +186,7 @@ public class DefaultBiomes { public static final SpawnBiomeData HAMMERHEAD = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 0); + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 0); public static final SpawnBiomeData LOBSTER = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_beach", 0) @@ -195,7 +195,7 @@ public class DefaultBiomes { public static final SpawnBiomeData KOMODO_DRAGON = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_jungle", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_dense/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_dense_vegetation/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:sandstone_valley", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:red_oasis", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:skylands_summer", 3) @@ -215,7 +215,7 @@ public class DefaultBiomes { public static final SpawnBiomeData CAVES = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_mushroom", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_mushroom", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_dark", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/andesite_caves", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/desert_caves", 2) @@ -232,9 +232,9 @@ public class DefaultBiomes { public static final SpawnBiomeData CAVES_MONSTER = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_mushroom", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_mushroom", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_dark", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/andesite_caves", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/desert_caves", 2) @@ -258,10 +258,10 @@ public class DefaultBiomes { public static final SpawnBiomeData MOOSE = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_snowy", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_wasteland", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_snowy", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_wasteland", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_snowy", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_snowy", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_taiga", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:snowy_coniferous_forest", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:snowy_fir_clearing", 3) @@ -277,7 +277,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:snowblossom_grove", 13); public static final SpawnBiomeData MIMICUBE = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_end", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:the_end", 0); @@ -286,7 +286,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_forest", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_savanna", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_plains", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_plains", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 2) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_taiga", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:alpine_grove", 3) @@ -320,7 +320,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_beach", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_cold/overworld", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_cold/overworld", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:gravel_beach", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:dune_beach", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:stony_shore", 4); @@ -328,7 +328,7 @@ public class DefaultBiomes { public static final SpawnBiomeData COCKROACH = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_mushroom", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_mushroom", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_dark", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/andesite_caves", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/desert_caves", 2) @@ -345,7 +345,7 @@ public class DefaultBiomes { public static final SpawnBiomeData SHOEBILL = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_swamp", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:mangrove_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:orchid_swamp", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:red_oasis", 2); @@ -362,7 +362,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:red_oasis", 7); public static final SpawnBiomeData SOUL_VULTURE = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:soul_sand_valley", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "byg:warped_desert", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "incendium:weeping_valley", 2); @@ -373,7 +373,7 @@ public class DefaultBiomes { public static final SpawnBiomeData SNOW_LEOPARD = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_snowy", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_snowy", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:snowy_slopes", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:frozen_peaks", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:jagged_peaks", 3) @@ -390,7 +390,7 @@ public class DefaultBiomes { public static final SpawnBiomeData CROW = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_savanna", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_plains", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_plains", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_forest", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 2) @@ -432,7 +432,7 @@ public class DefaultBiomes { public static final SpawnBiomeData ALLIGATOR_SNAPPING_TURTLE = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_swamp", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:mangrove_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:tundra_bog", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ice_marsh", 2) @@ -440,20 +440,20 @@ public class DefaultBiomes { public static final SpawnBiomeData MUNGUS = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_mushroom", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_rare", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_mushroom", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_rare", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:mirage_isles", 1); public static final SpawnBiomeData MANTIS_SHRIMP = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:mangrove_swamp", 1); public static final SpawnBiomeData GUSTER = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_dry/overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_sandy", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_dry/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_sandy", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ancient_sands", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_canyon", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_spires", 3) @@ -461,7 +461,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/desert_caves", 5); public static final SpawnBiomeData STRADDLER = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:basalt_deltas", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:withered_abyss", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "incendium:volcanic_deltas", 2) @@ -485,12 +485,12 @@ public class DefaultBiomes { public static final SpawnBiomeData ICE_FREE_RIVER = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_river", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_cold/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_cold/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:tundra_bog", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:warm_river", 2); public static final SpawnBiomeData DROPBEAR = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:nether_wastes", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:crystalline_chasm", 1); @@ -498,7 +498,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_forest", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_savanna", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_cold/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_cold/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:sparse_jungle", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:birch_taiga", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:blooming_valley", 2) @@ -514,7 +514,7 @@ public class DefaultBiomes { public static final SpawnBiomeData CACHALOT_WHALE = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_cold/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_cold/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:lukewarm_ocean", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:deep_ocean", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:deep_lukewarm_ocean", 3) @@ -548,7 +548,7 @@ public class DefaultBiomes { public static final SpawnBiomeData BALD_EAGLE = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_hill", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_coniferous", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_tree/coniferous", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:grove", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:windswept_forest", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:blooming_plateau", 3) @@ -580,9 +580,9 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:snowblossom_grove", 8); public static final SpawnBiomeData DESERT = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_dry/overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_sandy", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_dry/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_sandy", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_badlands", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ancient_sands", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:desert_canyon", 2) @@ -592,7 +592,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:red_oasis", 6); public static final SpawnBiomeData MIMIC_OCTOPUS = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_hot/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_hot/overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_warm_ocean", 0); @@ -620,8 +620,8 @@ public class DefaultBiomes { public static final SpawnBiomeData TUSKLIN = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:ice_spikes", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_snowy", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_plains", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_snowy", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_plains", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:snowy_badlands", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:gravel_desert", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:snowblossom_grove", 4); @@ -654,7 +654,7 @@ public class DefaultBiomes { public static final SpawnBiomeData ANACONDA = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_swamp", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:mangrove_swamp", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ice_marsh", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:orchid_swamp", 3) @@ -674,7 +674,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:skylands_summer", 6); public static final SpawnBiomeData ROCKY_ROLLER = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:dripstone_caves", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/andesite_caves", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/diorite_caves", 2) @@ -685,8 +685,8 @@ public class DefaultBiomes { public static final SpawnBiomeData MEADOWS = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_plains", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_plateau", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_plains", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_plateau", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:highlands", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:hot_shrubland", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:rocky_shrubland", 3) @@ -703,9 +703,9 @@ public class DefaultBiomes { public static final SpawnBiomeData BISON = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_plains", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_plains", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_savanna", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_hot/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_hot/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:meadow", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:field", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "biomesoplenty:forested_field", 3) @@ -725,18 +725,18 @@ public class DefaultBiomes { public static final SpawnBiomeData CATFISH = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_swamp", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:mangrove_swamp", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_river", 1) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_cold/overworld", 1) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_cold/overworld", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:orchid_swamp", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ice_marsh", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:warm_river", 4); public static final SpawnBiomeData LARGE_CATFISH = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_swamp", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:mangrove_swamp", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:orchid_swamp", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:ice_marsh", 2); @@ -744,13 +744,13 @@ public class DefaultBiomes { public static final SpawnBiomeData FLYING_FISH = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_cold/overworld", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_hot/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_cold/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_hot/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_ocean", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_lukewarm_ocean", 0); public static final SpawnBiomeData SKELEWAG = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_deep_ocean", 0); @@ -777,17 +777,17 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:white_cliffs", 2); public static final SpawnBiomeData FARSEER = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:mushroom_fields", 0); public static final SpawnBiomeData SKREECHER = new SpawnBiomeData() - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:no_default_monsters", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:no_default_monsters", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "alexsmobs:skreechers_can_spawn_wardens", 0); public static final SpawnBiomeData MURMUR = new SpawnBiomeData() .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_ocean", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_mushroom", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_mushroom", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:deep_dark", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/andesite_caves", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:cave/desert_caves", 2) @@ -807,7 +807,7 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_overworld", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_forest", 0) .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "minecraft:is_savanna", 0) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "forge:is_cold/overworld", 0) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, true, "c:is_cold/overworld", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, true, "minecraft:sparse_jungle", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:birch_taiga", 1) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:blooming_valley", 2) @@ -826,8 +826,8 @@ public class DefaultBiomes { .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:old_growth_pine_taiga", 0) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "minecraft:old_growth_spruce_taiga", 1) .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "minecraft:is_taiga", 2) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_dense/overworld", 2) - .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "forge:is_rare", 2) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_dense_vegetation/overworld", 2) + .addBiomeEntry(BiomeEntryType.BIOME_TAG, false, "c:is_rare", 2) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:forested_highlands", 3) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:shield", 4) .addBiomeEntry(BiomeEntryType.REGISTRY_NAME, false, "terralith:skylands_autumn", 5) From a3074c94f96146c9a49ab6a4d8136e6dd1ad7d53 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:34:34 +0300 Subject: [PATCH 02/38] Fix crash when reading the Power Down effect for star brightness --- .../github/alexthe666/alexsmobs/client/event/ClientEvents.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/event/ClientEvents.java b/src/main/java/com/github/alexthe666/alexsmobs/client/event/ClientEvents.java index a4cdf5690..5f9aa1e3e 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/event/ClientEvents.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/event/ClientEvents.java @@ -122,7 +122,7 @@ public void onGetStarBrightness(EventGetStarBrightness event) { if (Minecraft.getInstance().player.hasEffect(AMEffectRegistry.POWER_DOWN)) { if (Minecraft.getInstance().player.getEffect(AMEffectRegistry.POWER_DOWN) != null) { MobEffectInstance instance = Minecraft.getInstance().player.getEffect(AMEffectRegistry.POWER_DOWN); - EffectPowerDown powerDown = (EffectPowerDown) instance.getEffect(); + EffectPowerDown powerDown = (EffectPowerDown) instance.getEffect().value(); int duration = instance.getDuration(); float partialTicks = Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(false); float f = (Math.min(powerDown.getActiveTime(), duration) + partialTicks) * 0.1F; From 9a509a179eec4ddbd8a2a5ddef0488b1493040e3 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:34:34 +0300 Subject: [PATCH 03/38] Set up inventory lighting before drawing entities on screen --- .../alexthe666/alexsmobs/client/render/AMItemstackRenderer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/render/AMItemstackRenderer.java b/src/main/java/com/github/alexthe666/alexsmobs/client/render/AMItemstackRenderer.java index cd2612c6c..d4a61cbe1 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/render/AMItemstackRenderer.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/render/AMItemstackRenderer.java @@ -156,6 +156,7 @@ public static void drawEntityOnScreen(PoseStack matrixstack, int posX, int posY, matrixstack.mulPose(Axis.XP.rotationDegrees((float) (-xRot))); matrixstack.mulPose(Axis.YP.rotationDegrees((float) yRot)); matrixstack.mulPose(Axis.ZP.rotationDegrees((float) zRot)); + Lighting.setupForEntityInInventory(); EntityRenderDispatcher entityrenderdispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); quaternion1.conjugate(); entityrenderdispatcher.overrideCameraOrientation(quaternion1); From 75dcca13c3b1b3058e746603b788ab2acbe36216 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:37:16 +0300 Subject: [PATCH 04/38] Restore jump detection for the Flying Fish Boots boost --- .../alexsmobs/entity/util/FlyingFishBootsUtil.java | 5 ++--- .../alexsmobs/mixin/LivingEntityAccessor.java | 11 +++++++++++ src/main/resources/alexsmobs.mixins.json | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/github/alexthe666/alexsmobs/mixin/LivingEntityAccessor.java diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/util/FlyingFishBootsUtil.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/util/FlyingFishBootsUtil.java index ecee161e6..70e8b95bc 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/util/FlyingFishBootsUtil.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/util/FlyingFishBootsUtil.java @@ -1,6 +1,7 @@ package com.github.alexthe666.alexsmobs.entity.util; import com.github.alexthe666.alexsmobs.item.AMItemRegistry; +import com.github.alexthe666.alexsmobs.mixin.LivingEntityAccessor; import com.github.alexthe666.citadel.server.entity.CitadelEntityData; import com.github.alexthe666.citadel.server.message.PropertiesMessage; import net.minecraft.nbt.CompoundTag; @@ -47,9 +48,7 @@ public static boolean isWearing(LivingEntity entity) { public static void tickFlyingFishBoots(LivingEntity fishy) { int boostTime = getBoostTicks(fishy); if(boostTime <= 15 && fishy.isInWaterOrBubble() && !fishy.onGround()){ - // In 1.21+, we check if player is trying to swim up instead of directly accessing input - boolean isJumping = fishy instanceof Player player && player.isSwimming() && player.getDeltaMovement().y > 0; - if(fishy.getFluidHeight(FluidTags.WATER) < 0.4F && isJumping &&( !(fishy instanceof Player) || !((Player) fishy).getAbilities().flying)){ + if(fishy.getFluidHeight(FluidTags.WATER) < 0.4F && ((LivingEntityAccessor) fishy).getJumping() &&( !(fishy instanceof Player) || !((Player) fishy).getAbilities().flying)){ final RandomSource rand = fishy.getRandom(); boostTime = MIN_BOOST_TIME; Vec3 forward = new Vec3(0, 0.0F, 0.5F + rand.nextFloat() * 1.2F).xRot(-fishy.getXRot() * Mth.DEG_TO_RAD).yRot(-fishy.getYHeadRot() * Mth.DEG_TO_RAD); diff --git a/src/main/java/com/github/alexthe666/alexsmobs/mixin/LivingEntityAccessor.java b/src/main/java/com/github/alexthe666/alexsmobs/mixin/LivingEntityAccessor.java new file mode 100644 index 000000000..616e06e21 --- /dev/null +++ b/src/main/java/com/github/alexthe666/alexsmobs/mixin/LivingEntityAccessor.java @@ -0,0 +1,11 @@ +package com.github.alexthe666.alexsmobs.mixin; + +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(LivingEntity.class) +public interface LivingEntityAccessor { + @Accessor("jumping") + boolean getJumping(); +} diff --git a/src/main/resources/alexsmobs.mixins.json b/src/main/resources/alexsmobs.mixins.json index 41abfe0b2..bfa5aaed6 100644 --- a/src/main/resources/alexsmobs.mixins.json +++ b/src/main/resources/alexsmobs.mixins.json @@ -6,6 +6,7 @@ "refmap": "alexsmobs.refmap.json", "mixins": [ "AbstractArrowAccessor", + "LivingEntityAccessor", "MixinBlock", "MixinBrewingStandBlockEntity", "NoiseBasedChunkGeneratorAccessor" From 50c8483b9b5002900524461b3df3a1ab08027c3c Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:41:31 +0300 Subject: [PATCH 05/38] Fix Mungus failing to transform the biome of a chunk --- .../alexthe666/alexsmobs/entity/EntityMungus.java | 4 ++-- .../alexsmobs/mixin/LevelChunkSectionAccessor.java | 14 ++++++++++++++ src/main/resources/alexsmobs.mixins.json | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/github/alexthe666/alexsmobs/mixin/LevelChunkSectionAccessor.java diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMungus.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMungus.java index 7380cabf0..56b94f878 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMungus.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMungus.java @@ -10,6 +10,7 @@ import com.github.alexthe666.alexsmobs.message.MessageMungusBiomeChange; import com.github.alexthe666.alexsmobs.misc.AMSoundRegistry; import com.github.alexthe666.alexsmobs.misc.AMTagRegistry; +import com.github.alexthe666.alexsmobs.mixin.LevelChunkSectionAccessor; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.QuartPos; @@ -312,8 +313,7 @@ private void setChunkBiomes(LevelChunk chunk, PalettedContainer> c int j = chunk.getSectionIndex(QuartPos.toBlock(l)); LevelChunkSection section = chunk.getSection(j); if(section != null){ - // section.biomes is private in 1.21 - biome modification needs different approach - // section.biomes = container; + ((LevelChunkSectionAccessor) section).setBiomes(container); } } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/mixin/LevelChunkSectionAccessor.java b/src/main/java/com/github/alexthe666/alexsmobs/mixin/LevelChunkSectionAccessor.java new file mode 100644 index 000000000..1154a1de8 --- /dev/null +++ b/src/main/java/com/github/alexthe666/alexsmobs/mixin/LevelChunkSectionAccessor.java @@ -0,0 +1,14 @@ +package com.github.alexthe666.alexsmobs.mixin; + +import net.minecraft.core.Holder; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.PalettedContainerRO; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(LevelChunkSection.class) +public interface LevelChunkSectionAccessor { + @Accessor("biomes") + void setBiomes(PalettedContainerRO> biomes); +} diff --git a/src/main/resources/alexsmobs.mixins.json b/src/main/resources/alexsmobs.mixins.json index bfa5aaed6..66e9c52c4 100644 --- a/src/main/resources/alexsmobs.mixins.json +++ b/src/main/resources/alexsmobs.mixins.json @@ -6,6 +6,7 @@ "refmap": "alexsmobs.refmap.json", "mixins": [ "AbstractArrowAccessor", + "LevelChunkSectionAccessor", "LivingEntityAccessor", "MixinBlock", "MixinBrewingStandBlockEntity", From 67227ae4c82374e51a1d0e58220805a1399795d9 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:43:27 +0300 Subject: [PATCH 06/38] Call super in EntityKangaroo onAddedToLevel --- .../com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java index 9b81e8d27..33822d93c 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java @@ -418,6 +418,7 @@ public double getPassengersRidingOffset() { @Override public void onAddedToLevel() { // onAddedToWorld removed in 1.21; + super.onAddedToLevel(); updateClientInventory(); } From 1833ba6dd943edf79b20a29dae6d15db8ef94511 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:22:14 +0300 Subject: [PATCH 07/38] Fix mobs no longer being immune to fall damage on 1.21.1 --- .../com/github/alexthe666/alexsmobs/entity/EntityBaldEagle.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityBananaSlug.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityBlueJay.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityBunfungus.java | 2 +- .../alexthe666/alexsmobs/entity/EntityCapuchinMonkey.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityCosmaw.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityCosmicCod.java | 2 +- .../alexthe666/alexsmobs/entity/EntityCrimsonMosquito.java | 2 +- .../java/com/github/alexthe666/alexsmobs/entity/EntityCrow.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityEndergrade.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityEnderiophage.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityFarseer.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityFlutter.java | 2 +- .../java/com/github/alexthe666/alexsmobs/entity/EntityFly.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityFlyingFish.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityFroststalker.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityGuster.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityHummingbird.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityJerboa.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityLaviathan.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityLeafcutterAnt.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityMurmurHead.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityPotoo.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityRoadrunner.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityRockyRoller.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntitySeagull.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityShoebill.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntitySkreecher.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntitySnowLeopard.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntitySoulVulture.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntitySpectre.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntitySugarGlider.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntitySunbird.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityTarantulaHawk.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityTiger.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityToucan.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityUnderminer.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityWarpedMosco.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityWarpedToad.java | 2 +- 40 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBaldEagle.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBaldEagle.java index 84920b677..83ff3beff 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBaldEagle.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBaldEagle.java @@ -620,7 +620,7 @@ public AgeableMob getBreedOffspring(ServerLevel p_241840_1_, AgeableMob p_241840 return AMEntityRegistry.BALD_EAGLE.get().create(p_241840_1_); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBananaSlug.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBananaSlug.java index f345af905..01416a18e 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBananaSlug.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBananaSlug.java @@ -100,7 +100,7 @@ public boolean canTrample(BlockState state, BlockPos pos, float fallDistance) { return false; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBlueJay.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBlueJay.java index efb50883f..17eb552cc 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBlueJay.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBlueJay.java @@ -139,7 +139,7 @@ public boolean isFood(ItemStack stack) { return stack.is(AMTagRegistry.BLUE_JAY_BREEDABLES); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBunfungus.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBunfungus.java index 6a62682b5..449a9f466 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBunfungus.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBunfungus.java @@ -158,7 +158,7 @@ protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(TRANSFORMS_IN, 0); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCapuchinMonkey.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCapuchinMonkey.java index 187ccf10a..9c8055b20 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCapuchinMonkey.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCapuchinMonkey.java @@ -258,7 +258,7 @@ public void tick() { AnimationHandler.INSTANCE.updateAnimations(this); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmaw.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmaw.java index a2dc4b187..a1c47e4a6 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmaw.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmaw.java @@ -378,7 +378,7 @@ public boolean isMouthOpen() { return !this.getMainHandItem().isEmpty(); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmicCod.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmicCod.java index bc00728fb..e74c7ad12 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmicCod.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCosmicCod.java @@ -285,7 +285,7 @@ public void decrementFishPitch(float pitch) { entityData.set(FISH_PITCH, getFishPitch() - pitch); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrimsonMosquito.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrimsonMosquito.java index 51a15a354..cec27aa04 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrimsonMosquito.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrimsonMosquito.java @@ -573,7 +573,7 @@ public void handleEntityEvent(byte id) { } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrow.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrow.java index 919815b8c..fba0525e9 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrow.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCrow.java @@ -165,7 +165,7 @@ public boolean canTrample(BlockState state, BlockPos pos, float fallDistance) { return false; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEndergrade.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEndergrade.java index c84aaa204..f37c1e616 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEndergrade.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEndergrade.java @@ -259,7 +259,7 @@ public void tick() { } } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEnderiophage.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEnderiophage.java index a12baf510..01946802e 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEnderiophage.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityEnderiophage.java @@ -192,7 +192,7 @@ protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(MISSING_EYE, false); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFarseer.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFarseer.java index b64b6f63c..9e0e1c227 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFarseer.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFarseer.java @@ -96,7 +96,7 @@ public boolean isNoGravity() { return true; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlutter.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlutter.java index 923792e09..7044d16f5 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlutter.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlutter.java @@ -147,7 +147,7 @@ private void switchNavigator(boolean onLand) { } } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFly.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFly.java index c6993b7cc..6ff85e0cd 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFly.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFly.java @@ -171,7 +171,7 @@ protected float getStandingEyeHeight(Pose poseIn, EntityDimensions sizeIn) { return this.isBaby() ? sizeIn.height() * 0.5F : sizeIn.height() * 0.5F; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlyingFish.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlyingFish.java index 486b5328d..cc85f02ba 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlyingFish.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFlyingFish.java @@ -209,7 +209,7 @@ protected SoundEvent getSwimSound() { return SoundEvents.FISH_SWIM; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFroststalker.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFroststalker.java index 0f1beb794..a0a5a9acc 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFroststalker.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityFroststalker.java @@ -124,7 +124,7 @@ public static AttributeSupplier.Builder bakeAttributes() { return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 24D).add(Attributes.ARMOR, 2.0D).add(Attributes.ATTACK_DAMAGE, 4.5D).add(Attributes.MOVEMENT_SPEED, 0.3F); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGuster.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGuster.java index 403eae578..eca1f52a0 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGuster.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGuster.java @@ -117,7 +117,7 @@ protected PathNavigation createNavigation(Level worldIn) { return new GroundPathNavigatorWide(this, worldIn); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityHummingbird.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityHummingbird.java index f27badaaa..bcc5682ca 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityHummingbird.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityHummingbird.java @@ -140,7 +140,7 @@ public boolean isStableDestination(BlockPos pos) { return flyingpathnavigator; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityJerboa.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityJerboa.java index 94bf178de..f1a870ef1 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityJerboa.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityJerboa.java @@ -280,7 +280,7 @@ protected float getJumpPower() { return horizontalCollision ? super.getJumpPower() + 0.2F : 0.25F + random.nextFloat() * 0.15F; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java index 33822d93c..9bb32d05c 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityKangaroo.java @@ -794,7 +794,7 @@ protected float getJumpPower() { return 0.5F; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathan.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathan.java index bd6120d89..3f687ef87 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathan.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathan.java @@ -893,7 +893,7 @@ public float getWaterLevelAbove() { return (float) (l + 1); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLeafcutterAnt.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLeafcutterAnt.java index 4c522130e..141902d76 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLeafcutterAnt.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLeafcutterAnt.java @@ -167,7 +167,7 @@ public boolean canTrample(BlockState state, BlockPos pos, float fallDistance) { return false; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java index a794a8288..a8c0706ec 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java @@ -106,7 +106,7 @@ public static AttributeSupplier.Builder bakeAttributes() { return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 30.0D).add(Attributes.FOLLOW_RANGE, 48.0D).add(Attributes.ATTACK_DAMAGE, 3.0D).add(Attributes.MOVEMENT_SPEED, 0.2F); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPotoo.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPotoo.java index dcbceaaad..f9c6bb829 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPotoo.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPotoo.java @@ -492,7 +492,7 @@ public Vec3 getBlockInViewAway(Vec3 fleePos, float radiusAdd) { return null; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRoadrunner.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRoadrunner.java index 1285a76eb..0a8acc052 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRoadrunner.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRoadrunner.java @@ -186,7 +186,7 @@ public void tick(){ } } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRockyRoller.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRockyRoller.java index c0c6916aa..14c51f3ca 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRockyRoller.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRockyRoller.java @@ -288,7 +288,7 @@ public int getMaxFallDistance() { return super.getMaxFallDistance() * 2; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeagull.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeagull.java index 67bddc74d..f1ec460ec 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeagull.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeagull.java @@ -177,7 +177,7 @@ public boolean checkSpawnRules(LevelAccessor worldIn, MobSpawnType spawnReasonIn return AMEntityRegistry.rollSpawn(AMConfig.seagullSpawnRolls, this.getRandom(), spawnReasonIn); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityShoebill.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityShoebill.java index 8f995867d..f9bc2288c 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityShoebill.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityShoebill.java @@ -155,7 +155,7 @@ public boolean isTargetBlocked(Vec3 target) { return this.level().clip(new ClipContext(Vector3d, target, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this)).getType() != HitResult.Type.MISS; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkreecher.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkreecher.java index eca27e913..a27f3bc68 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkreecher.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkreecher.java @@ -376,7 +376,7 @@ private boolean isOpaqueBlockAt(double x, double y, double z) { } } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySnowLeopard.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySnowLeopard.java index 216f22df0..24fd87c92 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySnowLeopard.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySnowLeopard.java @@ -76,7 +76,7 @@ public boolean isFood(ItemStack stack) { return stack.is(AMTagRegistry.SNOW_LEOPARD_BREEDABLES); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySoulVulture.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySoulVulture.java index 622883b36..d0eb6f67c 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySoulVulture.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySoulVulture.java @@ -321,7 +321,7 @@ private boolean shouldLeavePerch(BlockPos perchPos) { return this.distanceToSqr(Vec3.atCenterOf(perchPos)) > 13 || landingCooldown == 0; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java index d8946e0bd..c021de820 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java @@ -132,7 +132,7 @@ public boolean isNoGravity() { return true; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySugarGlider.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySugarGlider.java index e7dd53848..283e0e1a9 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySugarGlider.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySugarGlider.java @@ -403,7 +403,7 @@ public boolean canTrample(BlockState state, BlockPos pos, float fallDistance) { return false; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java index 96283d678..94b17cf1e 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java @@ -127,7 +127,7 @@ public boolean isNoGravity() { return true; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTarantulaHawk.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTarantulaHawk.java index 0bf0c8a81..f75bea2ae 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTarantulaHawk.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTarantulaHawk.java @@ -492,7 +492,7 @@ public boolean isFood(ItemStack stack) { } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTiger.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTiger.java index dd85694bb..cdfa3d7fb 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTiger.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTiger.java @@ -451,7 +451,7 @@ public boolean hurt(DamageSource source, float amount) { return prev; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityToucan.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityToucan.java index ee9fdda24..36776d373 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityToucan.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityToucan.java @@ -296,7 +296,7 @@ public void tick() { } } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java index 5dc3cdf73..7f2a71541 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java @@ -370,7 +370,7 @@ private boolean isActuallyInAWall() { }); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedMosco.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedMosco.java index fee8c4cb8..db884d035 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedMosco.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedMosco.java @@ -134,7 +134,7 @@ protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(HAND_SIDE, true); } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedToad.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedToad.java index c69867190..0930667bb 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedToad.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityWarpedToad.java @@ -203,7 +203,7 @@ protected float getJumpPower() { return 0.5F; } - public boolean causeFallDamage(float distance, float damageMultiplier) { + public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { return false; } From 1c4d79b4dcbf0018678e72347ee99d293e39f352 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:22:14 +0300 Subject: [PATCH 08/38] Fix custom melee attack goals never running on 1.21.1 --- .../github/alexthe666/alexsmobs/entity/EntityGrizzlyBear.java | 4 ++++ .../alexthe666/alexsmobs/entity/ai/CapuchinAIMelee.java | 4 ++++ .../alexthe666/alexsmobs/entity/ai/CrocodileAIMelee.java | 4 ++++ .../alexthe666/alexsmobs/entity/ai/KangarooAIMelee.java | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGrizzlyBear.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGrizzlyBear.java index 1b5b33487..4df758cc0 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGrizzlyBear.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGrizzlyBear.java @@ -772,6 +772,10 @@ public MeleeAttackGoal() { super(EntityGrizzlyBear.this, 1.25D, true); } + protected void checkAndPerformAttack(LivingEntity enemy) { + this.checkAndPerformAttack(enemy, this.mob.distanceToSqr(enemy)); + } + protected void checkAndPerformAttack(LivingEntity enemy, double distToEnemySqr) { double d0 = this.getAttackReachSqr(enemy); if (distToEnemySqr <= d0) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CapuchinAIMelee.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CapuchinAIMelee.java index c01471be9..8b129fb48 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CapuchinAIMelee.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CapuchinAIMelee.java @@ -22,6 +22,10 @@ public boolean canContinueToUse() { return super.canContinueToUse() && !monkey.attackDecision; } + protected void checkAndPerformAttack(LivingEntity enemy) { + this.checkAndPerformAttack(enemy, this.mob.distanceToSqr(enemy)); + } + protected void checkAndPerformAttack(LivingEntity enemy, double distToEnemySqr) { double d0 = getAttackReachSqr(enemy); if (distToEnemySqr <= d0) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CrocodileAIMelee.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CrocodileAIMelee.java index d0f3e40a1..913feea04 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CrocodileAIMelee.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/CrocodileAIMelee.java @@ -23,6 +23,10 @@ public boolean canContinueToUse() { return super.canContinueToUse() && crocodile.getPassengers().isEmpty(); } + protected void checkAndPerformAttack(LivingEntity enemy) { + this.checkAndPerformAttack(enemy, this.mob.distanceToSqr(enemy)); + } + protected void checkAndPerformAttack(LivingEntity enemy, double distToEnemySqr) { double d0 = getAttackReachSqr(enemy); if (distToEnemySqr <= d0) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/KangarooAIMelee.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/KangarooAIMelee.java index 1817216f9..e5b264e10 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/KangarooAIMelee.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/KangarooAIMelee.java @@ -103,6 +103,10 @@ public BlockPos generateWaterPos() { return blockpos; } + protected void checkAndPerformAttack(LivingEntity enemy) { + this.checkAndPerformAttack(enemy, this.mob.distanceToSqr(enemy)); + } + protected void checkAndPerformAttack(LivingEntity enemy, double distToEnemySqr) { double d0 = getAttackReachSqr(enemy) + 5D; if (distToEnemySqr <= d0) { From 7cf2b4273f8c50965966b23981b3f542ca37024c Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:22:14 +0300 Subject: [PATCH 09/38] Fix straddleboard riders being positioned too low --- .../alexthe666/alexsmobs/entity/EntityStraddleboard.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java index 11b598fb2..1d10cefb6 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java @@ -107,6 +107,10 @@ public double getPassengersRidingOffset() { return 0.5D; } + protected Vec3 getPassengerAttachmentPoint(Entity passenger, EntityDimensions dimensions, float partialTick) { + return new Vec3(0.0D, this.getPassengersRidingOffset(), 0.0D); + } + public float getBoardRot(){ return this.entityData.get(BOARD_ROT); } From 51acc39844bbee48963552fc261487ee4b2352ad Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:24:32 +0300 Subject: [PATCH 10/38] Fix spawn initialization never running for orca, platypus, seal and void worm --- .../java/com/github/alexthe666/alexsmobs/entity/EntityOrca.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityPlatypus.java | 2 +- .../java/com/github/alexthe666/alexsmobs/entity/EntitySeal.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityOrca.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityOrca.java index 8ccdd6c35..8328d695e 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityOrca.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityOrca.java @@ -365,7 +365,7 @@ public boolean shouldUseJumpAttack(LivingEntity attackTarget) { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor worldIn, DifficultyInstance difficultyIn, MobSpawnType - reason, @Nullable SpawnGroupData spawnDataIn, @Nullable CompoundTag dataTag) { + reason, @Nullable SpawnGroupData spawnDataIn) { this.setAirSupply(this.getMaxAirSupply()); this.setVariant(determineVariant(this.blockPosition())); this.setXRot(0.0F); diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPlatypus.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPlatypus.java index e4a2a11e4..5a62c4fe3 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPlatypus.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityPlatypus.java @@ -249,7 +249,7 @@ public void spawnGroundEffects() { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor worldIn, DifficultyInstance difficultyIn, MobSpawnType - reason, @Nullable SpawnGroupData spawnDataIn, @Nullable CompoundTag dataTag) { + reason, @Nullable SpawnGroupData spawnDataIn) { this.setAirSupply(this.getMaxAirSupply()); return super.finalizeSpawn(worldIn, difficultyIn, reason, spawnDataIn); } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeal.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeal.java index a4ffc778d..c5e358d06 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeal.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySeal.java @@ -337,7 +337,7 @@ public int getMaxHeadYRot() { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor worldIn, DifficultyInstance difficultyIn, MobSpawnType - reason, @Nullable SpawnGroupData data, @Nullable CompoundTag dataTag) { + reason, @Nullable SpawnGroupData data) { this.setArctic(this.isBiomeArctic(worldIn, this.blockPosition())); int i; if (data instanceof SealGroupData) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java index c88b02a88..3389a1ff4 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java @@ -486,7 +486,7 @@ public void resetWormScales() { @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor worldIn, DifficultyInstance difficultyIn, MobSpawnType - reason, @Nullable SpawnGroupData spawnDataIn, @Nullable CompoundTag dataTag) { + reason, @Nullable SpawnGroupData spawnDataIn) { this.setSegmentCount(25 + random.nextInt(15)); this.setXRot(0.0F); this.setBaseMaxHealth(AMConfig.voidWormMaxHealth, true); From 0641e4314395aa476d8177566f537f21acabd5c6 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:39:18 +0300 Subject: [PATCH 11/38] Correctly restrict skelewags spawned at structures --- .../com/github/alexthe666/alexsmobs/entity/EntitySkelewag.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkelewag.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkelewag.java index a46e205af..f990aa9f9 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkelewag.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySkelewag.java @@ -229,7 +229,7 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor worldIn, DifficultyInsta drowned.startRiding(this); worldIn.addFreshEntityWithPassengers(drowned); } - if(reason == MobSpawnType.STRUCTURE){ + if (AMConfig.restrictSkelewagSpawns) { this.restrictTo(this.blockPosition(), 15); } return super.finalizeSpawn(worldIn, difficultyIn, reason, spawnDataIn); From f523739ec16d5d9b7468bb17305e0d65c0ec2fb5 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:43:23 +0300 Subject: [PATCH 12/38] Fix void worm dropping its loot twice on death --- .../com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java index 3389a1ff4..b2bc133f7 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java @@ -155,7 +155,7 @@ public ItemEntity spawnAtLocation(ItemStack stack) { } // dropAllDeathLoot has different signature in 1.21 - takes ServerLevel and DamageSource - protected void dropAllDeathLoot(DamageSource source) { + protected void dropAllDeathLoot(ServerLevel level, DamageSource source) { } From 9861c4675518738947059393164c475ffe1439cc Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:43:23 +0300 Subject: [PATCH 13/38] Fix void worm leash override no longer applying --- .../com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java index b2bc133f7..9836a7646 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java @@ -259,7 +259,7 @@ public Entity getChild() { return null; } - public boolean canBeLeashed(Player player) { + public boolean canBeLeashed() { return true; } From b34f9c91091053ae92e9a76fa8a267627aed6f57 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:43:23 +0300 Subject: [PATCH 14/38] Fix experience reward overrides not applying to void worm and murmur head --- .../github/alexthe666/alexsmobs/entity/EntityMurmurHead.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java index a8c0706ec..c75bc02b5 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityMurmurHead.java @@ -76,7 +76,7 @@ protected PathNavigation createNavigation(Level level) { return flyingpathnavigation; } - public int getExperienceReward() { + protected int getBaseExperienceReward() { return 0; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java index 9836a7646..380ad3e2c 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityVoidWorm.java @@ -263,7 +263,7 @@ public boolean canBeLeashed() { return true; } - public int getExperienceReward(){ + protected int getBaseExperienceReward(){ return this.isSplitter() ? 8 : 50; } From 9f90a818434c617926b29c66b3a4246610879586 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:43:23 +0300 Subject: [PATCH 15/38] Fix fullbright rendering override no longer applying to spectre, sunbird and underminer --- .../com/github/alexthe666/alexsmobs/entity/EntitySpectre.java | 2 +- .../com/github/alexthe666/alexsmobs/entity/EntitySunbird.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityUnderminer.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java index c021de820..dd8e62f8e 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySpectre.java @@ -124,7 +124,7 @@ public SpawnGroupData finalizeSpawn(ServerLevelAccessor worldIn, DifficultyInsta } - public float getBrightness() { + public float getLightLevelDependentMagicValue() { return 1.0F; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java index 94b17cf1e..9de6ce297 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntitySunbird.java @@ -119,7 +119,7 @@ protected void registerGoals() { this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); } - public float getBrightness() { + public float getLightLevelDependentMagicValue() { return 1.0F; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java index 7f2a71541..d15680e73 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityUnderminer.java @@ -377,7 +377,7 @@ public boolean causeFallDamage(float distance, float damageMultiplier, DamageSou protected void checkFallDamage(double y, boolean onGroundIn, BlockState state, BlockPos pos) { } - public float getBrightness() { + public float getLightLevelDependentMagicValue() { return 1.0F; } From 1c3be316681f01054f9b7a20337e475bebf9703a Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:43:23 +0300 Subject: [PATCH 16/38] Fix rain frog walk animation override no longer applying --- .../com/github/alexthe666/alexsmobs/entity/EntityRainFrog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRainFrog.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRainFrog.java index 84c8c65f7..6390f1bcc 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRainFrog.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityRainFrog.java @@ -267,7 +267,7 @@ public boolean isSleeping() { return this.isBurrowed(); } - public void calculateEntityAnimation(LivingEntity mob, boolean flying) { + public void calculateEntityAnimation(boolean flying) { float f1 = (float)Mth.length(this.getX() - this.xo, 0, this.getZ() - this.zo); float f2 = Math.min(f1 * 128.0F, 1.0F); this.walkAnimation.update(f2, 0.4F); From 6e38e304c2d921d5351601b6e48c82c5ee070028 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 22:46:54 +0300 Subject: [PATCH 17/38] Fix oversized block entity renders being culled from view --- .../alexsmobs/client/render/tile/RenderCapsid.java | 6 ++++++ .../alexsmobs/client/render/tile/RenderEndPirateAnchor.java | 6 ++++++ .../client/render/tile/RenderEndPirateAnchorWinch.java | 6 ++++++ .../alexsmobs/client/render/tile/RenderEndPirateDoor.java | 6 ++++++ .../alexsmobs/client/render/tile/RenderEndPirateFlag.java | 6 ++++++ .../client/render/tile/RenderEndPirateShipWheel.java | 6 ++++++ 6 files changed, 36 insertions(+) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderCapsid.java b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderCapsid.java index 3c035ae34..439c3c25b 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderCapsid.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderCapsid.java @@ -13,6 +13,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.AABB; import org.joml.Quaternionf; import java.util.Random; @@ -38,6 +39,11 @@ protected int getModelCount(ItemStack stack) { return i; } + @Override + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } + @Override public void render(T entity, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { ItemStack stack = entity.getItem(0); diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchor.java b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchor.java index d30878bb8..7e903d0be 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchor.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchor.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.AABB; public class RenderEndPirateAnchor implements BlockEntityRenderer { @@ -22,6 +23,11 @@ public class RenderEndPirateAnchor implemen public RenderEndPirateAnchor(Context rendererDispatcherIn) { } + @Override + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } + @Override public void render(T tileEntityIn, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchorWinch.java b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchorWinch.java index 70c4c75fc..fd30a8f17 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchorWinch.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateAnchorWinch.java @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.AABB; public class RenderEndPirateAnchorWinch implements BlockEntityRenderer { @@ -24,6 +25,11 @@ public class RenderEndPirateAnchorWinch implements BlockEntityRenderer { @@ -22,6 +23,11 @@ public class RenderEndPirateDoor implements B public RenderEndPirateDoor(Context rendererDispatcherIn) { } + @Override + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } + @Override public void render(T tileEntityIn, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateFlag.java b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateFlag.java index b74ebab92..aaf4b00d7 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateFlag.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateFlag.java @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.AABB; public class RenderEndPirateFlag implements BlockEntityRenderer { @@ -21,6 +22,11 @@ public class RenderEndPirateFlag implements B public RenderEndPirateFlag(Context rendererDispatcherIn) { } + @Override + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } + @Override public void render(T tileEntityIn, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { diff --git a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateShipWheel.java b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateShipWheel.java index 170733393..a5c093629 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateShipWheel.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/client/render/tile/RenderEndPirateShipWheel.java @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.AABB; public class RenderEndPirateShipWheel implements BlockEntityRenderer { @@ -23,6 +24,11 @@ public class RenderEndPirateShipWheel im public RenderEndPirateShipWheel(Context rendererDispatcherIn) { } + @Override + public AABB getRenderBoundingBox(T blockEntity) { + return blockEntity.getRenderBoundingBox(); + } + @Override public void render(T tileEntityIn, float partialTicks, PoseStack matrixStackIn, MultiBufferSource bufferIn, int combinedLightIn, int combinedOverlayIn) { From b15d4258095b9a68f40ebb96603a252f822ff687 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 18/38] Fix straddlers and stradpoles no longer being able to stand on lava --- .../github/alexthe666/alexsmobs/entity/EntityStraddler.java | 4 ++-- .../github/alexthe666/alexsmobs/entity/EntityStradpole.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddler.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddler.java index 868b3d49c..65e322eed 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddler.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddler.java @@ -42,7 +42,7 @@ import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; -import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.pathfinder.PathFinder; import net.minecraft.world.level.pathfinder.PathType; import net.minecraft.world.level.pathfinder.WalkNodeEvaluator; @@ -214,7 +214,7 @@ public boolean isOnFire() { return false; } - public boolean canStandOnFluid(Fluid p_230285_1_) { + public boolean canStandOnFluid(FluidState p_230285_1_) { return p_230285_1_.is(FluidTags.LAVA); } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStradpole.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStradpole.java index 88c0ff927..79c8fc2f6 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStradpole.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStradpole.java @@ -45,7 +45,7 @@ import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; -import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.level.pathfinder.PathType; import net.minecraft.world.phys.BlockHitResult; @@ -371,7 +371,7 @@ public boolean isOnFire() { return false; } - public boolean canStandOnFluid(Fluid p_230285_1_) { + public boolean canStandOnFluid(FluidState p_230285_1_) { return p_230285_1_.is(FluidTags.LAVA); } From 30ed338496bd6620d5bb3cc575c4f851b32ab55c Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 19/38] Fix custom fuel items not burning in a furnace --- .../java/com/github/alexthe666/alexsmobs/item/ItemFuel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/item/ItemFuel.java b/src/main/java/com/github/alexthe666/alexsmobs/item/ItemFuel.java index 04c38724d..5394a5c7f 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/item/ItemFuel.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/item/ItemFuel.java @@ -2,6 +2,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; public class ItemFuel extends Item { @@ -12,7 +13,7 @@ public ItemFuel(Properties props, int burnTime) { this.burnTime = burnTime; } - public int getBurnTime(ItemStack itemStack) { + public int getBurnTime(ItemStack itemStack, RecipeType recipeType) { return burnTime; } } From 7e9b97a1d480cac0a440946ee87dda89815de0a0 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 20/38] Fix Fleet Footed speed bonus never being removed when the effect ends --- .../github/alexthe666/alexsmobs/effect/EffectFleetFooted.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/effect/EffectFleetFooted.java b/src/main/java/com/github/alexthe666/alexsmobs/effect/EffectFleetFooted.java index 95639208d..e074200b7 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/effect/EffectFleetFooted.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/effect/EffectFleetFooted.java @@ -39,8 +39,8 @@ public boolean applyEffectTick(LivingEntity entity, int amplifier) { return true; } - public void removeAttributeModifiers(LivingEntity livingEntity, AttributeMap attributeMap, int level) { - AttributeInstance modifiableattributeinstance = livingEntity.getAttribute(Attributes.MOVEMENT_SPEED); + public void removeAttributeModifiers(AttributeMap attributeMap) { + AttributeInstance modifiableattributeinstance = attributeMap.getInstance(Attributes.MOVEMENT_SPEED); if(modifiableattributeinstance != null && modifiableattributeinstance.hasModifier(SPRINT_JUMP_SPEED_MODIFIER)){ modifiableattributeinstance.removeModifier(SPRINT_JUMP_SPEED_MODIFIER); } From a919732087e849ae26a9789fc93fcd555fbd89b5 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 21/38] Fix mimicream repair not returning remaining items --- .../alexthe666/alexsmobs/misc/RecipeMimicreamRepair.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/misc/RecipeMimicreamRepair.java b/src/main/java/com/github/alexthe666/alexsmobs/misc/RecipeMimicreamRepair.java index 0a23bc81d..2a4a4d56d 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/misc/RecipeMimicreamRepair.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/misc/RecipeMimicreamRepair.java @@ -7,7 +7,6 @@ import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.crafting.CraftingBookCategory; @@ -96,8 +95,8 @@ public ItemStack assemble(CraftingInput inv, HolderLookup.Provider registries) { } } - public NonNullList getRemainingItems(CraftingContainer inv) { - NonNullList nonnulllist = NonNullList.withSize(inv.getContainerSize(), ItemStack.EMPTY); + public NonNullList getRemainingItems(CraftingInput inv) { + NonNullList nonnulllist = NonNullList.withSize(inv.size(), ItemStack.EMPTY); for (int i = 0; i < nonnulllist.size(); ++i) { ItemStack itemstack = inv.getItem(i); From 325ea9961e4a79016ffac542b10582b660888ef9 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 22/38] Fix hummingbird feeder no longer blocking pathfinding --- .../alexthe666/alexsmobs/block/BlockHummingbirdFeeder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/block/BlockHummingbirdFeeder.java b/src/main/java/com/github/alexthe666/alexsmobs/block/BlockHummingbirdFeeder.java index 4744bb07a..624e43147 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/block/BlockHummingbirdFeeder.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/block/BlockHummingbirdFeeder.java @@ -134,7 +134,7 @@ public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); } - public boolean isPathfindable(BlockState state, BlockGetter worldIn, BlockPos pos, PathComputationType type) { + public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } From 8d3a2586fc3e61a1552cbbb587cbc0b8e6a9520b Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 23/38] Fix end pirate flag particles not spawning --- .../github/alexthe666/alexsmobs/block/BlockEndPirateFlag.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEndPirateFlag.java b/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEndPirateFlag.java index 9f5becc82..4b2991a50 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEndPirateFlag.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEndPirateFlag.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.RandomSource; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -23,7 +24,6 @@ import net.minecraft.world.phys.shapes.VoxelShape; import javax.annotation.Nullable; -import java.util.Random; public class BlockEndPirateFlag extends BaseEntityBlock { public static final MapCodec CODEC = simpleCodec(p -> new BlockEndPirateFlag()); @@ -84,7 +84,7 @@ public BlockEntityTicker getTicker(Level p_152180_, B return createTickerHelper(p_152182_, AMTileEntityRegistry.END_PIRATE_FLAG.get(), TileEntityEndPirateFlag::commonTick); } - public void animateTick(BlockState p_53094_, Level p_53095_, BlockPos p_53096_, Random p_53097_) { + public void animateTick(BlockState p_53094_, Level p_53095_, BlockPos p_53096_, RandomSource p_53097_) { if (p_53097_.nextInt(5) == 0) { final double d0 = (double)p_53096_.getX() + 0.55D - (double)(p_53097_.nextFloat() * 0.1F); final double d1 = (double)p_53096_.getY() + 0.55D - (double)(p_53097_.nextFloat() * 0.1F); From 7b8ece3e66330d2b360d65876ac4231328d5c49d Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 24/38] Fix ender residue returning a pick block result --- .../github/alexthe666/alexsmobs/block/BlockEnderResidue.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEnderResidue.java b/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEnderResidue.java index 4f1a33438..f1fa563e7 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEnderResidue.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/block/BlockEnderResidue.java @@ -8,6 +8,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SoundType; @@ -86,7 +87,7 @@ protected void createBlockStateDefinition(StateDefinition.Builder Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 25/38] Fix leash overrides no longer applying to bone serpent and centipede --- .../github/alexthe666/alexsmobs/entity/EntityBoneSerpent.java | 2 +- .../github/alexthe666/alexsmobs/entity/EntityCentipedeHead.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBoneSerpent.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBoneSerpent.java index 159e25168..106feff9f 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBoneSerpent.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityBoneSerpent.java @@ -118,7 +118,7 @@ public boolean isPushedByFluid() { return false; } - public boolean canBeLeashed(Player player) { + public boolean canBeLeashed() { return true; } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCentipedeHead.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCentipedeHead.java index 6ea2b128c..761dd2c0a 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCentipedeHead.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCentipedeHead.java @@ -285,7 +285,7 @@ public EntityCentipedeBody createBody(LivingEntity parent, boolean tail) { return tail ? new EntityCentipedeBody(AMEntityRegistry.CENTIPEDE_TAIL.get(), parent, 0.84F, 180, 0) : new EntityCentipedeBody(AMEntityRegistry.CENTIPEDE_BODY.get(), parent, 0.84F, 180, 0); } - public boolean canBeLeashed(Player player) { + public boolean canBeLeashed() { return true; } From 97ebf0e0036f67b55b0dabad5a0838db6c155635 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:05:32 +0300 Subject: [PATCH 26/38] Fix caiman walk animation override no longer applying --- .../com/github/alexthe666/alexsmobs/entity/EntityCaiman.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCaiman.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCaiman.java index 1afd45d14..324d880a9 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCaiman.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCaiman.java @@ -358,7 +358,7 @@ public void travel(Vec3 travelVector) { } } - public void calculateEntityAnimation(LivingEntity living, boolean flying) { + public void calculateEntityAnimation(boolean flying) { float f1 = (float) Mth.length(this.getX() - this.xo, 0, this.getZ() - this.zo); float f2 = Math.min(f1 * 8.0F, 1.0F); this.walkAnimation.update(f2, 0.4F); From 82b8f99f6fd6524218c7ebcc54181e345a121e95 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:08:57 +0300 Subject: [PATCH 27/38] Fix special armor attributes not applying on 1.21.1 --- .../alexsmobs/item/ItemModArmor.java | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/item/ItemModArmor.java b/src/main/java/com/github/alexthe666/alexsmobs/item/ItemModArmor.java index 15acc51b9..783bf3cef 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/item/ItemModArmor.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/item/ItemModArmor.java @@ -1,15 +1,12 @@ package com.github.alexthe666.alexsmobs.item; import com.github.alexthe666.alexsmobs.AlexsMobs; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Multimap; import net.minecraft.ChatFormatting; -import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.EquipmentSlotGroup; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; @@ -17,6 +14,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.ItemAttributeModifiers; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.common.NeoForgeMod; @@ -24,10 +22,10 @@ import java.util.List; public class ItemModArmor extends ArmorItem { - private Multimap, AttributeModifier> attributeMapCroc; - private Multimap, AttributeModifier> attributeMapMoose; - private Multimap, AttributeModifier> attributeMapFlyingFish; - private Multimap, AttributeModifier> attributeMapKimono; + private ItemAttributeModifiers attributeMapCroc; + private ItemAttributeModifiers attributeMapMoose; + private ItemAttributeModifiers attributeMapFlyingFish; + private ItemAttributeModifiers attributeMapKimono; private final AMArmorMaterial amMaterial; public ItemModArmor(AMArmorMaterial armorMaterial, ArmorItem.Type slot) { @@ -77,76 +75,81 @@ public void appendHoverText(ItemStack stack, Item.TooltipContext context, List, AttributeModifier> builder = ImmutableMultimap.builder(); + ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder(); + EquipmentSlotGroup slotGroup = EquipmentSlotGroup.bySlot(this.type.getSlot()); ResourceLocation id = ResourceLocation.fromNamespaceAndPath(AlexsMobs.MODID, "armor_croc_" + type.getName()); - builder.put(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE)); - builder.put(NeoForgeMod.SWIM_SPEED, new AttributeModifier(id, 1.0, AttributeModifier.Operation.ADD_VALUE)); + builder.add(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(NeoForgeMod.SWIM_SPEED, new AttributeModifier(id, 1.0, AttributeModifier.Operation.ADD_VALUE), slotGroup); float knockbackResistance = materialIn.getKnockbackResistance(); if (knockbackResistance > 0) { - builder.put(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(id, knockbackResistance, AttributeModifier.Operation.ADD_VALUE)); + builder.add(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(id, knockbackResistance, AttributeModifier.Operation.ADD_VALUE), slotGroup); } attributeMapCroc = builder.build(); } private void buildFlyingFishAttributes(AMArmorMaterial materialIn) { - ImmutableMultimap.Builder, AttributeModifier> builder = ImmutableMultimap.builder(); + ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder(); + EquipmentSlotGroup slotGroup = EquipmentSlotGroup.bySlot(this.type.getSlot()); ResourceLocation id = ResourceLocation.fromNamespaceAndPath(AlexsMobs.MODID, "armor_flyingfish_" + type.getName()); - builder.put(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE)); - builder.put(NeoForgeMod.SWIM_SPEED, new AttributeModifier(id, 0.5, AttributeModifier.Operation.ADD_VALUE)); + builder.add(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(NeoForgeMod.SWIM_SPEED, new AttributeModifier(id, 0.5, AttributeModifier.Operation.ADD_VALUE), slotGroup); attributeMapFlyingFish = builder.build(); } private void buildMooseAttributes(AMArmorMaterial materialIn) { - ImmutableMultimap.Builder, AttributeModifier> builder = ImmutableMultimap.builder(); + ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder(); + EquipmentSlotGroup slotGroup = EquipmentSlotGroup.bySlot(this.type.getSlot()); ResourceLocation id = ResourceLocation.fromNamespaceAndPath(AlexsMobs.MODID, "armor_moose_" + type.getName()); - builder.put(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.ATTACK_KNOCKBACK, new AttributeModifier(id, 2.0, AttributeModifier.Operation.ADD_VALUE)); + builder.add(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.ATTACK_KNOCKBACK, new AttributeModifier(id, 2.0, AttributeModifier.Operation.ADD_VALUE), slotGroup); float knockbackResistance = materialIn.getKnockbackResistance(); if (knockbackResistance > 0) { - builder.put(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(id, knockbackResistance, AttributeModifier.Operation.ADD_VALUE)); + builder.add(Attributes.KNOCKBACK_RESISTANCE, new AttributeModifier(id, knockbackResistance, AttributeModifier.Operation.ADD_VALUE), slotGroup); } attributeMapMoose = builder.build(); } private void buildKimonoAttributes(AMArmorMaterial materialIn) { - ImmutableMultimap.Builder, AttributeModifier> builder = ImmutableMultimap.builder(); + ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder(); + EquipmentSlotGroup slotGroup = EquipmentSlotGroup.bySlot(this.type.getSlot()); ResourceLocation id = ResourceLocation.fromNamespaceAndPath(AlexsMobs.MODID, "armor_kimono_" + type.getName()); - builder.put(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.BLOCK_INTERACTION_RANGE, new AttributeModifier(id, 2.0, AttributeModifier.Operation.ADD_VALUE)); - builder.put(Attributes.ENTITY_INTERACTION_RANGE, new AttributeModifier(id, 2.0, AttributeModifier.Operation.ADD_VALUE)); + builder.add(Attributes.ARMOR, new AttributeModifier(id, materialIn.getDefenseForType(this.type), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.ARMOR_TOUGHNESS, new AttributeModifier(id, materialIn.getToughness(), AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.BLOCK_INTERACTION_RANGE, new AttributeModifier(id, 2.0, AttributeModifier.Operation.ADD_VALUE), slotGroup); + builder.add(Attributes.ENTITY_INTERACTION_RANGE, new AttributeModifier(id, 2.0, AttributeModifier.Operation.ADD_VALUE), slotGroup); attributeMapKimono = builder.build(); } - public Multimap, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) { - if (amMaterial == AMItemRegistry.CROCODILE_ARMOR_MATERIAL && equipmentSlot == this.type.getSlot()) { + @Override + public ItemAttributeModifiers getDefaultAttributeModifiers() { + if (amMaterial == AMItemRegistry.CROCODILE_ARMOR_MATERIAL) { if (attributeMapCroc == null) { buildCrocAttributes(AMItemRegistry.CROCODILE_ARMOR_MATERIAL); } return attributeMapCroc; } - if (amMaterial == AMItemRegistry.MOOSE_ARMOR_MATERIAL && equipmentSlot == this.type.getSlot()) { + if (amMaterial == AMItemRegistry.MOOSE_ARMOR_MATERIAL) { if (attributeMapMoose == null) { buildMooseAttributes(AMItemRegistry.MOOSE_ARMOR_MATERIAL); } return attributeMapMoose; } - if (amMaterial == AMItemRegistry.FLYING_FISH_MATERIAL && equipmentSlot == this.type.getSlot()) { + if (amMaterial == AMItemRegistry.FLYING_FISH_MATERIAL) { if (attributeMapFlyingFish == null) { buildFlyingFishAttributes(AMItemRegistry.FLYING_FISH_MATERIAL); } return attributeMapFlyingFish; } - if (amMaterial == AMItemRegistry.KIMONO_MATERIAL && equipmentSlot == this.type.getSlot()) { + if (amMaterial == AMItemRegistry.KIMONO_MATERIAL) { if (attributeMapKimono == null) { buildKimonoAttributes(AMItemRegistry.KIMONO_MATERIAL); } return attributeMapKimono; } - return ImmutableMultimap.of(); + return super.getDefaultAttributeModifiers(); } @Nullable From 531163ab2bf735188805fe8dba26fff2c05a8eb2 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:16:13 +0300 Subject: [PATCH 28/38] Declare the required Citadel dependency --- src/main/templates/META-INF/neoforge.mods.toml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index fe808a31e..b658a9eb9 100644 --- a/src/main/templates/META-INF/neoforge.mods.toml +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -28,13 +28,12 @@ config = "${mod_id}.mixins.json" ordering="NONE" side="BOTH" -# Citadel dependency - update when available for 1.21.1 -#[[dependencies.${mod_id}]] -# modId="citadel" -# type="required" -# versionRange="[2.6.0,)" -# ordering="AFTER" -# side="BOTH" +[[dependencies.${mod_id}]] + modId="citadel" + type="required" + versionRange="[2.7.0,)" + ordering="AFTER" + side="BOTH" [modproperties.${mod_id}] catalogueItemIcon="alexsmobs:bear_dust" From 1457e8a741390c9dc408a6584d76b25453587a9f Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:16:13 +0300 Subject: [PATCH 29/38] Register the global loot modifiers so mob drops apply --- .../neoforge/loot_modifiers/global_loot_modifiers.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json diff --git a/src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json b/src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json new file mode 100644 index 000000000..5854e3ee6 --- /dev/null +++ b/src/main/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "entries": [ + "alexsmobs:banana_drop", + "alexsmobs:blossom_drop", + "alexsmobs:ancient_dart", + "alexsmobs:pigshoes" + ] +} From 9f83a5a21e46612174b57701afc2030a470ec421 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:16:13 +0300 Subject: [PATCH 30/38] Add the missing structure modifier for structure spawns --- .../neoforge/structure_modifier/am_structure_spawns.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/main/resources/data/alexsmobs/neoforge/structure_modifier/am_structure_spawns.json diff --git a/src/main/resources/data/alexsmobs/neoforge/structure_modifier/am_structure_spawns.json b/src/main/resources/data/alexsmobs/neoforge/structure_modifier/am_structure_spawns.json new file mode 100644 index 000000000..d0fa2c21a --- /dev/null +++ b/src/main/resources/data/alexsmobs/neoforge/structure_modifier/am_structure_spawns.json @@ -0,0 +1,3 @@ +{ + "type": "alexsmobs:am_structure_spawns" +} \ No newline at end of file From 1be6dc104f99e39d7e54f893444f1f18418a2ad1 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:16:13 +0300 Subject: [PATCH 31/38] Remove access transformer entries that no longer resolve on 1.21.1 --- .../resources/META-INF/accesstransformer.cfg | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index b4c6fc736..9a2a1f842 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,26 +1,2 @@ public-f net.minecraft.client.renderer.block.BlockRenderDispatcher liquidBlockRenderer public net.minecraft.client.renderer.entity.LivingEntityRenderer model -public net.minecraft.client.renderer.LevelRenderer viewFrustum -public net.minecraft.client.renderer.chunk.ChunkRenderDispatcher$RenderChunk f_112792_ # needsUpdate -public net.minecraft.world.level.block.state.BlockBehaviour f_60440_ # lootTable -public net.minecraft.world.level.block.entity.ChestBlockEntity f_59072_ # numPlayersUsing -public net.minecraft.world.entity.Mob f_21344_ # navigator -public net.minecraft.world.entity.Entity m_20272_(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3; # getAllowedMovement -public net.minecraft.world.entity.Mob m_21528_()V # recreateLeash -public net.minecraft.world.entity.Mob f_21359_ # leashNBTTag -public-f net.minecraft.world.level.chunk.ChunkBiomeContainer f_62112_ # biomes -public net.minecraft.world.entity.Entity f_19816_ # eyeHeight -public net.minecraft.world.entity.projectile.FireworkRocketEntity f_37019_ # FIREWORK_ITEM -public net.minecraft.world.entity.projectile.FireworkRocketEntity f_37020_ # BOOSTED_ENTITY_ID -public net.minecraft.world.entity.projectile.FireworkRocketEntity f_37023_ # lifetime -public net.minecraft.world.entity.boss.enderdragon.EnderDragon m_31161_(Lnet/minecraft/world/damagesource/DamageSource;F)Z # attackDragonFrom -public net.minecraft.world.entity.Entity f_19839_ # portalCooldown -public net.minecraft.client.Camera m_90568_(DDD)V # move -public net.minecraft.world.entity.LivingEntity f_20899_ # jumping -public net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator f_209104_ # router -public net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator f_64318_ # settings -public net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator f_188607_ # globalFluidPicker -public net.minecraft.world.level.levelgen.Beardifier (Lnet/minecraft/world/level/StructureFeatureManager;Lnet/minecraft/world/level/chunk/ChunkAccess;)V # Beardifier -public net.minecraft.world.level.chunk.LevelChunkSection f_187995_ # biomes -public net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator m_224239_(Lnet/minecraft/world/level/LevelHeightAccessor;Lnet/minecraft/world/level/levelgen/RandomState;IILorg/apache/commons/lang3/mutable/MutableObject;Ljava/util/function/Predicate;)Ljava/util/OptionalInt; # iterateNoiseColumn -public net.minecraft.world.entity.Entity m_284535_(Lnet/minecraft/world/level/Level;)V # setLevel From abd5221bf2287c03e179430a0aded35a71bd07bd Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:19:14 +0300 Subject: [PATCH 32/38] Fix tossed items losing their owner on save --- .../github/alexthe666/alexsmobs/entity/EntityTossedItem.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTossedItem.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTossedItem.java index 9a07b654f..a58ef19cb 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTossedItem.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityTossedItem.java @@ -108,10 +108,12 @@ protected void onHitEntity(EntityHitResult p_213868_1_) { } public void addAdditionalSaveData(CompoundTag compound) { + super.addAdditionalSaveData(compound); compound.putBoolean("Dart", this.isDart()); } public void readAdditionalSaveData(CompoundTag compound) { + super.readAdditionalSaveData(compound); this.setDart(compound.getBoolean("Dart")); } From cf8acb6ab33e0a523cbb810602161c9bb985e58b Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:19:14 +0300 Subject: [PATCH 33/38] Restore the spawn packet guard on multipart entities --- .../github/alexthe666/alexsmobs/entity/EntityCachalotPart.java | 3 ++- .../alexthe666/alexsmobs/entity/EntityGiantSquidPart.java | 3 ++- .../alexthe666/alexsmobs/entity/EntityLaviathanPart.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCachalotPart.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCachalotPart.java index f42fb7047..0d094c920 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCachalotPart.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityCachalotPart.java @@ -9,6 +9,7 @@ import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerEntity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; @@ -83,7 +84,7 @@ public boolean is(Entity entityIn) { return this == entityIn || this.getParent() == entityIn; } - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket(ServerEntity entity) { throw new UnsupportedOperationException(); } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGiantSquidPart.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGiantSquidPart.java index 9c883b43a..6c6e7c21f 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGiantSquidPart.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityGiantSquidPart.java @@ -7,6 +7,7 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerEntity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; @@ -94,7 +95,7 @@ public boolean is(Entity entityIn) { return this == entityIn || this.getParent() == entityIn; } - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket(ServerEntity entity) { throw new UnsupportedOperationException(); } diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathanPart.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathanPart.java index d3a217a75..6f823ed22 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathanPart.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityLaviathanPart.java @@ -6,6 +6,7 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerEntity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; @@ -84,7 +85,7 @@ public boolean is(Entity entityIn) { return this == entityIn || this.getParent() == entityIn; } - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket(ServerEntity entity) { throw new UnsupportedOperationException(); } From 39d78c1aba0222ae441c6f84ade9fb5cdb97acab Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:19:14 +0300 Subject: [PATCH 34/38] Define the straddleboard eye height on its entity type --- .../github/alexthe666/alexsmobs/entity/AMEntityRegistry.java | 2 +- .../alexthe666/alexsmobs/entity/EntityStraddleboard.java | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/AMEntityRegistry.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/AMEntityRegistry.java index d451e7628..271c5f05a 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/AMEntityRegistry.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/AMEntityRegistry.java @@ -78,7 +78,7 @@ public class AMEntityRegistry { public static final DeferredHolder, EntityType> HEMOLYMPH = DEF_REG.register("hemolymph", () -> registerEntity(EntityType.Builder.of(EntityHemolymph::new, MobCategory.MISC).sized(0.5F, 0.5F).fireImmune(), "hemolymph")); public static final DeferredHolder, EntityType> STRADDLER = DEF_REG.register("straddler", () -> registerEntity(EntityType.Builder.of(EntityStraddler::new, MobCategory.MONSTER).sized(1.65F, 3F).fireImmune().setTrackingRange(8), "straddler")); public static final DeferredHolder, EntityType> STRADPOLE = DEF_REG.register("stradpole", () -> registerEntity(EntityType.Builder.of(EntityStradpole::new, MobCategory.WATER_AMBIENT).sized(0.5F, 0.5F).fireImmune().setTrackingRange(4), "stradpole")); - public static final DeferredHolder, EntityType> STRADDLEBOARD = DEF_REG.register("straddleboard", () -> registerEntity(EntityType.Builder.of(EntityStraddleboard::new, MobCategory.MISC).sized(1.5F, 0.35F).fireImmune().setUpdateInterval(1).clientTrackingRange(10).setShouldReceiveVelocityUpdates(true), "straddleboard")); + public static final DeferredHolder, EntityType> STRADDLEBOARD = DEF_REG.register("straddleboard", () -> registerEntity(EntityType.Builder.of(EntityStraddleboard::new, MobCategory.MISC).sized(1.5F, 0.35F).eyeHeight(0.35F).fireImmune().setUpdateInterval(1).clientTrackingRange(10).setShouldReceiveVelocityUpdates(true), "straddleboard")); public static final DeferredHolder, EntityType> EMU = DEF_REG.register("emu", () -> registerEntity(EntityType.Builder.of(EntityEmu::new, MobCategory.CREATURE).sized(1.1F, 1.8F).setTrackingRange(10), "emu")); public static final DeferredHolder, EntityType> EMU_EGG = DEF_REG.register("emu_egg", () -> registerEntity(EntityType.Builder.of(EntityEmuEgg::new, MobCategory.MISC).sized(0.5F, 0.5F).fireImmune(), "emu_egg")); public static final DeferredHolder, EntityType> PLATYPUS = DEF_REG.register("platypus", () -> registerEntity(EntityType.Builder.of(EntityPlatypus::new, MobCategory.CREATURE).sized(0.8F, 0.5F).setTrackingRange(10), "platypus")); diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java index 1d10cefb6..068b09506 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/EntityStraddleboard.java @@ -77,10 +77,6 @@ public static boolean canVehicleCollide(Entity p_242378_0_, Entity entity) { return (entity.canBeCollidedWith() || entity.isPushable()) && !p_242378_0_.isPassengerOfSameVehicle(entity); } - protected float getEyeHeight(Pose poseIn, EntityDimensions sizeIn) { - return sizeIn.height(); - } - @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { builder.define(TIME_SINCE_HIT, 0); From abbfc22c9f96dcaa4da4f1bf48bbf66171b67c81 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:19:14 +0300 Subject: [PATCH 35/38] Fix biome visual refresh using the wrong region corners --- src/main/java/com/github/alexthe666/alexsmobs/ClientProxy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/ClientProxy.java b/src/main/java/com/github/alexthe666/alexsmobs/ClientProxy.java index 34f04f44d..7f6cbe09b 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/ClientProxy.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/ClientProxy.java @@ -415,7 +415,7 @@ public void onEntityStatus(Entity entity, byte updateKind) { } public void updateBiomeVisuals(int x, int z) { - Minecraft.getInstance().levelRenderer.setBlocksDirty(x - 32, 0, x - 32, z + 32, 255, z + 32); + Minecraft.getInstance().levelRenderer.setBlocksDirty(x - 32, 0, z - 32, x + 32, 255, z + 32); } public static void setupParticles(RegisterParticleProvidersEvent registry) { From 40b0fbd55bf4e6304c18c891e938242c641e96ba Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:21:56 +0300 Subject: [PATCH 36/38] Resolve Citadel from Curse Maven instead of a local jar path --- build.gradle | 4 ++-- gradle.properties | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 4b1dcb7cd..ac5efb69f 100644 --- a/build.gradle +++ b/build.gradle @@ -66,8 +66,8 @@ neoForge { sourceSets.main.resources { srcDir 'src/generated/resources' } dependencies { - // Citadel dependency - use local Citadel jar from sibling project - implementation files('../Citadel/build/libs/citadel-1.21.1-2.7.0.jar') + // Citadel dependency - resolved from Curse Maven + implementation "curse.maven:citadel-331936:${citadel_file_id}" // JEI for 1.21.1 (optional, for recipe viewing) compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}" diff --git a/gradle.properties b/gradle.properties index 5b0a37646..5efa12b0f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,3 +23,6 @@ mod_description=New, original, engaging, and aesthetic mobs for Minecraft. # JEI (for 1.21.1) jei_version=19.21.0.247 + +# Citadel (CurseForge project 331936) - 1.21.1 build +citadel_file_id=7476597 From 9ee95a05807e47f66e1c49a4d2d109ef55a1dfb5 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:48:56 +0300 Subject: [PATCH 37/38] Fix seal reward loot table failing to parse on 1.21 --- .../data/alexsmobs/loot_table/gameplay/seal_reward.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json b/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json index 511a41cb2..1faa81d0b 100644 --- a/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json +++ b/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json @@ -8,7 +8,7 @@ "type": "minecraft:loot_table", "weight": 4, "quality": -2, - "name": "minecraft:gameplay/fishing/junk" + "value": "minecraft:gameplay/fishing/junk" }, { "type": "minecraft:item", From 58b02a8736998116ad9c13651b78064e1e90d1d2 Mon Sep 17 00:00:00 2001 From: digi2303 <132196028+digi2303@users.noreply.github.com> Date: Thu, 6 Aug 2026 20:53:07 +0300 Subject: [PATCH 38/38] Give the seal reward loot table a location context --- .../alexthe666/alexsmobs/entity/ai/SealAIDiveForItems.java | 2 +- .../data/alexsmobs/loot_table/gameplay/seal_reward.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/SealAIDiveForItems.java b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/SealAIDiveForItems.java index e6fba6176..bf60f28b1 100644 --- a/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/SealAIDiveForItems.java +++ b/src/main/java/com/github/alexthe666/alexsmobs/entity/ai/SealAIDiveForItems.java @@ -41,7 +41,7 @@ public SealAIDiveForItems(EntitySeal seal) { private static List getItemStacks(EntitySeal seal) { LootTable loottable = seal.level().getServer().reloadableRegistries().getLootTable(SEAL_REWARD); - return loottable.getRandomItems((new LootParams.Builder((ServerLevel) seal.level())).withParameter(LootContextParams.THIS_ENTITY, seal).create(LootContextParamSets.PIGLIN_BARTER)); + return loottable.getRandomItems((new LootParams.Builder((ServerLevel) seal.level())).withParameter(LootContextParams.THIS_ENTITY, seal).withParameter(LootContextParams.ORIGIN, seal.position()).create(LootContextParamSets.GIFT)); } @Override diff --git a/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json b/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json index 1faa81d0b..6be958382 100644 --- a/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json +++ b/src/main/resources/data/alexsmobs/loot_table/gameplay/seal_reward.json @@ -1,5 +1,5 @@ { - "type": "minecraft:barter", + "type": "minecraft:gift", "pools": [ { "rolls": 1,