Fix abstract method on inventories

This commit is contained in:
IzzelAliz 2020-05-17 11:48:56 +08:00
parent ad1da3ce18
commit 3c4f2ba31b
39 changed files with 195 additions and 189 deletions

View File

@ -13,23 +13,23 @@ public interface IInventoryBridge {
int MAX_STACK = 64; int MAX_STACK = 64;
List<ItemStack> bridge$getContents(); List<ItemStack> getContents();
void bridge$onOpen(CraftHumanEntity who); void onOpen(CraftHumanEntity who);
void bridge$onClose(CraftHumanEntity who); void onClose(CraftHumanEntity who);
List<HumanEntity> bridge$getViewers(); List<HumanEntity> getViewers();
InventoryHolder bridge$getOwner(); InventoryHolder getOwner();
void bridge$setOwner(InventoryHolder owner); void setOwner(InventoryHolder owner);
void bridge$setMaxStackSize(int size); void setMaxStackSize(int size);
Location bridge$getLocation(); Location getLocation();
IRecipe<?> bridge$getCurrentRecipe(); IRecipe<?> getCurrentRecipe();
void bridge$setCurrentRecipe(IRecipe<?> recipe); void setCurrentRecipe(IRecipe<?> recipe);
} }

View File

@ -16,7 +16,7 @@ public class ComposterBlockMixin {
@Redirect(method = "createInventory", at = @At(value = "NEW", target = "net/minecraft/block/ComposterBlock.EmptyInventory")) @Redirect(method = "createInventory", at = @At(value = "NEW", target = "net/minecraft/block/ComposterBlock.EmptyInventory"))
public ComposterBlock.EmptyInventory arclight$newEmpty(BlockState blockState, IWorld world, BlockPos blockPos) { public ComposterBlock.EmptyInventory arclight$newEmpty(BlockState blockState, IWorld world, BlockPos blockPos) {
ComposterBlock.EmptyInventory inventory = new ComposterBlock.EmptyInventory(); ComposterBlock.EmptyInventory inventory = new ComposterBlock.EmptyInventory();
((IInventoryBridge) inventory).bridge$setOwner(new CraftBlockInventoryHolder(world, blockPos, inventory)); ((IInventoryBridge) inventory).setOwner(new CraftBlockInventoryHolder(world, blockPos, inventory));
return inventory; return inventory;
} }
} }

View File

@ -16,6 +16,6 @@ public abstract class ComposterBlock_EmptyInventoryMixin extends InventoryMixin
public void arclight$constructor(IWorld world, BlockPos blockPos) { public void arclight$constructor(IWorld world, BlockPos blockPos) {
arclight$constructor(); arclight$constructor();
this.bridge$setOwner(new CraftBlockInventoryHolder(world, blockPos, this)); this.setOwner(new CraftBlockInventoryHolder(world, blockPos, this));
} }
} }

View File

@ -16,6 +16,6 @@ public abstract class ComposterBlock_FullInventoryMixin extends InventoryMixin {
@Inject(method = "<init>(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/item/ItemStack;)V", at = @At("RETURN")) @Inject(method = "<init>(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/item/ItemStack;)V", at = @At("RETURN"))
public void arclight$setOwner(BlockState blockState, IWorld world, BlockPos blockPos, ItemStack itemStack, CallbackInfo ci) { public void arclight$setOwner(BlockState blockState, IWorld world, BlockPos blockPos, ItemStack itemStack, CallbackInfo ci) {
this.bridge$setOwner(new CraftBlockInventoryHolder(world, blockPos, this)); this.setOwner(new CraftBlockInventoryHolder(world, blockPos, this));
} }
} }

View File

@ -15,6 +15,6 @@ public abstract class ComposterBlock_PartialInventoryMixin extends InventoryMixi
@Inject(method = "<init>(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IWorld;Lnet/minecraft/util/math/BlockPos;)V", at = @At("RETURN")) @Inject(method = "<init>(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/IWorld;Lnet/minecraft/util/math/BlockPos;)V", at = @At("RETURN"))
public void arclight$setOwner(BlockState blockState, IWorld world, BlockPos blockPos, CallbackInfo ci) { public void arclight$setOwner(BlockState blockState, IWorld world, BlockPos blockPos, CallbackInfo ci) {
this.bridge$setOwner(new CraftBlockInventoryHolder(world, blockPos, this)); this.setOwner(new CraftBlockInventoryHolder(world, blockPos, this));
} }
} }

