/** Send and apply locally all pending BlockEvents to each player with 64m radius of the event. */ private void sendAndApplyBlockEvents() { while (!this.blockEventCache[this.blockEventCacheIndex].isEmpty()) { int var1 = this.blockEventCacheIndex; this.blockEventCacheIndex ^= 1; Iterator var2 = this.blockEventCache[var1].iterator(); while (var2.hasNext()) { BlockEventData var3 = (BlockEventData) var2.next(); if (this.onBlockEventReceived(var3)) { this.mcServer .getConfigurationManager() .sendToAllNear( (double) var3.getX(), (double) var3.getY(), (double) var3.getZ(), 64.0D, this.provider.dimensionId, new Packet54PlayNoteBlock( var3.getX(), var3.getY(), var3.getZ(), var3.getBlockID(), var3.getEventID(), var3.getEventParameter())); } } this.blockEventCache[var1].clear(); } }
/** * Adds a block event with the given Args to the blockEventCache. During the next tick(), the * block specified will have its onBlockEvent handler called with the given parameters. Args: * X,Y,Z, BlockID, EventID, EventParameter */ public void addBlockEvent(int par1, int par2, int par3, int par4, int par5, int par6) { BlockEventData var7 = new BlockEventData(par1, par2, par3, par4, par5, par6); Iterator var8 = this.blockEventCache[this.blockEventCacheIndex].iterator(); BlockEventData var9; do { if (!var8.hasNext()) { this.blockEventCache[this.blockEventCacheIndex].add(var7); return; } var9 = (BlockEventData) var8.next(); } while (!var9.equals(var7)); }
/** Called to apply a pending BlockEvent to apply to the current world. */ private boolean onBlockEventReceived(BlockEventData par1BlockEventData) { int var2 = this.getBlockId( par1BlockEventData.getX(), par1BlockEventData.getY(), par1BlockEventData.getZ()); return var2 == par1BlockEventData.getBlockID() ? Block.blocksList[var2].onBlockEventReceived( this, par1BlockEventData.getX(), par1BlockEventData.getY(), par1BlockEventData.getZ(), par1BlockEventData.getEventID(), par1BlockEventData.getEventParameter()) : false; }