Skip to content

Commit 90e8f3f

Browse files
committed
fix(primalcore): stop crash from dropping a torch into a barrel
1 parent 568e77b commit 90e8f3f

File tree

6 files changed

+54
-3
lines changed

6 files changed

+54
-3
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version_base = 1.15.0
1+
version_base = 1.16.0
22

33
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
44
# This is required to provide enough memory for the Minecraft decompilation process.

src/main/java/tv/darkosto/sevpatches/core/SevPatchesLoadingPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ public class SevPatchesLoadingPlugin implements IFMLLoadingPlugin {
6262
public static String GRAB_MOUSE_CURSOR;
6363
public static String UNGRAB_MOUSE_CURSOR;
6464

65+
public static String ENTITY_ON_ENTITY_COLLISION;
66+
public static String ITEMSTACK_IS_ITEM_EQUAL;
67+
6568
public SevPatchesLoadingPlugin() {
6669
LOGGER.info("setting up mixin environment");
6770
MixinBootstrap.init();
@@ -135,6 +138,9 @@ public void injectData(Map<String, Object> data) {
135138

136139
SevPatchesLoadingPlugin.GRAB_MOUSE_CURSOR = dev ? "grabMouseCursor" : "a";
137140
SevPatchesLoadingPlugin.UNGRAB_MOUSE_CURSOR = dev ? "ungrabMouseCursor" : "b";
141+
142+
SevPatchesLoadingPlugin.ENTITY_ON_ENTITY_COLLISION = dev ? "onEntityCollision" : "func_180634_a";
143+
SevPatchesLoadingPlugin.ITEMSTACK_IS_ITEM_EQUAL = dev ? "isItemEqual" : "func_77969_a";
138144
}
139145

140146
@Override

src/main/java/tv/darkosto/sevpatches/core/SevPatchesTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public byte[] transform(String name, String transformedName, byte[] basicClass)
3333
return new PatchPrimalNicerHammerHeads(basicClass).apply();
3434
case "nmd.primal.core.common.entities.living.EntityCanisCampestris":
3535
return new PatchPrimalScaredyCat(basicClass).apply();
36+
case "nmd.primal.core.common.blocks.machines.Barrel":
37+
return new PatchPrimalBarrel(basicClass).apply();
3638
case "realdrops.handlers.EventHandler":
3739
return new PatchRidHandlerDeregister(basicClass).apply();
3840
case "tehnut.harvest.ReplantHandlers":

src/main/java/tv/darkosto/sevpatches/core/patches/PatchMacMouseFBP.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected boolean patch() {
2121
for (MethodNode method : classNode.methods) {
2222
InsnList insnList = method.instructions;
2323
Iterable<AbstractInsnNode> insnsIter = insnList::iterator;
24-
Stream<AbstractInsnNode> insns = StreamSupport.stream(insnsIter.spliterator(), true);
24+
Stream<AbstractInsnNode> insns = StreamSupport.stream(insnsIter.spliterator(), false);
2525

2626
insns.filter(insn -> insn instanceof MethodInsnNode)
2727
.map(insn -> (MethodInsnNode) insn)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package tv.darkosto.sevpatches.core.patches;
2+
3+
import org.objectweb.asm.Opcodes;
4+
import org.objectweb.asm.tree.*;
5+
import tv.darkosto.sevpatches.core.SevPatchesLoadingPlugin;
6+
import tv.darkosto.sevpatches.core.utils.AsmUtils;
7+
8+
import java.util.Optional;
9+
import java.util.stream.Stream;
10+
import java.util.stream.StreamSupport;
11+
12+
public class PatchPrimalBarrel extends Patch {
13+
public PatchPrimalBarrel(byte[] inputClass) {
14+
super(inputClass);
15+
}
16+
17+
@Override
18+
protected boolean patch() {
19+
MethodNode onEntityCollision = AsmUtils.findMethod(this.classNode, SevPatchesLoadingPlugin.ENTITY_ON_ENTITY_COLLISION);
20+
if (onEntityCollision == null) return false;
21+
22+
InsnList insns = onEntityCollision.instructions;
23+
Iterable<AbstractInsnNode> insnsIter = insns::iterator;
24+
Stream<AbstractInsnNode> nodes = StreamSupport.stream(insnsIter.spliterator(), false);
25+
26+
Optional<MethodInsnNode> targetOpt = nodes.filter(node -> node instanceof MethodInsnNode)
27+
.map(node -> (MethodInsnNode) node)
28+
.filter(invoke -> invoke.owner.equals("net/minecraft/item/ItemStack") && invoke.name.equals(SevPatchesLoadingPlugin.ITEMSTACK_IS_ITEM_EQUAL))
29+
.findFirst();
30+
31+
if (!targetOpt.isPresent()) return false;
32+
MethodInsnNode target = targetOpt.get();
33+
34+
InsnList newCondition = new InsnList();
35+
newCondition.add(new VarInsnNode(Opcodes.ALOAD, 13));
36+
newCondition.add(new TypeInsnNode(Opcodes.INSTANCEOF, "nmd/primal/core/common/compat/vanilla/VanillaTorchItem"));
37+
newCondition.add(new InsnNode(Opcodes.IAND));
38+
39+
onEntityCollision.instructions.insert(target, newCondition);
40+
41+
return true;
42+
}
43+
}

src/main/resources/mcmod.info

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"modid": "sevpatches",
44
"name": "SevPatches",
55
"description": "Consolidated patches for mods that are EOL used in SevTech: Ages",
6-
"version": "1.14.1",
6+
"version": "1.16.0",
77
"mcversion": "1.12.2",
88
"url": "https://www.curseforge.com/minecraft/mc-mods/sevpatches",
99
"updateUrl": "",

0 commit comments

Comments
 (0)