Skip to content

Commit 8120eab

Browse files
authored
Fix combining of enchanted annihilation planes in the anvil (#8658)
1 parent 195f1bf commit 8120eab

2 files changed

Lines changed: 18 additions & 23 deletions

File tree

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
package appeng.mixins;
22

3+
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
4+
35
import org.spongepowered.asm.mixin.Mixin;
46
import org.spongepowered.asm.mixin.injection.At;
5-
import org.spongepowered.asm.mixin.injection.Inject;
6-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
77

8+
import net.minecraft.world.entity.player.Inventory;
89
import net.minecraft.world.inventory.AnvilMenu;
10+
import net.minecraft.world.inventory.ItemCombinerMenu;
911

10-
import appeng.parts.automation.AnnihilationPlanePartItem;
12+
import appeng.core.definitions.AEParts;
1113

1214
/**
13-
* @see AnnihilationPlanePartItem#CALLING_DAMAGEABLE_FROM_ANVIL
15+
* Workaround to make enchanted annihilation planes combinable in anvils to upgrade their enchantment levels.
1416
*/
1517
@Mixin(AnvilMenu.class)
16-
public class AnvilMenuMixin {
17-
@Inject(method = "createResult", at = @At(value = "INVOKE", target = "net/minecraft/world/item/ItemStack.isDamageableItem()Z", ordinal = 1))
18-
public void setAnnihilationPlaneThreadLocal(CallbackInfo ci) {
19-
AnnihilationPlanePartItem.CALLING_DAMAGEABLE_FROM_ANVIL.set(Boolean.TRUE);
18+
public abstract class AnvilMenuMixin extends ItemCombinerMenu {
19+
public AnvilMenuMixin(int containerId, Inventory playerInventory) {
20+
super(null, 0, null, null);
21+
throw new AssertionError();
2022
}
2123

22-
@Inject(method = "createResult", at = @At(value = "INVOKE", target = "net/minecraft/world/item/ItemStack.isDamageableItem()Z", ordinal = 1, shift = At.Shift.AFTER))
23-
public void clearAnnihilationPlaneThreadLocal(CallbackInfo ci) {
24-
AnnihilationPlanePartItem.CALLING_DAMAGEABLE_FROM_ANVIL.set(null);
24+
@ModifyExpressionValue(method = "createResult", at = @At(value = "INVOKE", target = "net/minecraft/world/item/ItemStack.isDamageableItem()Z", ordinal = 1))
25+
public boolean setAnnihilationPlaneThreadLocal(boolean isDamageable) {
26+
if (AEParts.ANNIHILATION_PLANE.is(inputSlots.getItem(0))
27+
&& AEParts.ANNIHILATION_PLANE.is(inputSlots.getItem(1))) {
28+
return true; // Act damageable to allow combining items
29+
} else {
30+
return isDamageable;
31+
}
2532
}
2633
}

src/main/java/appeng/parts/automation/AnnihilationPlanePartItem.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,6 @@
1919
* Special part item for {@link AnnihilationPlanePart} to handle enchants and extended tooltips.
2020
*/
2121
public class AnnihilationPlanePartItem extends PartItem<AnnihilationPlanePart> {
22-
/**
23-
* Workaround to make annihilation planes combinable in anvils.
24-
* <p>
25-
* null = false, non-null = true
26-
*/
27-
public static final ThreadLocal<Object> CALLING_DAMAGEABLE_FROM_ANVIL = ThreadLocal.withInitial(() -> null);
28-
2922
public AnnihilationPlanePartItem(Properties properties) {
3023
super(properties, AnnihilationPlanePart.class, AnnihilationPlanePart::new);
3124
}
@@ -45,11 +38,6 @@ public boolean isBookEnchantable(ItemStack stack, ItemStack book) {
4538
return true;
4639
}
4740

48-
@Override
49-
public int getMaxDamage(ItemStack stack) {
50-
return CALLING_DAMAGEABLE_FROM_ANVIL.get() != null ? 1 : super.getMaxDamage(stack);
51-
}
52-
5341
@Override
5442
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> lines,
5543
TooltipFlag isAdvanced) {

0 commit comments

Comments
 (0)