118 lines
6.5 KiB
Diff
118 lines
6.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: AlphaKR93 <dev@alpha93.kr>
|
|
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<SynchedEntityData.DataValue<?>> trackedDataValues;
|
|
// CraftBukkit start
|
|
public final Set<ServerPlayerConnection> 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<Packet<?>> consumer, Set<ServerPlayerConnection> 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<Stat<?>> object2intmap = new Object2IntOpenHashMap();
|
|
- Iterator iterator = this.getDirty().iterator();
|
|
+ Iterator<Stat<?>> 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;
|
|
}
|
|
|
|
}
|