diff --git a/src/main/java/net/minecraft/block/BlockEventData.java b/src/main/java/net/minecraft/block/BlockEventData.java index 1a62a4b..d0913d2 100644 --- a/src/main/java/net/minecraft/block/BlockEventData.java +++ b/src/main/java/net/minecraft/block/BlockEventData.java @@ -1,5 +1,7 @@ package net.minecraft.block; +import com.mojang.authlib.GameProfile; + public class BlockEventData { private int coordX; @@ -10,6 +12,8 @@ private int eventParameter; private static final String __OBFID = "CL_00000131"; + public GameProfile initiator; + public BlockEventData(int p_i45362_1_, int p_i45362_2_, int p_i45362_3_, Block p_i45362_4_, int p_i45362_5_, int p_i45362_6_) { this.coordX = p_i45362_1_; diff --git a/src/main/java/net/minecraft/world/World.java b/src/main/java/net/minecraft/world/World.java index 624672f..ce28dc3 100644 --- a/src/main/java/net/minecraft/world/World.java +++ b/src/main/java/net/minecraft/world/World.java @@ -490,13 +490,6 @@ } boolean flag = chunk.func_150807_a(p_147465_1_ & 15, p_147465_2_, p_147465_3_ & 15, p_147465_4_, p_147465_5_); - - if(p_147465_4_.hasTileEntity(p_147465_5_)) - { - TileEntity te = getTileEntity(p_147465_1_, p_147465_2_, p_147465_3_); - if(te != null) - te.setObjectOwner(eventProxy.getObjectOwner()); - } if (!flag && blockSnapshot != null) { @@ -2712,6 +2705,8 @@ return; } + if(p_147455_4_.getObjectOwner() == null) // Double check to prevent unnecessary getEventProxy().getObjectOwner() invocation + p_147455_4_.setObjectOwner(getEventProxy().getObjectOwner()); if (p_147455_4_.canUpdate()) { if (this.field_147481_N) diff --git a/src/main/java/net/minecraft/world/WorldServer.java b/src/main/java/net/minecraft/world/WorldServer.java index c9207fe..eb854e4 100644 --- a/src/main/java/net/minecraft/world/WorldServer.java +++ b/src/main/java/net/minecraft/world/WorldServer.java @@ -1,7 +1,6 @@ package net.minecraft.world; -import com.google.common.collect.Lists; - +import com.mojang.authlib.GameProfile; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -479,6 +478,7 @@ if (chunk != null) { PendingBlockUpdate p = new PendingBlockUpdate(x&15, y, z&15, block, worldInfo.getWorldTotalTime() + (long)time, priority); + p.initiator = getEventProxy().getObjectOwner(); chunk.scheduleBlockUpdate(p, true); } } @@ -822,6 +822,7 @@ public void addBlockEvent(int p_147452_1_, int p_147452_2_, int p_147452_3_, Block p_147452_4_, int p_147452_5_, int p_147452_6_) { BlockEventData blockeventdata = new BlockEventData(p_147452_1_, p_147452_2_, p_147452_3_, p_147452_4_, p_147452_5_, p_147452_6_); + blockeventdata.initiator = getEventProxy().getObjectOwner(); Iterator iterator = this.field_147490_S[this.blockEventCacheIndex].iterator(); BlockEventData blockeventdata1; @@ -852,7 +853,7 @@ BlockEventData blockeventdata = (BlockEventData)iterator.next(); Block block = getBlockIfExists(blockeventdata.func_151340_a(), blockeventdata.func_151342_b(), blockeventdata.func_151341_c()); if(block == blockeventdata.getBlock()) - getEventProxy().startBlock(block, blockeventdata.func_151340_a(), blockeventdata.func_151342_b(), blockeventdata.func_151341_c()); + getEventProxy().startBlock(block, blockeventdata.func_151340_a(), blockeventdata.func_151342_b(), blockeventdata.func_151341_c(), blockeventdata.initiator); if (this.func_147485_a(blockeventdata)) { @@ -1028,15 +1029,15 @@ PendingBlockUpdate p; while((p = chunk.pollPending(time)) != null) { - updateBlock(x + p.x, p.y, z + p.z, p.getBlock()); + updateBlock(x + p.x, p.y, z + p.z, p.getBlock(), p.initiator); } getEventProxy().popState(); } - private void updateBlock(int x, int y, int z, Block block1) + private void updateBlock(int x, int y, int z, Block block1, GameProfile initiator) { Block block = this.getBlock(x, y, z); - getEventProxy().startBlock(block, x, y, z); + getEventProxy().startBlock(block, x, y, z, initiator); if (block.getMaterial() != Material.air && Block.isEqualTo(block, block1)) { diff --git a/src/main/java/org/ultramine/server/chunk/PendingBlockUpdate.java b/src/main/java/org/ultramine/server/chunk/PendingBlockUpdate.java index adf1b52..3fb1f3e 100644 --- a/src/main/java/org/ultramine/server/chunk/PendingBlockUpdate.java +++ b/src/main/java/org/ultramine/server/chunk/PendingBlockUpdate.java @@ -1,5 +1,6 @@ package org.ultramine.server.chunk; +import com.mojang.authlib.GameProfile; import net.minecraft.block.Block; public class PendingBlockUpdate implements Comparable @@ -16,6 +17,8 @@ private final long id; private final short hash; + + public GameProfile initiator; public PendingBlockUpdate(int x, int y, int z, Block block, long time, int priority) { diff --git a/src/main/java/org/ultramine/server/event/ServerWorldEventProxy.java b/src/main/java/org/ultramine/server/event/ServerWorldEventProxy.java index cedecfc..23c809a 100644 --- a/src/main/java/org/ultramine/server/event/ServerWorldEventProxy.java +++ b/src/main/java/org/ultramine/server/event/ServerWorldEventProxy.java @@ -10,7 +10,6 @@ import gnu.trove.list.array.TLongArrayList; import net.minecraft.block.Block; import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -49,6 +48,7 @@ object.setType(WorldUpdateObjectType.UNKNOWN); object.setEntity(null); object.setTileEntity(null); + object.setBlockUpdateInitiator(null); current = null; } @@ -65,9 +65,10 @@ } @Override - public void startBlock(Block block, int x, int y, int z) + public void startBlock(Block block, int x, int y, int z, GameProfile initiator) { object.setBlock(block, x, y, z); + object.setBlockUpdateInitiator(initiator); } @Override @@ -98,29 +99,17 @@ @Override public GameProfile getObjectOwner() { - switch(object.getType()) + GameProfile owner = object.getOwner(); + if(owner != null) + return owner; + WorldUpdateObjectType type = object.getType(); + if(type == WorldUpdateObjectType.BLOCK_EVENT || type == WorldUpdateObjectType.BLOCK_PENDING || type == WorldUpdateObjectType.BLOCK_RANDOM) { - case BLOCK_EVENT: - case BLOCK_PENDING: - case BLOCK_RANDOM: TileEntity te = world.getTileEntity(object.getX(), object.getY(), object.getZ()); if(te != null) return te.getObjectOwner(); - break; - case ENTITY: - return object.getEntity().getObjectOwner(); - case ENTITY_WEATHER: - break; - case PLAYER: - return ((EntityPlayer)object.getEntity()).getGameProfile(); - case TILEE_ENTITY: - return object.getTileEntity().getObjectOwner(); - case UNKNOWN: - break; - case WEATHER: - break; } - + return null; } diff --git a/src/main/java/org/ultramine/server/event/WorldEventProxy.java b/src/main/java/org/ultramine/server/event/WorldEventProxy.java index bd6dae2..8497f1e 100644 --- a/src/main/java/org/ultramine/server/event/WorldEventProxy.java +++ b/src/main/java/org/ultramine/server/event/WorldEventProxy.java @@ -40,6 +40,11 @@ public void startBlock(Block block, int x, int y, int z) { + startBlock(block, x, y, z, null); + } + + public void startBlock(Block block, int x, int y, int z, GameProfile initiator) + { } public void startNeighbor(int x, int y, int z) diff --git a/src/main/java/org/ultramine/server/event/WorldUpdateObject.java b/src/main/java/org/ultramine/server/event/WorldUpdateObject.java index e5dafad..f45bf70 100644 --- a/src/main/java/org/ultramine/server/event/WorldUpdateObject.java +++ b/src/main/java/org/ultramine/server/event/WorldUpdateObject.java @@ -24,6 +24,8 @@ private int intx; private int inty; private int intz; + + private GameProfile blockUpdateInitiator; public WorldUpdateObject() { @@ -132,13 +134,24 @@ { return intz; } - + + public GameProfile getBlockUpdateInitiator() + { + return blockUpdateInitiator; + } + + public void setBlockUpdateInitiator(GameProfile blockUpdateInitiator) + { + this.blockUpdateInitiator = blockUpdateInitiator; + } + public GameProfile getOwner() { switch(type) { case BLOCK_EVENT: case BLOCK_PENDING: + return blockUpdateInitiator; case BLOCK_RANDOM: break;