View File

@ -55,9 +55,9 @@ public class DropperBlockMixin {
if (iinventory instanceof DoubleSidedInventory) { if (iinventory instanceof DoubleSidedInventory) {
destinationInventory = new CraftInventoryDoubleChest((DoubleSidedInventory) iinventory); destinationInventory = new CraftInventoryDoubleChest((DoubleSidedInventory) iinventory);
} else { } else {
destinationInventory = ((IInventoryBridge) iinventory).bridge$getOwner().getInventory(); destinationInventory = ((IInventoryBridge) iinventory).getOwner().getInventory();
} }
InventoryMoveItemEvent event = new InventoryMoveItemEvent(((IInventoryBridge) dispensertileentity).bridge$getOwner().getInventory(), craftItemStack, destinationInventory, true); InventoryMoveItemEvent event = new InventoryMoveItemEvent(((IInventoryBridge) dispensertileentity).getOwner().getInventory(), craftItemStack, destinationInventory, true);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;

View File

@ -84,6 +84,7 @@ public abstract class AbstractMinecartEntityMixin extends EntityMixin {
/** /**
* @author IzzelAliz * @author IzzelAliz
* @reason
*/ */
@Overwrite @Overwrite
public boolean attackEntityFrom(DamageSource source, float amount) { public boolean attackEntityFrom(DamageSource source, float amount) {

View File

@ -44,34 +44,34 @@ public abstract class ContainerMinecartEntityMixin extends AbstractMinecartEntit
private int maxStack; private int maxStack;
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.minecartContainerItems; return this.minecartContainerItems;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
org.bukkit.entity.Entity cart = getBukkitEntity(); org.bukkit.entity.Entity cart = getBukkitEntity();
if (cart instanceof InventoryHolder) return (InventoryHolder) cart; if (cart instanceof InventoryHolder) return (InventoryHolder) cart;
return null; return null;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@ -82,22 +82,22 @@ public abstract class ContainerMinecartEntityMixin extends AbstractMinecartEntit
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
maxStack = size; maxStack = size;
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return getBukkitEntity().getLocation(); return getBukkitEntity().getLocation();
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { public IRecipe<?> getCurrentRecipe() {
return null; return null;
} }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { public void setCurrentRecipe(IRecipe<?> recipe) {
} }
} }

View File

@ -31,7 +31,7 @@ public abstract class AbstractVillagerEntityMixin extends CreatureEntityMixin im
@Inject(method = "<init>", at = @At("RETURN")) @Inject(method = "<init>", at = @At("RETURN"))
private void arclight$init(EntityType<? extends AbstractVillagerEntity> type, World worldIn, CallbackInfo ci) { private void arclight$init(EntityType<? extends AbstractVillagerEntity> type, World worldIn, CallbackInfo ci) {
((IInventoryBridge) this.villagerInventory).bridge$setOwner((InventoryHolder) this.getBukkitEntity()); ((IInventoryBridge) this.villagerInventory).setOwner((InventoryHolder) this.getBukkitEntity());
} }
private CraftMerchant craftMerchant; private CraftMerchant craftMerchant;

View File

@ -29,6 +29,7 @@ public abstract class SlimeEntityMixin extends MobEntityMixin {
/** /**
* @author IzzelAliz * @author IzzelAliz
* @reason
*/ */
@Overwrite(remap = false) @Overwrite(remap = false)
@Override @Override

View File

@ -34,7 +34,7 @@ public abstract class AbstractHorseEntityMixin extends AnimalEntityMixin {
@Redirect(method = "initHorseChest", at = @At(value = "NEW", target = "net/minecraft/inventory/Inventory")) @Redirect(method = "initHorseChest", at = @At(value = "NEW", target = "net/minecraft/inventory/Inventory"))
private Inventory arclight$createInv(int slots) { private Inventory arclight$createInv(int slots) {
Inventory inventory = new Inventory(slots); Inventory inventory = new Inventory(slots);
((IInventoryBridge) inventory).bridge$setOwner((InventoryHolder) this.getBukkitEntity()); ((IInventoryBridge) inventory).setOwner((InventoryHolder) this.getBukkitEntity());
return inventory; return inventory;
} }

View File

@ -77,7 +77,7 @@ public abstract class PlayerInventoryMixin implements IInventory, IInventoryBrid
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
List<ItemStack> combined = new ArrayList<>(mainInventory.size() + offHandInventory.size() + armorInventory.size()); List<ItemStack> combined = new ArrayList<>(mainInventory.size() + offHandInventory.size() + armorInventory.size());
for (List<ItemStack> sub : this.allInventories) { for (List<ItemStack> sub : this.allInventories) {
combined.addAll(sub); combined.addAll(sub);
@ -86,27 +86,27 @@ public abstract class PlayerInventoryMixin implements IInventory, IInventoryBrid
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transactions.add(who); transactions.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transactions.remove(who); transactions.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transactions; return transactions;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
return ((PlayerEntityBridge) this.player).bridge$getBukkitEntity(); return ((PlayerEntityBridge) this.player).bridge$getBukkitEntity();
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { } public void setOwner(InventoryHolder owner) { }
@Override @Override
public int getInventoryStackLimit() { public int getInventoryStackLimit() {
@ -115,18 +115,18 @@ public abstract class PlayerInventoryMixin implements IInventory, IInventoryBrid
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
maxStack = size; maxStack = size;
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((PlayerEntityBridge) this.player).bridge$getBukkitEntity().getLocation(); return ((PlayerEntityBridge) this.player).bridge$getBukkitEntity().getLocation();
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { return null; } public IRecipe<?> getCurrentRecipe() { return null; }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { } public void setCurrentRecipe(IRecipe<?> recipe) { }
} }

View File

@ -27,26 +27,26 @@ public abstract class CraftResultInventoryMixin implements IInventoryBridge, IIn
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.stackResult; return this.stackResult;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { } public void onOpen(CraftHumanEntity who) { }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { } public void onClose(CraftHumanEntity who) { }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return new ArrayList<>(); return new ArrayList<>();
} }
@Override @Override
public InventoryHolder bridge$getOwner() { return null; } public InventoryHolder getOwner() { return null; }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { } public void setOwner(InventoryHolder owner) { }
@Override @Override
public int getInventoryStackLimit() { public int getInventoryStackLimit() {
@ -55,16 +55,16 @@ public abstract class CraftResultInventoryMixin implements IInventoryBridge, IIn
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
@Override @Override
public Location bridge$getLocation() { return null; } public Location getLocation() { return null; }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { return null; } public IRecipe<?> getCurrentRecipe() { return null; }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { } public void setCurrentRecipe(IRecipe<?> recipe) { }
} }

View File

@ -64,27 +64,27 @@ public abstract class CraftingInventoryMixin implements CraftingInventoryBridge,
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.stackList; return this.stackList;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
this.transaction.add(who); this.transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
this.transaction.remove(who); this.transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
if (bukkitOwner == null) { if (bukkitOwner == null) {
bukkitOwner = owner == null ? null : ((PlayerEntityBridge) owner).bridge$getBukkitEntity(); bukkitOwner = owner == null ? null : ((PlayerEntityBridge) owner).bridge$getBukkitEntity();
} }
@ -92,7 +92,7 @@ public abstract class CraftingInventoryMixin implements CraftingInventoryBridge,
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
this.bukkitOwner = owner; this.bukkitOwner = owner;
} }
@ -103,25 +103,25 @@ public abstract class CraftingInventoryMixin implements CraftingInventoryBridge,
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
((IInventoryBridge) this.resultInventory).bridge$setMaxStackSize(size); ((IInventoryBridge) this.resultInventory).setMaxStackSize(size);
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return this.field_70465_c instanceof WorkbenchContainer return this.field_70465_c instanceof WorkbenchContainer
? ((IWorldPosCallableBridge) ((WorkbenchContainerBridge) field_70465_c).bridge$getContainerAccess()).bridge$getLocation() ? ((IWorldPosCallableBridge) ((WorkbenchContainerBridge) field_70465_c).bridge$getContainerAccess()).bridge$getLocation()
: ((PlayerEntityBridge) owner).bridge$getBukkitEntity().getLocation(); : ((PlayerEntityBridge) owner).bridge$getBukkitEntity().getLocation();
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { public IRecipe<?> getCurrentRecipe() {
return this.currentRecipe; return this.currentRecipe;
} }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { public void setCurrentRecipe(IRecipe<?> recipe) {
this.currentRecipe = recipe; this.currentRecipe = recipe;
} }
} }

