Tki_sor
1.20.1forge版本,是public static final int的,该怎么写

无敌三脚猫
  1. @Redirect(
  2.       method = "<cinit>",
  3.       at = @At(value = "FIELD", target = "自己写", opcode = Opcodes.PUTSTATIC)
  4.   )
  5.   private void redirect_awa(int qwq) {
  6.     qwq=2;
  7.   }
复制代码

Tki_sor
  1. @Mixin(PressingBehaviour.class)
  2. public class PressingMixin {
  3.     @Redirect(
  4.             method = "<cinit>",
  5.             at = @At(value = "FIELD", target = "Lcom/simibubi/create/content/kinetics/press/PressingBehaviour;CYCLE:I", opcode = Opcodes.PUTSTATIC)
  6.     )
  7.     private void redirect_awa(int qwq) {
  8.         qwq=2;
  9.     }
  10. }
复制代码
@Redirect注解会报Cannot resolve any target instructions in target class
<cinit>会报Invalid member reference
target报Cannot resolve target reference 'Lcom/simibubi/create/content/kinetics/press/PressingBehaviour;CYCLE:I'

无敌三脚猫
Tki_sor 发表于 2023-11-12 11:40
@Redirect注解会报Cannot resolve any target instructions in target class
会报Invalid member reference ...

啊?你用mixin修改mod的类啊
一般都是修改原版的类的嘛,我不知道怎么修改mod的类,但感觉应该不像修改原版类那么简单,说不定得自定义一个IMixinConfigPlugin什么的……至少,mod的类不在反混淆表里,需要加一句remap=false
其实这个值可以在你的mod启动的时候用Unsafe来改https://www.mcbbs.net/thread-1211948-1-1.html,不过static final说不定被内联了,那时候改了不一定有效……
你开发的mod如果是forge版本的可以用coremod来改

无敌三脚猫
Tki_sor 发表于 2023-11-12 11:40
@Redirect注解会报Cannot resolve any target instructions in target class
会报Invalid member reference ...

等等,不止一句,得加好多句
  1. @Mixin(PressingBehaviour.class, remap = false)
  2. public class PressingMixin {
  3.     @Redirect(
  4.             method = "<cinit>",
  5.             at = @At(value = "FIELD", target = "Lcom/simibubi/create/content/kinetics/press/PressingBehaviour;CYCLE:I", opcode = Opcodes.PUTSTATIC, remap = false),
  6.             remap = false
  7.     )
  8.     private void redirect_awa(int qwq) {
  9.         qwq=2;
  10.     }
  11. }
复制代码

teddyxlandlee
无敌三脚猫 发表于 2023-11-12 12:53
等等,不止一句,得加好多句

public static final int一般没有putstatic,而是直接const掉了

teddyxlandlee
既然你是 1.20.1 Forge,要修改其他模组的类中的 public static final int 字段,我建议你使用coremod而非mixin。
首先,创建 META-INF/coremods.json:
  1. {
  2.   "modify-xxx-mod": "coremods/modify-mod.js"
  3. }
复制代码
然后创建 coremods/modify-xxx-mod.js:

  1. function initializeCoreMod() {
  2.   return {
  3.     'modify_xxx_mod':  {
  4.       'target': { 'type': 'FIELD', 'class': 'com.example.XXX', 'fieldName': 'XXX', 'fieldDesc': 'I' },
  5.       'transformer': function (fieldNode) {
  6.         fieldNode.value = 2;  // 直接修改值即可
  7.         return fieldNode;
  8.       }
  9.     }
  10.   }
  11. }
复制代码

基本上能看懂个八九不离十罢()
如果修改失败,可以把你要修改的那个 class 打压缩包传上来看看

teddyxlandlee
我有一个回复卡审核了。凑合看:https://paste.ee/p/bVl45
说白了就是这种情况别用mixin了,直接上coremod是最合适的

Tki_sor
teddyxlandlee 发表于 2023-11-12 14:18
我有一个回复卡审核了。凑合看:https://paste.ee/p/bVl45
说白了就是这种情况别用mixin了,直接上coremod ...

emm...这个完全没写过...用的是architectury的模板,在META-INF/coremods.json写的是
  1. {
  2.   "modify-create-mod": "coremods/modify-create-mod.js"
  3. }
复制代码
然后architectury这个模板有个专门写forge的,在forge/coremods/modify-create-mod.js写的是
  1. function initializeCoreMod() {
  2.     return {
  3.         'modify_create_mod': {
  4.             'target': {
  5.                 'type': 'FIELD',
  6.                 'class': 'com.simibubi.create.content.kinetics.press.PressingBehaviour',
  7.                 'fieldName': 'CYCLE',
  8.                 'fieldDesc': 'I'    // int type
  9.             },
  10.             'transformer': function (fieldNode) {
  11.                 fieldNode.value = 480;    // the value you want
  12.                 return fieldNode;
  13.             }
  14.         }
  15.     };
  16. }
复制代码
runClient肯定是没有预期效果,构建出来的不包含coremods这个文件夹,是还要配置一些东西吗?

teddyxlandlee
Tki_sor 发表于 2023-11-12 15:26
emm...这个完全没写过...用的是architectury的模板,在META-INF/coremods.json写的是然后architectury这个 ...

刚才我说的那坨应该放到 src/main/resources/ 下,你是不是放到 src/main/java 了

Tki_sor
teddyxlandlee 发表于 2023-11-12 15:40
刚才我说的那坨应该放到 src/main/resources/ 下,你是不是放到 src/main/java 了


这样吗?但似乎也是没起作用。最终效果应该是机械动力的辊压机在转速1情况加工总用时24秒(原12秒)

teddyxlandlee
Tki_sor 发表于 2023-11-12 15:53
这样吗?但似乎也是没起作用。最终效果应该是机械动力的辊压机在转速1情况加工总用时24秒(原12秒)
...

你这样是对的
我看一眼latest.log有没有出岔子

Tki_sor
teddyxlandlee 发表于 2023-11-12 15:55
你这样是对的
我看一眼latest.log有没有出岔子

latest.log (21.2 KB, 下载次数: 0)

teddyxlandlee

你在正常编译后的启动器跑一下build完的版本看看有没问题

Tki_sor
teddyxlandlee 发表于 2023-11-12 20:14
你在正常编译后的启动器跑一下build完的版本看看有没问题

还是有问题的。加工时间仍是不变的

teddyxlandlee
你把JS脚本里的 2 改成 Java.type('java.lang.Integer').valueOf(2) 试试
FieldNode#value 的类型是个 Object,我不知道 nashorn 能不能正确地装拆箱……

无敌三脚猫
teddyxlandlee 发表于 2023-11-12 20:39
你把JS脚本里的 2 改成 Java.type('java.lang.Integer').valueOf(2) 试试
FieldNode#value 的类型是个 Obje ...

悲报,coremod不能访问java.lang包(这限制真是严过头了)

Tki_sor
teddyxlandlee 发表于 2023-11-12 20:39
你把JS脚本里的 2 改成 Java.type('java.lang.Integer').valueOf(2) 试试
FieldNode#value 的类型是个 Obje ...

仍然是不行的...

第一页 上一页 下一页 最后一页