Upstream: Fix getLocation for Cartography Table and Stonecutter

This commit is contained in:
IzzelAliz 2020-09-04 16:10:22 +08:00
parent 836dee238d
commit 0c043344f0
21 changed files with 92 additions and 78 deletions

View File

@ -1,8 +0,0 @@
package io.izzel.arclight.common.bridge.inventory.container;
import net.minecraft.util.IWorldPosCallable;
public interface CartographyContainerBridge extends ContainerBridge {
IWorldPosCallable bridge$getContainerAccess();
}

View File

@ -1,8 +0,0 @@
package io.izzel.arclight.common.bridge.inventory.container;
import net.minecraft.util.IWorldPosCallable;
public interface EnchantmentContainerBridge extends ContainerBridge {
IWorldPosCallable bridge$getContainerAccess();
}

View File

@ -1,8 +0,0 @@
package io.izzel.arclight.common.bridge.inventory.container;
import net.minecraft.util.IWorldPosCallable;
public interface GrindstoneContainerBridge extends ContainerBridge {
IWorldPosCallable bridge$getContainerAccess();
}

View File

@ -1,8 +0,0 @@
package io.izzel.arclight.common.bridge.inventory.container;
import net.minecraft.util.IWorldPosCallable;
public interface LoomContainerBridge extends ContainerBridge {
IWorldPosCallable bridge$getWorldPos();
}

View File

@ -0,0 +1,14 @@
package io.izzel.arclight.common.bridge.inventory.container;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import net.minecraft.util.IWorldPosCallable;
import org.bukkit.Location;
public interface PosContainerBridge extends ContainerBridge {
IWorldPosCallable bridge$getWorldPos();
default Location bridge$getWorldLocation() {
return ((IWorldPosCallableBridge) bridge$getWorldPos()).bridge$getLocation();
}
}

View File

@ -1,8 +0,0 @@
package io.izzel.arclight.common.bridge.inventory.container;
import net.minecraft.util.IWorldPosCallable;
public interface WorkbenchContainerBridge extends ContainerBridge {
IWorldPosCallable bridge$getContainerAccess();
}

View File

@ -3,13 +3,11 @@ package io.izzel.arclight.common.mixin.core.inventory;
import io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.CraftingInventoryBridge;
import io.izzel.arclight.common.bridge.inventory.IInventoryBridge;
import io.izzel.arclight.common.bridge.inventory.container.WorkbenchContainerBridge;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.CraftingInventory;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.WorkbenchContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.NonNullList;
@ -110,8 +108,8 @@ public abstract class CraftingInventoryMixin implements CraftingInventoryBridge,
@Override
public Location getLocation() {
return this.eventHandler instanceof WorkbenchContainer
? ((IWorldPosCallableBridge) ((WorkbenchContainerBridge) eventHandler).bridge$getContainerAccess()).bridge$getLocation()
return this.eventHandler instanceof PosContainerBridge
? ((PosContainerBridge) eventHandler).bridge$getWorldLocation()
: ((PlayerEntityBridge) owner).bridge$getBukkitEntity().getLocation();
}

View File

