New EntityItem related events

Fixed player death event in SMP
Added Player specific drops event
Added generic EntityJoinWorldEvent
This commit is contained in:
LexManos 2012-09-11 15:27:34 -07:00
parent da501613ac
commit 03d1e51764
13 changed files with 417 additions and 55 deletions

View file

@ -51,6 +51,7 @@ public aji.k # worldObj
public ain.c # graphicsLevel
# Item
public rh.e(I)Lrh; # setMaxDamage
public-f rh.f(Lrj;)I # getIconIndex
# ItemAxe
public rf.<init>()V # constructor
# ItemPickaxe
@ -58,3 +59,7 @@ public rq.<init>()V # constructor
# RailLogic
public ahi
public ahi.a(Lahi;)I # getNAdjacentTiles
#EntityPlayer
public og.a(Lnj;)V # joinEntityItemWithWorld
#EntityPlayerMP
public atg.a(Lnj;)V # joinEntityItemWithWorld

View file

@ -5,6 +5,7 @@ import java.util.*;
import cpw.mods.fml.common.FMLLog;
import net.minecraft.src.*;
import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.event.entity.living.LivingEvent.*;
@ -338,4 +339,21 @@ public class ForgeHooks
{
MinecraftForge.EVENT_BUS.post(new LivingJumpEvent(entity));
}
public static EntityItem onPlayerTossEvent(EntityPlayer player, ItemStack item)
{
player.captureDrops = true;
EntityItem ret = player.dropPlayerItemWithRandomChoice(item, false);
player.capturedDrops.clear();
player.captureDrops = false;
ItemTossEvent event = new ItemTossEvent(ret, player);
if (MinecraftForge.EVENT_BUS.post(event))
{
return null;
}
player.joinEntityItemWithWorld(event.entityItem);
return event.entityItem;
}
}

View file

@ -0,0 +1,16 @@
package net.minecraftforge.event.entity;
import net.minecraft.src.Entity;
import net.minecraft.src.World;
public class EntityJoinWorldEvent extends EntityEvent
{
public final World world;
public EntityJoinWorldEvent(Entity entity, World world)
{
super(entity);
this.world = world;
}
}

View file

@ -0,0 +1,29 @@
package net.minecraftforge.event.entity.item;
import net.minecraft.src.EntityItem;
import net.minecraftforge.event.entity.EntityEvent;
/**
* Base class for all EntityItem events. Contains a reference to the
* EntityItem of interest. For most EntityItem events, there's little to no
* additional useful data from the firing method that isn't already contained
* within the EntityItem instance.
*/
public class ItemEvent extends EntityEvent
{
/**
* The relevant EntityItem for this event, already cast for you.
*/
public final EntityItem entityItem;
/**
* Creates a new event for an EntityItem.
*
* @param itemEntity The EntityItem for this event
*/
public ItemEvent(EntityItem itemEntity)
{
super(itemEntity);
this.entityItem = itemEntity;
}
}

View file

@ -0,0 +1,30 @@
package net.minecraftforge.event.entity.item;
import net.minecraft.src.EntityItem;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.entity.EntityEvent;
/**
* Event that is fired when an EntityItem's age has reached its maximum
* lifespan. Canceling this event will prevent the EntityItem from being
* flagged as dead, thus staying it's removal from the world. If canceled
* it will add more time to the entitie's life equal to extraLife.
*/
@Cancelable
public class ItemExpireEvent extends ItemEvent
{
public int extraLife;
/**
* Creates a new event for an expiring EntityItem.
*
* @param entityItem The EntityItem being deleted.
* @param extraLife The amount of time to be added to this entities lifespan if the event is canceled.
*/
public ItemExpireEvent(EntityItem entityItem, int extraLife)
{
super(entityItem);
this.extraLife = extraLife;
}
}

View file

@ -0,0 +1,34 @@
package net.minecraftforge.event.entity.item;
import net.minecraft.src.EntityItem;
import net.minecraft.src.EntityPlayer;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.entity.EntityEvent;
/**
* Event that is fired whenever a player tosses (Q) an item or drag-n-drops a
* stack of items outside the inventory GUI screens. Canceling the event will
* stop the items from entering the world, but will not prevent them being
* removed from the inventory - and thus removed from the system.
*/
@Cancelable
public class ItemTossEvent extends ItemEvent
{
/**
* The player tossing the item.
*/
public final EntityPlayer player;
/**
* Creates a new event for EntityItems tossed by a player.
*
* @param entityItem The EntityItem being tossed.
* @param player The player tossing the item.
*/
public ItemTossEvent(EntityItem entityItem, EntityPlayer player)
{
super(entityItem);
this.player = player;
}
}