View File

@ -24,7 +24,7 @@ public abstract class DoubleSidedInventoryMixin implements IInventoryBridge, IIn
private List<HumanEntity> transactions = new ArrayList<>(); private List<HumanEntity> transactions = new ArrayList<>();
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
int size = this.getSizeInventory(); int size = this.getSizeInventory();
List<ItemStack> ret = new ArrayList<>(size); List<ItemStack> ret = new ArrayList<>(size);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
@ -34,29 +34,29 @@ public abstract class DoubleSidedInventoryMixin implements IInventoryBridge, IIn
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
((IInventoryBridge) this.field_70477_b).bridge$onOpen(who); ((IInventoryBridge) this.field_70477_b).onOpen(who);
((IInventoryBridge) this.field_70478_c).bridge$onOpen(who); ((IInventoryBridge) this.field_70478_c).onOpen(who);
this.transactions.add(who); this.transactions.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
((IInventoryBridge) this.field_70477_b).bridge$onClose(who); ((IInventoryBridge) this.field_70477_b).onClose(who);
((IInventoryBridge) this.field_70478_c).bridge$onClose(who); ((IInventoryBridge) this.field_70478_c).onClose(who);
this.transactions.remove(who); this.transactions.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transactions; return transactions;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { return null; } public InventoryHolder getOwner() { return null; }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { } public void setOwner(InventoryHolder owner) { }
@Override @Override
public int getInventoryStackLimit() { public int getInventoryStackLimit() {
@ -64,19 +64,19 @@ public abstract class DoubleSidedInventoryMixin implements IInventoryBridge, IIn
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
((IInventoryBridge) this.field_70477_b).bridge$setMaxStackSize(size); ((IInventoryBridge) this.field_70477_b).setMaxStackSize(size);
((IInventoryBridge) this.field_70478_c).bridge$setMaxStackSize(size); ((IInventoryBridge) this.field_70478_c).setMaxStackSize(size);
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((IInventoryBridge) this.field_70477_b).bridge$getLocation(); return ((IInventoryBridge) this.field_70477_b).getLocation();
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { return null; } public IRecipe<?> getCurrentRecipe() { return null; }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { } public void setCurrentRecipe(IRecipe<?> recipe) { }
} }

