by おがさくら » 2021年11月19日(金) 20:31
ちなみに似たようなこちらのプログラムはちゃんと作動します
コード: 全て選択
@Override
public byte[] transform(final String name,final String transformedName,byte[] bytes){
if(!"net.minecraft.enchantment.Enchantment".equals(transformedName))
return bytes;
ClassReader cr=new ClassReader(bytes);
ClassWriter cw=new ClassWriter(1);
ClassVisitor cv=new ClassVisitor(ASM4,cw){
@Override
public MethodVisitor visitMethod(int access,String methodName,String desc,String signature,String[] exceptions){
MethodVisitor mv=super.visitMethod(access,methodName,desc,signature,exceptions);
String s1=FMLDeobfuscatingRemapper.INSTANCE.mapMethodName(name,methodName,desc);
if(s1.equals("getTranslatedName")||s1.equals("func_77316_c")||methodName.equals("getTranslatedName")||methodName.equals("func_77316_c")){
mv=new MethodVisitor(ASM4,mv){
@Override
public void visitMethodInsn(int opcode,String owner,String methodName,String desc,boolean itf){
mv.visitVarInsn(ALOAD,0);
mv.visitVarInsn(ILOAD,1);
super.visitMethodInsn(INVOKESTATIC,"com/OgaMod/ASM/Enchantment/TransformerEnchantment","newEnchantname",
OgaModCorePlugin.toDesc(String.class,"net.minecraft.enchantment.Enchantment",int.class),false);
}
};
}
return mv;
}
};
cr.accept(cv,ClassReader.EXPAND_FRAMES);
return cw.toByteArray();
}
public static String newEnchantname(Enchantment enchant,int level){
String s=StatCollector.translateToLocal(enchant.getName());
return enchant.getMaxLevel()==1 ? s :level>127?s+" "+level: s+" "+StatCollector.translateToLocal("enchantment.level."+level);
}
ちなみに似たようなこちらのプログラムはちゃんと作動します
[code]
@Override
public byte[] transform(final String name,final String transformedName,byte[] bytes){
if(!"net.minecraft.enchantment.Enchantment".equals(transformedName))
return bytes;
ClassReader cr=new ClassReader(bytes);
ClassWriter cw=new ClassWriter(1);
ClassVisitor cv=new ClassVisitor(ASM4,cw){
@Override
public MethodVisitor visitMethod(int access,String methodName,String desc,String signature,String[] exceptions){
MethodVisitor mv=super.visitMethod(access,methodName,desc,signature,exceptions);
String s1=FMLDeobfuscatingRemapper.INSTANCE.mapMethodName(name,methodName,desc);
if(s1.equals("getTranslatedName")||s1.equals("func_77316_c")||methodName.equals("getTranslatedName")||methodName.equals("func_77316_c")){
mv=new MethodVisitor(ASM4,mv){
@Override
public void visitMethodInsn(int opcode,String owner,String methodName,String desc,boolean itf){
mv.visitVarInsn(ALOAD,0);
mv.visitVarInsn(ILOAD,1);
super.visitMethodInsn(INVOKESTATIC,"com/OgaMod/ASM/Enchantment/TransformerEnchantment","newEnchantname",
OgaModCorePlugin.toDesc(String.class,"net.minecraft.enchantment.Enchantment",int.class),false);
}
};
}
return mv;
}
};
cr.accept(cv,ClassReader.EXPAND_FRAMES);
return cw.toByteArray();
}
public static String newEnchantname(Enchantment enchant,int level){
String s=StatCollector.translateToLocal(enchant.getName());
return enchant.getMaxLevel()==1 ? s :level>127?s+" "+level: s+" "+StatCollector.translateToLocal("enchantment.level."+level);
}
[/code]