Files
2019-02-24 22:29:41 +08:00

146 lines
5.4 KiB
Diff

--- ../src-base/minecraft/net/minecraft/entity/player/InventoryPlayer.java
+++ ../src-work/minecraft/net/minecraft/entity/player/InventoryPlayer.java
@@ -1,5 +1,6 @@
package net.minecraft.entity.player;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@@ -26,6 +27,9 @@
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.entity.CraftHumanEntity;
+import org.bukkit.entity.HumanEntity;
public class InventoryPlayer implements IInventory
{
@@ -37,7 +41,49 @@
public EntityPlayer player;
private ItemStack itemStack;
private int timesChanged;
+ // CraftBukkit start - add fields and methods
+ public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>();
+ private int maxStack = MAX_STACK;
+
+ public List<ItemStack> getContents() {
+ List<ItemStack> combined = new ArrayList<>(mainInventory.size() + armorInventory.size() + offHandInventory.size());
+ for (List<net.minecraft.item.ItemStack> sub : this.allInventories) {
+ combined.addAll(sub);
+ }
+ return combined;
+ }
+
+ public List<ItemStack> getArmorContents() {
+ return this.armorInventory;
+ }
+
+ public void onOpen(CraftHumanEntity who) {
+ transaction.add(who);
+ }
+
+ public void onClose(CraftHumanEntity who) {
+ transaction.remove(who);
+ }
+
+ public List<HumanEntity> getViewers() {
+ return transaction;
+ }
+
+ public org.bukkit.inventory.InventoryHolder getOwner() {
+ return this.player.getBukkitEntity();
+ }
+
+ public void setMaxStackSize(int size) {
+ maxStack = size;
+ }
+
+ @Override
+ public Location getLocation() {
+ return player.getBukkitEntity().getLocation();
+ }
+ // CraftBukkit end
+
public InventoryPlayer(EntityPlayer playerIn)
{
this.allInventories = Arrays.<NonNullList<ItemStack>>asList(this.mainInventory, this.armorInventory, this.offHandInventory);
@@ -65,6 +111,23 @@
return stack1.getItem() == stack2.getItem() && (!stack1.getHasSubtypes() || stack1.getMetadata() == stack2.getMetadata()) && ItemStack.areItemStackTagsEqual(stack1, stack2);
}
+ // CraftBukkit start - Watch method above! :D
+ public int canHold(ItemStack itemstack) {
+ int remains = itemstack.getCount();
+ for (int i = 0; i < this.mainInventory.size(); ++i) {
+ ItemStack itemstack1 = this.getStackInSlot(i);
+ if (itemstack1.isEmpty()) return itemstack.getCount();
+
+ // Taken from firstPartial(ItemStack)
+ if (!itemstack1.isEmpty() && itemstack1.getItem() == itemstack.getItem() && itemstack1.isStackable() && itemstack1.getCount() < itemstack1.getMaxStackSize() && itemstack1.getCount() < this.getInventoryStackLimit() && (!itemstack1.getHasSubtypes() || itemstack1.getMetadata() == itemstack.getMetadata()) && ItemStack.areItemStackTagsEqual(itemstack1, itemstack)) {
+ remains -= (itemstack1.getMaxStackSize() < this.getInventoryStackLimit() ? itemstack1.getMaxStackSize() : this.getInventoryStackLimit()) - itemstack1.getCount();
+ }
+ if (remains <= 0) return itemstack.getCount();
+ }
+ return itemstack.getCount() - remains;
+ }
+ // CraftBukkit end
+
public int getFirstEmptyStack()
{
for (int i = 0; i < this.mainInventory.size(); ++i)
@@ -292,7 +355,8 @@
if (itemstack.isEmpty())
{
- itemstack = new ItemStack(item, 0, p_191973_2_.getMetadata());
+ itemstack = p_191973_2_.copy(); // Forge: Replace Item clone above to preserve item capabilities when picking the item up.
+ itemstack.setCount(0);
if (p_191973_2_.hasTagCompound())
{
@@ -363,6 +427,13 @@
}
}
}
+ for (ItemStack is : armorInventory) // FORGE: Tick armor on animation ticks
+ {
+ if (!is.isEmpty())
+ {
+ is.getItem().onArmorTick(player.world, player, is);
+ }
+ }
}
public boolean addItemStackToInventory(ItemStack itemStackIn)
@@ -444,6 +515,8 @@
CrashReportCategory crashreportcategory = crashreport.makeCategory("Item being added");
crashreportcategory.addCrashSection("Item ID", Integer.valueOf(Item.getIdFromItem(p_191971_2_.getItem())));
crashreportcategory.addCrashSection("Item data", Integer.valueOf(p_191971_2_.getMetadata()));
+ crashreportcategory.addDetail("Registry Name", () -> String.valueOf(p_191971_2_.getItem().getRegistryName()));
+ crashreportcategory.addDetail("Item Class", () -> p_191971_2_.getItem().getClass().getName());
crashreportcategory.addDetail("Item name", new ICrashReportDetail<String>()
{
public String call() throws Exception
@@ -715,7 +788,7 @@
public int getInventoryStackLimit()
{
- return 64;
+ return maxStack;
}
public boolean canHarvestBlock(IBlockState state)
@@ -792,6 +865,9 @@
public ItemStack getItemStack()
{
+ if (this.itemStack.isEmpty()) {
+ this.setItemStack(ItemStack.EMPTY);
+ }
return this.itemStack;
}