public void addTileEntities(Collection<TileEntity> tileEntityCollection) { if (this.processingLoadedTiles) { this.addedTileEntityList.addAll(tileEntityCollection); } else { for (TileEntity tileentity : tileEntityCollection) { this.loadedTileEntityList.add(tileentity); if (tileentity instanceof ITickable) { this.tickableTileEntities.add(tileentity); } } } }
public boolean addTileEntity(TileEntity tile) { boolean flag = this.loadedTileEntityList.add(tile); if (flag && tile instanceof ITickable) { this.tickableTileEntities.add(tile); } if (this.isRemote) { BlockPos blockpos = tile.getPos(); IBlockState iblockstate = this.getBlockState(blockpos); this.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 2); } return flag; }
public boolean addTileEntity(TileEntity tile) { if (tile.getWorld() != null) // Forge - set the world early as vanilla doesn't set it until next tick tile.setWorldObj(this); List<TileEntity> dest = processingLoadedTiles ? addedTileEntityList : loadedTileEntityList; boolean flag = dest.add(tile); if (flag && tile instanceof ITickable) { this.tickableTileEntities.add(tile); } if (this.isRemote) { BlockPos blockpos = tile.getPos(); IBlockState iblockstate = this.getBlockState(blockpos); this.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 2); } return flag; }
public void removeTileEntity(BlockPos pos) { TileEntity tileentity = this.getTileEntity(pos); if (tileentity != null && this.processingLoadedTiles) { tileentity.invalidate(); this.addedTileEntityList.remove(tileentity); if (!(tileentity instanceof ITickable)) //Forge: If they are not tickable they wont be removed in the update loop. this.loadedTileEntityList.remove(tileentity); } else { if (tileentity != null) { this.addedTileEntityList.remove(tileentity); this.loadedTileEntityList.remove(tileentity); this.tickableTileEntities.remove(tileentity); } this.getChunkFromBlockCoords(pos).removeTileEntity(pos); } this.updateComparatorOutputLevel(pos, getBlockState(pos).getBlock()); //Notify neighbors of changes }
@Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { IBlockState state = world.getBlockState(pos); Block block = state.getBlock(); int mode = getMode(stack); if (!checkUsage(stack, player, cost[mode])) { return true; } TileEntity tileEntity = world.getTileEntity(pos); for (int i = 0; i < amount[mode]/(tileEntity == null ? 5 : 1); i ++){ if (tileEntity == null){ block.updateTick(world, pos, state, random); } else if (tileEntity instanceof ITickable) { ((ITickable)tileEntity).update(); } } registerUsage(stack, player, cost[mode]); } return true; }
@Override public void onUpdate() { super.onUpdate(); if(!this.worldObj.isRemote && (this.isClientNeedy() || (this.isDirty() && random.nextInt(UPDATE_TICKS) == 0) || (this.isReallyDirty() && random.nextInt(UPDATE_TICKS / 10) == 0))) { this.setDirty(false); this.setClientNeedy(false); this.setReallyDirty(false); this.sendUpdateToAllAround(); } if(shouldTileUpdate() && this.getTileEntity() instanceof ITickable) { ((ITickable)this.getTileEntity()).update(); } if(shouldUpdateBlockState) { IBlockState blockState = this.getBlockState(this.getMetadata()); blockState = this.getCartBlock().getActualState(blockState, getFakeWorld(), BlockPos.ORIGIN); blockState = this.getCartBlock().getExtendedState(blockState, getFakeWorld(), BlockPos.ORIGIN); this.func_174899_a(blockState); this.shouldUpdateBlockState = false; this.sendUpdateToAllAround(); } }
public boolean addTileEntity(TileEntity tile) { boolean flag = this.loadedTileEntityList.add(tile); if (flag && tile instanceof ITickable) { this.tickableTileEntities.add(tile); } return flag; }
/** * Checks timeouts and processes all packets received */ public void processReceivedPackets() { this.flushOutboundQueue(); if (this.packetListener instanceof ITickable) { ((ITickable)this.packetListener).update(); } this.channel.flush(); }
public void updateTimeLightAndEntities() { this.theProfiler.startSection("jobs"); synchronized (this.futureTaskQueue) { while (!this.futureTaskQueue.isEmpty()) { Util.func_181617_a((FutureTask)this.futureTaskQueue.poll(), logger); } } this.theProfiler.endStartSection("levels"); for (int j = 0; j < this.worldServers.length; ++j) { long i = System.nanoTime(); if (j == 0 || this.getAllowNether()) { WorldServer worldserver = this.worldServers[j]; this.theProfiler.startSection(worldserver.getWorldInfo().getWorldName()); if (this.tickCounter % 20 == 0) { this.theProfiler.startSection("timeSync"); this.serverConfigManager.sendPacketToAllPlayersInDimension(new S03PacketTimeUpdate(worldserver.getTotalWorldTime(), worldserver.getWorldTime(), worldserver.getGameRules().getBoolean("doDaylightCycle")), worldserver.provider.getDimensionId()); this.theProfiler.endSection(); } this.theProfiler.startSection("tick"); try { worldserver.tick(); } catch (Throwable throwable1) { CrashReport crashreport = CrashReport.makeCrashReport(throwable1, "Exception ticking world"); worldserver.addWorldInfoToCrashReport(crashreport); throw new ReportedException(crashreport); } try { worldserver.updateEntities(); } catch (Throwable throwable) { CrashReport crashreport1 = CrashReport.makeCrashReport(throwable, "Exception ticking world entities"); worldserver.addWorldInfoToCrashReport(crashreport1); throw new ReportedException(crashreport1); } this.theProfiler.endSection(); this.theProfiler.startSection("tracker"); worldserver.getEntityTracker().updateTrackedEntities(); this.theProfiler.endSection(); this.theProfiler.endSection(); } this.timeOfLastDimensionTick[j][this.tickCounter % 100] = System.nanoTime() - i; } this.theProfiler.endStartSection("connection"); this.getNetworkSystem().networkTick(); this.theProfiler.endStartSection("players"); this.serverConfigManager.onTick(); this.theProfiler.endStartSection("tickables"); for (int k = 0; k < this.playersOnline.size(); ++k) { ((ITickable)this.playersOnline.get(k)).update(); } this.theProfiler.endSection(); }
public void registerTickable(ITickable tickable) { this.playersOnline.add(tickable); }
public void updateTimeLightAndEntities() { this.theProfiler.startSection("jobs"); synchronized (this.futureTaskQueue) { while (!this.futureTaskQueue.isEmpty()) { Util.runTask((FutureTask)this.futureTaskQueue.poll(), LOG); } } this.theProfiler.endStartSection("levels"); for (int j = 0; j < this.worldServers.length; ++j) { long i = System.nanoTime(); if (j == 0 || this.getAllowNether()) { WorldServer worldserver = this.worldServers[j]; this.theProfiler.startSection(worldserver.getWorldInfo().getWorldName()); if (this.tickCounter % 20 == 0) { this.theProfiler.startSection("timeSync"); this.playerList.sendPacketToAllPlayersInDimension(new SPacketTimeUpdate(worldserver.getTotalWorldTime(), worldserver.getWorldTime(), worldserver.getGameRules().getBoolean("doDaylightCycle")), worldserver.provider.getDimensionType().getId()); this.theProfiler.endSection(); } this.theProfiler.startSection("tick"); try { worldserver.tick(); } catch (Throwable throwable1) { CrashReport crashreport = CrashReport.makeCrashReport(throwable1, "Exception ticking world"); worldserver.addWorldInfoToCrashReport(crashreport); throw new ReportedException(crashreport); } try { worldserver.updateEntities(); } catch (Throwable throwable) { CrashReport crashreport1 = CrashReport.makeCrashReport(throwable, "Exception ticking world entities"); worldserver.addWorldInfoToCrashReport(crashreport1); throw new ReportedException(crashreport1); } this.theProfiler.endSection(); this.theProfiler.startSection("tracker"); worldserver.getEntityTracker().updateTrackedEntities(); this.theProfiler.endSection(); this.theProfiler.endSection(); } this.timeOfLastDimensionTick[j][this.tickCounter % 100] = System.nanoTime() - i; } this.theProfiler.endStartSection("connection"); this.getNetworkSystem().networkTick(); this.theProfiler.endStartSection("players"); this.playerList.onTick(); this.theProfiler.endStartSection("tickables"); for (int k = 0; k < this.tickables.size(); ++k) { ((ITickable)this.tickables.get(k)).update(); } this.theProfiler.endSection(); }
@SideOnly(Side.SERVER) public void registerTickable(ITickable tickable) { this.tickables.add(tickable); }
protected boolean useServerTickHandler() { return !(this instanceof ITickable); }