View file

@ -0,0 +1,35 @@
package net.minecraftforge.event.entity.player;
import java.util.ArrayList;
import net.minecraft.src.*;
import net.minecraftforge.event.Cancelable;
import net.minecraftforge.event.entity.living.LivingDropsEvent;
/**
* Child class of LivingDropEvent that is fired specifically when a
* player dies. Canceling the event will prevent ALL drops from entering the
* world.
*/
@Cancelable
public class PlayerDropsEvent extends LivingDropsEvent
{
public final EntityPlayer entityPlayer;
/**
* Creates a new event containing all the items that will drop into the
* world when a player dies.
* @param entity The dying player.
* @param source The source of the damage which is killing the player.
* @param drops List of all drops entering the world.
*/
public PlayerDropsEvent(EntityPlayer entity, DamageSource source, ArrayList<EntityItem> drops, boolean recentlyHit)
{
super(entity, source, drops,
(source.getEntity() instanceof EntityPlayer) ?
EnchantmentHelper.getLootingModifier(((EntityPlayer)source.getEntity()).inventory) : 0,
recentlyHit, 0);
this.entityPlayer = entity;
}
}

View file

@ -15,8 +15,8 @@
public EnumEntitySize myEntitySize;
+ /** Forge: Used to store custom data for each entity. */
+ private NBTTagCompound customEntityData;
+ protected boolean captureDrops = false;
+ protected ArrayList<EntityItem> capturedDrops = new ArrayList<EntityItem>();
+ public boolean captureDrops = false;
+ public ArrayList<EntityItem> capturedDrops = new ArrayList<EntityItem>();
public Entity(World par1World)
{

View file

@ -1,28 +1,67 @@
--- ../src_base/common/net/minecraft/src/EntityItem.java
+++ ../src_work/common/net/minecraft/src/EntityItem.java
@@ -1,6 +1,9 @@
@@ -1,6 +1,10 @@
package net.minecraft.src;
import java.util.Iterator;
+
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.item.ItemExpireEvent;
+import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import cpw.mods.fml.common.registry.GameRegistry;
@@ -122,6 +125,11 @@
@@ -20,6 +24,11 @@
/** The EntityItem's random initial float height. */
public float hoverStart = (float)(Math.random() * Math.PI * 2.0D);
+
+ /**
+ * The maximum age of this EntityItem. The item is expired once this is reached.
+ */
+ public int lifespan = 6000;
public EntityItem(World par1World, double par2, double par4, double par6, ItemStack par8ItemStack)
{
@@ -32,6 +41,7 @@
this.motionX = (double)((float)(Math.random() * 0.20000000298023224D - 0.10000000149011612D));
this.motionY = 0.20000000298023224D;
this.motionZ = (double)((float)(Math.random() * 0.20000000298023224D - 0.10000000149011612D));
+ this.lifespan = (par8ItemStack.getItem() == null ? 6000 : par8ItemStack.getItem().getEntityLifespan(par8ItemStack, par1World));
}
/**
@@ -118,7 +128,20 @@
++this.age;
- if (this.age >= 6000)
+ if (this.age >= lifespan)
+ {
+ ItemExpireEvent event = new ItemExpireEvent(this, (item.getItem() == null ? 6000 : item.getItem().getEntityLifespan(item, worldObj)));
+ if (MinecraftForge.EVENT_BUS.post(event))
+ {
+ lifespan += event.extraLife;
+ }
+ else
+ {
+ this.setDead();
+ }
+ }
+
+ if (this.item == null || this.item.stackSize <= 0)
{
this.setDead();
}
+
+ if (this.item == null || this.item.stackSize <= 0)
+ {
+ this.setDead();
+ }
}
@@ -208,6 +231,7 @@
{
par1NBTTagCompound.setShort("Health", (short)((byte)this.health));
par1NBTTagCompound.setShort("Age", (short)this.age);
+ par1NBTTagCompound.setInteger("Lifespan", lifespan);
public boolean func_70289_a(EntityItem par1EntityItem)
@@ -225,7 +233,7 @@
if (this.item != null)
{
@@ -225,10 +249,15 @@
NBTTagCompound var2 = par1NBTTagCompound.getCompoundTag("Item");
this.item = ItemStack.loadItemStackFromNBT(var2);
@ -31,7 +70,15 @@
{
this.setDead();
}
@@ -238,9 +246,21 @@
+
+ if (par1NBTTagCompound.hasKey("Lifespan"))
+ {
+ lifespan = par1NBTTagCompound.getInteger("Lifespan");
+ }
}
/**
@@ -238,9 +267,21 @@
{
if (!this.worldObj.isRemote)
{

View file

@ -1,6 +1,6 @@
--- ../src_base/common/net/minecraft/src/EntityPlayer.java
+++ ../src_work/common/net/minecraft/src/EntityPlayer.java
@@ -7,6 +7,15 @@
@@ -7,6 +7,16 @@
import java.util.Iterator;
import java.util.List;
@ -12,11 +12,12 @@
+import net.minecraftforge.event.entity.player.AttackEntityEvent;
+import net.minecraftforge.event.entity.player.EntityInteractEvent;
+import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
+import net.minecraftforge.event.entity.player.PlayerDropsEvent;
+import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
public abstract class EntityPlayer extends EntityLiving implements ICommandSender
{
@@ -222,6 +231,7 @@
@@ -222,6 +232,7 @@
if (var1 == this.itemInUse)
{
@ -24,7 +25,36 @@
if (this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0)
{
this.updateItemUse(var1, 5);
@@ -627,7 +637,16 @@
@@ -574,12 +585,28 @@
this.setPosition(this.posX, this.posY, this.posZ);
this.motionY = 0.10000000149011612D;
+ captureDrops = true;
+ capturedDrops.clear();
+
if (this.username.equals("Notch"))
{
this.dropPlayerItemWithRandomChoice(new ItemStack(Item.appleRed, 1), true);
}
this.inventory.dropAllItems();
+ captureDrops = false;
+
+ if (!worldObj.isRemote)
+ {
+ PlayerDropsEvent event = new PlayerDropsEvent(this, par1DamageSource, capturedDrops, recentlyHit > 0);
+ if (!MinecraftForge.EVENT_BUS.post(event))
+ {
+ for (EntityItem item : capturedDrops)
+ {
+ joinEntityItemWithWorld(item);
+ }
+ }
+ }
if (par1DamageSource != null)
{
@@ -627,7 +654,16 @@
*/
public EntityItem dropOneItem()
{
@ -36,18 +66,40 @@
+ }
+ if (stack.getItem().onDroppedByPlayer(stack, this))
+ {
+ return dropPlayerItemWithRandomChoice(inventory.decrStackSize(inventory.currentItem, 1), false);
+ return ForgeHooks.onPlayerTossEvent(this, inventory.decrStackSize(inventory.currentItem, 1));
+ }
+ return null;
}
/**
@@ -693,13 +712,21 @@
@@ -636,7 +672,7 @@
*/
public EntityItem dropPlayerItem(ItemStack par1ItemStack)
{
- return this.dropPlayerItemWithRandomChoice(par1ItemStack, false);
+ return ForgeHooks.onPlayerTossEvent(this, par1ItemStack);
}
/**
@@ -688,18 +724,33 @@
*/
protected void joinEntityItemWithWorld(EntityItem par1EntityItem)
{
- this.worldObj.spawnEntityInWorld(par1EntityItem);
+ if (captureDrops)
+ {
+ capturedDrops.add(par1EntityItem);
+ }
+ else
+ {
+ this.worldObj.spawnEntityInWorld(par1EntityItem);
+ }
}
/**
* Returns how strong the player is against the specified block at this moment
- */
+ * Deprecated in favor of the moresensitive version
+ * Deprecated in favor of the more sensitive version
+ */
+ @Deprecated
public float getCurrentPlayerStrVsBlock(Block par1Block)
@ -67,7 +119,7 @@
{
var2 += (float)(var3 * var3 + 1);
}
@@ -992,12 +1019,23 @@
@@ -992,12 +1043,23 @@
*/
protected void damageEntity(DamageSource par1DamageSource, int par2)
{
@ -92,7 +144,7 @@
par2 = this.applyPotionDamageCalculations(par1DamageSource, par2);
this.addExhaustion(par1DamageSource.getHungerDamage());
this.health -= par2;
@@ -1032,6 +1070,10 @@
@@ -1032,6 +1094,10 @@
public boolean interactWith(Entity par1Entity)
{
@ -103,7 +155,7 @@
if (par1Entity.interact(this))
{
return true;
@@ -1075,7 +1117,9 @@
@@ -1075,7 +1141,9 @@
*/
public void destroyCurrentEquippedItem()
{
@ -113,7 +165,7 @@
}
/**
@@ -1104,6 +1148,15 @@
@@ -1104,6 +1172,15 @@
*/
public void attackTargetEntityWithCurrentItem(Entity par1Entity)
{
@ -129,7 +181,7 @@
if (par1Entity.canAttackWithItem())
{
int var2 = this.inventory.getDamageVsEntity(par1Entity);
@@ -1247,6 +1300,12 @@
@@ -1247,6 +1324,12 @@
*/
public EnumStatus sleepInBedAt(int par1, int par2, int par3)
{
@ -142,7 +194,7 @@
if (!this.worldObj.isRemote)
{
if (this.isPlayerSleeping() || !this.isEntityAlive())
@@ -1286,6 +1345,11 @@
@@ -1286,6 +1369,11 @@
{
int var9 = this.worldObj.getBlockMetadata(par1, par2, par3);
int var5 = BlockBed.getDirection(var9);
@ -154,7 +206,7 @@
float var10 = 0.5F;
float var7 = 0.5F;
@@ -1356,10 +1420,12 @@
@@ -1356,10 +1444,12 @@
ChunkCoordinates var4 = this.playerLocation;
ChunkCoordinates var5 = this.playerLocation;
@ -171,7 +223,7 @@
if (var5 == null)
{
@@ -1396,7 +1462,9 @@
@@ -1396,7 +1486,9 @@
*/
private boolean isInBed()
{
@ -182,7 +234,7 @@
}
/**
@@ -1411,13 +1479,15 @@
@@ -1411,13 +1503,15 @@
var2.loadChunk(par1ChunkCoordinates.posX - 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4);
var2.loadChunk(par1ChunkCoordinates.posX + 3 >> 4, par1ChunkCoordinates.posZ + 3 >> 4);
@ -200,7 +252,7 @@
return var3;
}
}
@@ -1431,8 +1501,11 @@
@@ -1431,8 +1525,11 @@
{
if (this.playerLocation != null)
{
@ -214,7 +266,7 @@
switch (var2)
{
@@ -1725,6 +1798,7 @@
@@ -1725,6 +1822,7 @@
return 101;
}
}

View file

@ -0,0 +1,40 @@
--- ../src_base/common/net/minecraft/src/EntityPlayerMP.java
+++ ../src_work/common/net/minecraft/src/EntityPlayerMP.java
@@ -8,6 +8,9 @@
import java.util.LinkedList;
import java.util.List;
import net.minecraft.server.MinecraftServer;
+import net.minecraftforge.common.ForgeHooks;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.PlayerDropsEvent;
public class EntityPlayerMP extends EntityPlayer implements ICrafting
{
@@ -329,8 +332,27 @@
*/
public void onDeath(DamageSource par1DamageSource)
{
+ if (ForgeHooks.onLivingDeath(this, par1DamageSource))
+ {
+ return;
+ }
+
this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet3Chat(par1DamageSource.getDeathMessage(this)));
+
+ captureDrops = true;
+ capturedDrops.clear();
+
this.inventory.dropAllItems();
+
+ captureDrops = false;
+ PlayerDropsEvent event = new PlayerDropsEvent(this, par1DamageSource, capturedDrops, recentlyHit > 0);
+ if (!MinecraftForge.EVENT_BUS.post(event))
+ {
+ for (EntityItem item : capturedDrops)
+ {
+ joinEntityItemWithWorld(item);
+ }
+ }
}
/**

View file

@ -37,7 +37,7 @@
Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21);
return par1World.rayTraceBlocks_do_do(var13, var23, par3, !par3);
}
@@ -650,4 +662,199 @@
@@ -650,4 +662,212 @@
{
StatList.initStats();
}
@ -235,5 +235,18 @@
+ return null;
+ }
+ return new ItemStack(getContainerItem());
+ }
+
+ /**
+ * Retrieves the normal 'lifespan' of this item when it is dropped on the ground as a EntityItem.
+ * This is in ticks, standard result is 6000, or 5 mins.
+ *
+ * @param itemStack The current ItemStack
+ * @param world The world the entity is in
+ * @return The normal lifespan in ticks.
+ */
+ public int getEntityLifespan(ItemStack itemStack, World world)
+ {
+ return 6000;
+ }
}

View file

@ -1,12 +1,13 @@
--- ../src_base/common/net/minecraft/src/World.java
+++ ../src_work/common/net/minecraft/src/World.java
@@ -10,8 +10,21 @@
@@ -10,8 +10,22 @@
import java.util.Random;
import java.util.Set;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.common.ForgeDirection;
+import net.minecraftforge.event.entity.EntityEvent;
+import net.minecraftforge.event.entity.EntityJoinWorldEvent;
+import net.minecraftforge.event.world.WorldEvent;
+import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
+
@ -22,7 +23,7 @@
/**
* boolean; if true updates scheduled by scheduleBlockUpdate happen immediately
*/
@@ -167,6 +180,7 @@
@@ -167,6 +181,7 @@
this.chunkProvider = this.createChunkProvider();
this.calculateInitialSkylight();
this.calculateInitialWeather();
@ -30,7 +31,7 @@
}
public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler)
@@ -213,6 +227,7 @@
@@ -213,6 +228,7 @@
this.calculateInitialSkylight();
this.calculateInitialWeather();
@ -38,7 +39,7 @@
}
/**
@@ -269,7 +284,8 @@
@@ -269,7 +285,8 @@
*/
public boolean isAirBlock(int par1, int par2, int par3)
{
@ -48,7 +49,7 @@
}
/**
@@ -278,7 +294,8 @@
@@ -278,7 +295,8 @@
public boolean blockHasTileEntity(int par1, int par2, int par3)
{
int var4 = this.getBlockId(par1, par2, par3);
@ -58,7 +59,7 @@
}
/**
@@ -1009,7 +1026,7 @@
@@ -1009,7 +1027,7 @@
int var12 = this.getBlockMetadata(var8, var9, var10);
Block var13 = Block.blocksList[var11];
@ -67,7 +68,7 @@
{
MovingObjectPosition var14 = var13.collisionRayTrace(this, var8, var9, var10, par1Vec3, par2Vec3);
@@ -1209,6 +1226,12 @@
@@ -1209,6 +1227,12 @@
*/
public void playSoundAtEntity(Entity par1Entity, String par2Str, float par3, float par4)
{
@ -80,7 +81,19 @@
if (par1Entity != null && par2Str != null)
{
Iterator var5 = this.worldAccesses.iterator();
@@ -1887,7 +1910,7 @@
@@ -1309,6 +1333,11 @@
EntityPlayer var5 = (EntityPlayer)par1Entity;
this.playerEntities.add(var5);
this.updateAllPlayersSleepingFlag();
+ }
+
+ if (!var4 && MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(par1Entity, this)))
+ {
+ return false;
}
this.getChunkFromChunkCoords(var2, var3).addEntity(par1Entity);
@@ -1887,7 +1916,7 @@
if (var8 != null)
{
@ -89,7 +102,7 @@
}
}
}
@@ -1897,6 +1920,10 @@
@@ -1897,6 +1926,10 @@
if (!this.entityRemoval.isEmpty())
{
@ -100,7 +113,7 @@
this.loadedTileEntityList.removeAll(this.entityRemoval);
this.entityRemoval.clear();
}
@@ -1917,7 +1944,9 @@
@@ -1917,7 +1950,9 @@
{
this.loadedTileEntityList.add(var9);
}
@ -111,7 +124,7 @@
if (this.chunkExists(var9.xCoord >> 4, var9.zCoord >> 4))
{
Chunk var10 = this.getChunkFromChunkCoords(var9.xCoord >> 4, var9.zCoord >> 4);
@@ -1927,8 +1956,6 @@
@@ -1927,8 +1962,6 @@
var10.setChunkBlockTileEntity(var9.xCoord & 15, var9.yCoord, var9.zCoord & 15, var9);
}
}
@ -120,7 +133,7 @@
}
}
@@ -1941,13 +1968,13 @@
@@ -1941,13 +1974,13 @@
public void addTileEntity(Collection par1Collection)
{
@ -141,7 +154,7 @@
}
}
@@ -1968,8 +1995,14 @@
@@ -1968,8 +2001,14 @@
int var3 = MathHelper.floor_double(par1Entity.posX);
int var4 = MathHelper.floor_double(par1Entity.posZ);
byte var5 = 32;
@ -158,7 +171,7 @@
{
par1Entity.lastTickPosX = par1Entity.posX;
par1Entity.lastTickPosY = par1Entity.posY;
@@ -2204,6 +2237,14 @@
@@ -2204,6 +2243,14 @@
{
return true;
}
@ -173,7 +186,7 @@
}
}
}
@@ -2510,25 +2551,21 @@
@@ -2510,25 +2557,21 @@
*/
public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity)
{
@ -214,7 +227,7 @@
}
}
@@ -2537,27 +2574,10 @@
@@ -2537,27 +2580,10 @@
*/
public void removeBlockTileEntity(int par1, int par2, int par3)
{
@ -246,7 +259,7 @@
}
}
@@ -2583,7 +2603,8 @@
@@ -2583,7 +2609,8 @@
*/
public boolean isBlockNormalCube(int par1, int par2, int par3)
{
@ -256,7 +269,7 @@
}
/**
@@ -2591,8 +2612,7 @@
@@ -2591,8 +2618,7 @@
*/
public boolean doesBlockHaveSolidTopSurface(int par1, int par2, int par3)
{
@ -266,7 +279,7 @@
}
/**
@@ -2608,7 +2628,7 @@
@@ -2608,7 +2634,7 @@
if (var5 != null && !var5.isEmpty())
{
Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)];
@ -275,7 +288,7 @@
}
else
{
@@ -3035,7 +3055,7 @@
@@ -3035,7 +3061,7 @@
private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6)
{
@ -284,7 +297,7 @@
int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6;
int var9 = this.getSavedLightValue(EnumSkyBlock.Block, par2 + 1, par3, par4) - par6;
int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6;
@@ -3303,10 +3323,10 @@
@@ -3303,10 +3329,10 @@
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
{
this.entitiesWithinAABBExcludingEntity.clear();
@ -299,7 +312,7 @@
for (int var7 = var3; var7 <= var4; ++var7)
{
@@ -3327,10 +3347,10 @@
@@ -3327,10 +3353,10 @@
*/
public List getEntitiesWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB)
{
@ -314,7 +327,25 @@
ArrayList var7 = new ArrayList();
for (int var8 = var3; var8 <= var4; ++var8)
@@ -3460,7 +3480,10 @@
@@ -3419,11 +3445,14 @@
*/
public void addLoadedEntities(List par1List)
{
- this.loadedEntityList.addAll(par1List);
-
for (int var2 = 0; var2 < par1List.size(); ++var2)
{
- this.obtainEntitySkin((Entity)par1List.get(var2));
+ Entity entity = (Entity)par1List.get(var2);
+ if (!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(entity, this)))
+ {
+ loadedEntityList.add(entity);
+ this.obtainEntitySkin(entity);
+ }
}
}
@@ -3460,7 +3489,10 @@
{
var9 = null;
}
@ -326,7 +357,19 @@
return par1 > 0 && var9 == null && var10.canPlaceBlockOnSide(this, par2, par3, par4, par6);
}
}
@@ -3958,4 +3981,65 @@
@@ -3701,7 +3733,10 @@
if (!this.loadedEntityList.contains(par1Entity))
{
- this.loadedEntityList.add(par1Entity);
+ if (!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(par1Entity, this)))
+ {
+ loadedEntityList.add(par1Entity);
+ }
}
}
@@ -3958,4 +3993,65 @@
var7.destroyBlockPartially(par1, par2, par3, par4, par5);
}
}