diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java index 5455720..85fc229 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java @@ -3,6 +3,7 @@ import org.bukkit.block.BrewingStand; import org.bukkit.inventory.BrewerInventory; import org.bukkit.inventory.ItemStack; +import org.ultramine.mods.bukkit.util.BukkitUtil; public class CraftInventoryBrewer extends CraftInventory implements BrewerInventory @@ -25,8 +26,6 @@ @Override public BrewingStand getHolder() { -// return (BrewingStand) inventory.getOwner(); - - throw new UnsupportedOperationException(); // TODO + return (BrewingStand) BukkitUtil.getInventoryOwner(inventory); } } diff --git a/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java b/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java index 41467d8..504e1b5 100644 --- a/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java +++ b/src/main/java/org/ultramine/mods/bukkit/EventImplProgress.java @@ -82,7 +82,7 @@ reg(true, org.bukkit.event.entity.CreatureSpawnEvent.class); // TODO impl SpawnReason reg(true, org.bukkit.event.entity.CreeperPowerEvent.class); reg(false, org.bukkit.event.entity.EntityBreakDoorEvent.class); - reg(false, org.bukkit.event.entity.EntityChangeBlockEvent.class); + reg(true, org.bukkit.event.entity.EntityChangeBlockEvent.class); reg(false, org.bukkit.event.entity.EntityCombustByBlockEvent.class); reg(false, org.bukkit.event.entity.EntityCombustByEntityEvent.class); reg(false, org.bukkit.event.entity.EntityCombustEvent.class); diff --git a/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinAnimalChest.java b/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinAnimalChest.java new file mode 100644 index 0000000..511eaa9 --- /dev/null +++ b/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinAnimalChest.java @@ -0,0 +1,10 @@ +package org.ultramine.mods.bukkit.interfaces.inventory; + +import net.minecraft.entity.passive.EntityAnimal; + +public interface IMixinAnimalChest +{ + EntityAnimal getAnimal(); + + void setAnimal(EntityAnimal entityAnimal); +} diff --git a/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinInventoryEnderChest.java b/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinInventoryEnderChest.java index eb613d2..03dcacf 100644 --- a/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinInventoryEnderChest.java +++ b/src/main/java/org/ultramine/mods/bukkit/interfaces/inventory/IMixinInventoryEnderChest.java @@ -1,10 +1,10 @@ package org.ultramine.mods.bukkit.interfaces.inventory; -import jline.internal.Nullable; -import org.bukkit.inventory.InventoryHolder; +import net.minecraft.entity.player.EntityPlayer; public interface IMixinInventoryEnderChest { - @Nullable - InventoryHolder getOwner(); + EntityPlayer getOwner(); + + void setOwner(EntityPlayer player); } diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/entity/passive/MixinEntityHorse.java b/src/main/java/org/ultramine/mods/bukkit/mixin/entity/passive/MixinEntityHorse.java index 5e60081..b60b6bc 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/entity/passive/MixinEntityHorse.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/entity/passive/MixinEntityHorse.java @@ -1,15 +1,18 @@ package org.ultramine.mods.bukkit.mixin.entity.passive; import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.passive.EntityHorse; import net.minecraft.inventory.AnimalChest; import net.minecraft.nbt.NBTTagCompound; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.ultramine.mods.bukkit.interfaces.entity.passive.IMixinEntityHorse; +import org.ultramine.mods.bukkit.interfaces.inventory.IMixinAnimalChest; @Mixin(net.minecraft.entity.passive.EntityHorse.class) public abstract class MixinEntityHorse implements IMixinEntityHorse @@ -80,4 +83,10 @@ { nbt.setInteger("Bukkit.MaxDomestication", this.maxDomestication); } + + @Inject(method = "func_110226_cD", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/AnimalChest;func_110133_a(Ljava/lang/String;)V", shift = Shift.BEFORE)) + private void func_110226_cDInject(CallbackInfo ci) + { + ((IMixinAnimalChest) horseChest).setAnimal((EntityHorse)(Object) this); + } } diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/entity/player/MixinPlayer.java b/src/main/java/org/ultramine/mods/bukkit/mixin/entity/player/MixinPlayer.java index b986597..342e7c0 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/entity/player/MixinPlayer.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/entity/player/MixinPlayer.java @@ -1,12 +1,15 @@ package org.ultramine.mods.bukkit.mixin.entity.player; +import com.mojang.authlib.GameProfile; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer.EnumStatus; +import net.minecraft.inventory.InventoryEnderChest; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; +import net.minecraft.world.World; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.entity.CraftItem; @@ -29,6 +32,7 @@ import org.ultramine.mods.bukkit.interfaces.entity.player.IMixinPlayer; import org.ultramine.mods.bukkit.interfaces.entity.player.IMixinPlayerMP; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinContainer; +import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryEnderChest; import org.ultramine.mods.bukkit.interfaces.world.IMixinWorld; import org.ultramine.mods.bukkit.mixin.entity.MixinEntityLivingBase; @@ -42,6 +46,8 @@ @Shadow public int experienceLevel; + @Shadow private InventoryEnderChest theInventoryEnderChest; + @Redirect(method = "onLivingUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/EntityLivingBase;heal(F)V")) private void healRedir(EntityLivingBase entity, float value) { @@ -174,4 +180,10 @@ InventoryCloseEvent event = new InventoryCloseEvent(((IMixinContainer)((EntityPlayer)(Object)this).openContainer).getBukkitView()); if (((IMixinContainer)((EntityPlayer)(Object)this).openContainer).getBukkitView() != null) Bukkit.getServer().getPluginManager().callEvent(event); // Cauldron - allow vanilla mods to bypass } + + @Inject(method = "", at = @At(value = "RETURN")) + public void EntityPlayerInject(World p_i45324_1_, GameProfile p_i45324_2_, CallbackInfo ci) + { + ((IMixinInventoryEnderChest) theInventoryEnderChest).setOwner((EntityPlayer)(Object) this); + } } diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinAnimalChest.java b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinAnimalChest.java new file mode 100644 index 0000000..d197f1c --- /dev/null +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinAnimalChest.java @@ -0,0 +1,24 @@ +package org.ultramine.mods.bukkit.mixin.inventory; + +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.inventory.AnimalChest; +import org.spongepowered.asm.mixin.Mixin; +import org.ultramine.mods.bukkit.interfaces.inventory.IMixinAnimalChest; + +@Mixin(AnimalChest.class) +public class MixinAnimalChest implements IMixinAnimalChest +{ + private EntityAnimal entityAnimal; + + @Override + public EntityAnimal getAnimal() + { + return this.entityAnimal; + } + + @Override + public void setAnimal(EntityAnimal entityAnimal) + { + this.entityAnimal = entityAnimal; + } +} diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerPlayer.java b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerPlayer.java index 873175f..3251f8e 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerPlayer.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerPlayer.java @@ -4,12 +4,10 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCraftResult; import net.minecraft.inventory.InventoryCrafting; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryCrafting; @@ -20,11 +18,9 @@ @Shadow public InventoryCrafting craftMatrix; @Shadow public IInventory craftResult; - @Inject(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/ContainerPlayer;addSlotToContainer(Lnet/minecraft/inventory/Slot;)Lnet/minecraft/inventory/Slot;", ordinal = 0, shift = Shift.BEFORE)) + @Inject(method = "", at = @At(value = "RETURN")) public void ContainerPlayerInject(InventoryPlayer p_i1819_1_, boolean p_i1819_2_, EntityPlayer p_i1819_3_, CallbackInfo ci) { - this.craftResult = new InventoryCraftResult(); // CraftBukkit - moved to before InventoryCrafting construction - this.craftMatrix = new InventoryCrafting((ContainerPlayer) (Object) this, 2, 2); ((IMixinInventoryCrafting) this.craftMatrix).setOwner(p_i1819_1_.player); } } diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerWorkbench.java b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerWorkbench.java index f47d9f3..e494dd3 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerWorkbench.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinContainerWorkbench.java @@ -1,16 +1,13 @@ package org.ultramine.mods.bukkit.mixin.inventory; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.ContainerPlayer; import net.minecraft.inventory.ContainerWorkbench; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCraftResult; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryCrafting; @@ -21,11 +18,9 @@ @Shadow public InventoryCrafting craftMatrix; @Shadow public IInventory craftResult; - @Inject(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/ContainerPlayer;addSlotToContainer(Lnet/minecraft/inventory/Slot;)Lnet/minecraft/inventory/Slot;", ordinal = 0, shift = Shift.BEFORE)) + @Inject(method = "", at = @At(value = "RETURN")) public void ContainerWorkbenchInject(InventoryPlayer p_i1808_1_, World p_i1808_2_, int p_i1808_3_, int p_i1808_4_, int p_i1808_5_, CallbackInfo ci) { - this.craftResult = new InventoryCraftResult(); // CraftBukkit - moved to before InventoryCrafting construction - this.craftMatrix = new InventoryCrafting((ContainerPlayer) (Object) this, 3, 3); ((IMixinInventoryCrafting) this.craftMatrix).setOwner(p_i1808_1_.player); } } diff --git a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinInventoryEnderChest.java b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinInventoryEnderChest.java index af555fb..9a1d2cb 100644 --- a/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinInventoryEnderChest.java +++ b/src/main/java/org/ultramine/mods/bukkit/mixin/inventory/MixinInventoryEnderChest.java @@ -1,27 +1,24 @@ package org.ultramine.mods.bukkit.mixin.inventory; -import jline.internal.Nullable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.InventoryEnderChest; -import net.minecraft.tileentity.TileEntityEnderChest; -import org.bukkit.block.BlockState; -import org.bukkit.inventory.InventoryHolder; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryEnderChest; -import org.ultramine.mods.bukkit.interfaces.world.IMixinWorld; @Mixin(InventoryEnderChest.class) public class MixinInventoryEnderChest implements IMixinInventoryEnderChest { - @Shadow private TileEntityEnderChest associatedChest; + private EntityPlayer inventoryOwner; - @Nullable @Override - public InventoryHolder getOwner() + public EntityPlayer getOwner() { - BlockState state = ((IMixinWorld) associatedChest.getWorldObj()).getWorld().getBlockAt(associatedChest.xCoord, associatedChest.yCoord, associatedChest.zCoord).getState(); - if (state instanceof InventoryHolder) - return (InventoryHolder) state; - return null; + return this.inventoryOwner; + } + + @Override + public void setOwner(EntityPlayer player) + { + this.inventoryOwner = player; } } diff --git a/src/main/java/org/ultramine/mods/bukkit/util/BukkitUtil.java b/src/main/java/org/ultramine/mods/bukkit/util/BukkitUtil.java index 8eeebe4..bdf18ca 100644 --- a/src/main/java/org/ultramine/mods/bukkit/util/BukkitUtil.java +++ b/src/main/java/org/ultramine/mods/bukkit/util/BukkitUtil.java @@ -13,7 +13,6 @@ import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.InventoryEnderChest; import net.minecraft.inventory.InventoryMerchant; -import net.minecraft.item.crafting.IRecipe; import net.minecraft.network.rcon.RConConsoleSource; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; @@ -26,9 +25,11 @@ import org.bukkit.craftbukkit.entity.CraftMinecartCommand; import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; import org.ultramine.mods.bukkit.interfaces.entity.IMixinEntity; +import org.ultramine.mods.bukkit.interfaces.inventory.IMixinAnimalChest; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryCrafting; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryEnderChest; import org.ultramine.mods.bukkit.interfaces.inventory.IMixinInventoryMerchant; @@ -135,13 +136,13 @@ { InventoryBasic inventoryBasic = (InventoryBasic) inventory; if (inventoryBasic instanceof AnimalChest) - return (InventoryHolder) ((IMixinEntity) inventoryBasic).getBukkitEntity(); + return (InventoryHolder) ((IMixinEntity)((IMixinAnimalChest) inventoryBasic).getAnimal()).getBukkitEntity(); else if (inventoryBasic instanceof InventoryEnderChest) - return ((IMixinInventoryEnderChest) inventoryBasic).getOwner(); + return (InventoryHolder) ((IMixinEntity) ((IMixinInventoryEnderChest) inventoryBasic).getOwner()).getBukkitEntity(); } else if (inventory instanceof EntityMinecartContainer) { - org.bukkit.entity.Entity cart = ((IMixinEntity) inventory).getBukkitEntity(); + Entity cart = ((IMixinEntity) inventory).getBukkitEntity(); if (cart instanceof InventoryHolder) return (InventoryHolder) cart; } @@ -152,11 +153,11 @@ } else if (inventory instanceof InventoryCrafting) { - return (InventoryHolder) ((IMixinInventoryCrafting) inventory).getOwner(); + return (InventoryHolder) ((IMixinEntity)((IMixinInventoryCrafting) inventory).getOwner()).getBukkitEntity(); } else if (inventory instanceof InventoryMerchant) { - return (InventoryHolder) ((IMixinInventoryMerchant) inventory).getPlayer(); + return (InventoryHolder) ((IMixinEntity)((IMixinInventoryMerchant) inventory).getPlayer()).getBukkitEntity(); } return null; } diff --git a/src/main/resources/mixin.umbukkitimpl.json b/src/main/resources/mixin.umbukkitimpl.json index b126d53..aea99b6 100644 --- a/src/main/resources/mixin.umbukkitimpl.json +++ b/src/main/resources/mixin.umbukkitimpl.json @@ -69,6 +69,7 @@ "inventory.MixinInventoryCrafting", "inventory.MixinContainerPlayer", "inventory.MixinContainerWorkbench", + "inventory.MixinAnimalChest", "item.MixinItemFlintAndSteel", "item.MixinItemBucket", "item.crafting.MixinShapedRecipes",