1.20.1forge版本,是public static final int的,该怎么写
- @Redirect(
- method = "<cinit>",
- at = @At(value = "FIELD", target = "自己写", opcode = Opcodes.PUTSTATIC)
- )
- private void redirect_awa(int qwq) {
- qwq=2;
- }
- @Mixin(PressingBehaviour.class)
- public class PressingMixin {
- @Redirect(
- method = "<cinit>",
- at = @At(value = "FIELD", target = "Lcom/simibubi/create/content/kinetics/press/PressingBehaviour;CYCLE:I", opcode = Opcodes.PUTSTATIC)
- )
- private void redirect_awa(int qwq) {
- qwq=2;
- }
- }
<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 ...
等等,不止一句,得加好多句
- @Mixin(PressingBehaviour.class, remap = false)
- public class PressingMixin {
- @Redirect(
- method = "<cinit>",
- at = @At(value = "FIELD", target = "Lcom/simibubi/create/content/kinetics/press/PressingBehaviour;CYCLE:I", opcode = Opcodes.PUTSTATIC, remap = false),
- remap = false
- )
- private void redirect_awa(int qwq) {
- qwq=2;
- }
- }
无敌三脚猫 发表于 2023-11-12 12:53
等等,不止一句,得加好多句
public static final int一般没有putstatic,而是直接const掉了
既然你是 1.20.1 Forge,要修改其他模组的类中的 public static final int 字段,我建议你使用coremod而非mixin。
首先,创建 META-INF/coremods.json:复制代码然后创建 coremods/modify-xxx-mod.js:复制代码
基本上能看懂个八九不离十罢()
如果修改失败,可以把你要修改的那个 class 打压缩包传上来看看
首先,创建 META-INF/coremods.json:
- {
- "modify-xxx-mod": "coremods/modify-mod.js"
- }
- function initializeCoreMod() {
- return {
- 'modify_xxx_mod': {
- 'target': { 'type': 'FIELD', 'class': 'com.example.XXX', 'fieldName': 'XXX', 'fieldDesc': 'I' },
- 'transformer': function (fieldNode) {
- fieldNode.value = 2; // 直接修改值即可
- return fieldNode;
- }
- }
- }
- }
基本上能看懂个八九不离十罢()
如果修改失败,可以把你要修改的那个 class 打压缩包传上来看看
我有一个回复卡审核了。凑合看:https://paste.ee/p/bVl45
说白了就是这种情况别用mixin了,直接上coremod是最合适的
说白了就是这种情况别用mixin了,直接上coremod是最合适的
teddyxlandlee 发表于 2023-11-12 14:18
我有一个回复卡审核了。凑合看:https://paste.ee/p/bVl45
说白了就是这种情况别用mixin了,直接上coremod ...
emm...这个完全没写过...用的是architectury的模板,在META-INF/coremods.json写的是
- {
- "modify-create-mod": "coremods/modify-create-mod.js"
- }
- function initializeCoreMod() {
- return {
- 'modify_create_mod': {
- 'target': {
- 'type': 'FIELD',
- 'class': 'com.simibubi.create.content.kinetics.press.PressingBehaviour',
- 'fieldName': 'CYCLE',
- 'fieldDesc': 'I' // int type
- },
- 'transformer': function (fieldNode) {
- fieldNode.value = 480; // the value you want
- return fieldNode;
- }
- }
- };
- }
Tki_sor 发表于 2023-11-12 15:26
emm...这个完全没写过...用的是architectury的模板,在META-INF/coremods.json写的是然后architectury这个 ...
刚才我说的那坨应该放到 src/main/resources/ 下,你是不是放到 src/main/java 了
teddyxlandlee 发表于 2023-11-12 15:40
刚才我说的那坨应该放到 src/main/resources/ 下,你是不是放到 src/main/java 了

这样吗?但似乎也是没起作用。最终效果应该是机械动力的辊压机在转速1情况加工总用时24秒(原12秒)
Tki_sor 发表于 2023-11-12 15:53
这样吗?但似乎也是没起作用。最终效果应该是机械动力的辊压机在转速1情况加工总用时24秒(原12秒)
...
你这样是对的
我看一眼latest.log有没有出岔子
你在正常编译后的启动器跑一下build完的版本看看有没问题
teddyxlandlee 发表于 2023-11-12 20:14
你在正常编译后的启动器跑一下build完的版本看看有没问题
还是有问题的。加工时间仍是不变的
你把JS脚本里的 2 改成 Java.type('java.lang.Integer').valueOf(2) 试试
FieldNode#value 的类型是个 Object,我不知道 nashorn 能不能正确地装拆箱……
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包(这限制真是严过头了)
teddyxlandlee 发表于 2023-11-12 20:39
你把JS脚本里的 2 改成 Java.type('java.lang.Integer').valueOf(2) 试试
FieldNode#value 的类型是个 Obje ...
仍然是不行的...