From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: MrIvanPlays Date: Sun, 9 Aug 2020 16:58:18 -0500 Subject: [PATCH] Optimize some stuff in WorldServer ticking Replaced some streams and some array lists with glue lists diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index ec86f278af15ec115d09135b75179e00dd013c11..58d05ee4432bb2ec58ed31d6cd07ccbd89f9eac3 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -64,11 +64,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { public final Int2ObjectMap entitiesById = new Int2ObjectLinkedOpenHashMap(); final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entitiesForIteration = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(2048, 0.5f, 2048, 0.2, true); // Tuinity - make removing entities while ticking safe private final Map entitiesByUUID = Maps.newHashMap(); private final Queue entitiesToAdd = Queues.newArrayDeque(); - public final List players = Lists.newArrayList(); // Paper - private -> public + public final List players = new net.yatopia.server.list.GlueList<>(); // Paper - private -> public // Yatopia public final ChunkProviderServer chunkProvider; // Paper - public boolean tickingEntities; // Paper start - List afterEntityTickingTasks = Lists.newArrayList(); + List afterEntityTickingTasks = new net.yatopia.server.list.GlueList<>(); // Yatopia public void doIfNotEntityTicking(java.lang.Runnable run) { if (tickingEntities) { afterEntityTickingTasks.add(run); @@ -960,12 +960,21 @@ public class WorldServer extends World implements GeneratorAccessSeed { this.server.getPlayerList().sendAll(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.i, this.thunderLevel)); } // */ - for (int idx = 0; idx < this.players.size(); ++idx) { - if (((EntityPlayer) this.players.get(idx)).world == this) { - ((EntityPlayer) this.players.get(idx)).tickWeather(); + // Yatopia start + boolean sleepyMatch = true; + for (EntityPlayer player : players) { + if (player.world == this) { + player.tickWeather(); + if (flag != this.isRaining()) player.setPlayerWeather((!flag ? WeatherType.DOWNFALL : WeatherType.CLEAR), false); + player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); } + if (sleepyMatch && !player.isSpectator() && !player.isDeeplySleeping() && !player.fauxSleeping) { + sleepyMatch = false; + } + // Yatopia end } + /* // Yatopia start - moved up if (flag != this.isRaining()) { // Only send weather packets to those affected for (int idx = 0; idx < this.players.size(); ++idx) { @@ -980,10 +989,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } // CraftBukkit end + */ // Yatopia end - if (this.everyoneSleeping && this.players.stream().noneMatch((entityplayer) -> { - return !entityplayer.isSpectator() && !entityplayer.isDeeplySleeping() && !entityplayer.fauxSleeping; // CraftBukkit - })) { + if (this.everyoneSleeping && sleepyMatch) { // Yatopia // CraftBukkit start long l = this.worldData.getDayTime() + 24000L; TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (l - l % 24000L) - this.getDayTime()); @@ -1153,9 +1161,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { } private void wakeupPlayers() { - (this.players.stream().filter(EntityLiving::isSleeping).collect(Collectors.toList())).forEach((entityplayer) -> { // CraftBukkit - decompile error + for (EntityPlayer entityplayer : players) { if (entityplayer.isSleeping()) { // Yatopia entityplayer.wakeup(false, false); - }); + }} // Yatopia } // Paper start - optimise random block ticking @@ -1918,8 +1926,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { // Spigot start if ( entity instanceof EntityHuman ) { - this.getMinecraftServer().worldServer.values().stream().map( WorldServer::getWorldPersistentData ).forEach( (worldData) -> + for ( WorldServer worldServer : getMinecraftServer().worldServer.values() ) // Yatopia { + WorldPersistentData worldData = worldServer.getWorldPersistentData(); // Yatopia for (Object o : worldData.data.values() ) { if ( o instanceof WorldMap ) @@ -1936,7 +1945,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } } - } ); + } // Yatopia } // Spigot end // Spigot Start