@ -0,0 +1,19 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.inventory.IInventoryBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.inventory.container.CartographyContainer;
import org.bukkit.Location;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(targets = "net/minecraft/inventory/container/CartographyContainer$1")
public abstract class CartographyContainer1Mixin implements IInventoryBridge {
@Shadow(aliases = {"this$0", "field_213911_a"}, remap = false) private CartographyContainer outerThis;
@Override
public Location getLocation() {
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -1,8 +1,7 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.inventory.IInventoryBridge;
import io.izzel.arclight.common.bridge.inventory.container.CartographyContainerBridge;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.inventory.container.CartographyContainer;
import org.bukkit.Location;
import org.spongepowered.asm.mixin.Mixin;
@ -15,6 +14,6 @@ public abstract class CartographyContainer2Mixin implements IInventoryBridge {
@Override
public Location getLocation() {
return ((IWorldPosCallableBridge) ((CartographyContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation();
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -1,7 +1,7 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.container.CartographyContainerBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.CraftResultInventory;
@ -21,7 +21,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(CartographyContainer.class)
public abstract class CartographyContainerMixin extends ContainerMixin implements CartographyContainerBridge {
public abstract class CartographyContainerMixin extends ContainerMixin implements PosContainerBridge {
// @formatter:off
@Shadow @Final private IWorldPosCallable worldPosCallable;
@ -54,7 +54,7 @@ public abstract class CartographyContainerMixin extends ContainerMixin implement
}
@Override
public IWorldPosCallable bridge$getContainerAccess() {
public IWorldPosCallable bridge$getWorldPos() {
return this.worldPosCallable;
}
}

View File

@ -1,7 +1,6 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.inventory.container.EnchantmentContainerBridge;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import io.izzel.arclight.common.mixin.core.inventory.InventoryMixin;
import net.minecraft.inventory.container.EnchantmentContainer;
import org.bukkit.Location;
@ -15,6 +14,6 @@ public abstract class EnchantmentContainer1Mixin extends InventoryMixin {
@Override
public Location getLocation() {
return ((IWorldPosCallableBridge) ((EnchantmentContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation();
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -2,7 +2,7 @@ package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge;
import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.container.EnchantmentContainerBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.enchantment.EnchantmentData;
@ -52,7 +52,7 @@ import java.util.Map;
import java.util.Random;
@Mixin(EnchantmentContainer.class)
public abstract class EnchantmentContainerMixin extends ContainerMixin implements EnchantmentContainerBridge {
public abstract class EnchantmentContainerMixin extends ContainerMixin implements PosContainerBridge {
// @formatter:off
@Shadow @Final private IInventory tableInventory;
@ -278,7 +278,7 @@ public abstract class EnchantmentContainerMixin extends ContainerMixin implement
}
@Override
public IWorldPosCallable bridge$getContainerAccess() {
public IWorldPosCallable bridge$getWorldPos() {
return this.worldPosCallable;
}
}

View File

@ -1,12 +1,11 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import io.izzel.arclight.common.mixin.core.inventory.InventoryMixin;
import net.minecraft.inventory.container.GrindstoneContainer;
import org.bukkit.Location;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import io.izzel.arclight.common.bridge.inventory.container.GrindstoneContainerBridge;
@Mixin(targets = "net/minecraft/inventory/container/GrindstoneContainer$1")
public abstract class GrindstoneContainer1Mixin extends InventoryMixin {
@ -15,6 +14,6 @@ public abstract class GrindstoneContainer1Mixin extends InventoryMixin {
@Override
public Location getLocation() {
return ((IWorldPosCallableBridge) ((GrindstoneContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation();
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -1,7 +1,7 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.container.GrindstoneContainerBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.container.Container;
@ -17,7 +17,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(GrindstoneContainer.class)
public abstract class GrindstoneContainerMixin extends ContainerMixin implements GrindstoneContainerBridge {
public abstract class GrindstoneContainerMixin extends ContainerMixin implements PosContainerBridge {
@Shadow @Final private IInventory inputInventory;
@Shadow @Final private IInventory outputInventory;
@ -42,7 +42,7 @@ public abstract class GrindstoneContainerMixin extends ContainerMixin implements
}
@Override
public IWorldPosCallable bridge$getContainerAccess() {
public IWorldPosCallable bridge$getWorldPos() {
return this.worldPosCallable;
}
}

View File

@ -1,12 +1,11 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import io.izzel.arclight.common.mixin.core.inventory.InventoryMixin;
import net.minecraft.inventory.container.LoomContainer;
import org.bukkit.Location;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import io.izzel.arclight.common.bridge.inventory.container.LoomContainerBridge;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import io.izzel.arclight.common.mixin.core.inventory.InventoryMixin;
@Mixin(targets = "net/minecraft/inventory/container/LoomContainer$1")
public abstract class LoomContainer1Mixin extends InventoryMixin {
@ -15,6 +14,6 @@ public abstract class LoomContainer1Mixin extends InventoryMixin {
@Override
public Location getLocation() {
return ((IWorldPosCallableBridge) ((LoomContainerBridge) outerThis).bridge$getWorldPos()).bridge$getLocation();
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -1,12 +1,11 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import io.izzel.arclight.common.mixin.core.inventory.InventoryMixin;
import net.minecraft.inventory.container.LoomContainer;
import org.bukkit.Location;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import io.izzel.arclight.common.bridge.inventory.container.LoomContainerBridge;
import io.izzel.arclight.common.bridge.util.IWorldPosCallableBridge;
import io.izzel.arclight.common.mixin.core.inventory.InventoryMixin;
@Mixin(targets = "net/minecraft/inventory/container/LoomContainer$2")
public abstract class LoomContainer2Mixin extends InventoryMixin {
@ -15,6 +14,6 @@ public abstract class LoomContainer2Mixin extends InventoryMixin {
@Override
public Location getLocation() {
return ((IWorldPosCallableBridge) ((LoomContainerBridge) outerThis).bridge$getWorldPos()).bridge$getLocation();
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -1,7 +1,7 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.container.LoomContainerBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.IInventory;
@ -19,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(LoomContainer.class)
public abstract class LoomContainerMixin extends ContainerMixin implements LoomContainerBridge {
public abstract class LoomContainerMixin extends ContainerMixin implements PosContainerBridge {
// @formatter:off
@Shadow @Final private IInventory inputInventory;

View File

@ -0,0 +1,19 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.inventory.IInventoryBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.inventory.container.StonecutterContainer;
import org.bukkit.Location;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(targets = "net/minecraft/inventory/container/StonecutterContainer$1")
public abstract class StonecutterContainer1Mixin implements IInventoryBridge {
@Shadow(aliases = {"this$0", "field_213915_a"}, remap = false) private StonecutterContainer outerThis;
@Override
public Location getLocation() {
return ((PosContainerBridge) outerThis).bridge$getWorldLocation();
}
}

View File

@ -1,6 +1,7 @@
package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.CraftResultInventory;
import net.minecraft.inventory.IInventory;
@ -17,11 +18,12 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(StonecutterContainer.class)
public abstract class StonecutterContainerMixin extends ContainerMixin {
public abstract class StonecutterContainerMixin extends ContainerMixin implements PosContainerBridge {
// @formatter:off
@Shadow @Final public IInventory inputInventory;
@Shadow @Final private CraftResultInventory inventory;
@Shadow @Final private IWorldPosCallable worldPosCallable;
// @formatter:on
private CraftInventoryView bukkitEntity = null;
@ -42,4 +44,9 @@ public abstract class StonecutterContainerMixin extends ContainerMixin {
bukkitEntity = new CraftInventoryView(((PlayerEntityBridge) this.playerInventory.player).bridge$getBukkitEntity(), inventory, (Container) (Object) this);
return bukkitEntity;
}
@Override
public IWorldPosCallable bridge$getWorldPos() {
return this.worldPosCallable;
}
}

View File

@ -3,7 +3,7 @@ package io.izzel.arclight.common.mixin.core.inventory.container;
import io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge;
import io.izzel.arclight.common.bridge.inventory.CraftingInventoryBridge;
import io.izzel.arclight.common.bridge.inventory.container.ContainerBridge;
import io.izzel.arclight.common.bridge.inventory.container.WorkbenchContainerBridge;
import io.izzel.arclight.common.bridge.inventory.container.PosContainerBridge;
import io.izzel.arclight.common.mod.util.ArclightCaptures;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
@ -37,12 +37,12 @@ import java.util.Optional;
// todo 实现
@Mixin(WorkbenchContainer.class)
public abstract class WorkbenchContainerMixin extends ContainerMixin implements WorkbenchContainerBridge {
public abstract class WorkbenchContainerMixin extends ContainerMixin implements PosContainerBridge {
// @formatter:off
@Mutable @Shadow @Final private CraftingInventory craftMatrix;
@Shadow @Final private CraftResultInventory craftResult;
@Accessor("worldPosCallable") public abstract IWorldPosCallable bridge$getContainerAccess();
@Accessor("worldPosCallable") public abstract IWorldPosCallable bridge$getWorldPos();
// @formatter:on
private CraftInventoryView bukkitEntity;
@ -60,7 +60,7 @@ public abstract class WorkbenchContainerMixin extends ContainerMixin implements
@Inject(method = "onCraftMatrixChanged", at = @At("HEAD"))
public void arclight$capture(IInventory inventoryIn, CallbackInfo ci) {
ArclightCaptures.captureWorkbenchContainer((Container) (Object) this);
ArclightCaptures.captureWorkbenchContainer((WorkbenchContainer) (Object) this);
}
/**

View File

@ -266,6 +266,7 @@
"inventory.container.AbstractRepairContainerMixin",
"inventory.container.BeaconContainerMixin",
"inventory.container.BrewingStandContainerMixin",
"inventory.container.CartographyContainer1Mixin",
"inventory.container.CartographyContainer2Mixin",
"inventory.container.CartographyContainerMixin",
"inventory.container.ChestContainerMixin",
@ -289,6 +290,7 @@
"inventory.container.ShulkerBoxContainerMixin",
"inventory.container.SlotMixin",
"inventory.container.SmithingTableContainerMixin",
"inventory.container.StonecutterContainer1Mixin",
"inventory.container.StonecutterContainerMixin",
"inventory.container.WorkbenchContainerMixin",
"item.ArmorStandItemMixin",