View File

@ -35,12 +35,12 @@ public abstract class EnderChestInventoryMixin extends InventoryMixin implements
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
return ((PlayerEntityBridge) owner).bridge$getBukkitEntity(); return ((PlayerEntityBridge) owner).bridge$getBukkitEntity();
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return CraftBlock.at(this.associatedChest.getWorld(), this.associatedChest.getPos()).getLocation(); return CraftBlock.at(this.associatedChest.getWorld(), this.associatedChest.getPos()).getLocation();
} }
} }

View File

@ -10,44 +10,50 @@ import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Mixin(IInventory.class) @Mixin(IInventory.class)
public interface IInventoryMixin extends IInventoryBridge { public interface IInventoryMixin extends IInventoryBridge {
@Override
default List<ItemStack> getContents() { default List<ItemStack> getContents() {
return bridge$getContents(); return new ArrayList<>();
} }
@Override
default void onOpen(CraftHumanEntity who) { default void onOpen(CraftHumanEntity who) {
bridge$onClose(who);
} }
@Override
default void onClose(CraftHumanEntity who) { default void onClose(CraftHumanEntity who) {
bridge$onClose(who);
} }
@Override
default List<HumanEntity> getViewers() { default List<HumanEntity> getViewers() {
return bridge$getViewers(); return new ArrayList<>();
} }
@Override
default InventoryHolder getOwner() { default InventoryHolder getOwner() {
return bridge$getOwner(); return null;
} }
@Override
default void setMaxStackSize(int size) { default void setMaxStackSize(int size) {
bridge$setMaxStackSize(size);
} }
@Override
default Location getLocation() { default Location getLocation() {
return bridge$getLocation(); return null;
} }
@Override
default IRecipe<?> getCurrentRecipe() { default IRecipe<?> getCurrentRecipe() {
return bridge$getCurrentRecipe(); return null;
} }
@Override
default void setCurrentRecipe(IRecipe<?> recipe) { default void setCurrentRecipe(IRecipe<?> recipe) {
bridge$setCurrentRecipe(recipe);
} }
} }

View File

@ -40,32 +40,32 @@ public abstract class InventoryMixin implements IInventory, IInventoryBridge {
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.inventoryContents; return this.inventoryContents;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
return bukkitOwner; return bukkitOwner;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
this.bukkitOwner = owner; this.bukkitOwner = owner;
} }
@ -76,22 +76,22 @@ public abstract class InventoryMixin implements IInventory, IInventoryBridge {
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return null; return null;
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { public IRecipe<?> getCurrentRecipe() {
return null; return null;
} }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { public void setCurrentRecipe(IRecipe<?> recipe) {
} }
} }

