Yatopia/patches/removed/server/0063-Replace-some-hot-streams.patch
Ivan Pekov ab975588e5
Some patch organisation
Also dropped a patch that I think was kinda unnecessary.
2020-10-22 14:37:58 +03:00

387 lines
19 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ivan Pekov <ivan@mrivanplays.com>
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<DefinedStructure.BlockInfo> 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<DefinedStructure.BlockInfo> 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<ItemStack> f() {
+ // Yatopia start - replace stream
+ /*
List<ItemStack> list = (List) this.items.stream().filter((itemstack) -> {
return !itemstack.isEmpty();
}).collect(Collectors.toList());
+ */
+ List<ItemStack> 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<ItemStack> populateLoot(LootTableInfo loottableinfo) {
- List<ItemStack> list = Lists.newArrayList();
+ List<ItemStack> 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<Integer> 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<EntityPiglinAbstract> 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<EntityRaider> getRaiders() {
+ // Yatopia start - replace stream
+ /*
return this.raiders.values().stream().flatMap(Set::stream).collect(java.util.stream.Collectors.toSet());
+ */
+ java.util.List<EntityRaider> ret = new net.yatopia.server.list.GlueList<>();
+ for (Set<EntityRaider> 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<Entity> entitiesById = new Int2ObjectLinkedOpenHashMap(); final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<Entity> 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<UUID, Entity> entitiesByUUID = Maps.newHashMap();
private final Queue<Entity> entitiesToAdd = Queues.newArrayDeque();
- public final List<EntityPlayer> players = Lists.newArrayList(); // Paper - private -> public
+ public final List<EntityPlayer> players = new net.yatopia.server.list.GlueList<>(); // Paper - private -> public // Yatopia
public final ChunkProviderServer chunkProvider; // Paper - public
boolean tickingEntities;
// Paper start
- List<java.lang.Runnable> afterEntityTickingTasks = Lists.newArrayList();
+ List<java.lang.Runnable> 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<Raider> getRaiders() {
+ // Yatopia start - replace stream
+ /*
return handle.getRaiders().stream().map(new Function<EntityRaider, Raider>() {
@Override
public Raider apply(EntityRaider entityRaider) {
return (Raider) entityRaider.getBukkitEntity();
}
}).collect(ImmutableList.toImmutableList());
+ */
+ List<Raider> ret = new net.yatopia.server.list.GlueList<>();
+ for (EntityRaider raider : handle.getRaiders()) {
+ ret.add((Raider) raider.getBukkitEntity());
+ }
+ return Collections.unmodifiableList(ret);
+ // Yatopia end
}
}