From ce7bf1593440c110223d69e4a7f2bb40314c02df Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sat, 10 Jan 2026 23:29:35 +0200 Subject: [PATCH 01/10] mark correct supported versions and fix >=1.21.4 for neoforge --- loader/fabric/1.21.2/gradle.properties | 2 +- loader/neoforge/1.21.2/gradle.properties | 6 +- loader/neoforge/1.21.4/gradle.properties | 13 ++ .../datagen/LootTableModifierDatagen.java | 218 ++++++++++++++++++ .../mixin/ReloadableRegistriesMixin.java | 48 ++++ ...-table-modifier.version.loader.mixins.json | 11 + settings.gradle | 3 +- 7 files changed, 296 insertions(+), 5 deletions(-) create mode 100644 loader/neoforge/1.21.4/gradle.properties create mode 100644 loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/datagen/LootTableModifierDatagen.java create mode 100644 loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java create mode 100644 loader/neoforge/1.21.4/src/main/resources/loot-table-modifier.version.loader.mixins.json diff --git a/loader/fabric/1.21.2/gradle.properties b/loader/fabric/1.21.2/gradle.properties index be0ae3c..2990d87 100644 --- a/loader/fabric/1.21.2/gradle.properties +++ b/loader/fabric/1.21.2/gradle.properties @@ -6,7 +6,7 @@ monkeylib538_suffix = 1.20.1 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21.2 -supported_minecraft_versions = >=1.21.2 +supported_minecraft_versions = >=1.21.2 <=1.21.10 # These should be automatically updated, unless the environment # variable "DISABLE_PROPERTIES_UPDATE" is set. diff --git a/loader/neoforge/1.21.2/gradle.properties b/loader/neoforge/1.21.2/gradle.properties index 4898463..5f27f44 100644 --- a/loader/neoforge/1.21.2/gradle.properties +++ b/loader/neoforge/1.21.2/gradle.properties @@ -5,9 +5,9 @@ monkeylib538_suffix = 1.21 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21.2 -supported_minecraft_versions = >=1.21.2 -minecraft_version_range = [1.21.2,) +supported_minecraft_versions = >=1.21.2 <=1.21.3 +minecraft_version_range = [1.21.2,1.21.3] neoforge_version = 21.2.1-beta -parchment_minecraft_version = 1.21.1 +parchment_minecraft_version = 1.21.1 parchment_mappings_version = 2024.11.17 diff --git a/loader/neoforge/1.21.4/gradle.properties b/loader/neoforge/1.21.4/gradle.properties new file mode 100644 index 0000000..7f8b149 --- /dev/null +++ b/loader/neoforge/1.21.4/gradle.properties @@ -0,0 +1,13 @@ +project_name = neoforge-1.21.4 +commonModdedVersion = 1.21.2 + +monkeylib538_suffix = 1.21 + +# Miminum Minecraft version supported, check at https://fabricmc.net/develop +minecraft_version = 1.21.4 +supported_minecraft_versions = >=1.21.4 +minecraft_version_range = [1.21.4,1.21.10] + +neoforge_version = 21.4.156 +parchment_minecraft_version = 1.21.4 +parchment_mappings_version = 2025.03.23 diff --git a/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/datagen/LootTableModifierDatagen.java b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/datagen/LootTableModifierDatagen.java new file mode 100644 index 0000000..4d1ae2b --- /dev/null +++ b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/datagen/LootTableModifierDatagen.java @@ -0,0 +1,218 @@ +package top.offsetmonkey538.loottablemodifier.neoforge.v1214.datagen; + +//import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +//import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +//import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +//import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider; +//import net.minecraft.core.HolderLookup; +//import net.minecraft.core.registries.BuiltInRegistries; +//import net.minecraft.core.registries.Registries; +//import net.minecraft.resources.ResourceKey; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.entity.EntityType; +//import net.minecraft.world.item.Items; +//import net.minecraft.world.level.block.Blocks; +//import net.minecraft.world.level.storage.loot.LootPool; +//import net.minecraft.world.level.storage.loot.LootTable; +//import net.minecraft.world.level.storage.loot.entries.LootItem; +//import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +//import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +//import net.minecraft.world.level.storage.loot.predicates.LootItemKilledByPlayerCondition; +//import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +//import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +//import top.offsetmonkey538.loottablemodifier.neoforge.api.datagen.LootModifierProvider; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.LootModifier; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.condition.ConditionAddAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryAddAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryRemoveAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.table.TablePredicate; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.util.RegexPattern; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.pool.PoolAddAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryItemSetAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.pool.PoolRemoveAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.entry.EntryItemPredicate; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ItemWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootConditionWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootPoolWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.entry.LootPoolEntryWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.v1212.mixin.LootContextTypesAccessor; +// +//import java.util.concurrent.CompletableFuture; +//import java.util.function.BiConsumer; +// +//import static top.offsetmonkey538.loottablemodifier.modded.platform.LootTableModifierInitializer.id; +// +///** +// * Datagen for loot modifiers used for testing. +// */ +//public class LootTableModifierDatagen implements DataGeneratorEntrypoint { +// +// @Override +// public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { +// final FabricDataGenerator.Pack pack = fabricDataGenerator.createBuiltinResourcePack(id("example_pack")); +// +// pack.addProvider(ModLootModifierProvider::new); +// pack.addProvider(LootProvider::new); +// } +// +// private static class ModLootModifierProvider extends LootModifierProvider { +// public ModLootModifierProvider(FabricDataOutput dataOutput, CompletableFuture registriesFuture) { +// super(dataOutput, registriesFuture); +// } +// +// @Override +// protected void generate(HolderLookup.Provider lookup) { +// addModifier( +// id("replace_ingots_with_command_block"), +// LootModifier.builder() +// .conditionally( +// EntryItemPredicate.builder(RegexPattern.compile("minecraft:.*_ingot")) +// ) +// .action( +// EntryItemSetAction.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.COMMAND_BLOCK))) +// ) +// ); +// addModifier( +// id("sugarcane_drop_tnt"), +// LootModifier.builder() +// .conditionally( +// EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.SUGAR_CANE))) +// ) +// .action( +// PoolAddAction.builder() +// .pool( +// new LootPoolWrapper(LootPool.lootPool() +// .setRolls(ConstantValue.exactly(1)) +// .add( +// LootItem.lootTableItem(Items.TNT) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) +// ).build()) +// ) +// ) +// ); +// addModifier( +// id("mobs_drop_tnt"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(EntityType.CREEPER.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// .name(EntityType.ZOMBIE.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// ) +// .action( +// PoolAddAction.builder() +// .pool( +// new LootPoolWrapper(LootPool.lootPool() +// .setRolls(ConstantValue.exactly(1)) +// .add( +// LootItem.lootTableItem(Items.TNT) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) +// ).build()) +// ) +// ) +// ); +// addModifier( +// id("empty_table_test"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(ResourceKey.create(Registries.LOOT_TABLE, id("test_empty_table")).location().toString()) +// ) +// .action( +// PoolAddAction.builder() +// .pool( +// new LootPoolWrapper(LootPool.lootPool() +// .setRolls(ConstantValue.exactly(1)) +// .add( +// LootItem.lootTableItem(Items.TNT) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) +// ).build()) +// ) +// ) +// ); +// addModifier( +// id("remove_pools_with_sticks"), +// LootModifier.builder() +// .conditionally( +// EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.STICK))) +// // Exclude witch to test if AllOf and Inverted work + so I can test RemoveEntry on witch. +// .and(TablePredicate.builder().name(EntityType.WITCH.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")).invert()) +// ) +// .action( +// PoolRemoveAction.builder() +// ) +// ); +// addModifier( +// id("add_cake_entry_to_dirt_block"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(Blocks.DIRT.getLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// ) +// .action( +// EntryAddAction.builder() +// .entry( +// LootPoolEntryWrapper.create(LootItem.lootTableItem(Items.CAKE) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))).build()) +// ) +// ) +// ); +// addModifier( +// id("add_command_block_to_all_blocks"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .type(LootContextTypesAccessor.getMAP().inverse().get(LootContextParamSets.BLOCK).toString()) +// ) +// .action( +// EntryAddAction.builder() +// .entry( +// LootPoolEntryWrapper.create(LootItem.lootTableItem(Items.CAKE) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))).build()) +// ) +// ) +// ); +// addModifier( +// id("remove_glowstone_and_gunpowder_from_witch"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder().name(EntityType.WITCH.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// .and( +// EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.GLOWSTONE_DUST))) +// .or(EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.GUNPOWDER)))) +// ) +// ) +// .action( +// EntryRemoveAction.builder() +// ) +// ); +// addModifier( +// id("squid_ink_sac_only_from_player"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(EntityType.SQUID.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// .and(EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.INK_SAC)))) +// ) +// .action( +// ConditionAddAction.builder() +// .onlyPools() +// .condition( +// new LootConditionWrapper(LootItemKilledByPlayerCondition.killedByPlayer().build()) +// ) +// ) +// ); +// } +// } +// +// private static class LootProvider extends SimpleFabricLootTableProvider { +// public LootProvider(FabricDataOutput output, CompletableFuture registryLookup) { +// super(output, registryLookup, LootContextParamSets.CHEST); +// } +// +// @Override +// public void generate(BiConsumer, LootTable.Builder> lootTableBiConsumer) { +// lootTableBiConsumer.accept(ResourceKey.create(Registries.LOOT_TABLE, id("test_empty_table")), LootTable.lootTable()); +// } +// } +//} +// \ No newline at end of file diff --git a/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java new file mode 100644 index 0000000..2295f86 --- /dev/null +++ b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java @@ -0,0 +1,48 @@ +package top.offsetmonkey538.loottablemodifier.neoforge.v1214.mixin; + +import com.google.gson.JsonElement; +import it.unimi.dsi.fastutil.Pair; +import net.minecraft.core.Registry; +import net.minecraft.core.WritableRegistry; +import net.minecraft.resources.RegistryOps; +import net.minecraft.server.ReloadableServerRegistries; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.level.storage.loot.LootDataType; +import net.minecraft.world.level.storage.loot.LootTable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; + +@Mixin( + value = ReloadableServerRegistries.class, + priority = 900 +) +public abstract class ReloadableRegistriesMixin { + @Inject( + //method = "lambda$scheduleRegistryLoad$5(Lnet/minecraft/world/level/storage/loot/LootDataType;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/resources/RegistryOps;)Lnet/minecraft/core/WritableRegistry;", + method = "lambda$scheduleRegistryLoad$5(Lnet/minecraft/world/level/storage/loot/LootDataType;Lnet/minecraft/resources/RegistryOps;Lnet/minecraft/server/packs/resources/ResourceManager;)Lnet/minecraft/core/WritableRegistry;", + at = @At("RETURN") + ) + private static void loot_table_modifier$modifyLootTables(LootDataType lootDataType, RegistryOps registryOps, ResourceManager resourceManager, CallbackInfoReturnable> cir) { + if (lootDataType != LootDataType.TABLE) return; + + //noinspection unchecked + final Registry lootRegistry = (Registry) cir.getReturnValue(); + + LootTableModifierCommon.runModification( + new ResourceManagerWrapper(resourceManager), + lootRegistry + .listElements() + .map(registryEntry -> Pair.of( + new IdentifierWrapper(registryEntry.key().location()), + new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) + )), + registryOps + ); + } +} diff --git a/loader/neoforge/1.21.4/src/main/resources/loot-table-modifier.version.loader.mixins.json b/loader/neoforge/1.21.4/src/main/resources/loot-table-modifier.version.loader.mixins.json new file mode 100644 index 0000000..29d3124 --- /dev/null +++ b/loader/neoforge/1.21.4/src/main/resources/loot-table-modifier.version.loader.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "top.offsetmonkey538.loottablemodifier.neoforge.v1214.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "ReloadableRegistriesMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/settings.gradle b/settings.gradle index 5a9f344..70ea193 100644 --- a/settings.gradle +++ b/settings.gradle @@ -30,4 +30,5 @@ include "loader:fabric:1.21.2" include "loader:neoforge" include "loader:neoforge:1.21" -include "loader:neoforge:1.21.2" \ No newline at end of file +include "loader:neoforge:1.21.2" +include "loader:neoforge:1.21.4" \ No newline at end of file From ac73ee954c3c7bc35867ee10fed1c98364fd33d9 Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 11 Jan 2026 11:32:54 +0200 Subject: [PATCH 02/10] 1.21.11 neoforge project --- loader/neoforge/1.21.11/gradle.properties | 13 ++ .../datagen/LootTableModifierDatagen.java | 218 ++++++++++++++++++ .../mixin/ReloadableRegistriesMixin.java | 48 ++++ ...-table-modifier.version.loader.mixins.json | 11 + loader/neoforge/1.21.4/gradle.properties | 2 +- settings.gradle | 3 +- 6 files changed, 293 insertions(+), 2 deletions(-) create mode 100644 loader/neoforge/1.21.11/gradle.properties create mode 100644 loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/datagen/LootTableModifierDatagen.java create mode 100644 loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java create mode 100644 loader/neoforge/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json diff --git a/loader/neoforge/1.21.11/gradle.properties b/loader/neoforge/1.21.11/gradle.properties new file mode 100644 index 0000000..cd0f28b --- /dev/null +++ b/loader/neoforge/1.21.11/gradle.properties @@ -0,0 +1,13 @@ +project_name = neoforge-1.21.11 +commonModdedVersion = 1.21.2 + +monkeylib538_suffix = 1.21.11 + +# Miminum Minecraft version supported, check at https://fabricmc.net/develop +minecraft_version = 1.21.11 +supported_minecraft_versions = >=1.21.11 +minecraft_version_range = [1.21.11,1.21.11] + +neoforge_version = 21.11.27-beta +parchment_minecraft_version = 1.21.10 +parchment_mappings_version = 2025.10.12 diff --git a/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/datagen/LootTableModifierDatagen.java b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/datagen/LootTableModifierDatagen.java new file mode 100644 index 0000000..764f564 --- /dev/null +++ b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/datagen/LootTableModifierDatagen.java @@ -0,0 +1,218 @@ +package top.offsetmonkey538.loottablemodifier.neoforge.v12111.datagen; + +//import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +//import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +//import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +//import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider; +//import net.minecraft.core.HolderLookup; +//import net.minecraft.core.registries.BuiltInRegistries; +//import net.minecraft.core.registries.Registries; +//import net.minecraft.resources.ResourceKey; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.world.entity.EntityType; +//import net.minecraft.world.item.Items; +//import net.minecraft.world.level.block.Blocks; +//import net.minecraft.world.level.storage.loot.LootPool; +//import net.minecraft.world.level.storage.loot.LootTable; +//import net.minecraft.world.level.storage.loot.entries.LootItem; +//import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; +//import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +//import net.minecraft.world.level.storage.loot.predicates.LootItemKilledByPlayerCondition; +//import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; +//import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +//import top.offsetmonkey538.loottablemodifier.neoforge.api.datagen.LootModifierProvider; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.LootModifier; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.condition.ConditionAddAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryAddAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryRemoveAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.table.TablePredicate; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.util.RegexPattern; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.pool.PoolAddAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryItemSetAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.action.pool.PoolRemoveAction; +//import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.entry.EntryItemPredicate; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ItemWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootConditionWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootPoolWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.entry.LootPoolEntryWrapper; +//import top.offsetmonkey538.loottablemodifier.modded.v1212.mixin.LootContextTypesAccessor; +// +//import java.util.concurrent.CompletableFuture; +//import java.util.function.BiConsumer; +// +//import static top.offsetmonkey538.loottablemodifier.modded.platform.LootTableModifierInitializer.id; +// +///** +// * Datagen for loot modifiers used for testing. +// */ +//public class LootTableModifierDatagen implements DataGeneratorEntrypoint { +// +// @Override +// public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { +// final FabricDataGenerator.Pack pack = fabricDataGenerator.createBuiltinResourcePack(id("example_pack")); +// +// pack.addProvider(ModLootModifierProvider::new); +// pack.addProvider(LootProvider::new); +// } +// +// private static class ModLootModifierProvider extends LootModifierProvider { +// public ModLootModifierProvider(FabricDataOutput dataOutput, CompletableFuture registriesFuture) { +// super(dataOutput, registriesFuture); +// } +// +// @Override +// protected void generate(HolderLookup.Provider lookup) { +// addModifier( +// id("replace_ingots_with_command_block"), +// LootModifier.builder() +// .conditionally( +// EntryItemPredicate.builder(RegexPattern.compile("minecraft:.*_ingot")) +// ) +// .action( +// EntryItemSetAction.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.COMMAND_BLOCK))) +// ) +// ); +// addModifier( +// id("sugarcane_drop_tnt"), +// LootModifier.builder() +// .conditionally( +// EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.SUGAR_CANE))) +// ) +// .action( +// PoolAddAction.builder() +// .pool( +// new LootPoolWrapper(LootPool.lootPool() +// .setRolls(ConstantValue.exactly(1)) +// .add( +// LootItem.lootTableItem(Items.TNT) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) +// ).build()) +// ) +// ) +// ); +// addModifier( +// id("mobs_drop_tnt"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(EntityType.CREEPER.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// .name(EntityType.ZOMBIE.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// ) +// .action( +// PoolAddAction.builder() +// .pool( +// new LootPoolWrapper(LootPool.lootPool() +// .setRolls(ConstantValue.exactly(1)) +// .add( +// LootItem.lootTableItem(Items.TNT) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) +// ).build()) +// ) +// ) +// ); +// addModifier( +// id("empty_table_test"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(ResourceKey.create(Registries.LOOT_TABLE, id("test_empty_table")).location().toString()) +// ) +// .action( +// PoolAddAction.builder() +// .pool( +// new LootPoolWrapper(LootPool.lootPool() +// .setRolls(ConstantValue.exactly(1)) +// .add( +// LootItem.lootTableItem(Items.TNT) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) +// ).build()) +// ) +// ) +// ); +// addModifier( +// id("remove_pools_with_sticks"), +// LootModifier.builder() +// .conditionally( +// EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.STICK))) +// // Exclude witch to test if AllOf and Inverted work + so I can test RemoveEntry on witch. +// .and(TablePredicate.builder().name(EntityType.WITCH.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")).invert()) +// ) +// .action( +// PoolRemoveAction.builder() +// ) +// ); +// addModifier( +// id("add_cake_entry_to_dirt_block"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(Blocks.DIRT.getLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// ) +// .action( +// EntryAddAction.builder() +// .entry( +// LootPoolEntryWrapper.create(LootItem.lootTableItem(Items.CAKE) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))).build()) +// ) +// ) +// ); +// addModifier( +// id("add_command_block_to_all_blocks"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .type(LootContextTypesAccessor.getMAP().inverse().get(LootContextParamSets.BLOCK).toString()) +// ) +// .action( +// EntryAddAction.builder() +// .entry( +// LootPoolEntryWrapper.create(LootItem.lootTableItem(Items.CAKE) +// .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))).build()) +// ) +// ) +// ); +// addModifier( +// id("remove_glowstone_and_gunpowder_from_witch"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder().name(EntityType.WITCH.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// .and( +// EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.GLOWSTONE_DUST))) +// .or(EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.GUNPOWDER)))) +// ) +// ) +// .action( +// EntryRemoveAction.builder() +// ) +// ); +// addModifier( +// id("squid_ink_sac_only_from_player"), +// LootModifier.builder() +// .conditionally( +// TablePredicate.builder() +// .name(EntityType.SQUID.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) +// .and(EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.INK_SAC)))) +// ) +// .action( +// ConditionAddAction.builder() +// .onlyPools() +// .condition( +// new LootConditionWrapper(LootItemKilledByPlayerCondition.killedByPlayer().build()) +// ) +// ) +// ); +// } +// } +// +// private static class LootProvider extends SimpleFabricLootTableProvider { +// public LootProvider(FabricDataOutput output, CompletableFuture registryLookup) { +// super(output, registryLookup, LootContextParamSets.CHEST); +// } +// +// @Override +// public void generate(BiConsumer, LootTable.Builder> lootTableBiConsumer) { +// lootTableBiConsumer.accept(ResourceKey.create(Registries.LOOT_TABLE, id("test_empty_table")), LootTable.lootTable()); +// } +// } +//} +// \ No newline at end of file diff --git a/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java new file mode 100644 index 0000000..b8fd4ee --- /dev/null +++ b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java @@ -0,0 +1,48 @@ +package top.offsetmonkey538.loottablemodifier.neoforge.v12111.mixin; + +import com.google.gson.JsonElement; +import it.unimi.dsi.fastutil.Pair; +import net.minecraft.core.Registry; +import net.minecraft.core.WritableRegistry; +import net.minecraft.resources.RegistryOps; +import net.minecraft.server.ReloadableServerRegistries; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.level.storage.loot.LootDataType; +import net.minecraft.world.level.storage.loot.LootTable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; + +@Mixin( + value = ReloadableServerRegistries.class, + priority = 900 +) +public abstract class ReloadableRegistriesMixin { + @Inject( + //method = "lambda$scheduleRegistryLoad$5(Lnet/minecraft/world/level/storage/loot/LootDataType;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/resources/RegistryOps;)Lnet/minecraft/core/WritableRegistry;", + method = "lambda$scheduleRegistryLoad$5(Lnet/minecraft/world/level/storage/loot/LootDataType;Lnet/minecraft/resources/RegistryOps;Lnet/minecraft/server/packs/resources/ResourceManager;)Lnet/minecraft/core/WritableRegistry;", + at = @At("RETURN") + ) + private static void loot_table_modifier$modifyLootTables(LootDataType lootDataType, RegistryOps registryOps, ResourceManager resourceManager, CallbackInfoReturnable> cir) { + if (lootDataType != LootDataType.TABLE) return; + + //noinspection unchecked + final Registry lootRegistry = (Registry) cir.getReturnValue(); + + LootTableModifierCommon.runModification( + new ResourceManagerWrapper(resourceManager), + lootRegistry + .listElements() + .map(registryEntry -> Pair.of( + new IdentifierWrapper(registryEntry.key().identifier()), + new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) + )), + registryOps + ); + } +} diff --git a/loader/neoforge/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json b/loader/neoforge/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json new file mode 100644 index 0000000..9124207 --- /dev/null +++ b/loader/neoforge/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "top.offsetmonkey538.loottablemodifier.neoforge.v12111.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "ReloadableRegistriesMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/loader/neoforge/1.21.4/gradle.properties b/loader/neoforge/1.21.4/gradle.properties index 7f8b149..bf6b924 100644 --- a/loader/neoforge/1.21.4/gradle.properties +++ b/loader/neoforge/1.21.4/gradle.properties @@ -5,7 +5,7 @@ monkeylib538_suffix = 1.21 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21.4 -supported_minecraft_versions = >=1.21.4 +supported_minecraft_versions = >=1.21.4 <=1.21.10 minecraft_version_range = [1.21.4,1.21.10] neoforge_version = 21.4.156 diff --git a/settings.gradle b/settings.gradle index 70ea193..dc774ad 100644 --- a/settings.gradle +++ b/settings.gradle @@ -31,4 +31,5 @@ include "loader:fabric:1.21.2" include "loader:neoforge" include "loader:neoforge:1.21" include "loader:neoforge:1.21.2" -include "loader:neoforge:1.21.4" \ No newline at end of file +include "loader:neoforge:1.21.4" +include "loader:neoforge:1.21.11" \ No newline at end of file From ef36b65ef507f9755fc0c3c48695bd26b176f9a2 Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 13:47:22 +0200 Subject: [PATCH 03/10] Use identifier wrapper from monkeylib, possibly actually support 1.20.1 to 1.21.11 now? --- .../common/LootTableModifierCommon.java | 10 ++++-- .../common/api/resource/LootModifier.java | 4 +-- .../action/LootModifierActionType.java | 2 +- .../action/LootModifierActionTypes.java | 2 +- .../predicate/LootModifierPredicateType.java | 2 +- .../predicate/LootModifierPredicateTypes.java | 2 +- .../resource/util/LootModifierContext.java | 2 +- .../api/resource/util/RegexPattern.java | 4 +-- .../common/api/wrapper/Identifier.java | 33 ----------------- .../common/api/wrapper/ResourceManager.java | 1 + .../common/platform/PlatformCommandUtils.java | 2 +- .../common/platform/PlatformMain.java | 7 +--- gradle.properties | 2 +- loader/fabric/1.20.1/gradle.properties | 2 +- .../v1201/mixin/LootDataManagerMixin.java | 4 +-- .../v1202/mixin/LootDataManagerMixin.java | 5 +-- .../mixin/ReloadableRegistriesMixin.java | 4 +-- loader/fabric/1.21.2/gradle.properties | 2 +- .../mixin/ReloadableRegistriesMixin.java | 4 +-- loader/fabric/1.21/gradle.properties | 2 +- .../v121/mixin/ReloadableRegistriesMixin.java | 4 +-- loader/fabric/build.gradle | 2 +- .../fabric/platform/FabricPlatformMain.java | 6 ++-- .../mixin/ReloadableRegistriesMixin.java | 4 +-- .../mixin/ReloadableRegistriesMixin.java | 4 +-- .../mixin/ReloadableRegistriesMixin.java | 4 +-- .../v121/mixin/ReloadableRegistriesMixin.java | 4 +-- loader/neoforge/build.gradle | 2 +- .../modded/v1201/impl/TableGetterById.java | 6 ++-- .../impl/wrapper/IdentifierInstantiator.java | 12 ------- .../wrapper/loot/LootTableTypeGetterImpl.java | 2 +- .../v1201/mixin/LootContextTypesAccessor.java | 2 +- ...common.api.wrapper.Identifier$Instantiator | 1 - .../modded/v1202/impl/TableGetterById.java | 6 ++-- .../impl/wrapper/IdentifierInstantiator.java | 12 ------- .../wrapper/loot/LootTableTypeGetterImpl.java | 4 +-- ...common.api.wrapper.Identifier$Instantiator | 1 - .../modded/v1205/impl/TableGetterById.java | 7 ++-- .../impl/wrapper/IdentifierInstantiator.java | 12 ------- .../wrapper/loot/LootTableTypeGetterImpl.java | 4 +-- ...common.api.wrapper.Identifier$Instantiator | 1 - modded/1.21.2/gradle.properties | 2 +- .../modded/v1212/impl/TableGetterById.java | 7 ++-- .../impl/wrapper/IdentifierInstantiator.java | 11 ------ .../wrapper/loot/LootTableTypeGetterImpl.java | 4 +-- .../modded/v1212/mixin/ItemEntryMixin.java | 4 ++- .../v1212/mixin/LootContextTypesAccessor.java | 3 +- ...common.api.wrapper.Identifier$Instantiator | 1 - modded/1.21/gradle.properties | 2 +- .../modded/v121/impl/TableGetterById.java | 7 ++-- .../impl/wrapper/IdentifierInstantiator.java | 12 ------- .../wrapper/loot/LootTableTypeGetterImpl.java | 4 +-- ...common.api.wrapper.Identifier$Instantiator | 1 - modded/build.gradle | 2 ++ .../LootModifierActionTypeRegistryImpl.java | 12 +++---- ...LootModifierPredicateTypeRegistryImpl.java | 14 ++++---- .../impl/wrapper/IdentifierWrapper.java | 36 ------------------- .../impl/wrapper/ResourceManagerWrapper.java | 5 +-- .../impl/wrapper/loot/LootTableWrapper.java | 6 ++-- .../platform/ModdedPlatformCommandUtils.java | 2 +- .../modded/platform/ModdedPlatformMain.java | 14 -------- ...ommon.api.wrapper.Identifier$CodecProvider | 1 - 62 files changed, 102 insertions(+), 244 deletions(-) delete mode 100644 common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/Identifier.java delete mode 100644 modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/IdentifierInstantiator.java delete mode 100644 modded/1.20.1/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator delete mode 100644 modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/IdentifierInstantiator.java delete mode 100644 modded/1.20.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator delete mode 100644 modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/IdentifierInstantiator.java delete mode 100644 modded/1.20.5/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator delete mode 100644 modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/IdentifierInstantiator.java delete mode 100644 modded/1.21.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator delete mode 100644 modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/IdentifierInstantiator.java delete mode 100644 modded/1.21/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator delete mode 100644 modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/IdentifierWrapper.java delete mode 100644 modded/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$CodecProvider diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java index 77fe44a..54b62d0 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java @@ -15,7 +15,7 @@ import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.LootModifierPredicateTypes; import top.offsetmonkey538.loottablemodifier.common.api.resource.LootModifier; import top.offsetmonkey538.loottablemodifier.common.api.resource.util.LootModifierContext; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.ResourceManager; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootPool; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; @@ -136,12 +136,12 @@ private static void runModification(Map modifiers, @Un final LootModifier modifier = modifierEntry.getValue(); if (!modifier.test(context)) continue; - if (IS_DEV) LOGGER.warn("Modifier %s can modify table %s", modifierEntry.getKey(), tableId); + if (IS_DEV) LOGGER.warn("Modifier %s can modify table %s", modifierEntry.getKey().asString(), tableId.asString()); int result = modifier.apply(context); - if (IS_DEV && result != LootModifierAction.MODIFIED_NONE) LOGGER.warn("Modifier %s modified table %s with modified mask %s", modifierEntry.getKey(), tableId, Integer.toUnsignedString(result, 2)); + if (IS_DEV && result != LootModifierAction.MODIFIED_NONE) LOGGER.warn("Modifier %s modified table %s with modified mask %s", modifierEntry.getKey().asString(), tableId.asString(), Integer.toUnsignedString(result, 2)); if ((result & LootModifierAction.MODIFIED_TABLE) == LootModifierAction.MODIFIED_TABLE) tableModified = true; if ((result & LootModifierAction.MODIFIED_POOL) == LootModifierAction.MODIFIED_POOL) poolModified = true; @@ -235,4 +235,8 @@ public static T load(Class clazz) { .findFirst() .orElseThrow(() -> new RuntimeException("Failed to load service for " + clazz.getName())); } + + public static Identifier id(String path) { + return Identifier.of(MOD_ID, path); + } } diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java index 1831dbd..6f40a1a 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java @@ -12,7 +12,7 @@ import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.LootModifierPredicate; import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.table.TablePredicate; import top.offsetmonkey538.loottablemodifier.common.api.resource.util.LootModifierContext; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootPool; import java.util.*; @@ -27,7 +27,7 @@ */ public record LootModifier(@NotNull @UnmodifiableView List actions, @NotNull LootModifierPredicate predicate) implements Predicate { private static final Codec LEGACY_CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.either(Identifier.CODEC_PROVIDER.get(), Identifier.CODEC_PROVIDER.get().listOf()).fieldOf("modifies").forGetter(modifier -> { + Codec.either(Identifier.CODEC, Identifier.CODEC.listOf()).fieldOf("modifies").forGetter(modifier -> { throw new IllegalStateException("Tried using legacy loot table modifier codec for serialization for some reason!"); }), LootPool.CODEC_PROVIDER.get().listOf().optionalFieldOf("pools").forGetter(lootModifier -> Optional.empty()), diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionType.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionType.java index 067adfe..c671529 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionType.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionType.java @@ -4,7 +4,7 @@ import com.mojang.serialization.MapCodec; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import java.util.function.Supplier; diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionTypes.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionTypes.java index 6a0302e..a82025b 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionTypes.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/action/LootModifierActionTypes.java @@ -8,7 +8,7 @@ import top.offsetmonkey538.loottablemodifier.common.api.resource.action.entry.EntryItemSetAction; import top.offsetmonkey538.loottablemodifier.common.api.resource.action.pool.PoolRemoveAction; -import static top.offsetmonkey538.loottablemodifier.common.platform.PlatformMain.id; +import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.id; /** * Contains all {@link LootModifierAction} types available in Loot Table Modifier. diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateType.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateType.java index b2be014..ecc8b64 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateType.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateType.java @@ -4,7 +4,7 @@ import com.mojang.serialization.MapCodec; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import java.util.function.Supplier; diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateTypes.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateTypes.java index fefa084..83191ba 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateTypes.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/predicate/LootModifierPredicateTypes.java @@ -7,7 +7,7 @@ import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.op.InvertedPredicate; import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.table.TablePredicate; -import static top.offsetmonkey538.loottablemodifier.common.platform.PlatformMain.id; +import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.id; /** * Contains all {@link LootModifierPredicate} types available in Loot Table Modifier diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/LootModifierContext.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/LootModifierContext.java index e9cd989..f1d671c 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/LootModifierContext.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/LootModifierContext.java @@ -1,6 +1,6 @@ package top.offsetmonkey538.loottablemodifier.common.api.resource.util; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootPool; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.entry.LootPoolEntry; diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/RegexPattern.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/RegexPattern.java index aa93e69..4b111ba 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/RegexPattern.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/util/RegexPattern.java @@ -5,7 +5,7 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import java.util.regex.Pattern; @@ -19,7 +19,7 @@ * @param pattern the compiled pattern */ public record RegexPattern(boolean isRegex, @NotNull String patternString, @NotNull Pattern pattern) { - private static final Codec INLINE_CODEC = Identifier.CODEC_PROVIDER.get().xmap(identifier -> RegexPattern.literal(identifier.toString()), instance -> Identifier.of(instance.patternString())); + private static final Codec INLINE_CODEC = Identifier.CODEC.xmap(identifier -> RegexPattern.literal(identifier.toString()), instance -> Identifier.of(instance.patternString())); private static final Codec FULL_CODEC = RecordCodecBuilder.create(instance -> instance.group( Codec.STRING.fieldOf("regexPattern").forGetter(RegexPattern::patternString) ).apply(instance, RegexPattern::compile)); diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/Identifier.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/Identifier.java deleted file mode 100644 index 42f748b..0000000 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/Identifier.java +++ /dev/null @@ -1,33 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.common.api.wrapper; - -import com.mojang.serialization.Codec; -import org.jetbrains.annotations.ApiStatus; - -import java.util.function.Function; -import java.util.function.Supplier; - -import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.load; - -public interface Identifier { - Supplier> CODEC_PROVIDER = load(CodecProvider.class); - @ApiStatus.Internal - Function INSTANTIATOR = load(Instantiator.class); - - static Identifier of(String path) { - return INSTANTIATOR.apply(path); - } - String asString(); - String getNamespace(); - String getPath(); - - @ApiStatus.Internal - interface CodecProvider extends Supplier> { - - } - - @ApiStatus.Internal - interface Instantiator extends Function { - - } -} - diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/ResourceManager.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/ResourceManager.java index 304d3c4..556b150 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/ResourceManager.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/wrapper/ResourceManager.java @@ -1,6 +1,7 @@ package top.offsetmonkey538.loottablemodifier.common.api.wrapper; import it.unimi.dsi.fastutil.Pair; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import java.io.BufferedReader; import java.util.function.Predicate; diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformCommandUtils.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformCommandUtils.java index 38aacd4..375ac08 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformCommandUtils.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformCommandUtils.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.serialization.DynamicOps; import org.jetbrains.annotations.ApiStatus; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.load; diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformMain.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformMain.java index 83299a7..b7fc12c 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformMain.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/platform/PlatformMain.java @@ -3,7 +3,7 @@ import com.google.gson.JsonElement; import com.google.gson.stream.JsonWriter; import org.jetbrains.annotations.ApiStatus; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import java.io.IOException; @@ -17,10 +17,5 @@ static void writeSorted(JsonWriter jsonWriter, JsonElement json) throws IOExcept INSTANCE.writeSortedImpl(jsonWriter, json); } - static Identifier id(String path) { - return INSTANCE.idImpl(path); - } - void writeSortedImpl(JsonWriter jsonWriter, JsonElement json) throws IOException; - Identifier idImpl(String path); } diff --git a/gradle.properties b/gradle.properties index edcac28..baeb7e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.parallel = true # Dependencies # MonkeyLib538, check at https://github.com/OffsetMods538/MonkeyLib538 -monkeylib538_version = 3.0.0-beta.1 +monkeylib538_version = 3.0.0-beta.1.1768736638020+343f3fe ## DataFixerUpper, check at https://github.com/Mojang/DataFixerUpper datafixerupper_version = 8.0.16 ## Brigadier, check at https://github.com/Mojang/Brigadier diff --git a/loader/fabric/1.20.1/gradle.properties b/loader/fabric/1.20.1/gradle.properties index 1bc38d7..957f51b 100644 --- a/loader/fabric/1.20.1/gradle.properties +++ b/loader/fabric/1.20.1/gradle.properties @@ -11,4 +11,4 @@ supported_minecraft_versions = 1.20.1 # These should be automatically updated, unless the environment # variable "DISABLE_PROPERTIES_UPDATE" is set. loader_version = 0.18.4 -fapi_version = 0.92.6+1.20.1 +fapi_version = 0.92.7+1.20.1 diff --git a/loader/fabric/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1201/mixin/LootDataManagerMixin.java b/loader/fabric/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1201/mixin/LootDataManagerMixin.java index a66decc..5c81dc7 100644 --- a/loader/fabric/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1201/mixin/LootDataManagerMixin.java +++ b/loader/fabric/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1201/mixin/LootDataManagerMixin.java @@ -12,9 +12,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import java.util.Map; @@ -39,7 +39,7 @@ public abstract class LootDataManagerMixin { lootRegistry.entrySet() .stream() .map(entry -> Pair.of( - new IdentifierWrapper(entry.getKey()), + ModdedIdentifier.of(entry.getKey()), // TODO: can do like this? new LootTableWrapper(entry.getValue()) )), JsonOps.INSTANCE // TODO: Is a RegistryOps not needed on 1.20.1? Doesn't look like the loot table loader uses it so maybe not? diff --git a/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java b/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java index c49df64..80cf2fb 100644 --- a/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java +++ b/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java @@ -12,9 +12,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; +import top.offsetmonkey538.monkeylib538.modded.v1201.api.wrapper.ModdedVersionIdentifier; import java.util.Map; @@ -39,7 +40,7 @@ public abstract class LootDataManagerMixin { lootRegistry.entrySet() .stream() .map(entry -> Pair.of( - new IdentifierWrapper(entry.getKey()), + ModdedVersionIdentifier.of(entry.getKey()), new LootTableWrapper(entry.getValue()) )), JsonOps.INSTANCE // TODO: Is a RegistryOps not needed on 1.20.1? Doesn't look like the loot table loader uses it so maybe not? diff --git a/loader/fabric/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1205/mixin/ReloadableRegistriesMixin.java b/loader/fabric/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1205/mixin/ReloadableRegistriesMixin.java index 3d5f81b..3a652b4 100644 --- a/loader/fabric/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1205/mixin/ReloadableRegistriesMixin.java +++ b/loader/fabric/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1205/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -39,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry.asLookup() .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().location()), + ModdedIdentifier.of(registryEntry.key().location()), // TODO: can I do it like this? new LootTableWrapper(lootRegistry.get(registryEntry.key())) )), registryOps diff --git a/loader/fabric/1.21.2/gradle.properties b/loader/fabric/1.21.2/gradle.properties index 2990d87..3a82ed1 100644 --- a/loader/fabric/1.21.2/gradle.properties +++ b/loader/fabric/1.21.2/gradle.properties @@ -2,7 +2,7 @@ project_name = fabric-1.21.2 commonModdedVersion = 1.21.2 fabricDatagenEntrypoint = top.offsetmonkey538.loottablemodifier.fabric.v1212.datagen.LootTableModifierDatagen -monkeylib538_suffix = 1.20.1 +monkeylib538_suffix = 1.21 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21.2 diff --git a/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java b/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java index 0b05321..3e6c21f 100644 --- a/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java +++ b/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -39,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().location()), + ModdedVersionIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/fabric/1.21/gradle.properties b/loader/fabric/1.21/gradle.properties index 94660aa..ae2405a 100644 --- a/loader/fabric/1.21/gradle.properties +++ b/loader/fabric/1.21/gradle.properties @@ -2,7 +2,7 @@ project_name = fabric-1.21 commonModdedVersion = 1.21 fabricDatagenEntrypoint = top.offsetmonkey538.loottablemodifier.fabric.v121.datagen.LootTableModifierDatagen -monkeylib538_suffix = 1.20.1 +monkeylib538_suffix = 1.21 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21 diff --git a/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java b/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java index f4a946b..add127b 100644 --- a/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java +++ b/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -39,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry.asLookup() .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().location()), + ModdedVersionIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.get(registryEntry.key())) )), registryOps diff --git a/loader/fabric/build.gradle b/loader/fabric/build.gradle index be63582..3ec07ed 100644 --- a/loader/fabric/build.gradle +++ b/loader/fabric/build.gradle @@ -74,7 +74,7 @@ subprojects { commonJava project(path: ":modded:${project.commonModdedVersion}", configuration: "commonJava") commonResources project(path: ":modded:${project.commonModdedVersion}", configuration: "commonResources") - modRuntimeOnly("top.offsetmonkey538.monkeylib538:monkeylib538-fabric-${project.monkeylib538_suffix}:${rootProject.monkeylib538_version}+fabric+${project.monkeylib538_suffix}") { + modImplementation("top.offsetmonkey538.monkeylib538:monkeylib538-fabric-${project.monkeylib538_suffix}:${rootProject.monkeylib538_version}+fabric+${project.monkeylib538_suffix}") { exclude(group: "net.fabricmc.fabric-api") //TODO: can remove? exclude(group: "top.offsetmonkey538.monkeylib538:monkeylib538-fabric") } diff --git a/loader/fabric/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/platform/FabricPlatformMain.java b/loader/fabric/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/platform/FabricPlatformMain.java index e87608e..91b09c1 100644 --- a/loader/fabric/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/platform/FabricPlatformMain.java +++ b/loader/fabric/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/platform/FabricPlatformMain.java @@ -7,14 +7,12 @@ import net.minecraft.network.chat.Component; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.IS_DEV; -import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.MOD_ID; -import static top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformMain.id; +import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.*; public class FabricPlatformMain implements ModInitializer { @Override public void onInitialize() { LootTableModifierCommon.initialize(); - if (IS_DEV) ResourceManagerHelper.registerBuiltinResourcePack(id("example_pack"), FabricLoader.getInstance().getModContainer(MOD_ID).orElseThrow(), Component.nullToEmpty("Example Pack"), ResourcePackActivationType.NORMAL); + //TODO: FIXME: if (IS_DEV) ResourceManagerHelper.registerBuiltinResourcePack(id("example_pack"), FabricLoader.getInstance().getModContainer(MOD_ID).orElseThrow(), Component.nullToEmpty("Example Pack"), ResourcePackActivationType.NORMAL); } } diff --git a/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java index b8fd4ee..deeb0d8 100644 --- a/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.v12111.api.wrapper.ModdedVersionIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -39,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().identifier()), + ModdedVersionIdentifier.of(registryEntry.key().identifier()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java index 27e7b08..2c1095c 100644 --- a/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -38,7 +38,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().location()), + ModdedVersionIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java index 2295f86..82eed24 100644 --- a/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -39,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().location()), + ModdedVersionIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java index 1c432e0..a0df801 100644 --- a/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java @@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( value = ReloadableServerRegistries.class, @@ -38,7 +38,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry.asLookup() .listElements() .map(registryEntry -> Pair.of( - new IdentifierWrapper(registryEntry.key().location()), + ModdedVersionIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.get(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/build.gradle b/loader/neoforge/build.gradle index 8687fec..a1bb335 100644 --- a/loader/neoforge/build.gradle +++ b/loader/neoforge/build.gradle @@ -79,7 +79,7 @@ subprojects { commonJava project(path: ":modded:${project.commonModdedVersion}", configuration: "commonJava") commonResources project(path: ":modded:${project.commonModdedVersion}", configuration: "commonResources") - runtimeOnly "top.offsetmonkey538.monkeylib538:monkeylib538-neoforge-${project.monkeylib538_suffix}:${rootProject.monkeylib538_version}+neoforge+${project.monkeylib538_suffix}" + implementation "top.offsetmonkey538.monkeylib538:monkeylib538-neoforge-${project.monkeylib538_suffix}:${rootProject.monkeylib538_version}+neoforge+${project.monkeylib538_suffix}" // DevAuth localRuntime "me.djtheredstoner:DevAuth-neoforge:${rootProject.devauth_version}" diff --git a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/TableGetterById.java b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/TableGetterById.java index d7a2b03..14d3422 100644 --- a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/TableGetterById.java +++ b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/TableGetterById.java @@ -1,15 +1,15 @@ package top.offsetmonkey538.loottablemodifier.modded.v1201.impl; import net.minecraft.commands.CommandSourceStack; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; import top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformCommandUtils; +import top.offsetmonkey538.monkeylib538.modded.v1201.api.wrapper.ModdedVersionIdentifier; public final class TableGetterById implements ModdedPlatformCommandUtils.TableGetterById { @Override public LootTable getTableForIdImpl(CommandSourceStack source, Identifier id) { - return new LootTableWrapper(source.getServer().getLootData().getLootTable(((IdentifierWrapper) id).vanillaIdentifier())); + return new LootTableWrapper(source.getServer().getLootData().getLootTable(ModdedVersionIdentifier.get(id))); } } diff --git a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/IdentifierInstantiator.java b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/IdentifierInstantiator.java deleted file mode 100644 index f887f11..0000000 --- a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/IdentifierInstantiator.java +++ /dev/null @@ -1,12 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.modded.v1201.impl.wrapper; - -import net.minecraft.resources.ResourceLocation; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; - -public final class IdentifierInstantiator implements Identifier.Instantiator { - @Override - public Identifier apply(String s) { - return new IdentifierWrapper(new ResourceLocation(s)); - } -} diff --git a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/loot/LootTableTypeGetterImpl.java b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/loot/LootTableTypeGetterImpl.java index 3603906..7fad04d 100644 --- a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/loot/LootTableTypeGetterImpl.java +++ b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/impl/wrapper/loot/LootTableTypeGetterImpl.java @@ -6,7 +6,7 @@ public final class LootTableTypeGetterImpl implements LootTableWrapper.TypeGetter { @Override - public String apply(LootTable lootTable) { + public String getType(LootTable lootTable) { return LootContextTypesAccessor.getMAP().inverse().get(lootTable.getParamSet()).toString(); } } diff --git a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/mixin/LootContextTypesAccessor.java b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/mixin/LootContextTypesAccessor.java index 708f055..5a79103 100644 --- a/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/mixin/LootContextTypesAccessor.java +++ b/modded/1.20.1/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1201/mixin/LootContextTypesAccessor.java @@ -10,7 +10,7 @@ @Mixin(LootContextParamSets.class) public interface LootContextTypesAccessor { @Accessor("REGISTRY") - static BiMap getMAP() { + static BiMap getMAP() { throw new AssertionError(); } } diff --git a/modded/1.20.1/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator b/modded/1.20.1/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator deleted file mode 100644 index c720fd5..0000000 --- a/modded/1.20.1/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator +++ /dev/null @@ -1 +0,0 @@ -top.offsetmonkey538.loottablemodifier.modded.v1201.impl.wrapper.IdentifierInstantiator \ No newline at end of file diff --git a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/TableGetterById.java b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/TableGetterById.java index 273c286..a044b22 100644 --- a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/TableGetterById.java +++ b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/TableGetterById.java @@ -1,15 +1,15 @@ package top.offsetmonkey538.loottablemodifier.modded.v1202.impl; import net.minecraft.commands.CommandSourceStack; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; import top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformCommandUtils; +import top.offsetmonkey538.monkeylib538.modded.v1201.api.wrapper.ModdedVersionIdentifier; public final class TableGetterById implements ModdedPlatformCommandUtils.TableGetterById { @Override public LootTable getTableForIdImpl(CommandSourceStack source, Identifier id) { - return new LootTableWrapper(source.getServer().getLootData().getLootTable(((IdentifierWrapper) id).vanillaIdentifier())); + return new LootTableWrapper(source.getServer().getLootData().getLootTable(ModdedVersionIdentifier.get(id))); } } diff --git a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/IdentifierInstantiator.java b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/IdentifierInstantiator.java deleted file mode 100644 index f0050b6..0000000 --- a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/IdentifierInstantiator.java +++ /dev/null @@ -1,12 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.modded.v1202.impl.wrapper; - -import net.minecraft.resources.ResourceLocation; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; - -public final class IdentifierInstantiator implements Identifier.Instantiator { - @Override - public Identifier apply(String s) { - return new IdentifierWrapper(new ResourceLocation(s)); - } -} diff --git a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/loot/LootTableTypeGetterImpl.java b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/loot/LootTableTypeGetterImpl.java index 72baa3f..e14f45b 100644 --- a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/loot/LootTableTypeGetterImpl.java +++ b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/impl/wrapper/loot/LootTableTypeGetterImpl.java @@ -6,7 +6,7 @@ public final class LootTableTypeGetterImpl implements LootTableWrapper.TypeGetter { @Override - public String apply(LootTable lootTable) { - return LootContextTypesAccessor.getMAP().inverse().get(lootTable.getParamSet()).toString(); + public String getType(LootTable table) { + return LootContextTypesAccessor.getMAP().inverse().get(table.getParamSet()).toString(); } } diff --git a/modded/1.20.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator b/modded/1.20.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator deleted file mode 100644 index 318bef0..0000000 --- a/modded/1.20.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator +++ /dev/null @@ -1 +0,0 @@ -top.offsetmonkey538.loottablemodifier.modded.v1202.impl.wrapper.IdentifierInstantiator \ No newline at end of file diff --git a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/TableGetterById.java b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/TableGetterById.java index c73f14c..4ca2a8a 100644 --- a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/TableGetterById.java +++ b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/TableGetterById.java @@ -3,15 +3,16 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; import top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformCommandUtils; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; +import top.offsetmonkey538.monkeylib538.modded.v1201.api.wrapper.ModdedVersionIdentifier; public final class TableGetterById implements ModdedPlatformCommandUtils.TableGetterById { @Override public LootTable getTableForIdImpl(CommandSourceStack source, Identifier id) { - return new LootTableWrapper(source.getServer().reloadableRegistries().getLootTable(ResourceKey.create(Registries.LOOT_TABLE, ((IdentifierWrapper) id).vanillaIdentifier()))); + return new LootTableWrapper(source.getServer().reloadableRegistries().getLootTable(ResourceKeyApi.create(Registries.LOOT_TABLE, id))); } } diff --git a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/IdentifierInstantiator.java b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/IdentifierInstantiator.java deleted file mode 100644 index 30ca31f..0000000 --- a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/IdentifierInstantiator.java +++ /dev/null @@ -1,12 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.modded.v1205.impl.wrapper; - -import net.minecraft.resources.ResourceLocation; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; - -public final class IdentifierInstantiator implements Identifier.Instantiator { - @Override - public Identifier apply(String s) { - return new IdentifierWrapper(new ResourceLocation(s)); - } -} diff --git a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/loot/LootTableTypeGetterImpl.java b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/loot/LootTableTypeGetterImpl.java index 525ff7d..751796e 100644 --- a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/loot/LootTableTypeGetterImpl.java +++ b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/impl/wrapper/loot/LootTableTypeGetterImpl.java @@ -6,7 +6,7 @@ public final class LootTableTypeGetterImpl implements LootTableWrapper.TypeGetter { @Override - public String apply(LootTable lootTable) { - return LootContextTypesAccessor.getMAP().inverse().get(lootTable.getParamSet()).toString(); + public String getType(LootTable table) { + return LootContextTypesAccessor.getMAP().inverse().get(table.getParamSet()).toString(); } } diff --git a/modded/1.20.5/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator b/modded/1.20.5/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator deleted file mode 100644 index 65a22d7..0000000 --- a/modded/1.20.5/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator +++ /dev/null @@ -1 +0,0 @@ -top.offsetmonkey538.loottablemodifier.modded.v1205.impl.wrapper.IdentifierInstantiator \ No newline at end of file diff --git a/modded/1.21.2/gradle.properties b/modded/1.21.2/gradle.properties index 27136e0..c9a50e6 100644 --- a/modded/1.21.2/gradle.properties +++ b/modded/1.21.2/gradle.properties @@ -1,6 +1,6 @@ project_name = modded-1.21.2 -monkeylib538_suffix = 1.20.1 +monkeylib538_suffix = 1.21 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21.2 diff --git a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/TableGetterById.java b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/TableGetterById.java index e00c878..ba4509e 100644 --- a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/TableGetterById.java +++ b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/TableGetterById.java @@ -2,16 +2,15 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; import top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformCommandUtils; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; public final class TableGetterById implements ModdedPlatformCommandUtils.TableGetterById { @Override public LootTable getTableForIdImpl(CommandSourceStack source, Identifier id) { - return new LootTableWrapper(source.getServer().reloadableRegistries().getLootTable(ResourceKey.create(Registries.LOOT_TABLE, ((IdentifierWrapper) id).vanillaIdentifier()))); + return new LootTableWrapper(source.getServer().reloadableRegistries().getLootTable(ResourceKeyApi.create(Registries.LOOT_TABLE, id))); } } diff --git a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/IdentifierInstantiator.java b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/IdentifierInstantiator.java deleted file mode 100644 index 4299deb..0000000 --- a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/IdentifierInstantiator.java +++ /dev/null @@ -1,11 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.modded.v1212.impl.wrapper; - -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; - -public final class IdentifierInstantiator implements Identifier.Instantiator { - @Override - public Identifier apply(String s) { - return new IdentifierWrapper(net.minecraft.resources.ResourceLocation.parse(s)); - } - } \ No newline at end of file diff --git a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/loot/LootTableTypeGetterImpl.java b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/loot/LootTableTypeGetterImpl.java index 9708e10..99c3f34 100644 --- a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/loot/LootTableTypeGetterImpl.java +++ b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/impl/wrapper/loot/LootTableTypeGetterImpl.java @@ -6,7 +6,7 @@ public final class LootTableTypeGetterImpl implements LootTableWrapper.TypeGetter { @Override - public String apply(LootTable lootTable) { - return LootContextTypesAccessor.getMAP().inverse().get(lootTable.getParamSet()).toString(); + public String getType(LootTable table) { + return LootContextTypesAccessor.getMAP().inverse().get(table.getParamSet()).toString(); } } diff --git a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java index 843af51..16ea1db 100644 --- a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java +++ b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java @@ -8,6 +8,8 @@ import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import top.offsetmonkey538.loottablemodifier.modded.duck.ItemEntryDuck; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; @Mixin(LootItem.class) public abstract class ItemEntryMixin implements ItemEntryDuck { @@ -23,6 +25,6 @@ public abstract class ItemEntryMixin implements ItemEntryDuck { @Override public String loot_table_modifier$getId() { - return this.item.unwrapKey().map(key -> key.location().toString()).orElse("[unregistered]"); + return this.item.unwrapKey().map(ResourceKeyApi::getLocation).map(Identifier::asString).orElse("[unregistered]"); } } diff --git a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/LootContextTypesAccessor.java b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/LootContextTypesAccessor.java index 586e2c2..4a01d36 100644 --- a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/LootContextTypesAccessor.java +++ b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/LootContextTypesAccessor.java @@ -1,7 +1,6 @@ package top.offsetmonkey538.loottablemodifier.modded.v1212.mixin; import com.google.common.collect.BiMap; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.context.ContextKeySet; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import org.spongepowered.asm.mixin.Mixin; @@ -10,7 +9,7 @@ @Mixin(LootContextParamSets.class) public interface LootContextTypesAccessor { @Accessor("REGISTRY") - static BiMap getMAP() { + static BiMap getMAP() { throw new AssertionError(); } } diff --git a/modded/1.21.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator b/modded/1.21.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator deleted file mode 100644 index 2f89704..0000000 --- a/modded/1.21.2/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator +++ /dev/null @@ -1 +0,0 @@ -top.offsetmonkey538.loottablemodifier.modded.v1212.impl.wrapper.IdentifierInstantiator \ No newline at end of file diff --git a/modded/1.21/gradle.properties b/modded/1.21/gradle.properties index 40aa28e..c780f24 100644 --- a/modded/1.21/gradle.properties +++ b/modded/1.21/gradle.properties @@ -1,6 +1,6 @@ project_name = modded-1.21 -monkeylib538_suffix = 1.20.1 +monkeylib538_suffix = 1.21 # Miminum Minecraft version supported, check at https://fabricmc.net/develop minecraft_version = 1.21 diff --git a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/TableGetterById.java b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/TableGetterById.java index 968ad1f..b5989c4 100644 --- a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/TableGetterById.java +++ b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/TableGetterById.java @@ -3,15 +3,16 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; import top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformCommandUtils; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; +import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; public final class TableGetterById implements ModdedPlatformCommandUtils.TableGetterById { @Override public LootTable getTableForIdImpl(CommandSourceStack source, Identifier id) { - return new LootTableWrapper(source.getServer().reloadableRegistries().getLootTable(ResourceKey.create(Registries.LOOT_TABLE, ((IdentifierWrapper) id).vanillaIdentifier()))); + return new LootTableWrapper(source.getServer().reloadableRegistries().getLootTable(ResourceKeyApi.create(Registries.LOOT_TABLE, id))); } } diff --git a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/IdentifierInstantiator.java b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/IdentifierInstantiator.java deleted file mode 100644 index 1e745e4..0000000 --- a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/IdentifierInstantiator.java +++ /dev/null @@ -1,12 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.modded.v121.impl.wrapper; - -import net.minecraft.resources.ResourceLocation; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; - -public final class IdentifierInstantiator implements Identifier.Instantiator { - @Override - public Identifier apply(String s) { - return new IdentifierWrapper(ResourceLocation.parse(s)); - } -} \ No newline at end of file diff --git a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/loot/LootTableTypeGetterImpl.java b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/loot/LootTableTypeGetterImpl.java index d9bfb43..2fd2b03 100644 --- a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/loot/LootTableTypeGetterImpl.java +++ b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/impl/wrapper/loot/LootTableTypeGetterImpl.java @@ -6,7 +6,7 @@ public final class LootTableTypeGetterImpl implements LootTableWrapper.TypeGetter { @Override - public String apply(LootTable lootTable) { - return LootContextTypesAccessor.getMAP().inverse().get(lootTable.getParamSet()).toString(); + public String getType(LootTable table) { + return LootContextTypesAccessor.getMAP().inverse().get(table.getParamSet()).toString(); } } diff --git a/modded/1.21/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator b/modded/1.21/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator deleted file mode 100644 index f3a72f9..0000000 --- a/modded/1.21/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$Instantiator +++ /dev/null @@ -1 +0,0 @@ -top.offsetmonkey538.loottablemodifier.modded.v121.impl.wrapper.IdentifierInstantiator \ No newline at end of file diff --git a/modded/build.gradle b/modded/build.gradle index cd590b5..27ea4b9 100644 --- a/modded/build.gradle +++ b/modded/build.gradle @@ -41,5 +41,7 @@ subprojects { compileOnly project(":modded") commonJava project(path: ":modded", configuration: "commonJava") commonResources project(path: ":modded", configuration: "commonResources") + + modCompileOnly "top.offsetmonkey538.monkeylib538:monkeylib538-modded-${project.monkeylib538_suffix}:${rootProject.monkeylib538_version}+modded+${project.monkeylib538_suffix}" } } diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/action/LootModifierActionTypeRegistryImpl.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/action/LootModifierActionTypeRegistryImpl.java index 46f65b8..f3b7cf5 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/action/LootModifierActionTypeRegistryImpl.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/action/LootModifierActionTypeRegistryImpl.java @@ -3,21 +3,21 @@ import com.mojang.serialization.Lifecycle; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; import org.jetbrains.annotations.NotNull; import top.offsetmonkey538.loottablemodifier.common.api.resource.action.LootModifierActionType; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; -import static top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformMain.id; +import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.id; public final class LootModifierActionTypeRegistryImpl implements LootModifierActionType.Registry { public static final Registry REGISTRY = new MappedRegistry<>( - ResourceKey.createRegistryKey(id("loot_modifier_action_types")), Lifecycle.stable() + ResourceKeyApi.createRegistry(id("loot_modifier_action_types")), + Lifecycle.stable() ); @Override public LootModifierActionType register(@NotNull Identifier id, @NotNull LootModifierActionType type) { - return Registry.register(REGISTRY, ((IdentifierWrapper) id).vanillaIdentifier(), type); + return Registry.register(REGISTRY, ResourceKeyApi.create(REGISTRY.key(), id), type); } } diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/predicate/LootModifierPredicateTypeRegistryImpl.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/predicate/LootModifierPredicateTypeRegistryImpl.java index deef6c0..594a98d 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/predicate/LootModifierPredicateTypeRegistryImpl.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/resource/predicate/LootModifierPredicateTypeRegistryImpl.java @@ -3,21 +3,21 @@ import com.mojang.serialization.Lifecycle; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceKey; import org.jetbrains.annotations.NotNull; import top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.LootModifierPredicateType; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; -import static top.offsetmonkey538.loottablemodifier.modded.platform.ModdedPlatformMain.id; +import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.id; public final class LootModifierPredicateTypeRegistryImpl implements LootModifierPredicateType.Registry { public static final Registry REGISTRY = new MappedRegistry<>( - ResourceKey.createRegistryKey(id("loot_modifier_predicate_types")), Lifecycle.stable() + ResourceKeyApi.createRegistry(id("loot_modifier_predicate_types")), + Lifecycle.stable() ); @Override - public top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.LootModifierPredicateType register(@NotNull Identifier id, @NotNull top.offsetmonkey538.loottablemodifier.common.api.resource.predicate.LootModifierPredicateType type) { - return Registry.register(REGISTRY, ((IdentifierWrapper) id).vanillaIdentifier(), type); + public LootModifierPredicateType register(@NotNull Identifier id, @NotNull LootModifierPredicateType type) { + return Registry.register(REGISTRY, ResourceKeyApi.create(REGISTRY.key(), id), type); } } diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/IdentifierWrapper.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/IdentifierWrapper.java deleted file mode 100644 index db6e40b..0000000 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/IdentifierWrapper.java +++ /dev/null @@ -1,36 +0,0 @@ -package top.offsetmonkey538.loottablemodifier.modded.impl.wrapper; - -import com.mojang.serialization.Codec; -import org.jetbrains.annotations.NotNull; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; - -public record IdentifierWrapper(net.minecraft.resources.ResourceLocation vanillaIdentifier) implements Identifier { - - @Override - public String asString() { - return vanillaIdentifier.toString(); - } - - @Override - public String getNamespace() { - return vanillaIdentifier.getNamespace(); - } - - @Override - public String getPath() { - return vanillaIdentifier.getPath(); - } - - @Override - public @NotNull String toString() { - return vanillaIdentifier.toString(); - } - - public static final class CodecProviderImpl implements CodecProvider { - @Override - public Codec get() { - return net.minecraft.resources.ResourceLocation.CODEC.xmap(IdentifierWrapper::new, wrappedIdentifier -> ((IdentifierWrapper) wrappedIdentifier).vanillaIdentifier()); - } - } -} - diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java index 5526a41..fc410e2 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java @@ -1,7 +1,7 @@ package top.offsetmonkey538.loottablemodifier.modded.impl.wrapper; import it.unimi.dsi.fastutil.Pair; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.ResourceManager; import java.io.BufferedReader; @@ -15,7 +15,8 @@ public record ResourceManagerWrapper(net.minecraft.server.packs.resources.Resour public Stream>> listResources(String string, Predicate predicate) { return vanillaIdentifier.listResources(string, id -> predicate.test(id.toString())).entrySet().stream() .map(entry -> Pair.of( - new IdentifierWrapper(entry.getKey()), + // The entry can contain either a ResourceLocation or Identifier, but at runtime it's an Object cause generics be funny that way. This isn't a problem because generic types are erased, but + Identifier.of(entry.getKey().toString()), () -> { try { return entry.getValue().openAsReader(); diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/loot/LootTableWrapper.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/loot/LootTableWrapper.java index deeeada..53eec89 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/loot/LootTableWrapper.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/loot/LootTableWrapper.java @@ -17,7 +17,7 @@ public record LootTableWrapper(net.minecraft.world.level.storage.loot.LootTable @Override public String getType() { - return TypeGetter.INSTANCE.apply(vanillaTable); + return TypeGetter.INSTANCE.getType(vanillaTable); } @Override @@ -48,8 +48,10 @@ public void setFunctions(List functions) { ((LootTableDuck) vanillaTable).loot_table_modifier$setFunctions(newFunctions.build()); } - public interface TypeGetter extends Function { + public interface TypeGetter { TypeGetter INSTANCE = load(TypeGetter.class); + + String getType(net.minecraft.world.level.storage.loot.LootTable table); } } diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformCommandUtils.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformCommandUtils.java index 9255581..ec0d9b4 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformCommandUtils.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformCommandUtils.java @@ -6,7 +6,7 @@ import com.mojang.serialization.JsonOps; import net.minecraft.commands.CommandSourceStack; import net.minecraft.resources.RegistryOps; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; import top.offsetmonkey538.loottablemodifier.common.api.wrapper.loot.LootTable; import top.offsetmonkey538.loottablemodifier.common.platform.PlatformCommandUtils; import top.offsetmonkey538.monkeylib538.modded.api.command.ModdedCommandAbstractionApi; diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformMain.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformMain.java index 559ab0c..fc63fa4 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformMain.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/platform/ModdedPlatformMain.java @@ -3,29 +3,15 @@ import com.google.gson.JsonElement; import com.google.gson.stream.JsonWriter; import net.minecraft.data.DataProvider; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; -import top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier; -import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper; import top.offsetmonkey538.loottablemodifier.common.platform.PlatformMain; import java.io.IOException; -import static top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon.*; - public class ModdedPlatformMain implements PlatformMain { @Override public void writeSortedImpl(JsonWriter jsonWriter, JsonElement json) throws IOException { GsonHelper.writeValue(jsonWriter, json, DataProvider.KEY_COMPARATOR); } - - @Override - public Identifier idImpl(String path) { - return new IdentifierWrapper(id(path)); - } - - public static ResourceLocation id(String path) { - return ((IdentifierWrapper) Identifier.of(MOD_ID + ":" + path)).vanillaIdentifier(); - } } diff --git a/modded/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$CodecProvider b/modded/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$CodecProvider deleted file mode 100644 index fcf205a..0000000 --- a/modded/src/main/resources/META-INF/services/top.offsetmonkey538.loottablemodifier.common.api.wrapper.Identifier$CodecProvider +++ /dev/null @@ -1 +0,0 @@ -top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.IdentifierWrapper$CodecProviderImpl \ No newline at end of file From 83afd651c09a29df815857639544e79b7a7341fb Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 14:46:10 +0200 Subject: [PATCH 04/10] update monkelib, use toString instead of asString --- .../loottablemodifier/common/LootTableModifierCommon.java | 4 ++-- .../loottablemodifier/common/api/resource/LootModifier.java | 2 +- gradle.properties | 2 +- .../loottablemodifier/modded/v1202/mixin/ItemEntryMixin.java | 4 +++- .../loottablemodifier/modded/v1205/mixin/ItemEntryMixin.java | 4 +++- .../loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java | 2 +- .../loottablemodifier/modded/v121/mixin/ItemEntryMixin.java | 4 +++- .../modded/impl/wrapper/ResourceManagerWrapper.java | 2 +- 8 files changed, 15 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java index 54b62d0..aa27e71 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/LootTableModifierCommon.java @@ -136,12 +136,12 @@ private static void runModification(Map modifiers, @Un final LootModifier modifier = modifierEntry.getValue(); if (!modifier.test(context)) continue; - if (IS_DEV) LOGGER.warn("Modifier %s can modify table %s", modifierEntry.getKey().asString(), tableId.asString()); + if (IS_DEV) LOGGER.warn("Modifier %s can modify table %s", modifierEntry.getKey(), tableId); int result = modifier.apply(context); - if (IS_DEV && result != LootModifierAction.MODIFIED_NONE) LOGGER.warn("Modifier %s modified table %s with modified mask %s", modifierEntry.getKey().asString(), tableId.asString(), Integer.toUnsignedString(result, 2)); + if (IS_DEV && result != LootModifierAction.MODIFIED_NONE) LOGGER.warn("Modifier %s modified table %s with modified mask %s", modifierEntry.getKey(), tableId, Integer.toUnsignedString(result, 2)); if ((result & LootModifierAction.MODIFIED_TABLE) == LootModifierAction.MODIFIED_TABLE) tableModified = true; if ((result & LootModifierAction.MODIFIED_POOL) == LootModifierAction.MODIFIED_POOL) poolModified = true; diff --git a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java index 6f40a1a..777a948 100644 --- a/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java +++ b/common/src/main/java/top/offsetmonkey538/loottablemodifier/common/api/resource/LootModifier.java @@ -60,7 +60,7 @@ public record LootModifier(@NotNull @UnmodifiableView List a private static @NotNull LootModifierPredicate getPredicateFromLegacyCodec(@NotNull Either> modifiesEither) { final TablePredicate.Builder predicateBuilder = TablePredicate.builder(); for (final Identifier currentId : modifiesEither.map(List::of, it -> it)) { - predicateBuilder.name(currentId.asString()); + predicateBuilder.name(currentId.toString()); } return predicateBuilder.build(); } diff --git a/gradle.properties b/gradle.properties index baeb7e4..8b0ded6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.parallel = true # Dependencies # MonkeyLib538, check at https://github.com/OffsetMods538/MonkeyLib538 -monkeylib538_version = 3.0.0-beta.1.1768736638020+343f3fe +monkeylib538_version = 3.0.0-beta.1.1768740061717+d39d704 ## DataFixerUpper, check at https://github.com/Mojang/DataFixerUpper datafixerupper_version = 8.0.16 ## Brigadier, check at https://github.com/Mojang/Brigadier diff --git a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/mixin/ItemEntryMixin.java b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/mixin/ItemEntryMixin.java index 903a975..dfe20ee 100644 --- a/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/mixin/ItemEntryMixin.java +++ b/modded/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1202/mixin/ItemEntryMixin.java @@ -8,6 +8,8 @@ import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import top.offsetmonkey538.loottablemodifier.modded.duck.ItemEntryDuck; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; @Mixin(LootItem.class) public abstract class ItemEntryMixin implements ItemEntryDuck { @@ -23,6 +25,6 @@ public abstract class ItemEntryMixin implements ItemEntryDuck { @Override public String loot_table_modifier$getId() { - return this.item.unwrapKey().map(key -> key.location().toString()).orElse("[unregistered]"); + return this.item.unwrapKey().map(ResourceKeyApi::getLocation).map(Identifier::toString).orElse("[unregistered]"); } } diff --git a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/mixin/ItemEntryMixin.java b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/mixin/ItemEntryMixin.java index eb31dd3..fb3fd46 100644 --- a/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/mixin/ItemEntryMixin.java +++ b/modded/1.20.5/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1205/mixin/ItemEntryMixin.java @@ -8,6 +8,8 @@ import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import top.offsetmonkey538.loottablemodifier.modded.duck.ItemEntryDuck; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; @Mixin(LootItem.class) public abstract class ItemEntryMixin implements ItemEntryDuck { @@ -23,6 +25,6 @@ public abstract class ItemEntryMixin implements ItemEntryDuck { @Override public String loot_table_modifier$getId() { - return this.item.unwrapKey().map(key -> key.location().toString()).orElse("[unregistered]"); + return this.item.unwrapKey().map(ResourceKeyApi::getLocation).map(Identifier::toString).orElse("[unregistered]"); } } diff --git a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java index 16ea1db..e60c5f7 100644 --- a/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java +++ b/modded/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v1212/mixin/ItemEntryMixin.java @@ -25,6 +25,6 @@ public abstract class ItemEntryMixin implements ItemEntryDuck { @Override public String loot_table_modifier$getId() { - return this.item.unwrapKey().map(ResourceKeyApi::getLocation).map(Identifier::asString).orElse("[unregistered]"); + return this.item.unwrapKey().map(ResourceKeyApi::getLocation).map(Identifier::toString).orElse("[unregistered]"); } } diff --git a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/mixin/ItemEntryMixin.java b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/mixin/ItemEntryMixin.java index 24a2017..f6c336e 100644 --- a/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/mixin/ItemEntryMixin.java +++ b/modded/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/modded/v121/mixin/ItemEntryMixin.java @@ -8,6 +8,8 @@ import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import top.offsetmonkey538.loottablemodifier.modded.duck.ItemEntryDuck; +import top.offsetmonkey538.monkeylib538.common.api.wrapper.Identifier; +import top.offsetmonkey538.monkeylib538.modded.api.resource.ResourceKeyApi; @Mixin(LootItem.class) public abstract class ItemEntryMixin implements ItemEntryDuck { @@ -23,6 +25,6 @@ public abstract class ItemEntryMixin implements ItemEntryDuck { @Override public String loot_table_modifier$getId() { - return this.item.unwrapKey().map(key -> key.location().toString()).orElse("[unregistered]"); + return this.item.unwrapKey().map(ResourceKeyApi::getLocation).map(Identifier::toString).orElse("[unregistered]"); } } diff --git a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java index fc410e2..474c90b 100644 --- a/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java +++ b/modded/src/main/java/top/offsetmonkey538/loottablemodifier/modded/impl/wrapper/ResourceManagerWrapper.java @@ -15,7 +15,7 @@ public record ResourceManagerWrapper(net.minecraft.server.packs.resources.Resour public Stream>> listResources(String string, Predicate predicate) { return vanillaIdentifier.listResources(string, id -> predicate.test(id.toString())).entrySet().stream() .map(entry -> Pair.of( - // The entry can contain either a ResourceLocation or Identifier, but at runtime it's an Object cause generics be funny that way. This isn't a problem because generic types are erased, but + // The entry can contain either a ResourceLocation or Identifier, but that's fine cause this code never explicitly mentions either of those so compiling for whatever version will choose the correct thing. Identifier.of(entry.getKey().toString()), () -> { try { From dbc32d8ba3ceb102d33e921d5c3e83c4bf041118 Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 15:17:08 +0200 Subject: [PATCH 05/10] Use generic ModdedIdentifier to create instances of identifier cause otherwise i'd depend on version specific monkeylib or some crap --- .../fabric/v1202/mixin/LootDataManagerMixin.java | 2 +- .../fabric/v1212/mixin/ReloadableRegistriesMixin.java | 3 ++- .../fabric/v121/mixin/ReloadableRegistriesMixin.java | 3 ++- .../neoforge/v12111/mixin/ReloadableRegistriesMixin.java | 3 ++- .../neoforge/v1212/mixin/ReloadableRegistriesMixin.java | 3 ++- .../neoforge/v1214/mixin/ReloadableRegistriesMixin.java | 3 ++- .../neoforge/v121/mixin/ReloadableRegistriesMixin.java | 3 ++- 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java b/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java index 80cf2fb..72bce2c 100644 --- a/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java +++ b/loader/fabric/1.20.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1202/mixin/LootDataManagerMixin.java @@ -40,7 +40,7 @@ public abstract class LootDataManagerMixin { lootRegistry.entrySet() .stream() .map(entry -> Pair.of( - ModdedVersionIdentifier.of(entry.getKey()), + ModdedIdentifier.of(entry.getKey()), new LootTableWrapper(entry.getValue()) )), JsonOps.INSTANCE // TODO: Is a RegistryOps not needed on 1.20.1? Doesn't look like the loot table loader uses it so maybe not? diff --git a/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java b/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java index 3e6c21f..c3333c0 100644 --- a/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java +++ b/loader/fabric/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v1212/mixin/ReloadableRegistriesMixin.java @@ -16,6 +16,7 @@ import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( @@ -39,7 +40,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - ModdedVersionIdentifier.of(registryEntry.key().location()), + ModdedIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java b/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java index add127b..27cfb58 100644 --- a/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java +++ b/loader/fabric/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v121/mixin/ReloadableRegistriesMixin.java @@ -16,6 +16,7 @@ import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( @@ -39,7 +40,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry.asLookup() .listElements() .map(registryEntry -> Pair.of( - ModdedVersionIdentifier.of(registryEntry.key().location()), + ModdedIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.get(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java index deeb0d8..ab55509 100644 --- a/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v12111/mixin/ReloadableRegistriesMixin.java @@ -16,6 +16,7 @@ import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import top.offsetmonkey538.monkeylib538.modded.v12111.api.wrapper.ModdedVersionIdentifier; @Mixin( @@ -39,7 +40,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - ModdedVersionIdentifier.of(registryEntry.key().identifier()), + ModdedIdentifier.of(registryEntry.key().identifier()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java index 2c1095c..b43e97a 100644 --- a/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21.2/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1212/mixin/ReloadableRegistriesMixin.java @@ -16,6 +16,7 @@ import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( @@ -38,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - ModdedVersionIdentifier.of(registryEntry.key().location()), + ModdedIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java index 82eed24..bb3120a 100644 --- a/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21.4/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v1214/mixin/ReloadableRegistriesMixin.java @@ -16,6 +16,7 @@ import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( @@ -39,7 +40,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry .listElements() .map(registryEntry -> Pair.of( - ModdedVersionIdentifier.of(registryEntry.key().location()), + ModdedIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) )), registryOps diff --git a/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java b/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java index a0df801..1ed1b55 100644 --- a/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java +++ b/loader/neoforge/1.21/src/main/java/top/offsetmonkey538/loottablemodifier/neoforge/v121/mixin/ReloadableRegistriesMixin.java @@ -16,6 +16,7 @@ import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; import top.offsetmonkey538.monkeylib538.modded.v121.api.wrapper.ModdedVersionIdentifier; @Mixin( @@ -38,7 +39,7 @@ public abstract class ReloadableRegistriesMixin { lootRegistry.asLookup() .listElements() .map(registryEntry -> Pair.of( - ModdedVersionIdentifier.of(registryEntry.key().location()), + ModdedIdentifier.of(registryEntry.key().location()), new LootTableWrapper(lootRegistry.get(registryEntry.key())) )), registryOps From 34061bdceffee7fb71100dd21c96073c3d91e771 Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 16:23:32 +0200 Subject: [PATCH 06/10] Add fabric 1.21.11 subproject --- loader/fabric/1.21.11/gradle.properties | 14 ++ .../datagen/LootTableModifierDatagen.java | 180 ++++++++++++++++++ .../mixin/ReloadableRegistriesMixin.java | 48 +++++ ...-table-modifier.version.loader.mixins.json | 11 ++ settings.gradle | 1 + 5 files changed, 254 insertions(+) create mode 100644 loader/fabric/1.21.11/gradle.properties create mode 100644 loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/datagen/LootTableModifierDatagen.java create mode 100644 loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/mixin/ReloadableRegistriesMixin.java create mode 100644 loader/fabric/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json diff --git a/loader/fabric/1.21.11/gradle.properties b/loader/fabric/1.21.11/gradle.properties new file mode 100644 index 0000000..d82657a --- /dev/null +++ b/loader/fabric/1.21.11/gradle.properties @@ -0,0 +1,14 @@ +project_name = fabric-1.21.11 +commonModdedVersion = 1.21.2 +fabricDatagenEntrypoint = top.offsetmonkey538.loottablemodifier.fabric.v12111.datagen.LootTableModifierDatagen + +monkeylib538_suffix = 1.21.11 + +# Miminum Minecraft version supported, check at https://fabricmc.net/develop +minecraft_version = 1.21.11 +supported_minecraft_versions = 1.21.11 + +# These should be automatically updated, unless the environment +# variable "DISABLE_PROPERTIES_UPDATE" is set. +loader_version = 0.18.4 +fapi_version = 0.141.1+1.21.11 diff --git a/loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/datagen/LootTableModifierDatagen.java b/loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/datagen/LootTableModifierDatagen.java new file mode 100644 index 0000000..c6cf644 --- /dev/null +++ b/loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/datagen/LootTableModifierDatagen.java @@ -0,0 +1,180 @@ +package top.offsetmonkey538.loottablemodifier.fabric.v12111.datagen; + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; + +/** + * Datagen for loot modifiers used for testing. + */ +public class LootTableModifierDatagen implements DataGeneratorEntrypoint { + + @Override + public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { + //final FabricDataGenerator.Pack pack = fabricDataGenerator.createBuiltinResourcePack(id("example_pack")); + + //pack.addProvider(ModLootModifierProvider::new); + //pack.addProvider(LootProvider::new); + } +/* + private static class ModLootModifierProvider extends LootModifierProvider { + public ModLootModifierProvider(FabricDataOutput dataOutput, CompletableFuture registriesFuture) { + super(dataOutput, registriesFuture); + } + + @Override + protected void generate(HolderLookup.Provider lookup) { + addModifier( + id("replace_ingots_with_command_block"), + LootModifier.builder() + .conditionally( + EntryItemPredicate.builder(RegexPattern.compile("minecraft:.*_ingot")) + ) + .action( + EntryItemSetAction.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.COMMAND_BLOCK))) + ) + ); + addModifier( + id("sugarcane_drop_tnt"), + LootModifier.builder() + .conditionally( + EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.SUGAR_CANE))) + ) + .action( + PoolAddAction.builder() + .pool( + new LootPoolWrapper(LootPool.lootPool() + .setRolls(ConstantValue.exactly(1)) + .add( + LootItem.lootTableItem(Items.TNT) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) + ).build()) + ) + ) + ); + addModifier( + id("mobs_drop_tnt"), + LootModifier.builder() + .conditionally( + TablePredicate.builder() + .name(EntityType.CREEPER.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) + .name(EntityType.ZOMBIE.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) + ) + .action( + PoolAddAction.builder() + .pool( + new LootPoolWrapper(LootPool.lootPool() + .setRolls(ConstantValue.exactly(1)) + .add( + LootItem.lootTableItem(Items.TNT) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) + ).build()) + ) + ) + ); + addModifier( + id("empty_table_test"), + LootModifier.builder() + .conditionally( + TablePredicate.builder() + .name(ResourceKey.create(Registries.LOOT_TABLE, id("test_empty_table")).location().toString()) + ) + .action( + PoolAddAction.builder() + .pool( + new LootPoolWrapper(LootPool.lootPool() + .setRolls(ConstantValue.exactly(1)) + .add( + LootItem.lootTableItem(Items.TNT) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))) + ).build()) + ) + ) + ); + addModifier( + id("remove_pools_with_sticks"), + LootModifier.builder() + .conditionally( + EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.STICK))) + // Exclude witch to test if AllOf and Inverted work + so I can test RemoveEntry on witch. + .and(TablePredicate.builder().name(EntityType.WITCH.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")).invert()) + ) + .action( + PoolRemoveAction.builder() + ) + ); + addModifier( + id("add_cake_entry_to_dirt_block"), + LootModifier.builder() + .conditionally( + TablePredicate.builder() + .name(Blocks.DIRT.getLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) + ) + .action( + EntryAddAction.builder() + .entry( + LootPoolEntryWrapper.create(LootItem.lootTableItem(Items.CAKE) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))).build()) + ) + ) + ); + addModifier( + id("add_command_block_to_all_blocks"), + LootModifier.builder() + .conditionally( + TablePredicate.builder() + .type(LootContextTypesAccessor.getMAP().inverse().get(LootContextParamSets.BLOCK).toString()) + ) + .action( + EntryAddAction.builder() + .entry( + LootPoolEntryWrapper.create(LootItem.lootTableItem(Items.CAKE) + .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 1))).build()) + ) + ) + ); + addModifier( + id("remove_glowstone_and_gunpowder_from_witch"), + LootModifier.builder() + .conditionally( + TablePredicate.builder().name(EntityType.WITCH.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) + .and( + EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.GLOWSTONE_DUST))) + .or(EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.GUNPOWDER)))) + ) + ) + .action( + EntryRemoveAction.builder() + ) + ); + addModifier( + id("squid_ink_sac_only_from_player"), + LootModifier.builder() + .conditionally( + TablePredicate.builder() + .name(EntityType.SQUID.getDefaultLootTable().map(ResourceKey::location).map(ResourceLocation::toString).orElse("")) + .and(EntryItemPredicate.builder(new ItemWrapper(BuiltInRegistries.ITEM.wrapAsHolder(Items.INK_SAC)))) + ) + .action( + ConditionAddAction.builder() + .onlyPools() + .condition( + new LootConditionWrapper(LootItemKilledByPlayerCondition.killedByPlayer().build()) + ) + ) + ); + } + } + + private static class LootProvider extends SimpleFabricLootTableProvider { + public LootProvider(FabricDataOutput output, CompletableFuture registryLookup) { + super(output, registryLookup, LootContextParamSets.CHEST); + } + + @Override + public void generate(BiConsumer, LootTable.Builder> lootTableBiConsumer) { + lootTableBiConsumer.accept(ResourceKey.create(Registries.LOOT_TABLE, id("test_empty_table")), LootTable.lootTable()); + } + } + + */ +} diff --git a/loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/mixin/ReloadableRegistriesMixin.java b/loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/mixin/ReloadableRegistriesMixin.java new file mode 100644 index 0000000..4e78689 --- /dev/null +++ b/loader/fabric/1.21.11/src/main/java/top/offsetmonkey538/loottablemodifier/fabric/v12111/mixin/ReloadableRegistriesMixin.java @@ -0,0 +1,48 @@ +package top.offsetmonkey538.loottablemodifier.fabric.v12111.mixin; + +import com.google.gson.JsonElement; +import it.unimi.dsi.fastutil.Pair; +import net.minecraft.core.Registry; +import net.minecraft.core.WritableRegistry; +import net.minecraft.resources.RegistryOps; +import net.minecraft.server.ReloadableServerRegistries; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.level.storage.loot.LootDataType; +import net.minecraft.world.level.storage.loot.LootTable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import top.offsetmonkey538.loottablemodifier.common.LootTableModifierCommon; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.ResourceManagerWrapper; +import top.offsetmonkey538.loottablemodifier.modded.impl.wrapper.loot.LootTableWrapper; +import top.offsetmonkey538.monkeylib538.modded.api.wrapper.ModdedIdentifier; + +@Mixin( + value = ReloadableServerRegistries.class, + priority = 900 +) +public abstract class ReloadableRegistriesMixin { + @Inject( + // Works for fabric >=1.21.2 + method = "method_61240(Lnet/minecraft/world/level/storage/loot/LootDataType;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/resources/RegistryOps;)Lnet/minecraft/core/WritableRegistry;", + at = @At("RETURN") + ) + private static void loot_table_modifier$modifyLootTables(LootDataType lootDataType, ResourceManager resourceManager, RegistryOps registryOps, CallbackInfoReturnable> cir) { + if (lootDataType != LootDataType.TABLE) return; + + //noinspection unchecked + final Registry lootRegistry = (Registry) cir.getReturnValue(); + + LootTableModifierCommon.runModification( + new ResourceManagerWrapper(resourceManager), + lootRegistry + .listElements() + .map(registryEntry -> Pair.of( + ModdedIdentifier.of(registryEntry.key().identifier()), + new LootTableWrapper(lootRegistry.getValue(registryEntry.key())) + )), + registryOps + ); + } +} diff --git a/loader/fabric/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json b/loader/fabric/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json new file mode 100644 index 0000000..3f23a38 --- /dev/null +++ b/loader/fabric/1.21.11/src/main/resources/loot-table-modifier.version.loader.mixins.json @@ -0,0 +1,11 @@ +{ + "required": true, + "package": "top.offsetmonkey538.loottablemodifier.fabric.v12111.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "ReloadableRegistriesMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/settings.gradle b/settings.gradle index dc774ad..1b63574 100644 --- a/settings.gradle +++ b/settings.gradle @@ -27,6 +27,7 @@ include "loader:fabric:1.20.2" include "loader:fabric:1.20.5" include "loader:fabric:1.21" include "loader:fabric:1.21.2" +include "loader:fabric:1.21.11" include "loader:neoforge" include "loader:neoforge:1.21" From 391a6fc72de5d8c6abaf6d834d59b56f2b455672 Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 16:29:23 +0200 Subject: [PATCH 07/10] Update devauth --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8b0ded6..728d907 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ commonsio_version = 2.17.0 ## JetBrains Annotations, check at https://github.com/JetBrains/java-annotations jetbrainsannotations_version = 26.0.2 ## DevAuth, check at https://github.com/DJtheRedstoner/DevAuth -devauth_version = 1.2.1 +devauth_version = 1.2.2 # Mod Properties mod_version = 2.0.0-beta.3 From 735f99df2228e65fd6477ed89321697290d9e249 Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 16:35:02 +0200 Subject: [PATCH 08/10] Add monkeylib as dependency on modrinth --- loader/fabric/build.gradle | 2 +- loader/neoforge/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/loader/fabric/build.gradle b/loader/fabric/build.gradle index 3ec07ed..4d6468c 100644 --- a/loader/fabric/build.gradle +++ b/loader/fabric/build.gradle @@ -151,7 +151,7 @@ subprojects { // Dependencies dependencies { - //TODO: not actually required? just cause datagen... required.project "fabric-api" + required.project "monkeylib538" } } } diff --git a/loader/neoforge/build.gradle b/loader/neoforge/build.gradle index a1bb335..09cc4d1 100644 --- a/loader/neoforge/build.gradle +++ b/loader/neoforge/build.gradle @@ -144,7 +144,7 @@ subprojects { // Dependencies dependencies { - + required.project "monkeylib538" } } } From 13660eb40de4023514779a01b59a7f8effb3a75a Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 16:35:17 +0200 Subject: [PATCH 09/10] Update monkeylib --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 728d907..9effaea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.parallel = true # Dependencies # MonkeyLib538, check at https://github.com/OffsetMods538/MonkeyLib538 -monkeylib538_version = 3.0.0-beta.1.1768740061717+d39d704 +monkeylib538_version = 3.0.0-beta.2 ## DataFixerUpper, check at https://github.com/Mojang/DataFixerUpper datafixerupper_version = 8.0.16 ## Brigadier, check at https://github.com/Mojang/Brigadier From 98d91d01dcadbb6e2581310cec4e51baa7b8e31d Mon Sep 17 00:00:00 2001 From: OffsetMonkey538 Date: Sun, 18 Jan 2026 16:38:28 +0200 Subject: [PATCH 10/10] Bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 9effaea..6d067b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,4 +17,4 @@ jetbrainsannotations_version = 26.0.2 devauth_version = 1.2.2 # Mod Properties -mod_version = 2.0.0-beta.3 +mod_version = 2.0.0-beta.4