View File

@ -33,33 +33,33 @@ public abstract class MerchantInventoryMixin implements IInventoryBridge, IInven
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.slots; return this.slots;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transactions.add(who); transactions.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transactions.remove(who); transactions.remove(who);
this.merchant.setCustomer(null); this.merchant.setCustomer(null);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transactions; return transactions;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
return this.merchant instanceof AbstractVillagerEntity ? ((CraftAbstractVillager) ((EntityBridge) this.merchant).bridge$getBukkitEntity()) : null; return this.merchant instanceof AbstractVillagerEntity ? ((CraftAbstractVillager) ((EntityBridge) this.merchant).bridge$getBukkitEntity()) : null;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { } public void setOwner(InventoryHolder owner) { }
@Override @Override
public int getInventoryStackLimit() { public int getInventoryStackLimit() {
@ -68,19 +68,19 @@ public abstract class MerchantInventoryMixin implements IInventoryBridge, IInven
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return this.merchant instanceof AbstractVillagerEntity ? ((EntityBridge) this.merchant).bridge$getBukkitEntity().getLocation() : null; return this.merchant instanceof AbstractVillagerEntity ? ((EntityBridge) this.merchant).bridge$getBukkitEntity().getLocation() : null;
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { return null; } public IRecipe<?> getCurrentRecipe() { return null; }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { public void setCurrentRecipe(IRecipe<?> recipe) {
} }
} }

View File

@ -14,7 +14,7 @@ public abstract class CartographyContainer2Mixin implements IInventoryBridge {
@Shadow(aliases = {"this$0", "field_213924_a"}, remap = false) private CartographyContainer outerThis; @Shadow(aliases = {"this$0", "field_213924_a"}, remap = false) private CartographyContainer outerThis;
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((IWorldPosCallableBridge) ((CartographyContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation(); return ((IWorldPosCallableBridge) ((CartographyContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation();
} }
} }

View File

@ -25,10 +25,10 @@ public abstract class ContainerMixin implements ContainerBridge {
public void transferTo(Container other, CraftHumanEntity player) { public void transferTo(Container other, CraftHumanEntity player) {
InventoryView source = this.getBukkitView(); InventoryView source = this.getBukkitView();
InventoryView destination = ((ContainerBridge) other).bridge$getBukkitView(); InventoryView destination = ((ContainerBridge) other).bridge$getBukkitView();
((IInventoryBridge) ((CraftInventory) source.getTopInventory()).getInventory()).bridge$onClose(player); ((IInventoryBridge) ((CraftInventory) source.getTopInventory()).getInventory()).onClose(player);
((IInventoryBridge) ((CraftInventory) source.getBottomInventory()).getInventory()).bridge$onClose(player); ((IInventoryBridge) ((CraftInventory) source.getBottomInventory()).getInventory()).onClose(player);
((IInventoryBridge) ((CraftInventory) destination.getTopInventory()).getInventory()).bridge$onClose(player); ((IInventoryBridge) ((CraftInventory) destination.getTopInventory()).getInventory()).onClose(player);
((IInventoryBridge) ((CraftInventory) destination.getBottomInventory()).getInventory()).bridge$onClose(player); ((IInventoryBridge) ((CraftInventory) destination.getBottomInventory()).getInventory()).onClose(player);
} }
private ITextComponent title; private ITextComponent title;

View File

@ -14,7 +14,7 @@ public abstract class EnchantmentContainer1Mixin extends InventoryMixin {
@Shadow(aliases = {"this$0", "field_70484_a"}, remap = false) private EnchantmentContainer outerThis; @Shadow(aliases = {"this$0", "field_70484_a"}, remap = false) private EnchantmentContainer outerThis;
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((IWorldPosCallableBridge) ((EnchantmentContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation(); return ((IWorldPosCallableBridge) ((EnchantmentContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation();
} }
} }

View File

@ -14,7 +14,7 @@ public abstract class GrindstoneContainer1Mixin extends InventoryMixin {
@Shadow(aliases = {"this$0", "field_213912_a"}, remap = false) private GrindstoneContainer outerThis; @Shadow(aliases = {"this$0", "field_213912_a"}, remap = false) private GrindstoneContainer outerThis;
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((IWorldPosCallableBridge) ((GrindstoneContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation(); return ((IWorldPosCallableBridge) ((GrindstoneContainerBridge) outerThis).bridge$getContainerAccess()).bridge$getLocation();
} }
} }

View File

@ -37,6 +37,6 @@ public class HorseInventoryContainerMixin extends ContainerMixin {
return bukkitEntity; return bukkitEntity;
} }
return bukkitEntity = new CraftInventoryView(((PlayerEntityBridge) player.player).bridge$getBukkitEntity(), return bukkitEntity = new CraftInventoryView(((PlayerEntityBridge) player.player).bridge$getBukkitEntity(),
((IInventoryBridge) this.horseInventory).bridge$getOwner().getInventory(), (Container) (Object) this); ((IInventoryBridge) this.horseInventory).getOwner().getInventory(), (Container) (Object) this);
} }
} }

View File

@ -14,7 +14,7 @@ public abstract class LoomContainer1Mixin extends InventoryMixin {
@Shadow(aliases = {"this$0", "field_213913_a"}, remap = false) private LoomContainer outerThis; @Shadow(aliases = {"this$0", "field_213913_a"}, remap = false) private LoomContainer outerThis;
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((IWorldPosCallableBridge) ((LoomContainerBridge) outerThis).bridge$getWorldPos()).bridge$getLocation(); return ((IWorldPosCallableBridge) ((LoomContainerBridge) outerThis).bridge$getWorldPos()).bridge$getLocation();
} }
} }

