无敌三脚猫
Ph-苯 发表于 2022-4-22 17:35
@ModifyArg的index是从0开始的呀,如果是第三个参数的话应该是2。

super(server, registryManager, saveHandler, 8);
这里“8”是第4个参数,所以写index=3应该没错呀

Ph-苯
无敌三脚猫 发表于 2022-4-23 20:42
super(server, registryManager, saveHandler, 8);
这里“8”是第4个参数,所以写index=3应该没错呀 ...

我眼抽了不好意思😂……
你试试这个?
  1. import net.minecraft.server.integrated.IntegratedPlayerManager;
  2. import net.minecraft.server.integrated.IntegratedServer;
  3. import net.minecraft.util.registry.DynamicRegistryManager;
  4. import net.minecraft.world.WorldSaveHandler;
  5. import org.spongepowered.asm.mixin.Mixin;
  6. import org.spongepowered.asm.mixin.injection.At;
  7. import org.spongepowered.asm.mixin.injection.Desc;
  8. import org.spongepowered.asm.mixin.injection.ModifyArg;
  9. @Mixin(IntegratedPlayerManager.class)
  10. public abstract class MixinIntegratedPlayerManager {
  11. @ModifyArg(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/PlayerManager;<init>(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/util/registry/DynamicRegistryManager$Impl;Lnet/minecraft/world/WorldSaveHandler;I)V", desc = @Desc(value = "<init>", args = {IntegratedServer.class, DynamicRegistryManager.Impl.class, WorldSaveHandler.class})), index = 3)
  12. private static int chageMaxPlayers(int maxPlayers) {
  13.         return 20;
  14. }
  15. }
复制代码

teddyxlandlee
Mixin也可以直接改字节码。
不过需要一个假Mixin和MixinConfig套个壳。

See: Mixin套壳和真正的实现——向Abstract Enum中插入实现
See: 单独开一个mixins.json,声明MixinConfig

teddyxlandlee
诶楼主我好像明白了什么,出来挨打!
  1. super(server, registryManager, saveHandler, 8);
复制代码

这里的常量8不是index=3!是index=4!

为什么呢?因为this是0,所以对于non-static方法,第一个参数就是1,而不是0。

第一页 上一页