Added Item.onDroppedByPlayer hook

This commit is contained in:
LexManos 2011-12-21 07:44:01 +00:00
parent 6e1442e8e6
commit 348a6fe03c
4 changed files with 76 additions and 12 deletions

View file

@ -11,7 +11,25 @@
import java.util.*; import java.util.*;
// Referenced classes of package net.minecraft.src: // Referenced classes of package net.minecraft.src:
@@ -548,6 +552,8 @@ @@ -502,7 +506,16 @@
public void dropCurrentItem()
{
- dropPlayerItemWithRandomChoice(inventory.decrStackSize(inventory.currentItem, 1), false);
+ ItemStack stack = inventory.getCurrentItem();
+ if (stack == null)
+ {
+ return;
+ }
+
+ if (stack.getItem().onDroppedByPlayer(stack, this))
+ {
+ dropPlayerItemWithRandomChoice(inventory.decrStackSize(inventory.currentItem, 1), false);
+ }
}
public void dropPlayerItem(ItemStack itemstack)
@@ -548,6 +561,8 @@
worldObj.entityJoinedWorld(entityitem); worldObj.entityJoinedWorld(entityitem);
} }
@ -20,7 +38,7 @@
public float getCurrentPlayerStrVsBlock(Block block) public float getCurrentPlayerStrVsBlock(Block block)
{ {
float f = inventory.getStrVsBlock(block); float f = inventory.getStrVsBlock(block);
@@ -576,6 +582,45 @@ @@ -576,6 +591,45 @@
return f1; return f1;
} }
@ -66,7 +84,7 @@
public boolean canHarvestBlock(Block block) public boolean canHarvestBlock(Block block)
{ {
return inventory.canHarvestBlock(block); return inventory.canHarvestBlock(block);
@@ -774,6 +819,25 @@ @@ -774,6 +828,25 @@
protected void damageEntity(DamageSource damagesource, int i) protected void damageEntity(DamageSource damagesource, int i)
{ {
@ -92,7 +110,7 @@
if(!damagesource.unblockable() && func_35162_ad()) if(!damagesource.unblockable() && func_35162_ad())
{ {
i = 1 + i >> 1; i = 1 + i >> 1;
@@ -825,7 +889,9 @@ @@ -825,7 +898,9 @@
public void destroyCurrentEquippedItem() public void destroyCurrentEquippedItem()
{ {
@ -102,7 +120,7 @@
} }
public double getYOffset() public double getYOffset()
@@ -957,6 +1023,10 @@ @@ -957,6 +1032,10 @@
public EnumStatus sleepInBedAt(int i, int j, int k) public EnumStatus sleepInBedAt(int i, int j, int k)
{ {

View file

@ -77,7 +77,7 @@
public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
{ {
return false; return false;
@@ -473,6 +515,18 @@ @@ -473,6 +515,32 @@
{ {
return 0; return 0;
} }
@ -92,6 +92,20 @@
+ { + {
+ itemList.add(new ItemStack(this, 1)); + itemList.add(new ItemStack(this, 1));
+ } + }
+ }
+
+ /**
+ * Called when a player drops the item into the world,
+ * returning false from this will prevent the item from
+ * being removed from the players inventory and spawning
+ * in the world
+ *
+ * @param player The player that dropped the item
+ * @param item The item stack, before the item is removed.
+ */
+ public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player)
+ {
+ return true;
+ } + }
static static

View file

@ -11,7 +11,25 @@
// Referenced classes of package net.minecraft.src: // Referenced classes of package net.minecraft.src:
// EntityLiving, InventoryPlayer, FoodStats, PlayerCapabilities, // EntityLiving, InventoryPlayer, FoodStats, PlayerCapabilities,
// ContainerPlayer, World, ChunkCoordinates, DataWatcher, // ContainerPlayer, World, ChunkCoordinates, DataWatcher,
@@ -493,6 +497,8 @@ @@ -447,7 +451,16 @@
public void dropCurrentItem()
{
- dropPlayerItemWithRandomChoice(inventory.decrStackSize(inventory.currentItem, 1), false);
+ ItemStack stack = inventory.getCurrentItem();
+ if (stack == null)
+ {
+ return;
+ }
+
+ if (stack.getItem().onDroppedByPlayer(stack, this))
+ {
+ dropPlayerItemWithRandomChoice(inventory.decrStackSize(inventory.currentItem, 1), false);
+ }
}
public void dropPlayerItem(ItemStack itemstack)
@@ -493,6 +506,8 @@
worldObj.entityJoinedWorld(entityitem); worldObj.entityJoinedWorld(entityitem);
} }
@ -20,7 +38,7 @@
public float getCurrentPlayerStrVsBlock(Block block) public float getCurrentPlayerStrVsBlock(Block block)
{ {
float f = inventory.getStrVsBlock(block); float f = inventory.getStrVsBlock(block);
@@ -521,6 +527,45 @@ @@ -521,6 +536,45 @@
return f1; return f1;
} }
@ -66,7 +84,7 @@
public boolean canHarvestBlock(Block block) public boolean canHarvestBlock(Block block)
{ {
return inventory.canHarvestBlock(block); return inventory.canHarvestBlock(block);
@@ -718,7 +763,26 @@ @@ -718,7 +772,26 @@
} }
protected void damageEntity(DamageSource damagesource, int i) protected void damageEntity(DamageSource damagesource, int i)
@ -94,7 +112,7 @@
if(!damagesource.unblockable() && func_35180_G()) if(!damagesource.unblockable() && func_35180_G())
{ {
i = 1 + i >> 1; i = 1 + i >> 1;
@@ -770,7 +834,9 @@ @@ -770,7 +843,9 @@
public void destroyCurrentEquippedItem() public void destroyCurrentEquippedItem()
{ {
@ -104,7 +122,7 @@
} }
public double getYOffset() public double getYOffset()
@@ -896,6 +962,10 @@ @@ -896,6 +971,10 @@
public EnumStatus sleepInBedAt(int i, int j, int k) public EnumStatus sleepInBedAt(int i, int j, int k)
{ {

View file

@ -77,7 +77,7 @@
public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1)
{ {
return false; return false;
@@ -414,6 +456,12 @@ @@ -414,6 +456,26 @@
return 0; return 0;
} }
@ -86,6 +86,20 @@
+ public void addCreativeItems(ArrayList itemList) + public void addCreativeItems(ArrayList itemList)
+ { + {
+ } + }
+
+ /**
+ * Called when a player drops the item into the world,
+ * returning false from this will prevent the item from
+ * being removed from the players inventory and spawning
+ * in the world
+ *
+ * @param player The player that dropped the item
+ * @param item The item stack, before the item is removed.
+ */
+ public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player)
+ {
+ return true;
+ }
+ +
static static
{ {