|
1 | 1 | package appeng.mixins; |
2 | 2 |
|
| 3 | +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; |
| 4 | + |
3 | 5 | import org.spongepowered.asm.mixin.Mixin; |
4 | 6 | import org.spongepowered.asm.mixin.injection.At; |
5 | | -import org.spongepowered.asm.mixin.injection.Inject; |
6 | | -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; |
7 | 7 |
|
| 8 | +import net.minecraft.world.entity.player.Inventory; |
8 | 9 | import net.minecraft.world.inventory.AnvilMenu; |
| 10 | +import net.minecraft.world.inventory.ItemCombinerMenu; |
9 | 11 |
|
10 | | -import appeng.parts.automation.AnnihilationPlanePartItem; |
| 12 | +import appeng.core.definitions.AEParts; |
11 | 13 |
|
12 | 14 | /** |
13 | | - * @see AnnihilationPlanePartItem#CALLING_DAMAGEABLE_FROM_ANVIL |
| 15 | + * Workaround to make enchanted annihilation planes combinable in anvils to upgrade their enchantment levels. |
14 | 16 | */ |
15 | 17 | @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(); |
20 | 22 | } |
21 | 23 |
|
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 | + } |
25 | 32 | } |
26 | 33 | } |
0 commit comments