From 466b25280086703fdac7793f2ef648c954ee91de Mon Sep 17 00:00:00 2001 From: TheWinABagel Date: Sat, 30 Dec 2023 17:59:57 -0600 Subject: [PATCH] cleanup, swap to accessors/invokers from AWs --- build.gradle | 7 +--- gradle.properties | 10 +++-- .../dev/shadowsoffire/placebo/Placebo.java | 5 ++- .../shadowsoffire/placebo/PlaceboClient.java | 4 -- .../placebo/collections/BlockedDeque.java | 41 ------------------- .../placebo/collections/BlockedList.java | 38 ----------------- .../placebo/collections/BlockedMap.java | 32 --------------- .../commands/SerializeLootTableCommand.java | 3 +- .../placebo/commands/StringToObjCommand.java | 9 ++-- .../placebo/events/PlaceboEventFactory.java | 8 ---- .../placebo/json/RandomAttributeModifier.java | 6 +-- .../placebo/loot/PoolBuilder.java | 7 ++-- .../placebo/menu/FilteredSlot.java | 1 - .../placebo/menu/QuickMoveHandler.java | 2 +- .../placebo/mixin/EnchantmentHelperMixin.java | 5 --- .../mixin/EntityRenderDispatcherMixin.java | 3 +- .../placebo/mixin/LootTablesMixin.java | 35 ---------------- .../mixin/ReloadableServerResourcesMixin.java | 20 ++++----- .../AbstractContainerMenuInvoker.java | 2 +- .../mixin/getters/BuilderAccessor.java | 22 ++++++++++ .../getters/LivingEntityRendererAccessor.java | 14 +++++++ .../getters/MinecraftServerAccessor.java | 11 +++++ .../mixin/getters/TextColorGetter.java | 23 +++++++++++ .../placebo/patreon/TrailsManager.java | 1 - .../placebo/reload/DynamicRegistry.java | 11 +++-- .../placebo/tabs/TabFillingRegistry.java | 9 ++-- .../placebo/util/IReplacementBlock.java | 33 --------------- .../placebo/util/PlaceboUtil.java | 21 +--------- src/main/resources/fabric.mod.json | 4 +- src/main/resources/fakerlib.aw | 21 +--------- src/main/resources/fakerlib.mixins.json | 13 +++--- 31 files changed, 130 insertions(+), 291 deletions(-) delete mode 100644 src/main/java/dev/shadowsoffire/placebo/collections/BlockedDeque.java delete mode 100644 src/main/java/dev/shadowsoffire/placebo/collections/BlockedList.java delete mode 100644 src/main/java/dev/shadowsoffire/placebo/collections/BlockedMap.java delete mode 100644 src/main/java/dev/shadowsoffire/placebo/mixin/LootTablesMixin.java rename src/main/java/dev/shadowsoffire/placebo/mixin/{ => getters}/AbstractContainerMenuInvoker.java (89%) create mode 100644 src/main/java/dev/shadowsoffire/placebo/mixin/getters/BuilderAccessor.java create mode 100644 src/main/java/dev/shadowsoffire/placebo/mixin/getters/LivingEntityRendererAccessor.java create mode 100644 src/main/java/dev/shadowsoffire/placebo/mixin/getters/MinecraftServerAccessor.java create mode 100644 src/main/java/dev/shadowsoffire/placebo/mixin/getters/TextColorGetter.java delete mode 100644 src/main/java/dev/shadowsoffire/placebo/util/IReplacementBlock.java diff --git a/build.gradle b/build.gradle index ffa464d..3897cf9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,3 @@ -import net.darkhax.curseforgegradle.TaskPublishCurseForge - plugins { id 'fabric-loom' version '1.3-SNAPSHOT' id 'maven-publish' @@ -25,7 +23,6 @@ repositories { name = "Porting Lib" url = "https://mvn.devos.one/snapshots/" content { - } } maven { @@ -60,8 +57,8 @@ dependencies { modImplementation(include("io.github.fabricators_of_create.Porting-Lib:transfer:${project.port_lib_version}")) // Mixin Extras + Mixin^2 for mod compat - implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:0.2.0")) - implementation(annotationProcessor("com.github.bawnorton.mixinsquared:mixinsquared-fabric:0.1.1")) + include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:${project.mixin_extras_version}"))) + include(implementation(annotationProcessor("com.github.bawnorton.mixinsquared:mixinsquared-fabric:${project.mixin_squared_version}"))) modImplementation "com.ptsmods:devlogin:3.4.1" } diff --git a/gradle.properties b/gradle.properties index 2b80fd3..21e8fa2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,15 +5,17 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop minecraft_version=1.20.1 -loader_version=0.14.22 +loader_version=0.14.25 # Mod Properties -mod_version=0.0.9 +mod_version=0.1.0.3 maven_group=dev.shadowsoffire.placebo archives_base_name=fakerlib # Dependencies -fabric_version=0.90.4+1.20.1 +fabric_version=0.91.0+1.20.1 +#todo remove port lib dep port_lib_version=2.1.1127+1.20 -mixin_extras_version=0.1.1 +mixin_extras_version=0.2.0 +mixin_squared_version=0.1.1 reach_lib_version=2.4.0 diff --git a/src/main/java/dev/shadowsoffire/placebo/Placebo.java b/src/main/java/dev/shadowsoffire/placebo/Placebo.java index 251b2e7..e4612a4 100644 --- a/src/main/java/dev/shadowsoffire/placebo/Placebo.java +++ b/src/main/java/dev/shadowsoffire/placebo/Placebo.java @@ -5,6 +5,7 @@ import dev.shadowsoffire.placebo.events.ServerEvents; import dev.shadowsoffire.placebo.json.GearSetRegistry; import dev.shadowsoffire.placebo.loot.StackLootEntry; +import dev.shadowsoffire.placebo.mixin.getters.TextColorGetter; import dev.shadowsoffire.placebo.packets.ButtonClickMessage; import dev.shadowsoffire.placebo.packets.PatreonDisableMessage; import dev.shadowsoffire.placebo.patreon.TrailsManager; @@ -14,7 +15,6 @@ import dev.shadowsoffire.placebo.util.PlaceboUtil; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; -import net.minecraft.network.chat.TextColor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -34,7 +34,8 @@ public void onInitialize() { ButtonClickMessage.init(); PatreonDisableMessage.initServer(); registerCommands(); - TextColor.NAMED_COLORS = new HashMap<>(TextColor.NAMED_COLORS); + TextColorGetter.setNAMED_COLORS(new HashMap<>(TextColorGetter.getNAMED_COLORS())); + //TextColor.NAMED_COLORS = new HashMap<>(TextColor.NAMED_COLORS); PlaceboUtil.registerCustomColor(GradientColor.RAINBOW); DynamicRegistry.sync(); GearSetRegistry.INSTANCE.register(); diff --git a/src/main/java/dev/shadowsoffire/placebo/PlaceboClient.java b/src/main/java/dev/shadowsoffire/placebo/PlaceboClient.java index 8b891cc..0eca109 100644 --- a/src/main/java/dev/shadowsoffire/placebo/PlaceboClient.java +++ b/src/main/java/dev/shadowsoffire/placebo/PlaceboClient.java @@ -39,13 +39,9 @@ public void onInitializeClient() { PatreonDisableMessage.initClient(); } - public static long ticks = 0; - public static float getColorTicks() { return (ticks + Minecraft.getInstance().getDeltaFrameTime()) / 0.5F; } - - } diff --git a/src/main/java/dev/shadowsoffire/placebo/collections/BlockedDeque.java b/src/main/java/dev/shadowsoffire/placebo/collections/BlockedDeque.java deleted file mode 100644 index e0730fc..0000000 --- a/src/main/java/dev/shadowsoffire/placebo/collections/BlockedDeque.java +++ /dev/null @@ -1,41 +0,0 @@ -package dev.shadowsoffire.placebo.collections; - -import java.util.ArrayDeque; - -@Deprecated -public abstract class BlockedDeque extends ArrayDeque { - - private static final long serialVersionUID = -8194197029368437188L; - - public abstract boolean isBlocked(T t); - - @Override - public void addFirst(T t) { - if (this.isBlocked(t)) return; - super.addFirst(t); - } - - @Override - public void addLast(T t) { - if (this.isBlocked(t)) return; - super.addLast(t); - } - - @Override - public boolean add(T t) { - this.addLast(t); - return !this.isBlocked(t); - } - - @Override - public boolean offerFirst(T t) { - this.addFirst(t); - return !this.isBlocked(t); - } - - @Override - public boolean offerLast(T t) { - this.addLast(t); - return !this.isBlocked(t); - } -} diff --git a/src/main/java/dev/shadowsoffire/placebo/collections/BlockedList.java b/src/main/java/dev/shadowsoffire/placebo/collections/BlockedList.java deleted file mode 100644 index c1d89c1..0000000 --- a/src/main/java/dev/shadowsoffire/placebo/collections/BlockedList.java +++ /dev/null @@ -1,38 +0,0 @@ -package dev.shadowsoffire.placebo.collections; - -import java.util.ArrayList; -import java.util.Collection; - -@Deprecated -public abstract class BlockedList extends ArrayList { - - private static final long serialVersionUID = -7008599240020028661L; - - public abstract boolean isBlocked(T t); - - public abstract boolean isBlocked(Collection c); - - @Override - public void add(int index, T t) { - if (this.isBlocked(t)) return; - super.add(index, t); - } - - @Override - public boolean add(T t) { - if (this.isBlocked(t)) return false; - return super.add(t); - } - - @Override - public boolean addAll(Collection c) { - if (this.isBlocked(c)) return false; - return super.addAll(c); - } - - @Override - public boolean addAll(int index, Collection c) { - if (this.isBlocked(c)) return false; - return super.addAll(index, c); - } -} diff --git a/src/main/java/dev/shadowsoffire/placebo/collections/BlockedMap.java b/src/main/java/dev/shadowsoffire/placebo/collections/BlockedMap.java deleted file mode 100644 index 56f1a7f..0000000 --- a/src/main/java/dev/shadowsoffire/placebo/collections/BlockedMap.java +++ /dev/null @@ -1,32 +0,0 @@ -package dev.shadowsoffire.placebo.collections; - -import java.util.HashMap; -import java.util.Map; - -@Deprecated -public abstract class BlockedMap extends HashMap { - - private static final long serialVersionUID = 3265695314048724801L; - - public abstract boolean isBlocked(K k, V v); - - public abstract boolean isBlocked(Map m); - - @Override - public V put(K key, V value) { - if (this.isBlocked(key, value)) return null; - return super.put(key, value); - } - - @Override - public void putAll(Map m) { - if (this.isBlocked(m)) return; - super.putAll(m); - } - - @Override - public V putIfAbsent(K key, V value) { - if (this.isBlocked(key, value)) return null; - return super.putIfAbsent(key, value); - } -} diff --git a/src/main/java/dev/shadowsoffire/placebo/commands/SerializeLootTableCommand.java b/src/main/java/dev/shadowsoffire/placebo/commands/SerializeLootTableCommand.java index 256476e..f89b534 100644 --- a/src/main/java/dev/shadowsoffire/placebo/commands/SerializeLootTableCommand.java +++ b/src/main/java/dev/shadowsoffire/placebo/commands/SerializeLootTableCommand.java @@ -3,6 +3,7 @@ import com.google.gson.Gson; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import dev.shadowsoffire.placebo.mixin.getters.MinecraftServerAccessor; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; @@ -26,7 +27,7 @@ public class SerializeLootTableCommand { public static void register(LiteralArgumentBuilder builder) { builder.then(Commands.literal("serialize_loot_table").requires(s -> s.hasPermission(2)).then(Commands.argument("loot_table", ResourceLocationArgument.id()).suggests(LootCommand.SUGGEST_LOOT_TABLE).executes(ctx -> { ResourceLocation id = ResourceLocationArgument.getId(ctx, "loot_table"); - LootTable table = ctx.getSource().getServer().resources.managers().getLootData().getLootTable(id); + LootTable table = ((MinecraftServerAccessor) ctx.getSource().getServer()).getResources().managers().getLootData().getLootTable(id); if (table == LootTable.EMPTY) throw NOT_FOUND.create(id); String path = "fakerlib_serialized/" + id.getNamespace() + "/loot_tables/" + id.getPath() + ".json"; File file = new File(FabricLoader.getInstance().getGameDir().toFile(), path); diff --git a/src/main/java/dev/shadowsoffire/placebo/commands/StringToObjCommand.java b/src/main/java/dev/shadowsoffire/placebo/commands/StringToObjCommand.java index f2d9d83..4b53279 100644 --- a/src/main/java/dev/shadowsoffire/placebo/commands/StringToObjCommand.java +++ b/src/main/java/dev/shadowsoffire/placebo/commands/StringToObjCommand.java @@ -1,8 +1,5 @@ package dev.shadowsoffire.placebo.commands; -import java.io.IOException; -import java.io.StringWriter; - import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -10,7 +7,6 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; import com.mojang.serialization.JsonOps; - import dev.shadowsoffire.placebo.Placebo; import dev.shadowsoffire.placebo.json.NBTAdapter; import net.minecraft.commands.CommandBuildContext; @@ -21,11 +17,14 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.level.storage.loot.Deserializers; +import java.io.IOException; +import java.io.StringWriter; + public class StringToObjCommand { public static final Gson GSON = Deserializers.createLootTableSerializer().setPrettyPrinting().create(); - public static final DynamicCommandExceptionType NOT_FOUND = new DynamicCommandExceptionType(arg -> Component.translatable("placebo.cmd.not_found", arg)); + public static final DynamicCommandExceptionType NOT_FOUND = new DynamicCommandExceptionType(arg -> Component.translatable("fakerlib.cmd.not_found", arg)); public static void register(LiteralArgumentBuilder builder, CommandBuildContext buildCtx) { builder.then(Commands.literal("string_to_obj").requires(src -> src.hasPermission(2)).then(Commands.argument("nbt_item", ItemArgument.item(buildCtx)).executes(ctx -> { diff --git a/src/main/java/dev/shadowsoffire/placebo/events/PlaceboEventFactory.java b/src/main/java/dev/shadowsoffire/placebo/events/PlaceboEventFactory.java index cca734b..11109a2 100644 --- a/src/main/java/dev/shadowsoffire/placebo/events/PlaceboEventFactory.java +++ b/src/main/java/dev/shadowsoffire/placebo/events/PlaceboEventFactory.java @@ -17,10 +17,6 @@ public static InteractionResult onItemUse(ItemStack stack, UseOnContext ctx) { return null; } - /** - * Called from {link IForgeItemStack#getEnchantmentLevel(Enchantment)} - * Injected via coremods/get_ench_level_event_specific.js - */ public static int getEnchantmentLevelSpecific(int level, ItemStack stack, Enchantment ench) { var enchMap = new HashMap(); enchMap.put(ench, level); @@ -28,10 +24,6 @@ public static int getEnchantmentLevelSpecific(int level, ItemStack stack, Enchan return eventResult.get(ench); } - /** - * Called from {link IForgeItemStack#getAllEnchantments()} - * Injected via coremods/get_ench_level_event.js - */ public static Map getEnchantmentLevel(Map enchantments, ItemStack stack) { enchantments = new HashMap<>(enchantments); GetEnchantmentLevelEvent.GET_ENCHANTMENT_LEVEL.invoker().onEnchantRequest(enchantments, stack); diff --git a/src/main/java/dev/shadowsoffire/placebo/json/RandomAttributeModifier.java b/src/main/java/dev/shadowsoffire/placebo/json/RandomAttributeModifier.java index 1a8bcd1..2e7a67f 100644 --- a/src/main/java/dev/shadowsoffire/placebo/json/RandomAttributeModifier.java +++ b/src/main/java/dev/shadowsoffire/placebo/json/RandomAttributeModifier.java @@ -18,8 +18,6 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier.Operation; import java.lang.reflect.Type; -import java.util.Objects; -import java.util.Random; import java.util.UUID; public record RandomAttributeModifier(Attribute attribute, Operation op, StepFunction value, UUID id) { @@ -54,8 +52,8 @@ public void apply(RandomSource rand, LivingEntity entity) { AttributeModifier modif = this.create(rand); AttributeInstance inst = entity.getAttribute(this.attribute); if (inst == null) { - Placebo.LOGGER - .trace(String.format("Attempted to apply a random attribute modifier to an entity (%s) that does not have that attribute (%s)!", EntityType.getKey(entity.getType()), BuiltInRegistries.ATTRIBUTE.getKey(this.attribute))); + Placebo.LOGGER.trace(String.format("Attempted to apply a random attribute modifier to an entity (%s) that does not have that attribute (%s)!", + EntityType.getKey(entity.getType()), BuiltInRegistries.ATTRIBUTE.getKey(this.attribute))); return; } inst.addPermanentModifier(modif); diff --git a/src/main/java/dev/shadowsoffire/placebo/loot/PoolBuilder.java b/src/main/java/dev/shadowsoffire/placebo/loot/PoolBuilder.java index 371960d..3ae0bb9 100644 --- a/src/main/java/dev/shadowsoffire/placebo/loot/PoolBuilder.java +++ b/src/main/java/dev/shadowsoffire/placebo/loot/PoolBuilder.java @@ -1,5 +1,6 @@ package dev.shadowsoffire.placebo.loot; +import dev.shadowsoffire.placebo.mixin.getters.BuilderAccessor; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; import net.minecraft.world.level.storage.loot.functions.LootItemFunction; @@ -18,17 +19,17 @@ public PoolBuilder(int minRolls, int maxRolls) { } public PoolBuilder addEntries(LootPoolEntryContainer... entries) { - this.entries.addAll(Arrays.asList(entries)); + ((BuilderAccessor) this).getEntries().addAll(Arrays.asList(entries)); return this; } public PoolBuilder addCondition(LootItemCondition... conditions) { - this.conditions.addAll(Arrays.asList(conditions)); + ((BuilderAccessor) this).getConditions().addAll(Arrays.asList(conditions)); return this; } public PoolBuilder addFunc(LootItemFunction... conditions) { - this.functions.addAll(Arrays.asList(conditions)); + ((BuilderAccessor) this).getFunctions().addAll(Arrays.asList(conditions)); return this; } diff --git a/src/main/java/dev/shadowsoffire/placebo/menu/FilteredSlot.java b/src/main/java/dev/shadowsoffire/placebo/menu/FilteredSlot.java index 47f226c..937f88f 100644 --- a/src/main/java/dev/shadowsoffire/placebo/menu/FilteredSlot.java +++ b/src/main/java/dev/shadowsoffire/placebo/menu/FilteredSlot.java @@ -3,7 +3,6 @@ import com.google.common.base.Predicates; import io.github.fabricators_of_create.porting_lib.transfer.item.ItemStackHandler; import io.github.fabricators_of_create.porting_lib.transfer.item.SlotItemHandler; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import java.util.function.Predicate; diff --git a/src/main/java/dev/shadowsoffire/placebo/menu/QuickMoveHandler.java b/src/main/java/dev/shadowsoffire/placebo/menu/QuickMoveHandler.java index 8aa1276..d490397 100644 --- a/src/main/java/dev/shadowsoffire/placebo/menu/QuickMoveHandler.java +++ b/src/main/java/dev/shadowsoffire/placebo/menu/QuickMoveHandler.java @@ -1,7 +1,7 @@ package dev.shadowsoffire.placebo.menu; import dev.shadowsoffire.placebo.Placebo; -import dev.shadowsoffire.placebo.mixin.AbstractContainerMenuInvoker; +import dev.shadowsoffire.placebo.mixin.getters.AbstractContainerMenuInvoker; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.Slot; diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/EnchantmentHelperMixin.java b/src/main/java/dev/shadowsoffire/placebo/mixin/EnchantmentHelperMixin.java index 0dff2a5..3a538d2 100644 --- a/src/main/java/dev/shadowsoffire/placebo/mixin/EnchantmentHelperMixin.java +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/EnchantmentHelperMixin.java @@ -1,8 +1,6 @@ package dev.shadowsoffire.placebo.mixin; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; -import dev.shadowsoffire.placebo.Placebo; import dev.shadowsoffire.placebo.events.PlaceboEventFactory; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; @@ -20,10 +18,7 @@ public class EnchantmentHelperMixin { private static void initializeEnchLevelEvent(Enchantment enchantment, ItemStack stack, CallbackInfoReturnable cir, @Local CompoundTag compoundTag){ if (stack.isEmpty()) return; int result = PlaceboEventFactory.getEnchantmentLevelSpecific(EnchantmentHelper.getEnchantmentLevel(compoundTag), stack, enchantment); - //Placebo.LOGGER.info("Enchantment level: {}, old: {}", result, EnchantmentHelper.getEnchantmentLevel(compoundTag)); cir.setReturnValue(result); } - - } diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/EntityRenderDispatcherMixin.java b/src/main/java/dev/shadowsoffire/placebo/mixin/EntityRenderDispatcherMixin.java index d936fe3..fd52796 100644 --- a/src/main/java/dev/shadowsoffire/placebo/mixin/EntityRenderDispatcherMixin.java +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/EntityRenderDispatcherMixin.java @@ -1,6 +1,7 @@ package dev.shadowsoffire.placebo.mixin; import dev.shadowsoffire.placebo.PlaceboClient; +import dev.shadowsoffire.placebo.mixin.getters.LivingEntityRendererAccessor; import dev.shadowsoffire.placebo.patreon.wings.Wing; import dev.shadowsoffire.placebo.patreon.wings.WingLayer; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; @@ -35,7 +36,7 @@ private static void addLayers(EntityRendererProvider.Context context, Map, ?> elements; - @Shadow - private Multimap, ResourceLocation> typeKeys; - /* - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Inject(method = "apply(Ljava/util/Map;)V", at = @At(value = "TAIL"), require = 1) - protected void apply(Map pObject, CallbackInfo ci) { - if (LootSystem.PLACEBO_TABLES.isEmpty()) return; - this.elements = new HashMap<>(this.elements); - this.typeKeys = HashMultimap.create(this.typeKeys); - LootSystem.PLACEBO_TABLES.forEach((key, val) -> { - if (!this.elements.containsKey(key)) { - ((Map) this.elements).put(key, val); - this.typeKeys.put(LootDataType.TABLE, key.location()); - } - }); - Placebo.LOGGER.info("Registered {} additional loot tables.", LootSystem.PLACEBO_TABLES.size()); - }*/ -} diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/ReloadableServerResourcesMixin.java b/src/main/java/dev/shadowsoffire/placebo/mixin/ReloadableServerResourcesMixin.java index 084e1cf..fc88bfb 100644 --- a/src/main/java/dev/shadowsoffire/placebo/mixin/ReloadableServerResourcesMixin.java +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/ReloadableServerResourcesMixin.java @@ -5,23 +5,19 @@ import net.minecraft.server.packs.resources.PreparableReloadListener; 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 org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; +import java.util.Collections; import java.util.List; - @Mixin(ReloadableServerResources.class) public class ReloadableServerResourcesMixin { - @Inject(method = "listeners", at = @At("RETURN"), cancellable = true) - private void addListeners(CallbackInfoReturnable> cir){ - List listeners = new java.util.ArrayList<>(cir.getReturnValue()); - List customListeners = ReloadableServerEvent.list; - if (customListeners != null){ - listeners.addAll(customListeners); - } - cir.setReturnValue(listeners); + @ModifyArgs(method = "loadResources", at = @At(value = "INVOKE", target = "net/minecraft/server/packs/resources/SimpleReloadInstance.create (Lnet/minecraft/server/packs/resources/ResourceManager;Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Z)Lnet/minecraft/server/packs/resources/ReloadInstance;")) + private static void fakerlib$addListeners(Args args) { + List listeners = new java.util.ArrayList<>(args.get(1)); + listeners.addAll(ReloadableServerEvent.list); + args.set(1, Collections.unmodifiableList(listeners)); } - } diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/AbstractContainerMenuInvoker.java b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/AbstractContainerMenuInvoker.java similarity index 89% rename from src/main/java/dev/shadowsoffire/placebo/mixin/AbstractContainerMenuInvoker.java rename to src/main/java/dev/shadowsoffire/placebo/mixin/getters/AbstractContainerMenuInvoker.java index 8ac82b3..eff966c 100644 --- a/src/main/java/dev/shadowsoffire/placebo/mixin/AbstractContainerMenuInvoker.java +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/AbstractContainerMenuInvoker.java @@ -1,4 +1,4 @@ -package dev.shadowsoffire.placebo.mixin; +package dev.shadowsoffire.placebo.mixin.getters; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/getters/BuilderAccessor.java b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/BuilderAccessor.java new file mode 100644 index 0000000..4ecefb9 --- /dev/null +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/BuilderAccessor.java @@ -0,0 +1,22 @@ +package dev.shadowsoffire.placebo.mixin.getters; + +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; +import net.minecraft.world.level.storage.loot.functions.LootItemFunction; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(LootPool.Builder.class) +public interface BuilderAccessor { + @Accessor + List getEntries(); + + @Accessor + List getConditions(); + + @Accessor + List getFunctions(); +} diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/getters/LivingEntityRendererAccessor.java b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/LivingEntityRendererAccessor.java new file mode 100644 index 0000000..1c9419c --- /dev/null +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/LivingEntityRendererAccessor.java @@ -0,0 +1,14 @@ +package dev.shadowsoffire.placebo.mixin.getters; + +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(LivingEntityRenderer.class) +public interface LivingEntityRendererAccessor> { + @Invoker + boolean callAddLayer(RenderLayer layer); +} diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/getters/MinecraftServerAccessor.java b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/MinecraftServerAccessor.java new file mode 100644 index 0000000..59a98a1 --- /dev/null +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/MinecraftServerAccessor.java @@ -0,0 +1,11 @@ +package dev.shadowsoffire.placebo.mixin.getters; + +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(MinecraftServer.class) +public interface MinecraftServerAccessor { + @Accessor + MinecraftServer.ReloadableResources getResources(); +} diff --git a/src/main/java/dev/shadowsoffire/placebo/mixin/getters/TextColorGetter.java b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/TextColorGetter.java new file mode 100644 index 0000000..949cd08 --- /dev/null +++ b/src/main/java/dev/shadowsoffire/placebo/mixin/getters/TextColorGetter.java @@ -0,0 +1,23 @@ +package dev.shadowsoffire.placebo.mixin.getters; + +import net.minecraft.network.chat.TextColor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(TextColor.class) +public interface TextColorGetter { + + @Accessor + public static Map getNAMED_COLORS() { + throw new AssertionError(); + } + + @Accessor + @Mutable + public static void setNAMED_COLORS(Map NAMED_COLORS) { + throw new AssertionError(); + } +} diff --git a/src/main/java/dev/shadowsoffire/placebo/patreon/TrailsManager.java b/src/main/java/dev/shadowsoffire/placebo/patreon/TrailsManager.java index 0a2574b..f8b9c52 100644 --- a/src/main/java/dev/shadowsoffire/placebo/patreon/TrailsManager.java +++ b/src/main/java/dev/shadowsoffire/placebo/patreon/TrailsManager.java @@ -56,7 +56,6 @@ public static void clientTick() { PatreonParticleType t = null; if (Minecraft.getInstance().level != null) { for (Player player : Minecraft.getInstance().level.players()) { - Placebo.LOGGER.info("Tick count: {}, disabled contains: {}, trails contains: {}", (player.tickCount * 3 % 2 == 0), !DISABLED.contains(player.getUUID()), (t = TRAILS.get(player.getUUID())) != null); if (!player.isInvisible() && player.tickCount * 3 % 2 == 0 && !DISABLED.contains(player.getUUID()) && (t = TRAILS.get(player.getUUID())) != null) { ClientLevel world = (ClientLevel) player.level(); RandomSource rand = world.random; diff --git a/src/main/java/dev/shadowsoffire/placebo/reload/DynamicRegistry.java b/src/main/java/dev/shadowsoffire/placebo/reload/DynamicRegistry.java index 6c5e227..bcc8c52 100644 --- a/src/main/java/dev/shadowsoffire/placebo/reload/DynamicRegistry.java +++ b/src/main/java/dev/shadowsoffire/placebo/reload/DynamicRegistry.java @@ -1,12 +1,12 @@ package dev.shadowsoffire.placebo.reload; import com.google.common.base.Preconditions; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableBiMap; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import dev.shadowsoffire.placebo.Placebo; @@ -32,7 +32,6 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; - import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @@ -218,10 +217,13 @@ public void register() { if (this.synced) SyncManagement.registerForSync(this); ReloadableServerEvent.addListeners(this); } + public static void sync(){ syncAll(); } + + /** * Creates a {@link DynamicHolder} pointing to a value stored in this reload listener. * @@ -332,6 +334,7 @@ protected final void register(ResourceLocation key, R value) { */ protected void validateItem(ResourceLocation key, R value) {} + /** * Replaces the contents of the live registry with the staging registry.
* This triggers the full reload process for the client. diff --git a/src/main/java/dev/shadowsoffire/placebo/tabs/TabFillingRegistry.java b/src/main/java/dev/shadowsoffire/placebo/tabs/TabFillingRegistry.java index 5f8baa0..426ce9c 100644 --- a/src/main/java/dev/shadowsoffire/placebo/tabs/TabFillingRegistry.java +++ b/src/main/java/dev/shadowsoffire/placebo/tabs/TabFillingRegistry.java @@ -1,19 +1,20 @@ package dev.shadowsoffire.placebo.tabs; -import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.level.ItemLike; -import org.jetbrains.annotations.ApiStatus; -import java.util.*; +import java.util.ArrayList; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; import java.util.function.Supplier; /** * Class for managing the new method of filling creative tabs, * without having to bulk all the logic into one master method. */ -public class TabFillingRegistry { //TODO Need to change around a bit +public class TabFillingRegistry { //TODO Need to reimplement, fabricified private static final Map, List> FILLERS = new IdentityHashMap<>(); diff --git a/src/main/java/dev/shadowsoffire/placebo/util/IReplacementBlock.java b/src/main/java/dev/shadowsoffire/placebo/util/IReplacementBlock.java deleted file mode 100644 index c1ec183..0000000 --- a/src/main/java/dev/shadowsoffire/placebo/util/IReplacementBlock.java +++ /dev/null @@ -1,33 +0,0 @@ -package dev.shadowsoffire.placebo.util; - -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; - -@Deprecated -public interface IReplacementBlock { - - public void _setDefaultState(BlockState state); - - public void setStateContainer(StateDefinition container); -} - -/* - * Default Implementation (just copy this onto any implementing class) - * protected StateContainer container; - * - * @Override - * public void _setDefaultState(BlockState state) { - * this.setDefaultState(state); - * } - * - * @Override - * public void setStateContainer(StateContainer container) { - * this.container = container; - * } - * - * @Override - * public StateContainer getStateContainer() { - * return container == null ? super.getStateContainer() : container; - * } - */ diff --git a/src/main/java/dev/shadowsoffire/placebo/util/PlaceboUtil.java b/src/main/java/dev/shadowsoffire/placebo/util/PlaceboUtil.java index 3e96bf9..5aafe7d 100644 --- a/src/main/java/dev/shadowsoffire/placebo/util/PlaceboUtil.java +++ b/src/main/java/dev/shadowsoffire/placebo/util/PlaceboUtil.java @@ -2,11 +2,10 @@ import com.google.common.collect.ImmutableList; import dev.shadowsoffire.placebo.Placebo; -import dev.shadowsoffire.placebo.recipe.RecipeHelper; +import dev.shadowsoffire.placebo.mixin.getters.TextColorGetter; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.StringTag; @@ -14,12 +13,9 @@ import net.minecraft.network.chat.TextColor; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.level.block.Block; import java.util.ArrayList; import java.util.HashMap; @@ -57,17 +53,6 @@ public static ItemStack[] toStackArray(Object... args) { return out; } - /** - * Updates the references for a replaced block such that original BlockState objects are still valid. - */ - @Deprecated - public static void overrideStates(Block old, B block) { - block.setStateContainer(old.getStateDefinition()); - block._setDefaultState(old.defaultBlockState()); - block.getStateDefinition().getPossibleStates().forEach(b -> b.owner = block); - // block.getStateDefinition().owner = block; - } - /** * Returns a mutable version of the passed list. * If the list is already mutable, the list is returned. @@ -107,7 +92,6 @@ public static void addLore(ItemStack stack, Component lore) { static Map> unregisteredTypes = new HashMap<>(); @SuppressWarnings("unchecked") - @Deprecated // Use defreg public static > RecipeType makeRecipeType(final String pIdentifier) { if (late) throw new RuntimeException("Attempted to register a recipe type after the registration period closed."); RecipeType type = new RecipeType<>(){ @@ -120,7 +104,6 @@ public String toString() { return type; } - @Deprecated public static void registerTypes() { unregisteredTypes.forEach((key, type) -> Registry.register(BuiltInRegistries.RECIPE_TYPE, key, type)); Placebo.LOGGER.debug("Registered {} recipe types.", unregisteredTypes.size()); @@ -134,7 +117,7 @@ public static void registerTypes() { * This is not required for any static color values, because they can be represented as a hex int. */ public static void registerCustomColor(T color) { - TextColor.NAMED_COLORS.put(color.serialize(), color); + TextColorGetter.getNAMED_COLORS().put(color.serialize(), color); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index bc37660..3bcb6a3 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,10 +27,10 @@ "fakerlib.mixins.json" ], "depends": { - "fabricloader": ">=0.14.22", + "fabricloader": ">=0.14.25", "minecraft": "~1.20.1", "java": ">=17", - "fabric-api": ">=0.87.0" + "fabric-api": ">=0.91.0" }, "suggests": { "zenith": "*" diff --git a/src/main/resources/fakerlib.aw b/src/main/resources/fakerlib.aw index e8232fa..ba4fe5d 100644 --- a/src/main/resources/fakerlib.aw +++ b/src/main/resources/fakerlib.aw @@ -2,23 +2,4 @@ accessWidener v1 named extendable class net/minecraft/network/chat/TextColor accessible class net/minecraft/network/chat/TextColor -accessible method net/minecraft/network/chat/TextColor (I)V -accessible field net/minecraft/server/ReloadableServerResources commandBuildContext Lnet/minecraft/commands/CommandBuildContext$Configurable; -accessible class net/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier -accessible method net/minecraft/network/chat/TextColor (ILjava/lang/String;)V -mutable field net/minecraft/network/chat/TextColor NAMED_COLORS Ljava/util/Map; -accessible field net/minecraft/network/chat/TextColor NAMED_COLORS Ljava/util/Map; -accessible field net/minecraft/world/level/block/state/StateDefinition owner Ljava/lang/Object; -accessible field net/minecraft/world/item/crafting/RecipeManager byName Ljava/util/Map; -accessible field net/minecraft/world/item/crafting/RecipeManager recipes Ljava/util/Map; -accessible field net/minecraft/world/level/storage/loot/LootPool$Builder entries Ljava/util/List; -accessible field net/minecraft/world/level/storage/loot/LootPool$Builder conditions Ljava/util/List; -accessible field net/minecraft/world/level/storage/loot/LootPool$Builder functions Ljava/util/List; -accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/server/MinecraftServer$ReloadableResources; -accessible field net/minecraft/world/level/block/state/StateHolder owner Ljava/lang/Object; -mutable field net/minecraft/world/level/block/state/StateHolder owner Ljava/lang/Object; -accessible method net/minecraft/server/MinecraftServer$ReloadableResources managers ()Lnet/minecraft/server/ReloadableServerResources; -accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/server/MinecraftServer$ReloadableResources; -accessible method net/minecraft/world/item/crafting/Ingredient fromValues (Ljava/util/stream/Stream;)Lnet/minecraft/world/item/crafting/Ingredient; -accessible field net/minecraft/world/item/crafting/Ingredient values [Lnet/minecraft/world/item/crafting/Ingredient$Value; -accessible method net/minecraft/client/renderer/entity/LivingEntityRenderer addLayer (Lnet/minecraft/client/renderer/entity/layers/RenderLayer;)Z \ No newline at end of file +accessible method net/minecraft/network/chat/TextColor (ILjava/lang/String;)V \ No newline at end of file diff --git a/src/main/resources/fakerlib.mixins.json b/src/main/resources/fakerlib.mixins.json index 3a391ac..928a140 100644 --- a/src/main/resources/fakerlib.mixins.json +++ b/src/main/resources/fakerlib.mixins.json @@ -3,19 +3,22 @@ "package": "dev.shadowsoffire.placebo.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "AbstractContainerMenuInvoker", "AnvilBlockMixin", "EnchantmentHelperMixin", "ItemStackMixin", - "LootTablesMixin", - "ReloadableServerResourcesMixin" + "ReloadableServerResourcesMixin", + "getters.AbstractContainerMenuInvoker", + "getters.BuilderAccessor", + "getters.LivingEntityRendererAccessor", + "getters.MinecraftServerAccessor", + "getters.TextColorGetter" ], "injectors": { "defaultRequire": 1 }, "client": [ "ChatComponentMixin", - "PlayerMixin", - "EntityRenderDispatcherMixin" + "EntityRenderDispatcherMixin", + "PlayerMixin" ] } \ No newline at end of file