View File

@ -14,7 +14,7 @@ public abstract class LoomContainer2Mixin extends InventoryMixin {
@Shadow(aliases = {"this$0", "field_213914_a"}, remap = false) private LoomContainer outerThis; @Shadow(aliases = {"this$0", "field_213914_a"}, remap = false) private LoomContainer outerThis;
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return ((IWorldPosCallableBridge) ((LoomContainerBridge) outerThis).bridge$getWorldPos()).bridge$getLocation(); return ((IWorldPosCallableBridge) ((LoomContainerBridge) outerThis).bridge$getWorldPos()).bridge$getLocation();
} }
} }

View File

@ -84,7 +84,7 @@ public abstract class RecipeManagerMixin implements RecipeManagerBridge {
Optional<T> optional = this.getRecipes(recipeTypeIn).values().stream().flatMap((p_215372_3_) -> { Optional<T> optional = this.getRecipes(recipeTypeIn).values().stream().flatMap((p_215372_3_) -> {
return Util.streamOptional(recipeTypeIn.matches(p_215372_3_, worldIn, inventoryIn)); return Util.streamOptional(recipeTypeIn.matches(p_215372_3_, worldIn, inventoryIn));
}).findFirst(); }).findFirst();
((IInventoryBridge) inventoryIn).bridge$setCurrentRecipe(optional.orElse(null)); ((IInventoryBridge) inventoryIn).setCurrentRecipe(optional.orElse(null));
return optional; return optional;
} }

View File

@ -45,11 +45,14 @@ public abstract class DedicatedServerMixin extends MinecraftServerMixin {
@Inject(method = "systemExitNow", at = @At("RETURN")) @Inject(method = "systemExitNow", at = @At("RETURN"))
public void arclight$exitNow(CallbackInfo ci) { public void arclight$exitNow(CallbackInfo ci) {
try { new Thread(() -> {
Thread.sleep(10000); try {
Runtime.getRuntime().halt(0); Thread.sleep(5000);
// todo halt 太暴力了 } catch (InterruptedException ignored) {
} catch (Exception ignored) { } finally {
} Runtime.getRuntime().halt(0);
}
}, "Exit Thread").start();
System.exit(0);
} }
} }

View File

@ -171,27 +171,27 @@ public abstract class AbstractFurnaceTileEntityMixin extends LockableTileEntityM
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.items; return this.items;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -201,7 +201,7 @@ public abstract class AbstractFurnaceTileEntityMixin extends LockableTileEntityM
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
} }

View File

@ -25,22 +25,22 @@ public abstract class BarrelTileEntityMixin extends LockableTileEntityMixin impl
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.barrelContents; return this.barrelContents;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@ -51,11 +51,11 @@ public abstract class BarrelTileEntityMixin extends LockableTileEntityMixin impl
} }
@Override @Override
public void bridge$setMaxStackSize(int i) { public void setMaxStackSize(int i) {
maxStack = i; maxStack = i;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
} }

