From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Ivan Pekov Date: Wed, 7 Oct 2020 17:38:05 +0300 Subject: [PATCH] Replace some hot streams diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java index 30d4589c9cdad11809fc09cb51235d6da8e03195..bf7d5394a59186aa516497e8eaae8e5000db6a62 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java @@ -430,9 +430,20 @@ public class ChunkRegionLoader { for (int i = -1; i < 17; ++i) { // Paper - conflict on loop parameter change int finalI = i; // CraftBukkit - decompile errors + // Yatopia start - replace stream + /* ChunkSection chunksection = (ChunkSection) Arrays.stream(achunksection).filter((chunksection1) -> { return chunksection1 != null && chunksection1.getYPosition() >> 4 == finalI; // CraftBukkit - decompile errors }).findFirst().orElse(Chunk.a); + */ + ChunkSection chunksection = Chunk.EMPTY_CHUNK_SECTION; + for (ChunkSection section : achunksection) { + if (section != null && section.getYPosition() >> 4 == i) { + chunksection = section; + break; + } + } + // Yatopia end // Paper start - async chunk save for unload NibbleArray nibblearray; // block light NibbleArray nibblearray1; // sky light @@ -728,6 +739,8 @@ public class ChunkRegionLoader { while (iterator.hasNext()) { String s = (String) iterator.next(); + // Yatopia start - replace stream + /* map.put(StructureGenerator.a.get(s.toLowerCase(Locale.ROOT)), new LongOpenHashSet(Arrays.stream(nbttagcompound1.getLongArray(s)).filter((i) -> { ChunkCoordIntPair chunkcoordintpair1 = new ChunkCoordIntPair(i); @@ -738,6 +751,22 @@ public class ChunkRegionLoader { return true; } }).toArray())); + */ + long[] longArray = nbttagcompound1.getLongArray(s); + LongSet set = new LongOpenHashSet(); + for (long value : longArray) { + // got from ChunkCoordIntPair + // avoid creating additional object + int x = (int) value; + int z = (int) (value >> 32); + if (Math.max(Math.abs(x - chunkcoordintpair.x), Math.abs(z - chunkcoordintpair.z)) > 8) { + ChunkRegionLoader.LOGGER.warn("Found invalid structure reference [ {} @ {} ] for chunk {}. ", s, "[" + x + ", " + z + "]", chunkcoordintpair); + } else { + set.add(value); + } + } + map.put(StructureGenerator.a.get(s.toLowerCase(Locale.ROOT)), set); + // Yatopia end } return map; diff --git a/src/main/java/net/minecraft/server/DefinedStructure.java b/src/main/java/net/minecraft/server/DefinedStructure.java index 8974d7944f159b9346680c639daf0f8c06767cfe..bd610bfcd9571d7478ed13a0c35bc959cab07f0f 100644 --- a/src/main/java/net/minecraft/server/DefinedStructure.java +++ b/src/main/java/net/minecraft/server/DefinedStructure.java @@ -811,9 +811,18 @@ public class DefinedStructure { public List a(Block block) { return (List) this.b.computeIfAbsent(block, (block1) -> { + // Yatopia start - replace stream + /* return (List) this.a.stream().filter((definedstructure_blockinfo) -> { return definedstructure_blockinfo.b.a(block1); }).collect(Collectors.toList()); + */ + List ret = new net.yatopia.server.list.GlueList<>(); + for (BlockInfo info : a) { + if (info.b.isBlock(block1)) { ret.add(info); } + } + return ret; + // Yatopia end }); } } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index 3be9be2df7623ec1068f5782261d70fb34b2aa54..2f5bc2bde2f1231781b3738de57b4f9acc6113df 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -2529,6 +2529,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.world.getScoreboard().getPlayerTeam(this.getName()); } + public final boolean isAlly(Entity entity) { return r(entity); } // Yatopia - OBFHELPER public boolean r(Entity entity) { return this.a(entity.getScoreboardTeam()); } diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java index a60bb54270b98bad9cc8caa9ce2538f54b03fbfe..3b9ba7c012586c7620e69cf450b8d1c1fee3b215 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -101,6 +101,8 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { double d0 = this.b(GenericAttributes.FOLLOW_RANGE); AxisAlignedBB axisalignedbb = AxisAlignedBB.a(this.getPositionVector()).grow(d0, 10.0D, d0); + // Yatopia start - replace stream + /* this.world.b(EntityPigZombie.class, axisalignedbb).stream().filter((entitypigzombie) -> { return entitypigzombie != this; }).filter((entitypigzombie) -> { @@ -110,6 +112,13 @@ public class EntityPigZombie extends EntityZombie implements IEntityAngerable { }).forEach((entitypigzombie) -> { entitypigzombie.setGoalTarget(this.getGoalTarget(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); // CraftBukkit }); + */ + for (EntityPigZombie zombie : world.b(EntityPigZombie.class, axisalignedbb)) { + if (zombie != this && zombie.getGoalTarget() == null && !zombie.isAlly(getGoalTarget())) { + zombie.setGoalTarget(getGoalTarget(), org.bukkit.event.entity.EntityTargetEvent.TargetReason.TARGET_ATTACKED_NEARBY_ENTITY, true); + } + } + // Yatopia end } private void fa() { diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index b43b02c0bdd5dbf0b7d30de90bdc2f74c015ecc8..b113d60408bcb77762587109ede7dc855d983254 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -761,11 +761,20 @@ public class EntityPlayer extends EntityHuman implements ICrafting { private void eV() { AxisAlignedBB axisalignedbb = (new AxisAlignedBB(this.getChunkCoordinates())).grow(32.0D, 10.0D, 32.0D); + // Yatopia start - replace stream + /* this.world.b(EntityInsentient.class, axisalignedbb).stream().filter((entityinsentient) -> { return entityinsentient instanceof IEntityAngerable; }).forEach((entityinsentient) -> { ((IEntityAngerable) entityinsentient).b(this); }); + */ + for (EntityInsentient insentient : world.b(EntityInsentient.class, axisalignedbb)) { + if (insentient instanceof IEntityAngerable) { + insentient.b(this); + } + } + // Yatopia end } @Override diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java index 939ef3bd6439a68dba4224661d050c6af0164178..ab3348a89b6864184d432e4a73fe02ac195b8629 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java @@ -678,11 +678,20 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation if (optional.isPresent()) { WorldServer worldserver = (WorldServer) this.world; + // Yatopia start - replace stream + /* ((List) optional.get()).stream().filter((entityliving) -> { return entityliving instanceof ReputationHandler; }).forEach((entityliving) -> { worldserver.a(ReputationEvent.d, entity, (ReputationHandler) entityliving); }); + */ + for (EntityLiving livingEntity : optional.get()) { + if (livingEntity instanceof ReputationHandler) { + worldserver.a(ReputationEvent.d, entity, (ReputationHandler) livingEntity); + } + } + // Yatopia end } } } diff --git a/src/main/java/net/minecraft/server/InventorySubcontainer.java b/src/main/java/net/minecraft/server/InventorySubcontainer.java index db5def8b1d4179a64b28366339a3634af593cd5e..8627fb85f5f8b3309caf681eede4c3455bdc618c 100644 --- a/src/main/java/net/minecraft/server/InventorySubcontainer.java +++ b/src/main/java/net/minecraft/server/InventorySubcontainer.java @@ -90,9 +90,19 @@ public class InventorySubcontainer implements IInventory, AutoRecipeOutput { } public List f() { + // Yatopia start - replace stream + /* List list = (List) this.items.stream().filter((itemstack) -> { return !itemstack.isEmpty(); }).collect(Collectors.toList()); + */ + List list = new net.yatopia.server.list.GlueList<>(); + for (ItemStack item : items) { + if (!item.isEmpty()) { + list.add(item); + } + } + // Yatopia end this.clear(); return list; diff --git a/src/main/java/net/minecraft/server/LootTable.java b/src/main/java/net/minecraft/server/LootTable.java index 9922c8b2a7fbb55cfb8b9cea9545c9ec0a0dcbf8..0e8c52f64dd3ffe5e9510227cc6cbaf5b38a5e87 100644 --- a/src/main/java/net/minecraft/server/LootTable.java +++ b/src/main/java/net/minecraft/server/LootTable.java @@ -85,7 +85,7 @@ public class LootTable { } public List populateLoot(LootTableInfo loottableinfo) { - List list = Lists.newArrayList(); + List list = new net.yatopia.server.list.GlueList<>(); // Yatopia this.populateLoot(loottableinfo, list::add); return list; @@ -122,7 +122,15 @@ public class LootTable { if (event.isCancelled()) { return; } + // Yatopia start - replace stream + /* list = event.getLoot().stream().map(CraftItemStack::asNMSCopy).collect(Collectors.toList()); + */ + list = new net.yatopia.server.list.GlueList<>(); + for (org.bukkit.inventory.ItemStack bukkitItem : event.getLoot()) { + list.add(CraftItemStack.asNMSCopy(bukkitItem)); + } + // Yatopia end // CraftBukkit end List list1 = this.a(iinventory, random); diff --git a/src/main/java/net/minecraft/server/PiglinAI.java b/src/main/java/net/minecraft/server/PiglinAI.java index 0407fa1751d89a037da8cb01f5ceef9b9833dd18..a4e98b11e4ce4a4c9f3aa0986b7b2018b1f24f33 100644 --- a/src/main/java/net/minecraft/server/PiglinAI.java +++ b/src/main/java/net/minecraft/server/PiglinAI.java @@ -359,6 +359,8 @@ public class PiglinAI { public static void a(EntityHuman entityhuman, boolean flag) { List list = entityhuman.world.a(EntityPiglin.class, entityhuman.getBoundingBox().g(16.0D)); // CraftBukkit - decompile error + // Yatopia start - replace stream + /* list.stream().filter(PiglinAI::d).filter((entitypiglin) -> { return !flag || BehaviorUtil.c(entitypiglin, entityhuman); }).forEach((entitypiglin) -> { @@ -369,6 +371,17 @@ public class PiglinAI { } }); + */ + for (EntityPiglinAbstract piglinAbstract : list) { + if (PiglinAI.d(piglinAbstract) && (!flag || BehaviorUtil.c(piglinAbstract, entityhuman))) { + if (piglinAbstract.world.getGameRules().getBoolean(GameRules.UNIVERSAL_ANGER)) { + d(piglinAbstract, entityhuman); + } else { + c(piglinAbstract, entityhuman); + } + } + } + // Yatopia end } public static EnumInteractionResult a(EntityPiglin entitypiglin, EntityHuman entityhuman, EnumHand enumhand) { diff --git a/src/main/java/net/minecraft/server/Raid.java b/src/main/java/net/minecraft/server/Raid.java index 89464cc770b4875ad65c5e84315e462689cea57b..ed13f8fe725ce7601e5c506b590042cedbac7b54 100644 --- a/src/main/java/net/minecraft/server/Raid.java +++ b/src/main/java/net/minecraft/server/Raid.java @@ -794,7 +794,16 @@ public class Raid { // CraftBukkit start - a method to get all raiders public java.util.Collection getRaiders() { + // Yatopia start - replace stream + /* return this.raiders.values().stream().flatMap(Set::stream).collect(java.util.stream.Collectors.toSet()); + */ + java.util.List ret = new net.yatopia.server.list.GlueList<>(); + for (Set raid : raiders.values()) { + ret.addAll(raid); + } + return ret; + // Yatopia end } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index b739e19cb50e4f86f1cb100b88cf91fbbbf796b4..e41f0ae32f66e5bf3b5ca1e10be2293f945bb5b1 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -60,11 +60,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); @@ -828,6 +828,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } // */ // Yatopia start + boolean sleepyMatch = true; for (EntityPlayer player : players) { if (player.world == this) { player.tickWeather(); @@ -835,6 +836,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { player.updateWeather(this.lastRainLevel, this.rainLevel, this.lastThunderLevel, this.thunderLevel); // Yatopia end } + // Yatopia start + if (sleepyMatch && !player.isSpectator() && !player.isDeeplySleeping() && !player.fauxSleeping) { + sleepyMatch = false; + } + // Yatopia end } /* // Yatopia start - moved up @@ -854,9 +860,7 @@ 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()); @@ -1026,9 +1030,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 @@ -1794,8 +1798,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 ) @@ -1812,7 +1817,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { } } } - } ); + } // Yatopia } // Spigot end // Spigot Start diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRaid.java b/src/main/java/org/bukkit/craftbukkit/CraftRaid.java index 360a4901f5159a3f0606214f1abf2f8cee2ecbe1..450a64396f8fe167bc0accb7fdfcfeebb16351ac 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftRaid.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftRaid.java @@ -91,11 +91,20 @@ public final class CraftRaid implements Raid { @Override public List getRaiders() { + // Yatopia start - replace stream + /* return handle.getRaiders().stream().map(new Function() { @Override public Raider apply(EntityRaider entityRaider) { return (Raider) entityRaider.getBukkitEntity(); } }).collect(ImmutableList.toImmutableList()); + */ + List ret = new net.yatopia.server.list.GlueList<>(); + for (EntityRaider raider : handle.getRaiders()) { + ret.add((Raider) raider.getBukkitEntity()); + } + return Collections.unmodifiableList(ret); + // Yatopia end } }