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 04b98e23eed926d8473cc2464e04a5b9f18f1140..cf098d4a3111771c13766285c5ec5f1fc1f539a4 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -74,6 +74,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; @@ -210,12 +211,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 8d3c1897044f9a2bbe1911e1a72dc9a00fb246df..a68112a1d1904edfc84acb6c209e13f0836d97e0 100644 --- a/src/main/java/net/minecraft/world/item/MapItem.java +++ b/src/main/java/net/minecraft/world/item/MapItem.java @@ -313,12 +313,14 @@ 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 worldmap = MapItem.getSavedData(stack, world); if (worldmap != 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 entityhuman = (Player) entity; 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 f8dc4f4e2cbc8034e5e274e5b7245d4e2b4bf38b..2adaa7c6433ac3f54c9d75ee3c14772b4c538418 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; } }