From aef81cb257f9b2f56fea10d54ebba2818245a174 Mon Sep 17 00:00:00 2001 From: gniftygnome Date: Fri, 15 Sep 2023 11:05:43 -0700 Subject: [PATCH] Update for Minecraft 1.20.2-pre4. - Update for Minecraft 1.20.2-pre4 * Update Fabric API dep; closes #155 * Major changes to piglin bartering loot methods * Significant changes to ItemPredicates in recipe conditions * Significant changes to Ash layer mixin --- .../cinderscapes/block/PhotofernBlock.java | 2 +- .../data/CinderscapesRecipeProvider.java | 54 ++++++++++--------- .../cinderscapes/init/CinderscapesTrades.java | 16 ++---- .../loottables/IntegratedEntry.java | 54 ------------------- .../cinderscapes/mixin/MixinServerWorld.java | 16 ++++-- gradle.properties | 28 +++++----- src/main/resources/fabric.mod.json | 4 +- 7 files changed, 61 insertions(+), 113 deletions(-) delete mode 100644 common/src/main/java/com/terraformersmc/cinderscapes/loottables/IntegratedEntry.java diff --git a/common/src/main/java/com/terraformersmc/cinderscapes/block/PhotofernBlock.java b/common/src/main/java/com/terraformersmc/cinderscapes/block/PhotofernBlock.java index 8b740146..a934a1e5 100644 --- a/common/src/main/java/com/terraformersmc/cinderscapes/block/PhotofernBlock.java +++ b/common/src/main/java/com/terraformersmc/cinderscapes/block/PhotofernBlock.java @@ -16,7 +16,7 @@ public PhotofernBlock() { } @Override - public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state, boolean isClient) { + public boolean isFertilizable(WorldView world, BlockPos pos, BlockState state) { return true; } diff --git a/common/src/main/java/com/terraformersmc/cinderscapes/data/CinderscapesRecipeProvider.java b/common/src/main/java/com/terraformersmc/cinderscapes/data/CinderscapesRecipeProvider.java index f5f79cd0..57ce7074 100644 --- a/common/src/main/java/com/terraformersmc/cinderscapes/data/CinderscapesRecipeProvider.java +++ b/common/src/main/java/com/terraformersmc/cinderscapes/data/CinderscapesRecipeProvider.java @@ -8,21 +8,21 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags; import net.minecraft.advancement.criterion.InventoryChangedCriterion; -import net.minecraft.data.server.recipe.RecipeJsonProvider; +import net.minecraft.data.server.recipe.RecipeExporter; import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; +import net.minecraft.item.Item; import net.minecraft.item.Items; -import net.minecraft.predicate.NbtPredicate; import net.minecraft.predicate.NumberRange; -import net.minecraft.predicate.item.EnchantmentPredicate; import net.minecraft.predicate.item.ItemPredicate; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.book.RecipeCategory; import net.minecraft.registry.tag.ItemTags; +import net.minecraft.registry.tag.TagKey; import net.minecraft.util.Identifier; import java.util.List; -import java.util.function.Consumer; +import java.util.Optional; public class CinderscapesRecipeProvider extends FabricRecipeProvider { protected CinderscapesRecipeProvider(FabricDataOutput dataOutput) { @@ -30,7 +30,7 @@ protected CinderscapesRecipeProvider(FabricDataOutput dataOutput) { } @Override - public void generate(Consumer exporter) { + public void generate(RecipeExporter exporter) { // vanilla recipes ShapedRecipeJsonBuilder.create(RecipeCategory.REDSTONE, Items.COMPARATOR, 1) .pattern(" T ") @@ -39,8 +39,7 @@ public void generate(Consumer exporter) { .input('T', Items.REDSTONE_TORCH) .input('Q', ConventionalItemTags.QUARTZ) .input('S', Items.STONE) - .criterion("has_quartz", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(ConventionalItemTags.QUARTZ, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(ConventionalItemTags.QUARTZ))) .offerTo(exporter, new Identifier("minecraft", "comparator")); ShapedRecipeJsonBuilder.create(RecipeCategory.REDSTONE, Items.DAYLIGHT_DETECTOR, 1) @@ -50,8 +49,7 @@ public void generate(Consumer exporter) { .input('G', Items.GLASS) .input('Q', ConventionalItemTags.QUARTZ) .input('W', ItemTags.WOODEN_SLABS) - .criterion("has_quartz", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(ConventionalItemTags.QUARTZ, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(ConventionalItemTags.QUARTZ))) .offerTo(exporter, new Identifier("minecraft", "daylight_detector")); ShapedRecipeJsonBuilder.create(RecipeCategory.REDSTONE, Items.OBSERVER, 1) @@ -61,8 +59,7 @@ public void generate(Consumer exporter) { .input('C', Items.COBBLESTONE) .input('Q', ConventionalItemTags.QUARTZ) .input('R', Items.REDSTONE) - .criterion("has_quartz", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(ConventionalItemTags.QUARTZ, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(ConventionalItemTags.QUARTZ))) .offerTo(exporter, new Identifier("minecraft", "observer")); @@ -84,8 +81,7 @@ public void generate(Consumer exporter) { .input(CinderscapesItemTags.SULFURS) .input(ItemTags.COALS) .input(Items.BONE_MEAL) - .criterion("has_sulfurs", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.SULFURS, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_sulfurs", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.SULFURS))) .offerTo(exporter); @@ -110,13 +106,11 @@ public void generate(Consumer exporter) { .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.ROSE_QUARTZ_PILLAR, CinderscapesBlocks.ROSE_QUARTZ_BLOCK); createSlabRecipe(RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.ROSE_QUARTZ_SLAB, Ingredient.ofItems(CinderscapesBlocks.CHISELED_ROSE_QUARTZ_BLOCK, CinderscapesBlocks.ROSE_QUARTZ_BLOCK, CinderscapesBlocks.ROSE_QUARTZ_PILLAR)) - .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.ROSE_QUARTZ_CONVERTIBLES, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.ROSE_QUARTZ_CONVERTIBLES))) .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.ROSE_QUARTZ_SLAB, CinderscapesBlocks.ROSE_QUARTZ_BLOCK, 2); createStairsRecipe(CinderscapesBlocks.ROSE_QUARTZ_STAIRS, Ingredient.ofItems(CinderscapesBlocks.CHISELED_ROSE_QUARTZ_BLOCK, CinderscapesBlocks.ROSE_QUARTZ_BLOCK, CinderscapesBlocks.ROSE_QUARTZ_PILLAR)) - .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.ROSE_QUARTZ_CONVERTIBLES, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.ROSE_QUARTZ_CONVERTIBLES))) .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.ROSE_QUARTZ_STAIRS, CinderscapesBlocks.ROSE_QUARTZ_BLOCK); offerSmelting(exporter, List.of(CinderscapesBlocks.ROSE_QUARTZ_BLOCK), RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOOTH_ROSE_QUARTZ, 0.1f, 200, "building_blocks"); @@ -147,13 +141,11 @@ public void generate(Consumer exporter) { .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOKY_QUARTZ_PILLAR, CinderscapesBlocks.SMOKY_QUARTZ_BLOCK); createSlabRecipe(RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOKY_QUARTZ_SLAB, Ingredient.ofItems(CinderscapesBlocks.CHISELED_SMOKY_QUARTZ_BLOCK, CinderscapesBlocks.SMOKY_QUARTZ_BLOCK, CinderscapesBlocks.SMOKY_QUARTZ_PILLAR)) - .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.SMOKY_QUARTZ_CONVERTIBLES, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.SMOKY_QUARTZ_CONVERTIBLES))) .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOKY_QUARTZ_SLAB, CinderscapesBlocks.SMOKY_QUARTZ_BLOCK, 2); createStairsRecipe(CinderscapesBlocks.SMOKY_QUARTZ_STAIRS, Ingredient.ofItems(CinderscapesBlocks.CHISELED_SMOKY_QUARTZ_BLOCK, CinderscapesBlocks.SMOKY_QUARTZ_BLOCK, CinderscapesBlocks.SMOKY_QUARTZ_PILLAR)) - .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.SMOKY_QUARTZ_CONVERTIBLES, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.SMOKY_QUARTZ_CONVERTIBLES))) .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOKY_QUARTZ_STAIRS, CinderscapesBlocks.SMOKY_QUARTZ_BLOCK); offerSmelting(exporter, List.of(CinderscapesBlocks.SMOKY_QUARTZ_BLOCK), RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOOTH_SMOKY_QUARTZ, 0.1f, 200, "building_blocks"); @@ -184,13 +176,11 @@ public void generate(Consumer exporter) { .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SULFUR_QUARTZ_PILLAR, CinderscapesBlocks.SULFUR_QUARTZ_BLOCK); createSlabRecipe(RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SULFUR_QUARTZ_SLAB, Ingredient.ofItems(CinderscapesBlocks.CHISELED_SULFUR_QUARTZ_BLOCK, CinderscapesBlocks.SULFUR_QUARTZ_BLOCK, CinderscapesBlocks.SULFUR_QUARTZ_PILLAR)) - .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.SULFUR_QUARTZ_CONVERTIBLES, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.SULFUR_QUARTZ_CONVERTIBLES))) .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SULFUR_QUARTZ_SLAB, CinderscapesBlocks.SULFUR_QUARTZ_BLOCK, 2); createStairsRecipe(CinderscapesBlocks.SULFUR_QUARTZ_STAIRS, Ingredient.ofItems(CinderscapesBlocks.CHISELED_SULFUR_QUARTZ_BLOCK, CinderscapesBlocks.SULFUR_QUARTZ_BLOCK, CinderscapesBlocks.SULFUR_QUARTZ_PILLAR)) - .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items( - new ItemPredicate(CinderscapesItemTags.SULFUR_QUARTZ_CONVERTIBLES, null, NumberRange.IntRange.ANY, NumberRange.IntRange.ANY, EnchantmentPredicate.ARRAY_OF_ANY, EnchantmentPredicate.ARRAY_OF_ANY, null, NbtPredicate.ANY))) + .criterion("has_quartz_blocks", InventoryChangedCriterion.Conditions.items(getItemTagPredicate(CinderscapesItemTags.SULFUR_QUARTZ_CONVERTIBLES))) .offerTo(exporter); offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SULFUR_QUARTZ_STAIRS, CinderscapesBlocks.SULFUR_QUARTZ_BLOCK); offerSmelting(exporter, List.of(CinderscapesBlocks.SULFUR_QUARTZ_BLOCK), RecipeCategory.BUILDING_BLOCKS, CinderscapesBlocks.SMOOTH_SULFUR_QUARTZ, 0.1f, 200, "building_blocks"); @@ -280,6 +270,20 @@ public void generate(Consumer exporter) { .offerTo(exporter); } + // Returns an ItemPredicate matching any item in the provided ItemTag key. + private static ItemPredicate getItemTagPredicate(TagKey itemTagKey) { + return new ItemPredicate( + Optional.of(itemTagKey), + Optional.empty(), + NumberRange.IntRange.ANY, + NumberRange.IntRange.ANY, + List.of(), + List.of(), + Optional.empty(), + Optional.empty() + ); + } + @Override protected Identifier getRecipeIdentifier(Identifier identifier) { return new Identifier(Cinderscapes.NAMESPACE, identifier.getPath()); diff --git a/common/src/main/java/com/terraformersmc/cinderscapes/init/CinderscapesTrades.java b/common/src/main/java/com/terraformersmc/cinderscapes/init/CinderscapesTrades.java index 369b75b6..47555c34 100644 --- a/common/src/main/java/com/terraformersmc/cinderscapes/init/CinderscapesTrades.java +++ b/common/src/main/java/com/terraformersmc/cinderscapes/init/CinderscapesTrades.java @@ -1,18 +1,12 @@ package com.terraformersmc.cinderscapes.init; -import com.terraformersmc.cinderscapes.Cinderscapes; -import com.terraformersmc.cinderscapes.loottables.IntegratedEntry; import net.fabricmc.fabric.api.loot.v2.LootTableEvents; import net.fabricmc.fabric.api.object.builder.v1.trade.TradeOfferHelper; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.loot.condition.LootCondition; -import net.minecraft.loot.entry.LootPoolEntryType; -import net.minecraft.loot.function.LootFunction; +import net.minecraft.loot.entry.ItemEntry; import net.minecraft.loot.function.SetCountLootFunction; import net.minecraft.loot.provider.number.UniformLootNumberProvider; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; import net.minecraft.util.Identifier; import net.minecraft.village.TradeOffer; import net.minecraft.village.VillagerProfession; @@ -20,16 +14,14 @@ public class CinderscapesTrades { private static final Identifier BARTERING_LOOT_TABLE_ID = new Identifier("minecraft", "gameplay/piglin_bartering"); - public static final LootPoolEntryType INTEGRATED = Registry.register(Registries.LOOT_POOL_ENTRY_TYPE, Cinderscapes.id("integrated"), new LootPoolEntryType(new IntegratedEntry.Serializer())); - public static void init() { LootTableEvents.MODIFY.register((resourceManager, manager, id, supplier, setter) -> { if (BARTERING_LOOT_TABLE_ID.equals(id)) { supplier.modifyPools((pools) -> { - pools .with(new IntegratedEntry(CinderscapesItems.ROSE_QUARTZ, 20, 0, new LootCondition[]{}, new LootFunction[]{SetCountLootFunction.builder(UniformLootNumberProvider.create(5, 12)).build()})) - .with(new IntegratedEntry(CinderscapesItems.SMOKY_QUARTZ, 20, 0, new LootCondition[]{}, new LootFunction[]{SetCountLootFunction.builder(UniformLootNumberProvider.create(5, 12)).build()})) - .with(new IntegratedEntry(CinderscapesItems.SULFUR_QUARTZ, 20, 0, new LootCondition[]{}, new LootFunction[]{SetCountLootFunction.builder(UniformLootNumberProvider.create(5, 12)).build()})); + pools .with(ItemEntry.builder(CinderscapesItems.ROSE_QUARTZ).weight(20).quality(0).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(5, 12))).build()) + .with(ItemEntry.builder(CinderscapesItems.SMOKY_QUARTZ).weight(20).quality(0).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(5, 12))).build()) + .with(ItemEntry.builder(CinderscapesItems.SULFUR_QUARTZ).weight(20).quality(0).apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(5, 12))).build()); }); } }); diff --git a/common/src/main/java/com/terraformersmc/cinderscapes/loottables/IntegratedEntry.java b/common/src/main/java/com/terraformersmc/cinderscapes/loottables/IntegratedEntry.java deleted file mode 100644 index d94b4017..00000000 --- a/common/src/main/java/com/terraformersmc/cinderscapes/loottables/IntegratedEntry.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.terraformersmc.cinderscapes.loottables; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.terraformersmc.cinderscapes.init.CinderscapesTrades; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.loot.condition.LootCondition; -import net.minecraft.loot.context.LootContext; -import net.minecraft.loot.entry.LeafEntry; -import net.minecraft.loot.entry.LootPoolEntryType; -import net.minecraft.loot.function.LootFunction; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import java.util.function.Consumer; - -public class IntegratedEntry extends LeafEntry { - private final Item item; - - public IntegratedEntry(Item item, int weight, int quality, LootCondition[] conditions, LootFunction[] functions) { - super(weight, quality, conditions, functions); - this.item = item; - } - - @Override - public LootPoolEntryType getType() { - return CinderscapesTrades.INTEGRATED; - } - - @Override - protected void generateLoot(Consumer lootConsumer, LootContext context) { - lootConsumer.accept(new ItemStack(this.item)); - } - - public static class Serializer extends LeafEntry.Serializer { - @Override - public void addEntryFields(JsonObject jsonObject, IntegratedEntry itemEntry, JsonSerializationContext jsonSerializationContext) { - super.addEntryFields(jsonObject, itemEntry, jsonSerializationContext); - Identifier identifier = Registries.ITEM.getId(itemEntry.item); - if (identifier == null) { - throw new IllegalArgumentException("Can't serialize unknown item " + itemEntry.item); - } else { - jsonObject.addProperty("name", identifier.toString()); - } - } - - protected IntegratedEntry fromJson(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext, int i, int j, LootCondition[] lootConditions, LootFunction[] lootFunctions) { - Item item = JsonHelper.getItem(jsonObject, "name"); - return new IntegratedEntry(item, i, j, lootConditions, lootFunctions); - } - } -} diff --git a/common/src/main/java/com/terraformersmc/cinderscapes/mixin/MixinServerWorld.java b/common/src/main/java/com/terraformersmc/cinderscapes/mixin/MixinServerWorld.java index 671f8d90..dd8388ba 100644 --- a/common/src/main/java/com/terraformersmc/cinderscapes/mixin/MixinServerWorld.java +++ b/common/src/main/java/com/terraformersmc/cinderscapes/mixin/MixinServerWorld.java @@ -10,13 +10,11 @@ import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.Direction; import net.minecraft.util.profiler.Profiler; import net.minecraft.world.MutableWorldProperties; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; -import net.minecraft.world.chunk.WorldChunk; import net.minecraft.world.dimension.DimensionType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -33,10 +31,18 @@ protected MixinServerWorld(MutableWorldProperties properties, RegistryKey } // TODO: Revisit this and make it easier to read - @Inject(method="tickChunk", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/server/world/ServerWorld;getBiome(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/registry/entry/RegistryEntry;", ordinal = 0), locals = LocalCapture.CAPTURE_FAILHARD) - private void cinderscapes$tickChunk(WorldChunk chunk, int randomTickSpeed, CallbackInfo callback, ChunkPos chunkPos, boolean bl, int i, int j, Profiler profiler, BlockPos blockPos2, BlockPos blockPos3) { + // And fix having two calls to getBiome (maybe requires MixinExtras) + @Inject(method="tickIceAndSnow", + at = @At(value = "INVOKE_ASSIGN", + target = "Lnet/minecraft/server/world/ServerWorld;getBiome(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/registry/entry/RegistryEntry;", + ordinal = 0, + shift = At.Shift.AFTER + ), + locals = LocalCapture.NO_CAPTURE + ) + private void cinderscapes$tickAsh(boolean raining, BlockPos tickPos, CallbackInfo ci) { if (CinderscapesConfig.INSTANCE.enableAshFall) { - BlockPos pos = this.getRandomPosInChunk(i, 0, j, 15); + BlockPos pos = tickPos.mutableCopy(); BlockState state = getBlockState(pos); RegistryEntry biome = this.getBiome(pos); diff --git a/gradle.properties b/gradle.properties index f10a99ac..7435adf5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,26 +4,26 @@ fabric.loom.multiProjectOptimisation=true maven_group=com.terraformersmc archive_name=cinderscapes -minecraft_version=1.20 -yarn_mappings=1.20+build.1 -loader_version=0.14.21 -fabric_version=0.83.0+1.20 +minecraft_version=1.20.2-pre4 +yarn_mappings=1.20.2-pre4+build.1 +loader_version=0.14.22 +fabric_version=0.88.4+1.20.2 # Terraform modules -terraform_biome_remapper_api_version=7.0.1 -terraform_shapes_api_version=7.0.1 -terraform_surfaces_api_version=7.0.1 -terraform_wood_api_version=7.0.1 +terraform_biome_remapper_api_version=8.0.0-beta.1 +terraform_shapes_api_version=8.0.0-beta.1 +terraform_surfaces_api_version=8.0.0-beta.1 +terraform_wood_api_version=8.0.0-beta.1 # Biolith for worldgen module and testing -biolith_version=1.0.0-alpha.8 +biolith_version=1.1.0-alpha.1 # TerraBlender for worldgen module and testing -terrablender_version=1.20-3.0.0.163 +terrablender_version=1.20.1-3.0.0.169 # Other Things -clothconfig_version=11.0.99 -modmenu_version=7.0.1 +clothconfig_version=12.0.107 +modmenu_version=8.0.0-beta.2 vistas_version=2.3.0 # Project Metadata @@ -37,14 +37,14 @@ default_release_type=stable # CurseForge Metadata curseforge_slug=cinderscapes curseforge_id=391429 -curseforge_game_versions=1.20, 1.20.1, Fabric, Quilt +curseforge_game_versions=1.20.2-Snapshot, Fabric, Quilt curseforge_required_dependencies=fabric-api curseforge_optional_dependencies= # Modrinth Metadata modrinth_slug=cinderscapes modrinth_id=QC4wcUXZ -modrinth_game_versions=1.20, 1.20.1 +modrinth_game_versions=1.20.2-pre4 modrinth_mod_loaders=fabric, quilt #modrinth_embedded_dependencies=biolith diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8154d18f..c1ae924e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -36,11 +36,11 @@ }, "depends": { "fabricloader": ">=0.14.11", - "fabric": ">=0.77.0", + "fabric-api": ">=0.77.0", "minecraft": ">=1.20 <1.21" }, "breaks": { "bclib": "<3.0.8", - "modmenu": "<7.0.0-beta" + "modmenu": "<8.0.0-beta" } }