View File

@ -77,27 +77,27 @@ public abstract class BrewingStandTileEntityMixin extends LockableTileEntityMixi
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.brewingItemStacks; return this.brewingItemStacks;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -107,7 +107,7 @@ public abstract class BrewingStandTileEntityMixin extends LockableTileEntityMixi
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
} }

View File

@ -60,27 +60,27 @@ public abstract class ChestTileEntityMixin extends LockableTileEntityMixin {
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.chestContents; return this.chestContents;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -90,7 +90,7 @@ public abstract class ChestTileEntityMixin extends LockableTileEntityMixin {
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }

View File

@ -23,27 +23,27 @@ public abstract class DispenserTileEntityMixin extends LockableTileEntityMixin {
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.stacks; return this.stacks;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -53,7 +53,7 @@ public abstract class DispenserTileEntityMixin extends LockableTileEntityMixin {
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
} }

View File

@ -64,7 +64,7 @@ public abstract class HopperTileEntityMixin extends LockableTileEntityMixin {
if (destination instanceof DoubleSidedInventory) { if (destination instanceof DoubleSidedInventory) {
destinationInventory = new CraftInventoryDoubleChest(((DoubleSidedInventory) destination)); destinationInventory = new CraftInventoryDoubleChest(((DoubleSidedInventory) destination));
} else { } else {
destinationInventory = ((IInventoryBridge) destination).bridge$getOwner().getInventory(); destinationInventory = ((IInventoryBridge) destination).getOwner().getInventory();
} }
InventoryMoveItemEvent event = new InventoryMoveItemEvent(this.getOwner().getInventory(), original.clone(), destinationInventory, true); InventoryMoveItemEvent event = new InventoryMoveItemEvent(this.getOwner().getInventory(), original.clone(), destinationInventory, true);
@ -94,10 +94,10 @@ public abstract class HopperTileEntityMixin extends LockableTileEntityMixin {
if (source instanceof DoubleSidedInventory) { if (source instanceof DoubleSidedInventory) {
sourceInventory = new CraftInventoryDoubleChest(((DoubleSidedInventory) source)); sourceInventory = new CraftInventoryDoubleChest(((DoubleSidedInventory) source));
} else { } else {
sourceInventory = ((IInventoryBridge) source).bridge$getOwner().getInventory(); sourceInventory = ((IInventoryBridge) source).getOwner().getInventory();
} }
InventoryMoveItemEvent event = new InventoryMoveItemEvent(sourceInventory, original.clone(), ((IInventoryBridge) destination).bridge$getOwner().getInventory(), false); InventoryMoveItemEvent event = new InventoryMoveItemEvent(sourceInventory, original.clone(), ((IInventoryBridge) destination).getOwner().getInventory(), false);
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (arclight$moveItem = event.isCancelled()) { if (arclight$moveItem = event.isCancelled()) {
if (destination instanceof HopperTileEntity) { if (destination instanceof HopperTileEntity) {
@ -112,7 +112,7 @@ public abstract class HopperTileEntityMixin extends LockableTileEntityMixin {
@Inject(method = "captureItem", cancellable = true, at = @At("HEAD")) @Inject(method = "captureItem", cancellable = true, at = @At("HEAD"))
private static void arclight$pickupItem(IInventory inventory, ItemEntity itemEntity, CallbackInfoReturnable<Boolean> cir) { private static void arclight$pickupItem(IInventory inventory, ItemEntity itemEntity, CallbackInfoReturnable<Boolean> cir) {
InventoryPickupItemEvent event = new InventoryPickupItemEvent(((IInventoryBridge) inventory).bridge$getOwner().getInventory(), (Item) ((EntityBridge) itemEntity).bridge$getBukkitEntity()); InventoryPickupItemEvent event = new InventoryPickupItemEvent(((IInventoryBridge) inventory).getOwner().getInventory(), (Item) ((EntityBridge) itemEntity).bridge$getBukkitEntity());
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) { if (event.isCancelled()) {
cir.setReturnValue(false); cir.setReturnValue(false);
@ -120,27 +120,27 @@ public abstract class HopperTileEntityMixin extends LockableTileEntityMixin {
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.inventory; return this.inventory;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -150,7 +150,7 @@ public abstract class HopperTileEntityMixin extends LockableTileEntityMixin {
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
} }

View File

@ -38,32 +38,32 @@ public abstract class LecternTileEntity1Mixin implements IInventoryBridge, IInve
} }
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return Collections.singletonList(outerThis.getBook()); return Collections.singletonList(outerThis.getBook());
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public InventoryHolder bridge$getOwner() { public InventoryHolder getOwner() {
return ((TileEntityBridge) outerThis).bridge$getOwner(); return ((TileEntityBridge) outerThis).bridge$getOwner();
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -73,21 +73,21 @@ public abstract class LecternTileEntity1Mixin implements IInventoryBridge, IInve
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return new Location(((WorldBridge) outerThis.getWorld()).bridge$getWorld(), outerThis.getPos().getX(), outerThis.getPos().getY(), outerThis.getPos().getZ()); return new Location(((WorldBridge) outerThis.getWorld()).bridge$getWorld(), outerThis.getPos().getX(), outerThis.getPos().getY(), outerThis.getPos().getZ());
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { public IRecipe<?> getCurrentRecipe() {
return null; return null;
} }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { public void setCurrentRecipe(IRecipe<?> recipe) {
} }
} }

View File

@ -12,16 +12,16 @@ import org.spongepowered.asm.mixin.Mixin;
public abstract class LockableTileEntityMixin extends TileEntityMixin implements IInventoryBridge, IInventory { public abstract class LockableTileEntityMixin extends TileEntityMixin implements IInventoryBridge, IInventory {
@Override @Override
public Location bridge$getLocation() { public Location getLocation() {
return CraftBlock.at(this.world, this.pos).getLocation(); return CraftBlock.at(this.world, this.pos).getLocation();
} }
@Override @Override
public IRecipe<?> bridge$getCurrentRecipe() { public IRecipe<?> getCurrentRecipe() {
return null; return null;
} }
@Override @Override
public void bridge$setCurrentRecipe(IRecipe<?> recipe) { public void setCurrentRecipe(IRecipe<?> recipe) {
} }
} }

View File

@ -23,27 +23,27 @@ public abstract class ShulkerBoxTileEntityMixin extends LockableTileEntityMixin
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
@Override @Override
public List<ItemStack> bridge$getContents() { public List<ItemStack> getContents() {
return this.items; return this.items;
} }
@Override @Override
public void bridge$onOpen(CraftHumanEntity who) { public void onOpen(CraftHumanEntity who) {
transaction.add(who); transaction.add(who);
} }
@Override @Override
public void bridge$onClose(CraftHumanEntity who) { public void onClose(CraftHumanEntity who) {
transaction.remove(who); transaction.remove(who);
} }
@Override @Override
public List<HumanEntity> bridge$getViewers() { public List<HumanEntity> getViewers() {
return transaction; return transaction;
} }
@Override @Override
public void bridge$setOwner(InventoryHolder owner) { public void setOwner(InventoryHolder owner) {
} }
@Override @Override
@ -53,7 +53,7 @@ public abstract class ShulkerBoxTileEntityMixin extends LockableTileEntityMixin
} }
@Override @Override
public void bridge$setMaxStackSize(int size) { public void setMaxStackSize(int size) {
this.maxStack = size; this.maxStack = size;
} }
} }

View File

@ -60,9 +60,4 @@ public abstract class TileEntityMixin implements TileEntityBridge {
if (state instanceof InventoryHolder) return (InventoryHolder) state; if (state instanceof InventoryHolder) return (InventoryHolder) state;
return null; return null;
} }
@Override
public InventoryHolder bridge$getOwner() {
return getOwner();
}
} }

View File

@ -122,7 +122,7 @@ public abstract class ServerWorldMixin extends WorldMixin implements ServerWorld
public void arclight$closeOnChunkUnloading(Chunk chunkIn, CallbackInfo ci) { public void arclight$closeOnChunkUnloading(Chunk chunkIn, CallbackInfo ci) {
for (TileEntity tileentity : chunkIn.getTileEntityMap().values()) { for (TileEntity tileentity : chunkIn.getTileEntityMap().values()) {
if (tileentity instanceof IInventory) { if (tileentity instanceof IInventory) {
for (HumanEntity h : Lists.newArrayList(((IInventoryBridge) tileentity).bridge$getViewers())) { for (HumanEntity h : Lists.newArrayList(((IInventoryBridge) tileentity).getViewers())) {
if (h instanceof CraftHumanEntity) { if (h instanceof CraftHumanEntity) {
((CraftHumanEntity) h).getHandle().closeScreen(); ((CraftHumanEntity) h).getHandle().closeScreen();
} }