Merge pull request #792 from Eurymachus/opencontainer
Added PlayerOpenContainerEvent and added ForgeHooks.canInteractWith
This commit is contained in:
commit
fc1089713f
4 changed files with 57 additions and 0 deletions
|
@ -11,6 +11,7 @@ import net.minecraft.entity.EntityLiving;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.inventory.Container;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemArmor;
|
import net.minecraft.item.ItemArmor;
|
||||||
import net.minecraft.item.ItemAxe;
|
import net.minecraft.item.ItemAxe;
|
||||||
|
@ -27,6 +28,7 @@ import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.util.WeightedRandom;
|
import net.minecraft.util.WeightedRandom;
|
||||||
import net.minecraft.util.WeightedRandomItem;
|
import net.minecraft.util.WeightedRandomItem;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.event.Event;
|
||||||
import net.minecraftforge.event.ForgeEventFactory;
|
import net.minecraftforge.event.ForgeEventFactory;
|
||||||
import net.minecraftforge.event.ServerChatEvent;
|
import net.minecraftforge.event.ServerChatEvent;
|
||||||
import net.minecraftforge.event.entity.item.ItemTossEvent;
|
import net.minecraftforge.event.entity.item.ItemTossEvent;
|
||||||
|
@ -38,6 +40,7 @@ import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingFallEvent;
|
import net.minecraftforge.event.entity.living.LivingFallEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
import net.minecraftforge.event.entity.living.LivingHurtEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent;
|
import net.minecraftforge.event.entity.living.LivingSetAttackTargetEvent;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerOpenContainerEvent;
|
||||||
|
|
||||||
public class ForgeHooks
|
public class ForgeHooks
|
||||||
{
|
{
|
||||||
|
@ -430,4 +433,11 @@ public class ForgeHooks
|
||||||
}
|
}
|
||||||
return event.component;
|
return event.component;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean canInteractWith(EntityPlayer player, Container openContainer)
|
||||||
|
{
|
||||||
|
PlayerOpenContainerEvent event = new PlayerOpenContainerEvent(player, openContainer);
|
||||||
|
MinecraftForge.EVENT_BUS.post(event);
|
||||||
|
return event.getResult() == Event.Result.DEFAULT ? event.canInteractWith : event.getResult() == Event.Result.ALLOW ? true : false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package net.minecraftforge.event.entity.player;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.inventory.Container;
|
||||||
|
import net.minecraftforge.event.Event.HasResult;
|
||||||
|
|
||||||
|
@HasResult
|
||||||
|
public class PlayerOpenContainerEvent extends PlayerEvent
|
||||||
|
{
|
||||||
|
|
||||||
|
public final boolean canInteractWith;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This event is fired when a player attempts to view a container during
|
||||||
|
* player tick.
|
||||||
|
*
|
||||||
|
* setResult ALLOW to allow the container to stay open
|
||||||
|
* setResult DENY to force close the container (denying access)
|
||||||
|
*
|
||||||
|
* DEFAULT is vanilla behaviour
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public PlayerOpenContainerEvent(EntityPlayer player, Container openContainer)
|
||||||
|
{
|
||||||
|
super(player);
|
||||||
|
this.canInteractWith = openContainer.canInteractWith(player);
|
||||||
|
}
|
||||||
|
}
|
|
@ -64,6 +64,15 @@
|
||||||
if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0)
|
if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0)
|
||||||
{
|
{
|
||||||
this.updateItemUse(itemstack, 5);
|
this.updateItemUse(itemstack, 5);
|
||||||
|
@@ -321,7 +341,7 @@
|
||||||
|
|
||||||
|
super.onUpdate();
|
||||||
|
|
||||||
|
- if (!this.worldObj.isRemote && this.openContainer != null && !this.openContainer.canInteractWith(this))
|
||||||
|
+ if (!this.worldObj.isRemote && this.openContainer != null && !ForgeHooks.canInteractWith(this, this.openContainer))
|
||||||
|
{
|
||||||
|
this.closeScreen();
|
||||||
|
this.openContainer = this.inventoryContainer;
|
||||||
@@ -429,7 +449,7 @@
|
@@ -429,7 +449,7 @@
|
||||||
vec31.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F);
|
vec31.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F);
|
||||||
vec31.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F);
|
vec31.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F);
|
||||||
|
|
|
@ -45,6 +45,15 @@
|
||||||
/**
|
/**
|
||||||
* Called to update the entity's position/logic.
|
* Called to update the entity's position/logic.
|
||||||
*/
|
*/
|
||||||
|
@@ -254,7 +247,7 @@
|
||||||
|
--this.initialInvulnerability;
|
||||||
|
this.openContainer.detectAndSendChanges();
|
||||||
|
|
||||||
|
- if (!this.worldObj.isRemote && !this.openContainer.canInteractWith(this))
|
||||||
|
+ if (!this.worldObj.isRemote && !ForgeHooks.canInteractWith(this, this.openContainer))
|
||||||
|
{
|
||||||
|
this.closeScreen();
|
||||||
|
this.openContainer = this.inventoryContainer;
|
||||||
@@ -290,7 +283,10 @@
|
@@ -290,7 +283,10 @@
|
||||||
if (chunkcoordintpair != null && this.worldObj.blockExists(chunkcoordintpair.chunkXPos << 4, 0, chunkcoordintpair.chunkZPos << 4))
|
if (chunkcoordintpair != null && this.worldObj.blockExists(chunkcoordintpair.chunkXPos << 4, 0, chunkcoordintpair.chunkZPos << 4))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue