diff options
author | Linnea Gräf <nea@nea.moe> | 2024-09-12 13:34:11 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-09-12 13:34:11 +0200 |
commit | 52623b715d395f65f96e09f4492285935b797b4b (patch) | |
tree | 1b96097a17dd9c81671478b11d127ce3278ddada /src/main | |
parent | ab809e197f3e8c9a51745ee9510bc65c952c0cc8 (diff) | |
download | Firmament-fix/citresewn.tar.gz Firmament-fix/citresewn.tar.bz2 Firmament-fix/citresewn.zip |
Isolate CIT resewn compatfix/citresewn
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java | 123 | ||||
-rw-r--r-- | src/main/kotlin/events/subscription/SubscriptionList.kt | 3 | ||||
-rw-r--r-- | src/main/kotlin/util/ConditionNBTMixin.kt | 58 | ||||
-rw-r--r-- | src/main/resources/fabric.mod.json | 7 |
4 files changed, 8 insertions, 183 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java b/src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java deleted file mode 100644 index 602c13d..0000000 --- a/src/main/java/moe/nea/firmament/mixins/MixinConditionComponents.java +++ /dev/null @@ -1,123 +0,0 @@ -package moe.nea.firmament.mixins; - -// People are complaining but this really is not my place to fix things - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; -import com.mojang.serialization.Codec; -import com.mojang.serialization.DataResult; -import com.mojang.serialization.DynamicOps; -import moe.nea.firmament.features.texturepack.CustomSkyBlockTextures; -import moe.nea.firmament.util.ConditionNBTMixin; -import net.minecraft.component.ComponentType; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.NbtComponent; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import shcm.shsupercm.fabric.citresewn.CITResewn; -import shcm.shsupercm.fabric.citresewn.cit.CITContext; -import shcm.shsupercm.fabric.citresewn.defaults.cit.conditions.ConditionComponents; -import shcm.shsupercm.fabric.citresewn.defaults.cit.conditions.ConditionNBT; -import shcm.shsupercm.fabric.citresewn.pack.format.PropertyGroup; -import shcm.shsupercm.fabric.citresewn.pack.format.PropertyKey; -import shcm.shsupercm.fabric.citresewn.pack.format.PropertyValue; - -@Mixin(ConditionComponents.class) -@Pseudo -public class MixinConditionComponents { - @Shadow - private ComponentType<?> componentType; - - @Shadow(remap = false) - private ConditionNBT fallbackNBTCheck; - @Unique - private String[] pathCheck; - @Unique - private int loreInt = -1; - - @Inject(method = "load", at = @At("HEAD"), remap = false) - public void addExtraAttributeSupport(PropertyKey key, PropertyValue value, PropertyGroup properties, CallbackInfo ci, - @Local(argsOnly = true) LocalRef<PropertyKey> keyRef, - @Local(argsOnly = true) LocalRef<PropertyValue> valueRef) { - if (!CustomSkyBlockTextures.TConfig.INSTANCE.getEnableLegacyCIT()) return; - if (!"nbt".equals(key.path())) return; - if (!value.keyMetadata().startsWith("ExtraAttributes.")) return; - keyRef.set(new PropertyKey(key.namespace(), "component")); - valueRef.set(new PropertyValue( - "minecraft:custom_data" + value.keyMetadata().substring("ExtraAttributes".length()), - value.value(), - value.separator(), - value.position(), - value.propertiesIdentifier(), - value.packName() - )); - CITResewn.logWarnLoading(properties.messageWithDescriptorOf("NBT condition is not supported since 1.21. THIS IS A FIRMAMENT SPECIAL FEATURE ALLOWING YOU TO CONTINUE TO USE nbt.ExtraAttributes.* PROPERTIES FOR A LIMITED TIME! UPDATE YOUR .PROPERTIES FILES OR SWITCH TO FIRMAMENT CIT (https://github.com/FirmamentMC/CitToFirm)", - value.position())); - } - - @Inject(method = "load", - at = @At(value = "INVOKE", remap = false, target = "Lshcm/shsupercm/fabric/citresewn/defaults/cit/conditions/ConditionNBT;loadNbtCondition(Lshcm/shsupercm/fabric/citresewn/pack/format/PropertyValue;Lshcm/shsupercm/fabric/citresewn/pack/format/PropertyGroup;[Ljava/lang/String;Ljava/lang/String;)V"), - remap = false) - private void onLoadSavePath(PropertyKey key, PropertyValue value, PropertyGroup properties, CallbackInfo ci, - @Local String[] path) { - this.pathCheck = path; - this.loreInt = -1; - } - - @Unique - private boolean matchStringDirect(String directString, CITContext context) { - return ConditionNBTMixin.invokeDirectConditionNBTStringMatch(fallbackNBTCheck, directString); - } - - @WrapOperation(method = "test", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/Codec;encodeStart(Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult;"), remap = false) - DataResult fastPathUnsafeNbtComponent( - Codec instance, - DynamicOps dynamicOps, - Object o, - Operation<DataResult> original) { - if (o instanceof NbtComponent nbtComponent) { - return DataResult.success(nbtComponent.getNbt()); - } - return original.call(instance, dynamicOps, o); - } - - @Inject(method = "test", at = @At("HEAD"), cancellable = true, remap = false) - void fastPathDisplayName(CITContext context, CallbackInfoReturnable<Boolean> cir) { - if (this.componentType == DataComponentTypes.CUSTOM_NAME && pathCheck.length == 0) { - var displayName = context.stack.getComponents().get(DataComponentTypes.CUSTOM_NAME); - if (displayName != null) { - cir.setReturnValue(matchStringDirect((displayName.getString()), context)); - } - } - if (this.componentType == DataComponentTypes.LORE && pathCheck.length == 1) { - var lore = context.stack.getComponents().get(DataComponentTypes.LORE); - if (lore != null) { - var loreLines = lore.lines(); - if (pathCheck[0].equals("*")) { - for (var loreLine : loreLines) { - if (matchStringDirect((loreLine.getString()), context)) { - cir.setReturnValue(true); - return; - } - } - cir.setReturnValue(false); - } else { - if (loreInt < 0) - loreInt = Integer.parseInt(pathCheck[0]); - cir.setReturnValue(0 <= loreInt && loreInt < loreLines.size() && - matchStringDirect((loreLines.get(loreInt).getString()), context)); - } - } - } - } - - -} diff --git a/src/main/kotlin/events/subscription/SubscriptionList.kt b/src/main/kotlin/events/subscription/SubscriptionList.kt index e74a65a..817efc3 100644 --- a/src/main/kotlin/events/subscription/SubscriptionList.kt +++ b/src/main/kotlin/events/subscription/SubscriptionList.kt @@ -21,5 +21,8 @@ interface SubscriptionList { } .toList() } + init { + require(allLists.isNotEmpty()) + } } } diff --git a/src/main/kotlin/util/ConditionNBTMixin.kt b/src/main/kotlin/util/ConditionNBTMixin.kt deleted file mode 100644 index cbc1e66..0000000 --- a/src/main/kotlin/util/ConditionNBTMixin.kt +++ /dev/null @@ -1,58 +0,0 @@ -package moe.nea.firmament.util - -import java.lang.invoke.MethodHandles -import java.util.function.BiPredicate -import java.util.function.Function -import shcm.shsupercm.fabric.citresewn.defaults.cit.conditions.ConditionNBT - -object ConditionNBTMixin { - class Helper<StringMatcher> { - - val stringMatcherType = ConditionNBT::class.java.getDeclaredField("matchString").type - - val accessMatcher = run { - val matchStringF = ConditionNBT::class.java.getDeclaredField("matchString"); - matchStringF.isAccessible = true - val l = MethodHandles.privateLookupIn(ConditionNBT::class.java, MethodHandles.lookup()) -// val mt = MethodType.methodType(stringMatcherType, ConditionNBT::class.java) -// val callsite = LambdaMetafactory.metafactory( -// l, "apply", -// MethodType.methodType(Function::class.java), -// MethodType.methodType(java.lang.Object::class.java, java.lang.Object::class.java), -// l.unreflectGetter(matchStringF), -// mt -// ) - val getter = l.unreflectGetter(matchStringF) - Function<ConditionNBT, StringMatcher> { getter.invoke(it) as StringMatcher } - } - val directCaller = run { - val matchM = stringMatcherType.getDeclaredMethod("matches", String::class.java); - matchM.isAccessible = true - val l = MethodHandles.privateLookupIn(ConditionNBT::class.java, MethodHandles.lookup()) -// val mt = MethodType.methodType(java.lang.Boolean.TYPE, stringMatcherType, String::class.java) -// val callsite = LambdaMetafactory.metafactory( -// l, "test", -// MethodType.methodType(BiPredicate::class.java), -// mt, -// l.unreflect(matchM), -// mt -// ) - val func = l.unreflect(matchM) - BiPredicate<StringMatcher, String> { a, b -> func.invoke(a, b) as Boolean } - } - - fun test(condition: ConditionNBT, text: String): Boolean { - return directCaller.test(accessMatcher.apply(condition), text) as Boolean - } - } - - val helper = Helper<Any>() - - @JvmStatic - fun invokeDirectConditionNBTStringMatch( - nbt: ConditionNBT, - text: String, - ): Boolean { - return helper.test(nbt, text) - } -} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e027783..cb623dc 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -47,7 +47,9 @@ "fabric": "*", "fabric-language-kotlin": ">=${fabric_kotlin_version}", "minecraft": ">=${minecraft_version}", - "roughlyenoughitems": ">=${rei_version}" + "roughlyenoughitems": ">=${rei_version}", + "cloth-config": "*", + "architectury": "*" }, "custom": { "configured": { @@ -62,7 +64,8 @@ }, "mc-publish": { "dependencies": [ - "roughlyenoughitems{modrinth:rei}" + "roughlyenoughitems{modrinth:rei}", + "architectury{modrinth:architectury-api}" ] } } |