From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Thu, 25 Jan 2024 17:13:09 +0900 Subject: [PATCH] Port SparklyPaper patches SparklyPower Copyright (C) 2024 SparklyPower Based on commit: 29212936a832106c4d68e2a2017acbea2fdd3cc4 diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java index 39e7dcf3c92c9203c190782be401c00c010b8aeb..bb03ef9c06bf55be279d5f5ecc95099ad7b1b10e 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -78,6 +78,7 @@ public class ServerEntity { private List> trackedDataValues; // CraftBukkit start public final Set trackedPlayers; // Purpur - private -> public + public static boolean skipSqrWhenNoDeltaChanges = false; // Plazma - SparklyPaper port; Skip distanceToSqr if the delta movement hasn't changed public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; @@ -208,12 +209,14 @@ public class ServerEntity { if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) { Vec3 vec3d1 = this.entity.getDeltaMovement(); + if (!skipSqrWhenNoDeltaChanges && vec3d1 != this.ap) { // Plazma - SparklyPaper port; Skip distanceToSqr if the delta movement hasn't changed double d0 = vec3d1.distanceToSqr(this.ap); if (d0 > 1.0E-7D || d0 > 0.0D && vec3d1.lengthSqr() == 0.0D) { this.ap = vec3d1; this.broadcast.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap)); } + } // Plazma - SparklyPaper port; Skip distanceToSqr if the delta movement hasn't changed } if (packet1 != null) { diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java index f890738d3bb9fb5e70a9d323c6cec97f9948f9cf..52e72277c661b67a54bc5ce584efb04134599dd3 100644 --- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java +++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java @@ -243,7 +243,7 @@ public class ServerStatsCounter extends StatsCounter { public void sendStats(ServerPlayer player) { Object2IntMap> object2intmap = new Object2IntOpenHashMap(); - Iterator iterator = this.getDirty().iterator(); + Iterator> iterator = this.dirty.iterator(); // Plazma - SparklyPaper port; Skip dirty stats copy when requesting player stats while (iterator.hasNext()) { Stat statistic = (Stat) iterator.next(); @@ -251,6 +251,7 @@ public class ServerStatsCounter extends StatsCounter { object2intmap.put(statistic, this.getValue(statistic)); } + this.dirty.clear(); // Plazma - SparklyPaper port; Skip dirty stats copy when requesting player stats player.connection.send(new ClientboundAwardStatsPacket(object2intmap)); } } diff --git a/src/main/java/net/minecraft/world/item/MapItem.java b/src/main/java/net/minecraft/world/item/MapItem.java index 608390ed36710a419de1542b80340dd3fcc7299c..b5c584e5cf767ab7ecfd6b2104d1d31ba0f61d60 100644 --- a/src/main/java/net/minecraft/world/item/MapItem.java +++ b/src/main/java/net/minecraft/world/item/MapItem.java @@ -268,11 +268,13 @@ public class MapItem extends ComplexItem { } } + public static boolean skipTickWhenCraftNotPresent = false; // Plazma - SparklyPaper port; Skip map item ticking if the craft map renderer is not present @Override public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { if (!world.isClientSide) { MapItemSavedData mapItemSavedData = getSavedData(stack, world); if (mapItemSavedData != null) { + if (skipTickWhenCraftNotPresent && worldmap.mapView.getRenderers().stream().noneMatch(mapRenderer -> mapRenderer.getClass() == org.bukkit.craftbukkit.map.CraftMapRenderer.class)) return; // Plazma - SparklyPaper port; Skip map item ticking if the craft map renderer is not present if (entity instanceof Player player) { mapItemSavedData.tickCarriedBy(player, stack); } diff --git a/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java b/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java index 8149b9c51b78eb5c689b7218a2ca3aab60e73bcf..b9a303f6280a2f6ad3616da152922a4f4a504281 100644 --- a/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java +++ b/src/main/java/org/bukkit/craftbukkit/map/CraftMapColorCache.java @@ -145,7 +145,7 @@ public class CraftMapColorCache implements MapPalette.MapColorCache { } @Override - public boolean isCached() { + public synchronized boolean isCached() { // Plazma - Fix concurrency issues when using "imageToBytes" in multiple threads return this.cached || (!this.running.get() && this.initCache().isDone()); } diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index 57d29f8f3bc89529db9ee8f6dc3fffdbd4a03ceb..9c830ec9129ac94aa08e914a82792210c13fc1a3 100644 --- a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java +++ b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java @@ -40,9 +40,11 @@ public class GlobalConfiguration extends ConfigurationPart { public Entity entity; public class Entity extends ConfigurationPart { + boolean skipSqrWhenNoDeltaChanges = OPTIMIZE; @PostProcess public void post() { + net.minecraft.server.level.ServerEntity.skipSqrWhenNoDeltaChanges = this.skipSqrWhenNoDeltaChanges; } } @@ -50,9 +52,11 @@ public class GlobalConfiguration extends ConfigurationPart { public World world; public class World extends ConfigurationPart { + boolean skipTickWhenCraftNotPresent = OPTIMIZE; @PostProcess public void post() { + net.minecraft.world.item.MapItem.skipTickWhenCraftNotPresent = this.skipTickWhenCraftNotPresent; } }