Skip to content

Commit 31bc3de

Browse files
author
Circulate233
committed
迁移zs内的魔力液化器修改为mixin
修改一个注入点避免与RC发包冲突
1 parent 34bab18 commit 31bc3de

File tree

7 files changed

+127
-27
lines changed

7 files changed

+127
-27
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ dependencies {
268268
compileOnly(rfg.deobf("curse.maven:more-electric-tools-366298:3491973"))
269269
compileOnly(rfg.deobf("curse.maven:brandonscore-231382:3051539"))
270270
compileOnly(rfg.deobf("curse.maven:draconicevolution-223565:3051542"))
271-
compileOnly(rfg.deobf("curse.maven:extrabotany-299086:3112313"))
271+
implementation(rfg.deobf("curse.maven:extrabotany-299086:3112313"))
272272
implementation(rfg.deobf("curse.maven:libnine-322344:3509087"))
273273
implementation(rfg.deobf("curse.maven:lazy-ae2-322347:3254160"))
274274
compileOnly(rfg.deobf("curse.maven:better-chat-363860:3048407"))

src/main/java/github/kasuminova/novaeng/common/handler/OreHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class OreHandler {
3636
private static final String oreOD = "ore";
3737
private static Map<OreKey, ItemStack> rawOreMap;
3838
private static Map<OreKey, ItemStack> oreMap;
39+
3940
private OreHandler(){}
4041

4142
@ZenMethod

src/main/java/github/kasuminova/novaeng/mixin/NovaEngCoreLateMixinLoader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class NovaEngCoreLateMixinLoader implements ILateMixinLoader {
3838
addModdedMixinCFG("mixins.novaeng_core_nco.json","nuclearcraft");
3939
addModdedMixinCFG("mixins.novaeng_core_lootoverhaul.json","lootoverhaul");
4040
addModdedMixinCFG("mixins.novaeng_core_fluxnetworks.json","fluxnetworks");
41+
addModdedMixinCFG("mixins.novaeng_core_extrabotany.json","extrabotany");
4142

4243
addMixinCFG("mixins.novaeng_core_forge_late.json");
4344
addMixinCFG("mixins.novaeng_core_dme.json",
Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package github.kasuminova.novaeng.mixin.ae2;
22

33
import appeng.core.sync.AppEngPacket;
4-
import appeng.core.sync.AppEngPacketHandlerBase;
4+
import appeng.core.sync.PacketCallState;
55
import appeng.core.sync.network.AppEngClientPacketHandler;
66
import github.kasuminova.novaeng.common.profiler.CPacketProfiler;
7-
import io.netty.buffer.ByteBuf;
87
import org.spongepowered.asm.mixin.Mixin;
98
import org.spongepowered.asm.mixin.injection.At;
109
import org.spongepowered.asm.mixin.injection.Redirect;
1110

12-
import java.lang.reflect.InvocationTargetException;
13-
1411
@Mixin(AppEngClientPacketHandler.class)
1512
public class MixinAppEngClientPacketHandler {
1613

@@ -19,20 +16,14 @@ public class MixinAppEngClientPacketHandler {
1916
method = "onPacketData",
2017
at = @At(
2118
value = "INVOKE",
22-
target = "Lappeng/core/sync/AppEngPacketHandlerBase$PacketTypes;parsePacket(Lio/netty/buffer/ByteBuf;)Lappeng/core/sync/AppEngPacket;",
19+
target = "Lappeng/core/sync/AppEngPacket;setCallParam(Lappeng/core/sync/PacketCallState;)V",
2320
remap = false
2421
),
2522
remap = false
2623
)
27-
private AppEngPacket redirectParsePacket(final AppEngPacketHandlerBase.PacketTypes instance,
28-
final ByteBuf in) throws InvocationTargetException, InstantiationException, IllegalAccessException
29-
{
30-
int prevIndex = in.readerIndex();
31-
AppEngPacket packet = instance.parsePacket(in);
32-
33-
CPacketProfiler.onPacketReceived(packet, in.readerIndex() - prevIndex);
34-
35-
return packet;
24+
private void redirectParsePacket(AppEngPacket instance, PacketCallState call) {
25+
CPacketProfiler.onPacketReceived(instance, instance.getPacketID());
26+
instance.setCallParam(call);
3627
}
3728

3829
}
Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
package github.kasuminova.novaeng.mixin.ae2;
22

33
import appeng.core.sync.AppEngPacket;
4-
import appeng.core.sync.AppEngPacketHandlerBase;
4+
import appeng.core.sync.PacketCallState;
55
import appeng.core.sync.network.AppEngServerPacketHandler;
66
import com.llamalad7.mixinextras.sugar.Local;
77
import github.kasuminova.novaeng.common.profiler.SPacketProfiler;
8-
import io.netty.buffer.ByteBuf;
98
import net.minecraft.entity.player.EntityPlayer;
109
import org.spongepowered.asm.mixin.Mixin;
1110
import org.spongepowered.asm.mixin.injection.At;
1211
import org.spongepowered.asm.mixin.injection.Redirect;
1312

14-
import java.lang.reflect.InvocationTargetException;
15-
1613
@Mixin(AppEngServerPacketHandler.class)
1714
public class MixinAppEngServerPacketHandler {
1815

@@ -21,20 +18,17 @@ public class MixinAppEngServerPacketHandler {
2118
method = "onPacketData",
2219
at = @At(
2320
value = "INVOKE",
24-
target = "Lappeng/core/sync/AppEngPacketHandlerBase$PacketTypes;parsePacket(Lio/netty/buffer/ByteBuf;)Lappeng/core/sync/AppEngPacket;",
21+
target = "Lappeng/core/sync/AppEngPacket;setCallParam(Lappeng/core/sync/PacketCallState;)V",
2522
remap = false
2623
),
2724
remap = false
2825
)
29-
private AppEngPacket redirectParsePacket(final AppEngPacketHandlerBase.PacketTypes instance,
30-
final ByteBuf in,
31-
@Local(name = "player") EntityPlayer player) throws InvocationTargetException, InstantiationException, IllegalAccessException
32-
{
33-
AppEngPacket packet = instance.parsePacket(in);
26+
private void redirectParsePacket(AppEngPacket instance, PacketCallState call,
27+
@Local(name = "player") EntityPlayer player) {
3428
if (player != null) {
35-
SPacketProfiler.onPacketReceived(player, packet);
29+
SPacketProfiler.onPacketReceived(player, instance);
3630
}
37-
return packet;
31+
instance.setCallParam(call);
3832
}
3933

4034
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package github.kasuminova.novaeng.mixin.extrabotany;
2+
3+
import com.meteor.extrabotany.common.block.tile.TileManaLiquefaction;
4+
import com.meteor.extrabotany.common.core.config.ConfigHandler;
5+
import net.minecraft.block.Block;
6+
import org.spongepowered.asm.mixin.Final;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.Shadow;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
12+
import vazkii.botania.common.block.tile.TileMod;
13+
import vazkii.botania.common.block.tile.mana.TilePool;
14+
15+
@Mixin(value = TileManaLiquefaction.class,remap = false,priority = 0)
16+
public abstract class MixinTileManaLiquefaction extends TileMod {
17+
18+
@Shadow
19+
int mana;
20+
21+
@Shadow
22+
public int energy;
23+
24+
@Final
25+
@Shadow
26+
private static int MAX_ENERGY;
27+
28+
@Inject(method = "update", at = @At("HEAD"),remap = true)
29+
public void updateMixin(CallbackInfo ci) {
30+
if (ConfigHandler.DISABLE_MANALIQUEFICATION) {
31+
var world = this.world;
32+
if (world.getWorldTime() % 20 != 0) return;
33+
34+
var uppos = this.pos.up();
35+
36+
if (world.getTileEntity(uppos) instanceof TilePool pool) {
37+
var blockState = world.getBlockState(uppos);
38+
Block upblock = blockState.getBlock();
39+
40+
switch (upblock.getMetaFromState(blockState)) {
41+
case 3 -> {
42+
int mana = this.mana;
43+
int energy = this.energy;
44+
int upmana = pool.getCurrentMana();
45+
int manaCap = pool.manaCap;
46+
47+
var totalMana = upmana + mana;
48+
49+
if (world.isBlockPowered(this.pos)) {
50+
if ((mana < manaCap || energy < MAX_ENERGY) && upmana > 1000) {
51+
if ((energy + totalMana / 1000) <= MAX_ENERGY) {
52+
this.mana = totalMana % 1000;
53+
this.energy = energy + totalMana / 1000;
54+
} else {
55+
this.mana = totalMana - ((MAX_ENERGY - energy) * 1000);
56+
this.energy = MAX_ENERGY;
57+
}
58+
pool.recieveMana(-upmana);
59+
}
60+
} else {
61+
var lsmana = mana;
62+
var lsliquid = energy;
63+
if (upmana < manaCap) {
64+
if (totalMana > manaCap) {
65+
pool.recieveMana(manaCap);
66+
lsmana -= manaCap - upmana;
67+
} else {
68+
pool.recieveMana(mana);
69+
lsmana = 0;
70+
}
71+
}
72+
73+
if (mana < manaCap || lsmana != mana) {
74+
var qk = (manaCap - lsmana) / 1000 + 1;
75+
if (energy <= qk) {
76+
lsmana += energy * 1000;
77+
lsliquid = 0;
78+
} else {
79+
lsmana += qk * 1000;
80+
lsliquid -= qk;
81+
}
82+
this.mana = lsmana;
83+
this.energy = lsliquid;
84+
}
85+
}
86+
}
87+
case 1 -> {
88+
if (world.isBlockPowered(this.pos)) {
89+
this.mana = 1000000;
90+
this.energy = MAX_ENERGY;
91+
} else {
92+
this.mana = 0;
93+
this.energy = 0;
94+
}
95+
}
96+
}
97+
}
98+
}
99+
}
100+
101+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"package": "github.kasuminova.novaeng.mixin.extrabotany",
3+
"refmap": "mixins.novaeng_core.refmap.json",
4+
"target": "@env(DEFAULT)",
5+
"minVersion": "0.8",
6+
"compatibilityLevel": "JAVA_8",
7+
"client": [
8+
],
9+
"mixins": [
10+
"MixinTileManaLiquefaction"
11+
]
12+
}

0 commit comments

Comments
 (0)