Fix: Fix 1.21.6+ and 26.x version compatibility - #211
Conversation
Also fix crash with RenderUtil::drawLine Signed-off-by: Hendrix-Shen <HendrixShen@hendrixshen.top>
- adjust hand restock crafting mixin handling - update SearchMobSpawnPointUtil for 26.2 - update MalilibFavoritesData for 26.1+ - update Litematica easy place mixin injections - update inventory preview select mixin signatures
- update inventory preview selection mixin handling for 26.1 and 26.2 - update malilib config screen and favorites support for newer Minecraft APIs - update container cache and inventory preview sync mixins - add MagicLib immediate text drawer support for 26.2 - fix villager tracer entity filter precedence
- add Java 25 toolchain support for 26.1+ - update entity info camera access for 1.21.11+ and 26.2 - centralize villager offer access for 1.21.6+ - update villager restock, trade info, and trade preview handling - add malilib JSON and inventory overlay type compatibility helpers - update level renderer injection handling for 1.21.6-1.21.9 - update RenderUtil line rendering for 1.21.1+ - update restock, inventory preview, and masa config GUI compatibility handling - update litematica easy place mixin requirements for 26.1+ - update 26.2 spawn point entity lookup and immediate text drawer support
There was a problem hiding this comment.
您好 @Fenad2,
感谢您花时间向本仓库贡献,我们已经彻底审查了您的代码,在推进下一步行动前,我们恳请您按照以下建议进行修改:
- 请不要将 MagicLib 已经包装过的方法回退至预编译写法
- 请不要将已经编写 extraMappings 的类 / 方法 / 字段回退至预编译写法
- 请将新增的预编译条件:
- 使用点分版本号(例如:MC >= 26.2)
- 连续比较中高版本在前,且不要出现等于号(例如:26.2 > MC && MC > 1.21.11)
- 高版本号条件段应当在低版本条件段之前,单一条件优先于复合条件
- 请核对 MC 原版代码变化是否在对应版本发生,请不要因为引入新的修复而破坏旧版本
- 请不要使用预编译控制括号的位置
- 请不要在 mixins.json 中使用预编译,正确的操作是使用
@Mixin(DummyClass.class)占位
以上未提及内容已在详细审查附言中给出,请注意审查附言中可能仅在问题首次发生时标注,不代表问题只发生过一次。此外,我们强烈建议您在完成修改后运行checkstyleMain任务以检查您的代码格式是否符合我们的标准。
感谢您的理解与配合,我们期待着和您的进一步合作。祝您过得愉快!
再次感谢您的贡献!
| if (mcVersion >= 26_01_00) { | ||
| java.setSourceCompatibility(JavaVersion.VERSION_25); | ||
| java.setTargetCompatibility(JavaVersion.VERSION_25); | ||
| java.getToolchain().getLanguageVersion().set(JavaLanguageVersion.of(25)); |
|
|
||
| private static TextRenderer rotationAround(@NotNull TextRenderer renderer, @NotNull Position centerPos, double range) { | ||
| Position camPos = MinecraftCompat.getInstance().getMainCameraCompat().getPosition(); | ||
| //#if MC >= 260200 |
There was a problem hiding this comment.
新添加的预编译版本条件请使用点分版本号,例如 MC >= 26.2
| //$$ return false; | ||
| //$$ } | ||
| //$$ | ||
| //$$ for (MerchantOffer offer : offers) { |
There was a problem hiding this comment.
此处格式化请写作
for (
//#if MC >= 1.21.6
//$$ MerchantOffer offer : offers
//#else
MerchantOffer offer : villager.getOffers()
//#endif
)另外 MC 1.21.1 开始 AbstractVillager#getOffers(),添加了 level instanceof ServerLevel,多人游戏是否会产生崩溃?
| } | ||
|
|
||
| Screen screen = configScreenFactoryCompat.create(MinecraftCompat.getInstance().getScreen()); | ||
| Screen screen = configScreenFactoryCompat.create( |
There was a problem hiding this comment.
此处使用 MagicLib 的包装方法目的就是减少反复编写预编译的工作量
| if (ItemStackCompat.isSameItemSameTags(recipe.getResult(), itemStack)) { | ||
| InventoryUtils.tryMoveItemsToFirstCraftingGrid(recipe, gui, false); | ||
| //#if MC >= 260100 | ||
| //$$ mc.gameMode.handleContainerInput(player.inventoryMenu.containerId, 0, 0, ContainerInput.PICKUP, player); |
There was a problem hiding this comment.
这个方法写了 extraMapping,为什么要使用预编译?
| PlayerCompat.of(player).getInventory().selected + 36 | ||
| : | ||
| //#endif | ||
| 45, |
| //$$ EntityType<?> entityType2 = levelCompat.getDimensionLocation().equals(ResourceLocationCompat.withDefaultNamespace("the_nether")) ? null : EntityTypes.SPIDER; | ||
| //$$ EntityType<?> entityType = levelCompat.getDimensionLocation().equals(ResourceLocationCompat.withDefaultNamespace("the_nether")) | ||
| //$$ ? BuiltInRegistries.ENTITY_TYPE.getValue(ResourceLocationCompat.withDefaultNamespace("zombified_piglin")) | ||
| //$$ : |
| "compatibilityLevel": "JAVA_8", | ||
| "plugin": "top.hendrixshen.magiclib.impl.mixin.MagicMixinPlugin", | ||
| "client": [ | ||
| //#if MC >= 26.2 |
There was a problem hiding this comment.
不要在 mixin.json 中使用预编译,请使用 DummyClass 并标记版本范围
// CHECKSTYLE.OFF: JavadocStyle
/**
* <li>mc1.14 ~ mc26.1: subproject 1.16.5 (main project) [dummy] <--------</li>
* <li>mc26.2+ : subproject 26.2</li>
*/
// CHECKSTYLE.ON: JavadocStyle
@Mixin(DummyClass.class)
MixinRenderUtils我没有很好的合并为共享类的思路,所以在1.21.11/26.1.2/26.2选择写成三个子版本覆盖类 |
Hendrix-Shen
left a comment
There was a problem hiding this comment.
您好 @Fenad2,
感谢您花时间向本仓库贡献,我们收到了来自您的审查请求,在彻底审查您的更新后,我们发现部分问题仍未解决且未进行相应的回复。我们恳请您针对新提出的问题进行修改并对您认为不需要修改的部分给出相应的解释。
请注意审查附言中可能仅在问题首次发生时标注,不代表问题只发生过一次。
感谢您的理解与配合,我们期待着和您的进一步合作。祝您过得愉快!
再次感谢您的贡献!
| // CHECKSTYLE.ON: ImportOrder | ||
|
|
||
| import net.minecraft.client.gui.screens.Screen; | ||
| // CHECKSTYLE.ON: ImportOrder |
| //#else | ||
| GuiRenderContext renderContext | ||
| //#endif | ||
| , |
| @Inject( | ||
| method = "restockNewStackToHand", | ||
| at = @At("RETURN"), | ||
| //#if MC >= 26.1 |
There was a problem hiding this comment.
尽量不要使用软失败或 require = 0,上游变动时强制崩溃有利于排查问题,软失败不易发现问题
| import org.spongepowered.asm.mixin.injection.At; | ||
| import org.spongepowered.asm.mixin.injection.ModifyVariable; | ||
| import top.hendrixshen.magiclib.libs.com.llamalad7.mixinextras.sugar.Local; | ||
|
|
There was a problem hiding this comment.
在子版本创建覆盖类时,请使用 Javadoc 标注,仅在新版本引入的覆盖也应当在根项目放置空的 abstract 类用于占位。
示例:
// CHECKSTYLE.OFF: JavadocStyle
/**
* <li>mc1.14 ~ mc26.1: subproject 1.16.5 (main project) [dummy] <--------</li>
* <li>mc26.2+ : subproject 26.2</li>
*/
// CHECKSTYLE.ON: JavadocStyle
@Mixin(DummyClass.class)There was a problem hiding this comment.
这里有两个问题:
第一是 JaveDoc 中的对齐问题。
第二是修改后是否真的进行了相应的测试?此处编译器会产生编译警告:
{projectRoot}\versions\1.21.11-fabric\build\preprocessed\main\java\com\plusls\MasaGadget\mixin\mod_tweak\tweakeroo\inventoryPreviewSupportSelect\MixinInventoryOverlay.java:21: Warning: Cannot find target method "renderStackAt(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;FFFLnet/minecraft/client/Minecraft;DD)V" for @Inject.method="renderStackAt(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;FFFLnet/minecraft/client/Minecraft;DD)V" in fi.dy.masa.malilib.render.InventoryOverlay
@Inject(
运行时异常:
[20:13:49] [Render thread/INFO] (FabricLoader/Mixin/audit) Force-loading class fi.dy.masa.tweakeroo.renderer.RenderUtils
[20:13:49] [Render thread/ERROR] (FabricLoader/Mixin) Mixin apply for mod masa_gadget_mod failed masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> fi.dy.masa.tweakeroo.renderer.RenderUtils: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
at org.spongepowered.asm.mixin.injection.selectors.TargetSelectors.validate(TargetSelectors.java:346)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.readAnnotation(InjectionInfo.java:369)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:340)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:331)
at org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo.<init>(ModifyVariableInjectionInfo.java:47)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperImpl.<init>(SugarWrapperImpl.java:50)
at knot//com.llamalad7.mixinextras.wrapper.WrapperInjectionInfo.<init>(WrapperInjectionInfo.java:30)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperInjectionInfo.<init>(SugarWrapperInjectionInfo.java:14)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.prepareInjections(MixinTargetContext.java:1386)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.prepareInjections(MixinApplicatorStandard.java:811)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.lambda$runApplicatorPass$3(MixinApplicatorStandard.java:323)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.processMixins(MixinApplicatorStandard.java:381)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.runApplicatorPass(MixinApplicatorStandard.java:320)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:240)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:437)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:418)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:237)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:435)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:336)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:231)
at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:547)
at net.fabricmc.loader.impl.launch.knot.MixinServiceKnot.findClass(MixinServiceKnot.java:104)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.audit(MixinProcessor.java:253)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.audit(MixinTransformer.java:171)
at org.spongepowered.asm.mixin.MixinEnvironment.audit(MixinEnvironment.java:1718)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAuditImpl(MixinAuditor.java:66)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAudit(MixinAuditor.java:41)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.trigger(MixinAuditor.java:23)
at knot//top.hendrixshen.magiclib.entrypoint.core.MagicLibFabric.onInitialize(MagicLibFabric.java:19)
at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:409)
at net.fabricmc.loader.impl.game.minecraft.Hooks.startClient(Hooks.java:52)
at knot//net.minecraft.client.Minecraft.<init>(Minecraft.java:475)
at knot//net.minecraft.client.main.Main.main(Main.java:234)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:514)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:72)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
[20:13:49] [Render thread/ERROR] (magiclib) Exception occurs while auditing mixin.
java.lang.RuntimeException: Mixin transformation of fi.dy.masa.tweakeroo.renderer.RenderUtils failed
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:440)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:336)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:231)
at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:547)
at net.fabricmc.loader.impl.launch.knot.MixinServiceKnot.findClass(MixinServiceKnot.java:104)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.audit(MixinProcessor.java:253)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.audit(MixinTransformer.java:171)
at org.spongepowered.asm.mixin.MixinEnvironment.audit(MixinEnvironment.java:1718)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAuditImpl(MixinAuditor.java:66)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAudit(MixinAuditor.java:41)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.trigger(MixinAuditor.java:23)
at knot//top.hendrixshen.magiclib.entrypoint.core.MagicLibFabric.onInitialize(MagicLibFabric.java:19)
at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:409)
at net.fabricmc.loader.impl.game.minecraft.Hooks.startClient(Hooks.java:52)
at knot//net.minecraft.client.Minecraft.<init>(Minecraft.java:475)
at knot//net.minecraft.client.main.Main.main(Main.java:234)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:514)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:72)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:380)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:237)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202)
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:435)
... 22 more
Caused by: org.spongepowered.asm.mixin.throwables.MixinApplyError: Mixin [masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod] from phase [DEFAULT] in config [masa_gadget_mod.mixins.json] FAILED during APPLY
at org.spongepowered.asm.mixin.transformer.MixinProcessor.handleMixinError(MixinProcessor.java:685)
Caused by: org.spongepowered.asm.mixin.throwables.MixinApplyError: Mixin [masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod] from phase [DEFAULT] in config [masa_gadget_mod.mixins.json] FAILED during APPLY
at org.spongepowered.asm.mixin.transformer.MixinProcessor.handleMixinApplyError(MixinProcessor.java:636)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:367)
... 25 more
Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
at org.spongepowered.asm.mixin.injection.selectors.TargetSelectors.validate(TargetSelectors.java:346)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.readAnnotation(InjectionInfo.java:369)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:340)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:331)
at org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo.<init>(ModifyVariableInjectionInfo.java:47)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperImpl.<init>(SugarWrapperImpl.java:50)
at knot//com.llamalad7.mixinextras.wrapper.WrapperInjectionInfo.<init>(WrapperInjectionInfo.java:30)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperInjectionInfo.<init>(SugarWrapperInjectionInfo.java:14)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.prepareInjections(MixinTargetContext.java:1386)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.prepareInjections(MixinApplicatorStandard.java:811)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.lambda$runApplicatorPass$3(MixinApplicatorStandard.java:323)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.processMixins(MixinApplicatorStandard.java:381)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.runApplicatorPass(MixinApplicatorStandard.java:320)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:240)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:437)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:418)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)
... 25 more
变更说明相较于
验证
|
Hendrix-Shen
left a comment
There was a problem hiding this comment.
您好 @Fenad2,
感谢您花时间向本仓库贡献,我们收到了来自您的审查请求,在彻底审查您的更新后,我们进行了进一步的测试,发现您的提交未能通过 Mixin Audit 运行时测试,我们已在相应的位置标出。
我们在先前的项目更新中移除了部分功能是因为 Tweakeroo / MiniHUD 已经配合 Servux 更好的实现了对应功能,在我们重构同步方案前,无意更新相关逻辑,因此允许部分功能无效,但需要在 Configs 当中添加对应的依赖检查。
请注意审查附言中可能仅在问题首次发生时标注,不代表问题只发生过一次。
感谢您的理解与配合,我们期待着和您的进一步合作。祝您过得愉快!
再次感谢您的贡献!
| import org.spongepowered.asm.mixin.injection.At; | ||
| import org.spongepowered.asm.mixin.injection.ModifyVariable; | ||
| import top.hendrixshen.magiclib.libs.com.llamalad7.mixinextras.sugar.Local; | ||
|
|
There was a problem hiding this comment.
这里有两个问题:
第一是 JaveDoc 中的对齐问题。
第二是修改后是否真的进行了相应的测试?此处编译器会产生编译警告:
{projectRoot}\versions\1.21.11-fabric\build\preprocessed\main\java\com\plusls\MasaGadget\mixin\mod_tweak\tweakeroo\inventoryPreviewSupportSelect\MixinInventoryOverlay.java:21: Warning: Cannot find target method "renderStackAt(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;FFFLnet/minecraft/client/Minecraft;DD)V" for @Inject.method="renderStackAt(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/item/ItemStack;FFFLnet/minecraft/client/Minecraft;DD)V" in fi.dy.masa.malilib.render.InventoryOverlay
@Inject(
运行时异常:
[20:13:49] [Render thread/INFO] (FabricLoader/Mixin/audit) Force-loading class fi.dy.masa.tweakeroo.renderer.RenderUtils
[20:13:49] [Render thread/ERROR] (FabricLoader/Mixin) Mixin apply for mod masa_gadget_mod failed masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> fi.dy.masa.tweakeroo.renderer.RenderUtils: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
at org.spongepowered.asm.mixin.injection.selectors.TargetSelectors.validate(TargetSelectors.java:346)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.readAnnotation(InjectionInfo.java:369)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:340)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:331)
at org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo.<init>(ModifyVariableInjectionInfo.java:47)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperImpl.<init>(SugarWrapperImpl.java:50)
at knot//com.llamalad7.mixinextras.wrapper.WrapperInjectionInfo.<init>(WrapperInjectionInfo.java:30)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperInjectionInfo.<init>(SugarWrapperInjectionInfo.java:14)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.prepareInjections(MixinTargetContext.java:1386)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.prepareInjections(MixinApplicatorStandard.java:811)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.lambda$runApplicatorPass$3(MixinApplicatorStandard.java:323)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.processMixins(MixinApplicatorStandard.java:381)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.runApplicatorPass(MixinApplicatorStandard.java:320)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:240)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:437)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:418)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:237)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:435)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:336)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:231)
at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:547)
at net.fabricmc.loader.impl.launch.knot.MixinServiceKnot.findClass(MixinServiceKnot.java:104)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.audit(MixinProcessor.java:253)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.audit(MixinTransformer.java:171)
at org.spongepowered.asm.mixin.MixinEnvironment.audit(MixinEnvironment.java:1718)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAuditImpl(MixinAuditor.java:66)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAudit(MixinAuditor.java:41)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.trigger(MixinAuditor.java:23)
at knot//top.hendrixshen.magiclib.entrypoint.core.MagicLibFabric.onInitialize(MagicLibFabric.java:19)
at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:409)
at net.fabricmc.loader.impl.game.minecraft.Hooks.startClient(Hooks.java:52)
at knot//net.minecraft.client.Minecraft.<init>(Minecraft.java:475)
at knot//net.minecraft.client.main.Main.main(Main.java:234)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:514)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:72)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
[20:13:49] [Render thread/ERROR] (magiclib) Exception occurs while auditing mixin.
java.lang.RuntimeException: Mixin transformation of fi.dy.masa.tweakeroo.renderer.RenderUtils failed
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:440)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:336)
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:231)
at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:119)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:547)
at net.fabricmc.loader.impl.launch.knot.MixinServiceKnot.findClass(MixinServiceKnot.java:104)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.audit(MixinProcessor.java:253)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.audit(MixinTransformer.java:171)
at org.spongepowered.asm.mixin.MixinEnvironment.audit(MixinEnvironment.java:1718)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAuditImpl(MixinAuditor.java:66)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.runMixinAudit(MixinAuditor.java:41)
at knot//top.hendrixshen.magiclib.impl.mixin.audit.MixinAuditor.trigger(MixinAuditor.java:23)
at knot//top.hendrixshen.magiclib.entrypoint.core.MagicLibFabric.onInitialize(MagicLibFabric.java:19)
at net.fabricmc.loader.impl.FabricLoaderImpl.invokeEntrypoints(FabricLoaderImpl.java:409)
at net.fabricmc.loader.impl.game.minecraft.Hooks.startClient(Hooks.java:52)
at knot//net.minecraft.client.Minecraft.<init>(Minecraft.java:475)
at knot//net.minecraft.client.main.Main.main(Main.java:234)
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:514)
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:72)
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
at net.fabricmc.devlaunchinjector.Main.main(Main.java:86)
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:380)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:237)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202)
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:435)
... 22 more
Caused by: org.spongepowered.asm.mixin.throwables.MixinApplyError: Mixin [masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod] from phase [DEFAULT] in config [masa_gadget_mod.mixins.json] FAILED during APPLY
at org.spongepowered.asm.mixin.transformer.MixinProcessor.handleMixinError(MixinProcessor.java:685)
Caused by: org.spongepowered.asm.mixin.throwables.MixinApplyError: Mixin [masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod] from phase [DEFAULT] in config [masa_gadget_mod.mixins.json] FAILED during APPLY
at org.spongepowered.asm.mixin.transformer.MixinProcessor.handleMixinApplyError(MixinProcessor.java:636)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:367)
... 25 more
Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
Caused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @ModifyVariable annotation on renderTradeOfferList could not find any targets matching 'renderInventoryOverlay' in fi/dy/masa/tweakeroo/renderer/RenderUtils. No refMap loaded. [INJECT_PREPARE_LEGACY Applicator Phase -> masa_gadget_mod.mixins.json:mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils from mod masa_gadget_mod -> Prepare Legacy Injections -> localvar$bph000$masa_gadget_mod$renderTradeOfferList(Lnet/minecraft/world/Container;Lnet/minecraft/client/gui/GuiGraphics;)Lnet/minecraft/world/Container; -> Parse -> -> Validate Targets]
at org.spongepowered.asm.mixin.injection.selectors.TargetSelectors.validate(TargetSelectors.java:346)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.readAnnotation(InjectionInfo.java:369)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:340)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.<init>(InjectionInfo.java:331)
at org.spongepowered.asm.mixin.injection.struct.ModifyVariableInjectionInfo.<init>(ModifyVariableInjectionInfo.java:47)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperImpl.<init>(SugarWrapperImpl.java:50)
at knot//com.llamalad7.mixinextras.wrapper.WrapperInjectionInfo.<init>(WrapperInjectionInfo.java:30)
at knot//com.llamalad7.mixinextras.sugar.impl.SugarWrapperInjectionInfo.<init>(SugarWrapperInjectionInfo.java:14)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo$InjectorEntry.create(InjectionInfo.java:196)
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.parse(InjectionInfo.java:664)
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.prepareInjections(MixinTargetContext.java:1386)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.prepareInjections(MixinApplicatorStandard.java:811)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.lambda$runApplicatorPass$3(MixinApplicatorStandard.java:323)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.processMixins(MixinApplicatorStandard.java:381)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.runApplicatorPass(MixinApplicatorStandard.java:320)
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:240)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:437)
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:418)
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:351)
... 25 more
|
您好 @Hendrix-Shen ,
原先代码仅从 MC >= 26.1 起选择新版签名,因此 Minecraft 1.21.11 会错误落入 MC >= 1.21.6 分支,并尝试注入旧的 GuiGraphics 签名。 现已将版本条件从
作为版本限制。
|
您好 @Fenad2, 感谢您的回复,有关您提出的问题我们做出以下回复: 对于 com.plusls.MasaGadget.mixin.mod_tweak.tweakeroo.inventoryPreviewSupportTradeOfferList.MixinRenderUtils.java 我们已经在 1.21.1-fabric 中添加覆盖类,因此在 Preprocessor 流程中,mc1.21.1 及以上版本将使用 Dummy 类占位,因此没有使用依赖注解。 对于 Component.translatable,您可以使用变通方法 Component.literal 和 top.hendrixshen.magiclib.api.i18n.I18n 来使用 %d 或者通过 vanilla 的 Component.translatable 配合 %s 来实现。 感谢您的理解与配合,我们期待着和您的进一步合作。祝您过得愉快! 再次感谢您的贡献! |
…PointUtil coordinate formatting.
|
感谢说明!
验证1.21.10(单人模式):Tweakeroo容器预览正常 |
基于fix/issue-209分支修复了一些问题
已测试在1.21.8 ~ 26.2单人模式下可以正常使用“渲染村民的第一本附魔书”、“渲染村民绑定工作方块”等
在1.21.8 ~ 26.1安装PCA的服务器内可以正常获取数据及正常使用“渲染村民的第一本附魔书”、“渲染村民绑定工作方块”等