New EntityInteract hook for handeling player vs entity interaction on the global level vs the item level.
This commit is contained in:
parent
09725ae326
commit
0c39a7cbfd
|
@ -184,6 +184,19 @@ public class ForgeHooks
|
||||||
}
|
}
|
||||||
static LinkedList<IChunkLoadHandler> chunkLoadHandlers = new LinkedList<IChunkLoadHandler>();
|
static LinkedList<IChunkLoadHandler> chunkLoadHandlers = new LinkedList<IChunkLoadHandler>();
|
||||||
|
|
||||||
|
public static boolean onEntityInteract(EntityPlayer player, Entity entity, boolean isAttack)
|
||||||
|
{
|
||||||
|
for (IEntityInteractHandler handler : entityInteractHandlers)
|
||||||
|
{
|
||||||
|
if (!handler.onEntityInteract(player, entity, isAttack))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
static LinkedList<IEntityInteractHandler> entityInteractHandlers = new LinkedList<IEntityInteractHandler>();
|
||||||
|
|
||||||
// Plant Management
|
// Plant Management
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
static class ProbableItem
|
static class ProbableItem
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/**
|
||||||
|
* This software is provided under the terms of the Minecraft Forge Public
|
||||||
|
* License v1.0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.minecraft.src.forge;
|
||||||
|
|
||||||
|
import net.minecraft.src.EntityPlayer;
|
||||||
|
import net.minecraft.src.Entity;
|
||||||
|
|
||||||
|
public interface IEntityInteractHandler
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This is called before a player attacks, or interacts {left or right click by default}
|
||||||
|
* with another entity. Before any damage, or other interaction code is run.
|
||||||
|
* In multiplayer, this is called by both the client and the server.
|
||||||
|
*
|
||||||
|
* @param player The player doing the interacting
|
||||||
|
* @param entity The entity being interacted with
|
||||||
|
* @param isAttack True if it is a attack {left click} false if it is a interact {right click}
|
||||||
|
* @return True to continue processing, false to cancel.
|
||||||
|
*/
|
||||||
|
public boolean onEntityInteract(EntityPlayer player, Entity entity, boolean isAttack);
|
||||||
|
}
|
|
@ -111,6 +111,15 @@ public class MinecraftForge
|
||||||
ForgeHooks.pickupHandlers.add(handler);
|
ForgeHooks.pickupHandlers.add(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a new entity interact handler.
|
||||||
|
* @param handler The Handler to be registered
|
||||||
|
*/
|
||||||
|
public static void registerEntityInteractHandler(IEntityInteractHandler handler)
|
||||||
|
{
|
||||||
|
ForgeHooks.entityInteractHandlers.add(handler);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is not supposed to be called outside of Minecraft internals.
|
* This is not supposed to be called outside of Minecraft internals.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -73,7 +73,18 @@
|
||||||
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
|
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
|
||||||
this.addExhaustion(par1DamageSource.getHungerDamage());
|
this.addExhaustion(par1DamageSource.getHungerDamage());
|
||||||
this.health -= par2;
|
this.health -= par2;
|
||||||
@@ -1034,7 +1058,9 @@
|
@@ -1004,6 +1028,10 @@
|
||||||
|
*/
|
||||||
|
public void useCurrentItemOnEntity(Entity par1Entity)
|
||||||
|
{
|
||||||
|
+ if (!ForgeHooks.onEntityInteract(this, par1Entity, false))
|
||||||
|
+ {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (!par1Entity.interact(this))
|
||||||
|
{
|
||||||
|
ItemStack var2 = this.getCurrentEquippedItem();
|
||||||
|
@@ -1034,7 +1062,9 @@
|
||||||
*/
|
*/
|
||||||
public void destroyCurrentEquippedItem()
|
public void destroyCurrentEquippedItem()
|
||||||
{
|
{
|
||||||
|
@ -83,10 +94,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1063,6 +1089,11 @@
|
@@ -1063,6 +1093,15 @@
|
||||||
*/
|
*/
|
||||||
public void attackTargetEntityWithCurrentItem(Entity par1Entity)
|
public void attackTargetEntityWithCurrentItem(Entity par1Entity)
|
||||||
{
|
{
|
||||||
|
+ if (!ForgeHooks.onEntityInteract(this, par1Entity, true))
|
||||||
|
+ {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
+ ItemStack stack = getCurrentEquippedItem();
|
+ ItemStack stack = getCurrentEquippedItem();
|
||||||
+ if (stack != null && stack.getItem().onLeftClickEntity(stack, this, par1Entity))
|
+ if (stack != null && stack.getItem().onLeftClickEntity(stack, this, par1Entity))
|
||||||
+ {
|
+ {
|
||||||
|
@ -95,7 +110,7 @@
|
||||||
if (par1Entity.canAttackWithItem())
|
if (par1Entity.canAttackWithItem())
|
||||||
{
|
{
|
||||||
int var2 = this.inventory.getDamageVsEntity(par1Entity);
|
int var2 = this.inventory.getDamageVsEntity(par1Entity);
|
||||||
@@ -1205,6 +1236,12 @@
|
@@ -1205,6 +1244,12 @@
|
||||||
*/
|
*/
|
||||||
public EnumStatus sleepInBedAt(int par1, int par2, int par3)
|
public EnumStatus sleepInBedAt(int par1, int par2, int par3)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +123,7 @@
|
||||||
if (!this.worldObj.isRemote)
|
if (!this.worldObj.isRemote)
|
||||||
{
|
{
|
||||||
if (this.isPlayerSleeping() || !this.isEntityAlive())
|
if (this.isPlayerSleeping() || !this.isEntityAlive())
|
||||||
@@ -1687,6 +1724,7 @@
|
@@ -1687,6 +1732,7 @@
|
||||||
return 101;
|
return 101;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -116,7 +131,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
return var3;
|
return var3;
|
||||||
@@ -1857,4 +1895,30 @@
|
@@ -1857,4 +1903,30 @@
|
||||||
{
|
{
|
||||||
return !this.capabilities.isFlying;
|
return !this.capabilities.isFlying;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,18 @@
|
||||||
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
|
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
|
||||||
this.addExhaustion(par1DamageSource.getHungerDamage());
|
this.addExhaustion(par1DamageSource.getHungerDamage());
|
||||||
this.health -= par2;
|
this.health -= par2;
|
||||||
@@ -960,7 +990,9 @@
|
@@ -930,6 +960,10 @@
|
||||||
|
*/
|
||||||
|
public void useCurrentItemOnEntity(Entity par1Entity)
|
||||||
|
{
|
||||||
|
+ if (!ForgeHooks.onEntityInteract(this, par1Entity, false))
|
||||||
|
+ {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
if (!par1Entity.interact(this))
|
||||||
|
{
|
||||||
|
ItemStack var2 = this.getCurrentEquippedItem();
|
||||||
|
@@ -960,7 +994,9 @@
|
||||||
*/
|
*/
|
||||||
public void destroyCurrentEquippedItem()
|
public void destroyCurrentEquippedItem()
|
||||||
{
|
{
|
||||||
|
@ -91,10 +102,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -989,6 +1021,12 @@
|
@@ -989,6 +1025,16 @@
|
||||||
*/
|
*/
|
||||||
public void attackTargetEntityWithCurrentItem(Entity par1Entity)
|
public void attackTargetEntityWithCurrentItem(Entity par1Entity)
|
||||||
{
|
{
|
||||||
|
+ if (!ForgeHooks.onEntityInteract(this, par1Entity, true))
|
||||||
|
+ {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
+ ItemStack stack = getCurrentEquippedItem();
|
+ ItemStack stack = getCurrentEquippedItem();
|
||||||
+ if (stack != null && stack.getItem().onLeftClickEntity(stack, this, par1Entity))
|
+ if (stack != null && stack.getItem().onLeftClickEntity(stack, this, par1Entity))
|
||||||
+ {
|
+ {
|
||||||
|
@ -104,7 +119,7 @@
|
||||||
if (par1Entity.canAttackWithItem())
|
if (par1Entity.canAttackWithItem())
|
||||||
{
|
{
|
||||||
int var2 = this.inventory.getDamageVsEntity(par1Entity);
|
int var2 = this.inventory.getDamageVsEntity(par1Entity);
|
||||||
@@ -1127,6 +1165,12 @@
|
@@ -1127,6 +1173,12 @@
|
||||||
*/
|
*/
|
||||||
public EnumStatus sleepInBedAt(int par1, int par2, int par3)
|
public EnumStatus sleepInBedAt(int par1, int par2, int par3)
|
||||||
{
|
{
|
||||||
|
@ -117,7 +132,7 @@
|
||||||
if (!this.worldObj.isRemote)
|
if (!this.worldObj.isRemote)
|
||||||
{
|
{
|
||||||
if (this.isPlayerSleeping() || !this.isEntityAlive())
|
if (this.isPlayerSleeping() || !this.isEntityAlive())
|
||||||
@@ -1708,4 +1752,16 @@
|
@@ -1708,4 +1760,16 @@
|
||||||
{
|
{
|
||||||
return !this.capabilities.isFlying;
|
return !this.capabilities.isFlying;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue