9
0
mirror of https://github.com/Samsuik/Sakura.git synced 2025-12-22 00:09:20 +00:00

Updated Upstream (Paper)

Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@691d452 Fix bundled spark permission check (#11355)
PaperMC/Paper@012c527 Update Velocity natives (#11347)
PaperMC/Paper@953e6e9 Fire BlockExpEvent on grindstone use (#11346)
PaperMC/Paper@10f5879 Change condition check order of entity tracking Y (#11348)
PaperMC/Paper@805a974 Improve console completion with brig suggestions (#9251)
PaperMC/Paper@e0021b1 Fix allowSpiderWorldBorderClimbing world config (#11321)
PaperMC/Paper@3db4758 Check dead flag in isAlive() (#11330)
PaperMC/Paper@21f125f Revert velocity natives to 3.1.2 (#11368)
PaperMC/Paper@0e82527 Fix NPE while trying to respawn an already disconnected player (#11353)
PaperMC/Paper@5d91bef Fix shulkerbox loot table replenish (#11366)
PaperMC/Paper@a8e6a93 Deprecate for removal all OldEnum-related methods (#11371)
PaperMC/Paper@925c3b9 Add FeatureFlag API (#8952)
PaperMC/Paper@426f992 Enchantment is data-driven, so not FeatureDependant (#11377)
PaperMC/Paper@1ba1be7 Update Velocity natives again
PaperMC/Paper@7632de5 Tag Lifecycle Events (#10993)
PaperMC/Paper@b09eaf2 Add Item serialization as json api (#11235)
PaperMC/Paper@971a7a5 Add Decorated Pot Cracked API (#11365)
PaperMC/Paper@61fe23c deprecate isEnabledByFeature in Item/BlockType
PaperMC/Paper@e945cfe Fix PaperServerListPingEvent#getPlayerSample not being populated or used (#11387)
PaperMC/Paper@4ff58c4 Update spark
PaperMC/Paper@d1a72ea Updated Upstream (Bukkit/CraftBukkit/Spigot) (#11405)
PaperMC/Paper@0a53f1d Set default drop behavior for player deaths (#11380)
PaperMC/Paper@951e7dd Fix TrialSpawner forgetting assigned mob when placed by player (#11381)
PaperMC/Paper@13a2395 Fix enable-player-collisions playing sounds when set to false (#11390)
PaperMC/Paper@1348e44 Prevent NPE when serializing unresolved profile (#11407)
PaperMC/Paper@2aaf436 Validate slot in PlayerInventory#setSlot (#11399)
PaperMC/Paper@5c82955 Only mark decorations dirty if a removal actually occurs (#11413)
PaperMC/Paper@c5a1066 Remove wall-time / unused skip tick protection (#11412)
This commit is contained in:
Samsuik
2024-09-21 00:33:08 +01:00
parent b6600a191d
commit ca5ff29a0d
23 changed files with 270 additions and 330 deletions

View File

@@ -2,7 +2,7 @@ group=me.samsuik.sakura
version=1.21.1-R0.1-SNAPSHOT version=1.21.1-R0.1-SNAPSHOT
mcVersion=1.21.1 mcVersion=1.21.1
paperRef=ff251e42b661b5373374a2b250345289fc052882 paperRef=c5a10665b8b80af650500b9263036f778f06d500
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
org.gradle.vfs.watch=false org.gradle.vfs.watch=false

View File

@@ -226,26 +226,26 @@ index 0000000000000000000000000000000000000000..131dc69cdd2c121975199324022f9421
+} +}
diff --git a/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java diff --git a/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..65e3c06062f529fd3e70eedccfe38b93c6c66c60 index 0000000000000000000000000000000000000000..97a54930416951645e35f7bd7ec11325d1ba4d53
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java +++ b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
+package me.samsuik.sakura.utils.objects; +package me.samsuik.sakura.utils.objects;
+ +
+public final class Expiry { +public final class Expiry {
+ private long expireAt; + private int expireAt;
+ private final int inc; + private final int inc;
+ +
+ public Expiry(long tick, int inc) { + public Expiry(int tick, int inc) {
+ this.expireAt = tick + inc; + this.expireAt = tick + inc;
+ this.inc = inc; + this.inc = inc;
+ } + }
+ +
+ public void refresh(long tick) { + public void refresh(int tick) {
+ this.expireAt = tick + this.inc; + this.expireAt = tick + this.inc;
+ } + }
+ +
+ public boolean isExpired(long tick) { + public boolean isExpired(int tick) {
+ return tick >= this.expireAt; + return tick >= this.expireAt;
+ } + }
+} +}

View File

@@ -1031,7 +1031,7 @@ index 0000000000000000000000000000000000000000..4024f9738e039ffffd560a07a2210f75
+public record DurableMaterial(int durability, float resistance) { +public record DurableMaterial(int durability, float resistance) {
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 23ddd26af762c1cd7fb3920669abb96b3213ab37..741ca90ca91c77f3cc58a7020169165b20250225 100644 index 696d075ca2883f3c37e35f983c4d020e5db89d16..f7a636990d581ad0230317a716d2662ea25480e3 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -317,6 +317,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -317,6 +317,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1039,10 +1039,10 @@ index 23ddd26af762c1cd7fb3920669abb96b3213ab37..741ca90ca91c77f3cc58a7020169165b
// Spigot end // Spigot end
public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files
+ public final me.samsuik.sakura.configuration.SakuraConfigurations sakuraConfigurations; // Sakura + public final me.samsuik.sakura.configuration.SakuraConfigurations sakuraConfigurations; // Sakura
public static long currentTickLong = 0L; // Paper - track current tick as a long
public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
@@ -497,6 +498,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa public volatile Thread shutdownThread; // Paper
@@ -496,6 +497,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
Runtime.getRuntime().addShutdownHook(new org.bukkit.craftbukkit.util.ServerShutdownThread(this)); Runtime.getRuntime().addShutdownHook(new org.bukkit.craftbukkit.util.ServerShutdownThread(this));
// CraftBukkit end // CraftBukkit end
this.paperConfigurations = services.paperConfigurations(); // Paper - add paper configuration files this.paperConfigurations = services.paperConfigurations(); // Paper - add paper configuration files
@@ -1070,7 +1070,7 @@ index dd56c8e041116ef3602a9f89c998c8208ab89b51..6cc0386531bea4ed11d9461c6810d7d1
this.setPvpAllowed(dedicatedserverproperties.pvp); this.setPvpAllowed(dedicatedserverproperties.pvp);
this.setFlightAllowed(dedicatedserverproperties.allowFlight); this.setFlightAllowed(dedicatedserverproperties.allowFlight);
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..06d4c259894e7706d8a73229d079d59cf1797881 100644 index c96f3dcd365bc140b1f4680ef6bd770c80f8eda1..fb2e895aa658175329708828de3e1030bf28620b 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -503,7 +503,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -503,7 +503,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -1112,7 +1112,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..7da2fc17f6e7bf888ef0c2a8eba0fc3b
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 1b36e94617d4e777c419660936460d5cf8a4b3e8..1a984af91856ff85a884bd8ae470cc938fe65f91 100644 index b7af2d4300facf41a025c8ca322bf6541949b3ab..6a5b42a830bdd92cb4516e9b2aff5474d3a0eda1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1070,6 +1070,7 @@ public final class CraftServer implements Server { @@ -1070,6 +1070,7 @@ public final class CraftServer implements Server {

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Local Config and Value Storage API
diff --git a/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java diff --git a/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..00953ca239c677ece37715b759a1f02608e252be index 0000000000000000000000000000000000000000..58e2bada4d9120a4802def5caece906fd1628f67
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java +++ b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java
@@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
@@ -113,7 +113,7 @@ index 0000000000000000000000000000000000000000..00953ca239c677ece37715b759a1f026
+ long chunkKey = ChunkPos.asLong(position.getX() >> 4, position.getZ() >> 4); + long chunkKey = ChunkPos.asLong(position.getX() >> 4, position.getZ() >> 4);
+ +
+ LocalValueConfig local = this.configMap.computeIfAbsent(chunkKey, (key) -> { + LocalValueConfig local = this.configMap.computeIfAbsent(chunkKey, (key) -> {
+ LocalValueConfig config = new LocalValueConfig(new Expiry(MinecraftServer.currentTickLong, 600)); + LocalValueConfig config = new LocalValueConfig(new Expiry(MinecraftServer.currentTick, 600));
+ +
+ // defaults from sakura config + // defaults from sakura config
+ config.init(level); + config.init(level);
@@ -129,11 +129,11 @@ index 0000000000000000000000000000000000000000..00953ca239c677ece37715b759a1f026
+ return config; + return config;
+ }); + });
+ +
+ local.expiry().refresh(MinecraftServer.currentTickLong); + local.expiry().refresh(MinecraftServer.currentTick);
+ return local; + return local;
+ } + }
+ +
+ public synchronized void expire(long tick) { + public synchronized void expire(int tick) {
+ if (tick % 200 != 0) return; + if (tick % 200 != 0) return;
+ +
+ // remove expired + // remove expired
@@ -227,14 +227,14 @@ index 0000000000000000000000000000000000000000..5b3e2cca7ee16bc6ecfa0f29438fa658
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 741ca90ca91c77f3cc58a7020169165b20250225..39cc9aba054696c063133d529e79594a5ce2c0cd 100644 index f7a636990d581ad0230317a716d2662ea25480e3..f0ba7597de6f1eb025639cbe0f35f51d839fe4c2 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1820,6 +1820,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1818,6 +1818,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.pop(); this.profiler.pop();
this.profiler.pop(); this.profiler.pop();
worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
+ worldserver.localConfig().expire(currentTickLong); // Sakura - add local config + worldserver.localConfig().expire(currentTick); // Sakura - add local config
} }
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
@@ -256,7 +256,7 @@ index 7da2fc17f6e7bf888ef0c2a8eba0fc3b4c10436e..c811bc64d0686fdec58defb707d57e53
public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray
public final co.aikar.timings.WorldTimingsHandler timings; // Paper public final co.aikar.timings.WorldTimingsHandler timings; // Paper
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 90d4834f97d3ba996d46493246b1947511553424..a132b4e10b0c6d0818bd406dcf93d317f0a0774a 100644 index cd3381d8225e0322b3e285b3c4aa0a1265a91cc0..7d70fb7553a04bebf9300b0372afd36802b7045c 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -256,6 +256,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -256,6 +256,13 @@ public class CraftWorld extends CraftRegionAccessor implements World {

View File

@@ -250,47 +250,67 @@ index 1a37654aff9a9c86c9f7af10a1cf721371f0c5ec..82644b34a77dc5e5af38260b7b07b3ec
public ClientboundSectionBlocksUpdatePacket(SectionPos sectionPos, ShortSet positions, LevelChunkSection section) { public ClientboundSectionBlocksUpdatePacket(SectionPos sectionPos, ShortSet positions, LevelChunkSection section) {
this.sectionPos = sectionPos; this.sectionPos = sectionPos;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 39cc9aba054696c063133d529e79594a5ce2c0cd..0f8d7e9b38bd1e834b9f1f015e4e971437130164 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1821,6 +1821,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.pop();
worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
worldserver.localConfig().expire(currentTickLong); // Sakura - add local config
+ worldserver.minimalTNT.clear(); // Sakura - visibility api
}
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 1e0a6e5a3c907ab55ee6f2780a7d43bd455f2b7b..e8642811b86443c791541eb96c4df4298f975e3b 100644 index af8cb316ac169aa8d98a88765b85bb013b9ba961..76d4b7e9dad6536c100e5940f9f528ba2561e3b8 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1256,6 +1256,22 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -172,6 +172,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
} return null; // Paper - rewrite chunk system
// Paper end - Configurable entity tracking range by Y }
// Paper end
+ private final it.unimi.dsi.fastutil.longs.Long2IntMap minimalEntities = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api
+ // Sakura start - visibility api public ChunkMap(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor executor, BlockableEventLoop<Runnable> mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier<DimensionDataStorage> persistentStateManagerFactory, int viewDistance, boolean dsync) {
+ if (this.entity.isPrimedTNT && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.TNT_VISIBILITY) super(new RegionStorageInfo(session.getLevelId(), world.dimension(), "chunk"), session.getDimensionPath(world.dimension()).resolve("region"), dataFixer, dsync);
+ || this.entity.isFallingBlock && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.SAND_VISIBILITY)) { @@ -943,6 +944,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
+ flag = false; }
+ } ((ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerTrackedEntity)tracker).moonrise$clearPlayers();
}
+ +
+ if (flag && (this.entity.isPrimedTNT || this.entity.isFallingBlock) && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.MINIMAL)) { + this.minimalEntities.clear(); // Sakura - visibility api and command
+ long key = entity.blockPosition().asLong(); }
+ // Paper end - optimise entity tracker
+ if (level.minimalTNT.containsKey(key)) {
+ flag = level.minimalTNT.get(key) == entity.getId(); @@ -1179,6 +1182,29 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
+ } else { }
+ level.minimalTNT.put(key, entity.getId()); }
+ } // Paper end - optimise entity tracker
+ // Sakura start - visibility api and command
+ private boolean checkEntityVisibility(ServerPlayer player) {
+ if (player.visibility.isModified() || !(this.entity.isPrimedTNT || this.entity.isFallingBlock)) {
+ return true;
+ }
+ if (this.entity.isPrimedTNT && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.TNT_VISIBILITY)) {
+ return false;
+ }
+ if (this.entity.isFallingBlock && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.SAND_VISIBILITY)) {
+ return false;
+ }
+ if (player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.MINIMAL)) {
+ final long key = this.entity.blockPosition().asLong() ^ this.entity.getType().hashCode();
+ final long visibleEntity = ChunkMap.this.minimalEntities.get(key);
+ if (visibleEntity != Integer.MIN_VALUE) {
+ return this.entity.getId() == visibleEntity;
+ } else {
+ ChunkMap.this.minimalEntities.put(key, this.entity.getId());
+ } + }
+ // Sakura end + }
+ return true;
+ }
+ // Sakura end - visibility api and command
public TrackedEntity(final Entity entity, final int i, final int j, final boolean flag) {
this.serverEntity = new ServerEntity(ChunkMap.this.level, entity, j, flag, this::broadcast, this.seenBy); // CraftBukkit
@@ -1256,6 +1282,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
}
flag = flag && this.entity.broadcastToPlayer(player) && ChunkMap.this.isChunkTracked(player, this.entity.chunkPosition().x, this.entity.chunkPosition().z);
// Paper end - Configurable entity tracking range by Y
+ flag = flag && this.checkEntityVisibility(player); // Sakura start - visibility api and command
// CraftBukkit start - respect vanish API // CraftBukkit start - respect vanish API
if (flag && !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Paper - only consider hits if (flag && !player.getBukkitEntity().canSee(this.entity.getBukkitEntity())) { // Paper - only consider hits
flag = false;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 06d4c259894e7706d8a73229d079d59cf1797881..b10d442b2b05a9400674031c9d140a8ac42a3255 100644 index fb2e895aa658175329708828de3e1030bf28620b..07f36cd0dea417459e7022fe7e73a5177fc7c67a 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1791,7 +1791,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -1791,7 +1791,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -303,7 +323,7 @@ index 06d4c259894e7706d8a73229d079d59cf1797881..b10d442b2b05a9400674031c9d140a8a
} }
} }
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 6c280abdef5f80b668d6090f9d35283a33e21e0c..5ac73657e6d2e44cadd5b807ff2130f2db6a2c0f 100644 index c396580a9cfd86ff261bed439bb4662ae88010b5..007bc568d3fb23f08790044aa3171727996927dc 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -282,6 +282,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -282,6 +282,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -345,7 +365,7 @@ index 6c280abdef5f80b668d6090f9d35283a33e21e0c..5ac73657e6d2e44cadd5b807ff2130f2
nbt.putBoolean("spawn_extra_particles_on_fall", this.spawnExtraParticlesOnFall); nbt.putBoolean("spawn_extra_particles_on_fall", this.spawnExtraParticlesOnFall);
if (this.raidOmenPosition != null) { if (this.raidOmenPosition != null) {
diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1dd8e35b15 100644 index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..65ed367fe5b4a19ecbd0fe0193dcf0d4c5d2521d 100644
--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -43,6 +43,23 @@ import org.bukkit.craftbukkit.util.CraftLocation; @@ -43,6 +43,23 @@ import org.bukkit.craftbukkit.util.CraftLocation;
@@ -372,7 +392,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
public abstract class ServerCommonPacketListenerImpl implements ServerCommonPacketListener, CraftPlayer.TransferCookieConnection { public abstract class ServerCommonPacketListenerImpl implements ServerCommonPacketListener, CraftPlayer.TransferCookieConnection {
@@ -95,6 +112,65 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -100,6 +117,65 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
protected final org.bukkit.craftbukkit.CraftServer cserver; protected final org.bukkit.craftbukkit.CraftServer cserver;
public boolean processedDisconnect; public boolean processedDisconnect;
@@ -438,7 +458,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
public CraftPlayer getCraftPlayer() { public CraftPlayer getCraftPlayer() {
return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity(); return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity();
// CraftBukkit end // CraftBukkit end
@@ -301,6 +377,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -306,6 +382,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
ClientboundSetDefaultSpawnPositionPacket packet6 = (ClientboundSetDefaultSpawnPositionPacket) packet; ClientboundSetDefaultSpawnPositionPacket packet6 = (ClientboundSetDefaultSpawnPositionPacket) packet;
this.player.compassTarget = CraftLocation.toBukkit(packet6.pos, this.getCraftPlayer().getWorld()); this.player.compassTarget = CraftLocation.toBukkit(packet6.pos, this.getCraftPlayer().getWorld());
} }
@@ -451,7 +471,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
// CraftBukkit end // CraftBukkit end
if (packet.isTerminal()) { if (packet.isTerminal()) {
this.close(); this.close();
@@ -314,8 +396,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -319,8 +401,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
CrashReport crashreport = CrashReport.forThrowable(throwable, "Sending packet"); CrashReport crashreport = CrashReport.forThrowable(throwable, "Sending packet");
CrashReportCategory crashreportsystemdetails = crashreport.addCategory("Packet being sent"); CrashReportCategory crashreportsystemdetails = crashreport.addCategory("Packet being sent");
@@ -465,7 +485,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
throw new ReportedException(crashreport); throw new ReportedException(crashreport);
} }
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 4320af392b7bd29d6a5d6da44361ffd0da16036a..797707c97dec5c89aaaeb2f2bb6ac39808f6e394 100644 index fcccf989c25f0a259b160c4ff7873f7009e64d14..5f066ffa28b6eb6560c4645ce52f7cbc36c7d3f5 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -3213,6 +3213,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -3213,6 +3213,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -477,7 +497,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..797707c97dec5c89aaaeb2f2bb6ac398
if (this.player.containerMenu != oldContainer) { if (this.player.containerMenu != oldContainer) {
return; return;
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index e0827d8bb3fa17d4f590a5342ff41a514f623e68..0c453d7584c539cb8dfb70c325da652808ec0aa6 100644 index 9f68c0fda7f5526eb97619f1a35ed3b78d1b3751..26a144e56cf906e1eb0ad52d217bcc0ef5bbd30d 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -549,6 +549,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -549,6 +549,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -515,23 +535,11 @@ index 42bd2d9a1528b6210e4dfb56233062fd97c9743b..28a15f612239614c6c56974da5855ce3
} }
public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) { public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index c811bc64d0686fdec58defb707d57e539c261b48..5886f44fdc605d3b814566808d8477e09df2fd3b 100644
--- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -695,6 +695,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
return chunk != null ? chunk.getNoiseBiome(x, y, z) : this.getUncachedNoiseBiome(x, y, z);
}
// Paper end - optimise random ticking
+ public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api
protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index a0d5082590ee03060f0dbb4770d196efc316c328..aea2720cfe7a0bfcf03653b5d527937c86a16dac 100644 index ad740739437be632fc7fedec488a7d0c49534688..ff8580ca3e74e7e28afbfa8c2e566b98ced2dbff 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -545,6 +545,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -547,6 +547,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().displayName = name == null ? this.getName() : name; this.getHandle().displayName = name == null ? this.getName() : name;
} }

View File

@@ -52,7 +52,7 @@ index f56e5c0f53f9b52a9247b9be9265b949494fc924..f8e0746433057297c88f0237502da856
public static <T> TicketType<T> create(String name, Comparator<T> argumentComparator) { public static <T> TicketType<T> create(String name, Comparator<T> argumentComparator) {
return new TicketType<>(name, argumentComparator, 0L); return new TicketType<>(name, argumentComparator, 0L);
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 84be48a2fb7d99fac15f2f71576e82503a84da79..6e9d9d7938049734b06a30f88e4a657dfa01265a 100644 index 26a144e56cf906e1eb0ad52d217bcc0ef5bbd30d..3d82da439c31f9a6967077197de21e2356778112 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -553,6 +553,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -553,6 +553,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -125,7 +125,7 @@ index ef245198ce6385c66f58e0dbcdebffbe6d2b625e..b7c8c2335d59853dbc97d3b9496b5e3a
public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) { public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) {
diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
index 75c8125e20b70433fe9d143a3193d821043327c3..77071ef825951cbdcbad79f4496add9dc499e856 100644 index 75c8125e20b70433fe9d143a3193d821043327c3..20764fba3c7cfe26cf622c3ee4848839408fa6af 100644
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java --- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java
@@ -140,6 +140,17 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom @@ -140,6 +140,17 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom
@@ -136,11 +136,11 @@ index 75c8125e20b70433fe9d143a3193d821043327c3..77071ef825951cbdcbad79f4496add9d
+ private long lastMovementLoadTicket = 0; + private long lastMovementLoadTicket = 0;
+ +
+ public final boolean movementTicketNeedsUpdate() { + public final boolean movementTicketNeedsUpdate() {
+ return net.minecraft.server.MinecraftServer.currentTickLong - this.lastMovementLoadTicket >= 100; + return net.minecraft.server.MinecraftServer.currentTick - this.lastMovementLoadTicket >= 100;
+ } + }
+ +
+ public final void updatedMovementTicket() { + public final void updatedMovementTicket() {
+ this.lastMovementLoadTicket = net.minecraft.server.MinecraftServer.currentTickLong; + this.lastMovementLoadTicket = net.minecraft.server.MinecraftServer.currentTick;
+ } + }
+ // Sakura end - load chunks on movement + // Sakura end - load chunks on movement

View File

@@ -414,10 +414,10 @@ index 0000000000000000000000000000000000000000..6903863ad293a335a8ed1aeaa06fccb4
+ +
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 0f8d7e9b38bd1e834b9f1f015e4e971437130164..5abe92349a31069b25a1020c3d518a1b0103bbc8 100644 index 7499ee50e3c62c3107979ea8a100f1da96f2c980..4c53e39aa153f490a473175df00679d0d01d2bd0 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1211,6 +1211,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1210,6 +1210,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
} }
} }
private static final java.math.BigDecimal TPS_BASE = new java.math.BigDecimal(1E9).multiply(new java.math.BigDecimal(SAMPLE_INTERVAL)); private static final java.math.BigDecimal TPS_BASE = new java.math.BigDecimal(1E9).multiply(new java.math.BigDecimal(SAMPLE_INTERVAL));
@@ -425,7 +425,7 @@ index 0f8d7e9b38bd1e834b9f1f015e4e971437130164..5abe92349a31069b25a1020c3d518a1b
// Paper end // Paper end
// Spigot End // Spigot End
@@ -1281,6 +1282,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1279,6 +1280,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
if (++MinecraftServer.currentTick % MinecraftServer.SAMPLE_INTERVAL == 0) { if (++MinecraftServer.currentTick % MinecraftServer.SAMPLE_INTERVAL == 0) {
final long diff = currentTime - tickSection; final long diff = currentTime - tickSection;
final java.math.BigDecimal currentTps = TPS_BASE.divide(new java.math.BigDecimal(diff), 30, java.math.RoundingMode.HALF_UP); final java.math.BigDecimal currentTps = TPS_BASE.divide(new java.math.BigDecimal(diff), 30, java.math.RoundingMode.HALF_UP);
@@ -433,7 +433,7 @@ index 0f8d7e9b38bd1e834b9f1f015e4e971437130164..5abe92349a31069b25a1020c3d518a1b
tps1.add(currentTps, diff); tps1.add(currentTps, diff);
tps5.add(currentTps, diff); tps5.add(currentTps, diff);
tps15.add(currentTps, diff); tps15.add(currentTps, diff);
@@ -1316,6 +1318,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1314,6 +1316,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
throw new RuntimeException("Chunk system crash propagated to tick()", crash); throw new RuntimeException("Chunk system crash propagated to tick()", crash);
} }
// Paper end - rewrite chunk system // Paper end - rewrite chunk system
@@ -458,7 +458,7 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..601dbdec2476757cdaf8b6a9cc7e8cae
public boolean isChunkLoaded(int chunkX, int chunkZ) { public boolean isChunkLoaded(int chunkX, int chunkZ) {
ChunkHolder chunk = this.chunkMap.getUpdatingChunkIfPresent(ChunkPos.asLong(chunkX, chunkZ)); ChunkHolder chunk = this.chunkMap.getUpdatingChunkIfPresent(ChunkPos.asLong(chunkX, chunkZ));
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index b10d442b2b05a9400674031c9d140a8ac42a3255..ab8803d030353ec8ca1c727bc1c0502da00ff5fa 100644 index 07f36cd0dea417459e7022fe7e73a5177fc7c67a..61ebb6db40626442b75cf768e1bacce3c5c09ec0 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -198,7 +198,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -198,7 +198,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Use Optimised TrackedEntityMap
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 663fd121bf042a6a651f1b22eb01a15466c8c323..7daf9f7ea047cdd7afe031baca77fe00f2324692 100644 index 76d4b7e9dad6536c100e5940f9f528ba2561e3b8..e80e1d7ac52ef6f81dab85916f8107bc3e9339c6 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -179,7 +179,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -180,7 +180,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
this.toDrop = new LongOpenHashSet(); this.toDrop = new LongOpenHashSet();
this.tickingGenerated = new AtomicInteger(); this.tickingGenerated = new AtomicInteger();
this.playerMap = new PlayerMap(); this.playerMap = new PlayerMap();

View File

@@ -48,7 +48,7 @@ index 0000000000000000000000000000000000000000..10630c7e04a137ce766f4a45cb0f2e51
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index f375728a95465bbcbb8581cb43e48fc0e6966858..4435e0cd1370f3720102734ac3647674d5f46730 100644 index 1927afe8646219403e013c92a6da0a47caf5d7d5..3233e54b6f85ab03859b5a3f2912b7cfb115d050 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -567,6 +567,25 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -567,6 +567,25 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -78,10 +78,10 @@ index f375728a95465bbcbb8581cb43e48fc0e6966858..4435e0cd1370f3720102734ac3647674
public Entity(EntityType<?> type, Level world) { public Entity(EntityType<?> type, Level world) {
this.id = Entity.ENTITY_COUNTER.incrementAndGet(); this.id = Entity.ENTITY_COUNTER.incrementAndGet();
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 5886f44fdc605d3b814566808d8477e09df2fd3b..7384c7f81e0f9bfe05c05561a1ec87f3fa17f010 100644 index c811bc64d0686fdec58defb707d57e539c261b48..0925de100a7da3bba6c3fab7a0c79b2ee0d86904 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1431,6 +1431,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1430,6 +1430,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
public <T extends Entity> void guardEntityTick(Consumer<T> tickConsumer, T entity) { public <T extends Entity> void guardEntityTick(Consumer<T> tickConsumer, T entity) {
try { try {

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Merge Cannon Entities
diff --git a/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java b/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java diff --git a/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java b/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..c8040daf71384d1fe7bd16478741b4c9cca1100c index 0000000000000000000000000000000000000000..dbd38e3b5b32c324eff6875269f09131425796a4
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java +++ b/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java
@@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
@@ -59,7 +59,7 @@ index 0000000000000000000000000000000000000000..c8040daf71384d1fe7bd16478741b4c9
+ * + *
+ * @param tick server tick + * @param tick server tick
+ */ + */
+ public void expire(long tick) { + public void expire(int tick) {
+ if (tick % 200 == 0) { + if (tick % 200 == 0) {
+ this.trackedHistory.expire(tick); + this.trackedHistory.expire(tick);
+ } + }
@@ -320,7 +320,7 @@ index 0000000000000000000000000000000000000000..3061c3a48f7c68f64a3348b9583f4b41
+} +}
diff --git a/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java b/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java diff --git a/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java b/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e36f9a427d index 0000000000000000000000000000000000000000..2c2a26fdb3081ced574070e5e6f3a1b4c09b578d
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java +++ b/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java
@@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
@@ -363,14 +363,14 @@ index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e3
+ return this.historyMap.get(originPosition); + return this.historyMap.get(originPosition);
+ } + }
+ +
+ public void expire(long tick) { + public void expire(int tick) {
+ this.historyMap.values().removeIf(p -> p.expiry().isExpired(tick)); + this.historyMap.values().removeIf(p -> p.expiry().isExpired(tick));
+ } + }
+ +
+ private static final class PositionHistory { + private static final class PositionHistory {
+ private final LongOpenHashSet positions = new LongOpenHashSet(); + private final LongOpenHashSet positions = new LongOpenHashSet();
+ private final Expiry expiry = new Expiry(MinecraftServer.currentTickLong, 200); + private final Expiry expiry = new Expiry(MinecraftServer.currentTick, 200);
+ private final long created = MinecraftServer.currentTickLong; + private final long created = MinecraftServer.currentTick;
+ private int cycles = 0; + private int cycles = 0;
+ +
+ public Expiry expiry() { + public Expiry expiry() {
@@ -378,7 +378,7 @@ index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e3
+ } + }
+ +
+ public boolean has(long position) { + public boolean has(long position) {
+ this.expiry.refresh(MinecraftServer.currentTickLong); + this.expiry.refresh(MinecraftServer.currentTick);
+ return this.positions.contains(position); + return this.positions.contains(position);
+ } + }
+ +
@@ -392,25 +392,25 @@ index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e3
+ } + }
+ +
+ public boolean hasMetConditions(@NotNull Entity entity, @NotNull MergeCondition condition) { + public boolean hasMetConditions(@NotNull Entity entity, @NotNull MergeCondition condition) {
+ long timeSinceCreation = MinecraftServer.currentTickLong - this.created; + long timeSinceCreation = MinecraftServer.currentTick - this.created;
+ return condition.accept(entity, this.cycles, timeSinceCreation); + return condition.accept(entity, this.cycles, timeSinceCreation);
+ } + }
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 5abe92349a31069b25a1020c3d518a1b0103bbc8..d2542876279eec14f952f0b20d4ea665c7de00f4 100644 index d48a1f7d23d1c47465ad8df37facbabe3a15c543..012bec9a32acc26f65c8efbfde341b0d15a4e822 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1825,6 +1825,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1822,6 +1822,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
this.profiler.pop();
worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
worldserver.localConfig().expire(currentTickLong); // Sakura - add local config worldserver.localConfig().expire(currentTick); // Sakura - add local config
worldserver.minimalTNT.clear(); // Sakura - visibility api + worldserver.mergeHandler.expire(currentTick); // Sakura - merge cannon entities
+ worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities
} }
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index ab8803d030353ec8ca1c727bc1c0502da00ff5fa..3e160ec5f14b57732f0fe66e2d3ef3a2e7ba1406 100644 index 61ebb6db40626442b75cf768e1bacce3c5c09ec0..65a71789571f896fc25a3eec22ee7808130a1578 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -714,6 +714,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -714,6 +714,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -438,7 +438,7 @@ index ab8803d030353ec8ca1c727bc1c0502da00ff5fa..3e160ec5f14b57732f0fe66e2d3ef3a2
this.guardEntityTick(this::tickNonPassenger, entity); this.guardEntityTick(this::tickNonPassenger, entity);
gameprofilerfiller.pop(); gameprofilerfiller.pop();
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 4435e0cd1370f3720102734ac3647674d5f46730..705730ccbe124efc6c1f8903403804bac02c1e0b 100644 index 3233e54b6f85ab03859b5a3f2912b7cfb115d050..222f772c27a30b8b0489b54d672f4a6eb0c84545 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -586,6 +586,23 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -586,6 +586,23 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -676,13 +676,13 @@ index 888d018a8e73234332455b7d3700e70e1a50c5db..a8e540c8a27135336fb2d6e37aec13d5
} }
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 7384c7f81e0f9bfe05c05561a1ec87f3fa17f010..9e426b7a588da307cbc42256f7255c95254d88a9 100644 index 0925de100a7da3bba6c3fab7a0c79b2ee0d86904..186f1be4aca5295ca260f3808d332cb5ed77bc7e 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -696,6 +696,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -695,6 +695,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
return chunk != null ? chunk.getNoiseBiome(x, y, z) : this.getUncachedNoiseBiome(x, y, z);
} }
// Paper end - optimise random ticking // Paper end - optimise random ticking
public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api
+ public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities + public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities
protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Replace explosion density cache
diff --git a/src/main/java/me/samsuik/sakura/explosion/density/BlockDensityCache.java b/src/main/java/me/samsuik/sakura/explosion/density/BlockDensityCache.java diff --git a/src/main/java/me/samsuik/sakura/explosion/density/BlockDensityCache.java b/src/main/java/me/samsuik/sakura/explosion/density/BlockDensityCache.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..b760b03f9ddc1fb2aed135105030fc1b5dc2c9c9 index 0000000000000000000000000000000000000000..35454e122e87892099226ba8fd8d444664be9037
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/explosion/density/BlockDensityCache.java +++ b/src/main/java/me/samsuik/sakura/explosion/density/BlockDensityCache.java
@@ -0,0 +1,65 @@ @@ -0,0 +1,62 @@
+package me.samsuik.sakura.explosion.density; +package me.samsuik.sakura.explosion.density;
+ +
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
@@ -58,10 +58,7 @@ index 0000000000000000000000000000000000000000..b760b03f9ddc1fb2aed135105030fc1b
+ } + }
+ } + }
+ +
+ public void clear(long tick) { + public void invalidate() {
+ // trim size every 30 seconds
+ if (tick != -1 && tick % 600 == 0)
+ this.densityDataMap.trim();
+ this.densityDataMap.clear(); + this.densityDataMap.clear();
+ } + }
+ +
@@ -129,19 +126,19 @@ index 0000000000000000000000000000000000000000..d7e24638f07f243502004970ab4ce646
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index d2542876279eec14f952f0b20d4ea665c7de00f4..af3bcb2dff44d9a734cab9610abbe5d7430c5d57 100644 index 012bec9a32acc26f65c8efbfde341b0d15a4e822..8041737aa751bec1c51ee3d9dacd6dfb2b845265 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1826,6 +1826,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1823,6 +1823,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
worldserver.localConfig().expire(currentTickLong); // Sakura - add local config worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
worldserver.minimalTNT.clear(); // Sakura - visibility api worldserver.localConfig().expire(currentTick); // Sakura - add local config
worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities worldserver.mergeHandler.expire(currentTick); // Sakura - merge cannon entities
+ worldserver.densityCache.clear(currentTickLong); // Sakura - explosion density cache + worldserver.densityCache.invalidate(); // Sakura - explosion density cache
} }
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index 74e32f74322b3e3bc8c2e3f5f8b740025c29443e..3ad6f5f19c9fae2f00c662971eaa613c1a0ddbcf 100644 index 80bd249e9572fd0c9ebf53c4731ed50a65290c74..fd1d9e0a8b55378c9cd06369d1850f97b63ab7d7 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -305,7 +305,12 @@ public class Explosion { @@ -305,7 +305,12 @@ public class Explosion {
@@ -182,7 +179,7 @@ index 74e32f74322b3e3bc8c2e3f5f8b740025c29443e..3ad6f5f19c9fae2f00c662971eaa613c
+ // Sakura start - explosion density cache + // Sakura start - explosion density cache
+ if (!this.toBlow.isEmpty() && !this.level.paperConfig().environment.optimizeExplosions) { + if (!this.toBlow.isEmpty() && !this.level.paperConfig().environment.optimizeExplosions) {
+ this.level.densityCache.clear(-1); + this.level.densityCache.invalidate();
+ } + }
+ // Sakura end - explosion density cache + // Sakura end - explosion density cache
Iterator iterator = list.iterator(); Iterator iterator = list.iterator();
@@ -210,19 +207,19 @@ index 74e32f74322b3e3bc8c2e3f5f8b740025c29443e..3ad6f5f19c9fae2f00c662971eaa613c
return blockDensity; return blockDensity;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 9e426b7a588da307cbc42256f7255c95254d88a9..67e5a3ae24b131ee1579a06d8b10ba9b0ac1ad41 100644 index 186f1be4aca5295ca260f3808d332cb5ed77bc7e..8e12d473bfd7dad4dfda8bba503f475151da0ad1 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -697,6 +697,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -696,6 +696,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
}
// Paper end - optimise random ticking // Paper end - optimise random ticking
public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api
public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities
+ public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache + public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache
protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
diff --git a/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java b/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java b/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java
index 8b33e35c843e5c0b8988a2ef2a38a2673035292f..5ec557652558bb44e9be7d32fc214091d29aac78 100644 index 1aa36b456b1c635d3184aeab70d1d84266e22c4b..afb76b13f404a12a5f5b9ffe72756d31290a9a85 100644
--- a/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java --- a/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BasePressurePlateBlock.java
@@ -109,6 +109,11 @@ public abstract class BasePressurePlateBlock extends Block { @@ -109,6 +109,11 @@ public abstract class BasePressurePlateBlock extends Block {
@@ -231,14 +228,14 @@ index 8b33e35c843e5c0b8988a2ef2a38a2673035292f..5ec557652558bb44e9be7d32fc214091
+ // Sakura start - explosion density cache + // Sakura start - explosion density cache
+ if (!world.paperConfig().environment.optimizeExplosions) { + if (!world.paperConfig().environment.optimizeExplosions) {
+ world.densityCache.clear(-1); + world.densityCache.invalidate();
+ } + }
+ // Sakura end - explosion density cache + // Sakura end - explosion density cache
world.setBlock(pos, iblockdata1, 2); world.setBlock(pos, iblockdata1, 2);
this.updateNeighbours(world, pos); this.updateNeighbours(world, pos);
world.setBlocksDirty(pos, state, iblockdata1); world.setBlocksDirty(pos, state, iblockdata1);
diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
index 76aca266d3f3222502ff4c196228f08fcd88c5f8..6a63e60d80ee53a4611dfcdd9ab974f8227fae59 100644 index 76aca266d3f3222502ff4c196228f08fcd88c5f8..b965d1b38a0a3f08531060039e46913dff3bfd0e 100644
--- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java --- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java
@@ -173,6 +173,11 @@ public class TripWireHookBlock extends Block { @@ -173,6 +173,11 @@ public class TripWireHookBlock extends Block {
@@ -247,7 +244,7 @@ index 76aca266d3f3222502ff4c196228f08fcd88c5f8..6a63e60d80ee53a4611dfcdd9ab974f8
+ // Sakura start - explosion density cache + // Sakura start - explosion density cache
+ if (!world.paperConfig().environment.optimizeExplosions) { + if (!world.paperConfig().environment.optimizeExplosions) {
+ world.densityCache.clear(-1); + world.densityCache.invalidate();
+ } + }
+ // Sakura end - explosion density cache + // Sakura end - explosion density cache
world.setBlock(blockposition1, (BlockState) iblockdata3.setValue(TripWireHookBlock.FACING, enumdirection1), 3); world.setBlock(blockposition1, (BlockState) iblockdata3.setValue(TripWireHookBlock.FACING, enumdirection1), 3);

View File

@@ -459,7 +459,7 @@ index 0000000000000000000000000000000000000000..a5d13c6b0d8765e4a65b43f5835fd907
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 3e160ec5f14b57732f0fe66e2d3ef3a2e7ba1406..d9495f6585c13ed2b1cdbe971a721d5b717920aa 100644 index 65a71789571f896fc25a3eec22ee7808130a1578..fc84d393df406cc9895ee063422afe562762d443 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1796,6 +1796,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. @@ -1796,6 +1796,12 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf.
@@ -511,7 +511,7 @@ index a8e540c8a27135336fb2d6e37aec13d598b2000e..e64c85bf8fbd3ad0d7e8a6e4a34aed81
// Sakura end - merge cannon entities // Sakura end - merge cannon entities
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index da423a9211dd72bc531d7f0f65aab08b5c44f39c..d3ddf3c99cb6338cea6e1cad3d96c931885e5a20 100644 index dfc6a49b2e4d7dd943a404e1f8445f9b67f41cde..4702f1d07ad32e94aeada46122f84ac68ece9af7 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -57,9 +57,11 @@ public class Explosion { @@ -57,9 +57,11 @@ public class Explosion {
@@ -608,10 +608,10 @@ index da423a9211dd72bc531d7f0f65aab08b5c44f39c..d3ddf3c99cb6338cea6e1cad3d96c931
float blockDensity = this.level.densityCache.getDensity(vec3d, entity); float blockDensity = this.level.densityCache.getDensity(vec3d, entity);
if (blockDensity == me.samsuik.sakura.explosion.density.BlockDensityCache.UNKNOWN_DENSITY) { if (blockDensity == me.samsuik.sakura.explosion.density.BlockDensityCache.UNKNOWN_DENSITY) {
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 67e5a3ae24b131ee1579a06d8b10ba9b0ac1ad41..d65a8857fd90063e277141d0e9fd553e39fc0880 100644 index 8e12d473bfd7dad4dfda8bba503f475151da0ad1..eaafb99543869234e6bb8eb227bf9a0d6e8346d0 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1522,7 +1522,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1521,7 +1521,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
} }
Explosion.BlockInteraction explosion_effect1 = explosion_effect; Explosion.BlockInteraction explosion_effect1 = explosion_effect;

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add maxSearch to getEntities
diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
index 8126c4fdbbc586cf3722c6ee2986338de044602e..0a8f593784322454335236d6f0dbb6ec9a9b8332 100644 index f3832bf2064117ef2fe804ae3fd679b1f2b0343b..9051dc762e48191fd56d26e0d0499ef12b10a240 100644
--- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java --- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
+++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java
@@ -336,10 +336,16 @@ public final class ChunkEntitySlices { @@ -336,10 +336,16 @@ public final class ChunkEntitySlices {
@@ -98,10 +98,10 @@ index efc0c1acc8239dd7b00211a1d3bfd3fc3b2c810c..0ffbc8b459c3475ff0a9c307cb7bd144
\ No newline at end of file \ No newline at end of file
+} +}
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 70ce20d946287a7449da4efc958be5a9fa683afe..503e5afa3d9130738a9374e591277aae9dc08282 100644 index eaafb99543869234e6bb8eb227bf9a0d6e8346d0..ec47e7da3c06ee74e0c134e4a881ab373fc68af8 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1669,10 +1669,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1668,10 +1668,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
this.getEntities(filter, box, predicate, result, Integer.MAX_VALUE); this.getEntities(filter, box, predicate, result, Integer.MAX_VALUE);
} }
@@ -121,7 +121,7 @@ index 70ce20d946287a7449da4efc958be5a9fa683afe..503e5afa3d9130738a9374e591277aae
this.getProfiler().incrementCounter("getEntities"); this.getProfiler().incrementCounter("getEntities");
if (entityTypeTest instanceof net.minecraft.world.entity.EntityType<T> byType) { if (entityTypeTest instanceof net.minecraft.world.entity.EntityType<T> byType) {
@@ -1687,7 +1695,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1686,7 +1694,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
if (entityTypeTest == null) { if (entityTypeTest == null) {
if (maxCount != Integer.MAX_VALUE) { if (maxCount != Integer.MAX_VALUE) {

View File

@@ -6,63 +6,45 @@ Subject: [PATCH] Explosion Durable Blocks
diff --git a/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java b/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java diff --git a/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java b/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..c5eb573f946d24d2a44a46e0f395e00e4dc29bd6 index 0000000000000000000000000000000000000000..e52cae27c2bbf4fa02d49d1c69d8e1240fddfb81
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java +++ b/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java
@@ -0,0 +1,61 @@ @@ -0,0 +1,43 @@
+package me.samsuik.sakura.explosion.durable; +package me.samsuik.sakura.explosion.durable;
+ +
+import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import com.google.common.cache.Cache;
+import me.samsuik.sakura.utils.objects.Expiry; +import com.google.common.cache.CacheBuilder;
+import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos;
+ +
+import java.util.concurrent.TimeUnit;
+
+public final class DurableBlockManager { +public final class DurableBlockManager {
+ private final Long2ObjectOpenHashMap<DurableBlock> blocks = new Long2ObjectOpenHashMap<>(); + private final Cache<BlockPos, DurableBlock> durableBlocks = CacheBuilder.newBuilder()
+ private long serverTick; + .expireAfterAccess(1, TimeUnit.MINUTES)
+ .maximumSize(65534)
+ .build();
+ +
+ public boolean damage(BlockPos pos, DurableMaterial material) { + public boolean damage(BlockPos pos, DurableMaterial material) {
+ long packed = pos.asLong(); + DurableBlock block = this.durableBlocks.getIfPresent(pos);
+ // Expires after 1200 ticks (1 minute) without any changes. + if (block == null) {
+ DurableBlock block = this.blocks.computeIfAbsent(packed, k -> new DurableBlock( + this.durableBlocks.put(pos, block = new DurableBlock(material.durability()));
+ new Expiry(this.serverTick, 1200),
+ material.durability()
+ ));
+
+ if (block.damage()) {
+ this.blocks.remove(packed);
+ return true;
+ } else {
+ block.getExpiry().refresh(this.serverTick);
+ return false;
+ } + }
+ return block.damage();
+ } + }
+ +
+ public int durability(BlockPos pos, DurableMaterial material) { + public int durability(BlockPos pos, DurableMaterial material) {
+ DurableBlock block = this.blocks.get(pos.asLong()); + final DurableBlock block = this.durableBlocks.getIfPresent(pos);
+ return block != null ? block.getDurability() : material.durability(); + return block != null ? block.durability() : material.durability();
+ }
+
+ public void expire(long tick) {
+ if (tick % 200 == 0) {
+ this.blocks.values().removeIf(block -> block.getExpiry().isExpired(tick));
+ }
+ this.serverTick = tick;
+ } + }
+ +
+ private static final class DurableBlock { + private static final class DurableBlock {
+ private final Expiry expiry;
+ private int durability; + private int durability;
+ +
+ public DurableBlock(Expiry expiry, int durability) { + public DurableBlock(int durability) {
+ this.expiry = expiry;
+ this.durability = durability; + this.durability = durability;
+ } + }
+ +
+ public Expiry getExpiry() { + public int durability() {
+ return this.expiry;
+ }
+
+ public int getDurability() {
+ return this.durability; + return this.durability;
+ } + }
+ +
@@ -72,14 +54,14 @@ index 0000000000000000000000000000000000000000..c5eb573f946d24d2a44a46e0f395e00e
+ } + }
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index af3bcb2dff44d9a734cab9610abbe5d7430c5d57..479e10d3b431ce1292c97b4c2af18c79433e43e8 100644 index 8041737aa751bec1c51ee3d9dacd6dfb2b845265..7073914cfd5759bea92ce098ad36a86afee5dd37 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1827,6 +1827,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1824,6 +1824,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
worldserver.minimalTNT.clear(); // Sakura - visibility api worldserver.localConfig().expire(currentTick); // Sakura - add local config
worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities worldserver.mergeHandler.expire(currentTick); // Sakura - merge cannon entities
worldserver.densityCache.clear(currentTickLong); // Sakura - explosion density cache worldserver.densityCache.invalidate(); // Sakura - explosion density cache
+ worldserver.durabilityManager.expire(currentTickLong); // Sakura + worldserver.redstoneTracker.expire(currentTick); // Sakura
} }
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
@@ -122,7 +104,7 @@ index a8008c7550488be34b51f4280f5569170b1ebd1d..2e5a46b9d27b930870c68dbde93d8731
public String getDescriptionId() { public String getDescriptionId() {
return this.getOrCreateDescriptionId(); return this.getOrCreateDescriptionId();
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index fef6966070e0b539f246293652140fb9504c06bd..1c57725cef4bb0613b4bb539814c914aed5c179d 100644 index 4702f1d07ad32e94aeada46122f84ac68ece9af7..da6f8d2f9b27de6c256920187c9841536842147b 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -144,7 +144,7 @@ public class Explosion { @@ -144,7 +144,7 @@ public class Explosion {
@@ -174,11 +156,11 @@ index fef6966070e0b539f246293652140fb9504c06bd..1c57725cef4bb0613b4bb539814c914a
Entity sourceEntity = this.source == null ? null : this.source; Entity sourceEntity = this.source == null ? null : this.source;
BlockPos sourceBlock = sourceEntity == null ? BlockPos.containing(this.x, this.y, this.z) : null; BlockPos sourceBlock = sourceEntity == null ? BlockPos.containing(this.x, this.y, this.z) : null;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 17dadcfbc016992c0c999d2b02da69b4c8f0712c..603b2e94e36570441567a4ea8481f032f0571fa4 100644 index ec47e7da3c06ee74e0c134e4a881ab373fc68af8..88aa465a4bc6ae79dbad8dc8ecc21345f70abf0b 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -698,6 +698,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -697,6 +697,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api // Paper end - optimise random ticking
public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities
public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache
+ public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks + public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks

View File

@@ -53,7 +53,7 @@ index 9f17170179cc99d84ad25a1e838aff3d8cc66f93..a1fb1e286d66dde55682d899ded0e5d2
diff --git a/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java diff --git a/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315f68d7b00 index 0000000000000000000000000000000000000000..2e322ac7c8751ab4586fcce7974c26dacad18e4a
--- /dev/null --- /dev/null
+++ b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java +++ b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java
@@ -0,0 +1,285 @@ @@ -0,0 +1,285 @@
@@ -135,7 +135,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
+ long key = cacheKey(position, previous, next); + long key = cacheKey(position, previous, next);
+ RedstoneCache cache = this.wireCaches.get(key); + RedstoneCache cache = this.wireCaches.get(key);
+ +
+ if (cache != null && !cache.expiry().isExpired(MinecraftServer.currentTickLong)) { + if (cache != null && !cache.expiry().isExpired(MinecraftServer.currentTick)) {
+ cache.apply(this.level); + cache.apply(this.level);
+ return true; + return true;
+ } + }
@@ -181,7 +181,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
+ +
+ public boolean isTracked(BlockPos position) { + public boolean isTracked(BlockPos position) {
+ List<RedstoneCache> wires = this.adjacent.get(position.asLong()); + List<RedstoneCache> wires = this.adjacent.get(position.asLong());
+ return wires != null && wires.stream().anyMatch(cache -> !cache.expiry().isExpired(MinecraftServer.currentTickLong)); + return wires != null && wires.stream().anyMatch(cache -> !cache.expiry().isExpired(MinecraftServer.currentTick));
+ } + }
+ +
+ public boolean isTracking() { + public boolean isTracking() {
@@ -242,7 +242,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
+ +
+ RedstoneCache redstoneCache = new RedstoneCache( + RedstoneCache redstoneCache = new RedstoneCache(
+ wires, updates, connected, + wires, updates, connected,
+ new Expiry(MinecraftServer.currentTickLong, 200) + new Expiry(MinecraftServer.currentTick, 200)
+ ); + );
+ +
+ // put the newly created redstone cache into use + // put the newly created redstone cache into use
@@ -267,7 +267,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
+ }); + });
+ } + }
+ +
+ public void expire(long tick) { + public void expire(int tick) {
+ if (tick % 100 != 0) return; + if (tick % 100 != 0) return;
+ +
+ this.wireCaches.values().removeIf(cache -> { + this.wireCaches.values().removeIf(cache -> {
@@ -324,7 +324,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
+ }); + });
+ +
+ // Refresh so the cache won't expire + // Refresh so the cache won't expire
+ expiry.refresh(MinecraftServer.currentTickLong); + expiry.refresh(MinecraftServer.currentTick);
+ } + }
+ } + }
+ +
@@ -342,23 +342,11 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
+ } + }
+ +
+} +}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 479e10d3b431ce1292c97b4c2af18c79433e43e8..fb761723228ed9c2fafa15299866e28e8efac788 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1828,6 +1828,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities
worldserver.densityCache.clear(currentTickLong); // Sakura - explosion density cache
worldserver.durabilityManager.expire(currentTickLong); // Sakura
+ worldserver.redstoneTracker.expire(currentTickLong); // Sakura
}
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 603b2e94e36570441567a4ea8481f032f0571fa4..456eb52fd5fff7950d64dedb36cee011448c6e89 100644 index 88aa465a4bc6ae79dbad8dc8ecc21345f70abf0b..d82d64c98fc7624dfcc86fcbf49cde108bb34ede 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -699,6 +699,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -698,6 +698,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities
public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache
public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks
@@ -366,7 +354,7 @@ index 603b2e94e36570441567a4ea8481f032f0571fa4..456eb52fd5fff7950d64dedb36cee011
protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray protected Level(WritableLevelData worlddatamutable, ResourceKey<Level> resourcekey, RegistryAccess iregistrycustom, Holder<DimensionType> holder, Supplier<ProfilerFiller> supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function<org.spigotmc.SpigotWorldConfig, io.papermc.paper.configuration.WorldConfiguration> paperWorldConfigCreator, Supplier<me.samsuik.sakura.configuration.WorldConfiguration> sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura - sakura configuration files// Paper - create paper world config & Anti-Xray
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot
@@ -1078,6 +1079,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1077,6 +1078,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
} else { } else {
BlockState iblockdata2 = this.getBlockState(pos); BlockState iblockdata2 = this.getBlockState(pos);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Added list of ItemEntity's that ignore explosions
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index ea0d9335446b20073b9aafb9de453097355db79c..d3b3194751df29ac5bd12339dc64695d308780d3 100644 index 4423973d4d9a2c3879d98d1d4c8b8c117c677ac5..634a2e000ad788525fbb9f76be9cab8b0397dccc 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -591,6 +591,17 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -590,6 +590,17 @@ public class ItemEntity extends Entity implements TraceableEntity {
} }

View File

@@ -106,7 +106,7 @@ index a5d13c6b0d8765e4a65b43f5835fd907738e1da4..19f0d8cf94a60b66cead3c129ded69fc
protected int getExplosionCount() { protected int getExplosionCount() {
if (this.cause.getMergeEntityData().getMergeLevel() == MergeLevel.NONE) { if (this.cause.getMergeEntityData().getMergeLevel() == MergeLevel.NONE) {
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index c4fb10b05f88e3d743ef2a58dd4be09c167a04ee..f1f07e69082d3c43b4b2792af2115ef5d7aef452 100644 index deb032f9e80b2a001e2908a81bd62b00c87ba02e..9241f5cfc79f2f75ddffd41c012879306c94af4a 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -384,7 +384,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -384,7 +384,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -475,7 +475,7 @@ index 4d0cfa1f96a04713cb1d51c7aaaf91374a0d6c17..96c43df6834e20a9e04eb095f36a644e
// Paper end - Option to prevent TNT from moving in water // Paper end - Option to prevent TNT from moving in water
} }
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index 21c6c8710add54a811fcd6d68ec75ad124219bc9..a29d85de45a6f96047a79cecbf17a797330d1ea5 100644 index 90f2a510fb2b33534f12ec4d86d9bf33bd532b58..488748a0c34b3c7e7f3348ebbbb5155c2c353368 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -77,6 +77,7 @@ public class Explosion { @@ -77,6 +77,7 @@ public class Explosion {
@@ -500,7 +500,7 @@ index 21c6c8710add54a811fcd6d68ec75ad124219bc9..a29d85de45a6f96047a79cecbf17a797
hitResult = density != 0.0f ? net.minecraft.world.phys.HitResult.Type.MISS : net.minecraft.world.phys.HitResult.Type.BLOCK; hitResult = density != 0.0f ? net.minecraft.world.phys.HitResult.Type.MISS : net.minecraft.world.phys.HitResult.Type.BLOCK;
+ // Sakura start - physics version api + // Sakura start - physics version api
+ } else if (entity.physics().before(1_14_0)) { + } else if (entity.physics().before(1_14_0)) {
+ hitResult = entity.level().rayTrace(vec3d1, source); + hitResult = entity.level().clipLegacy(vec3d1, source);
} else { } else {
- hitResult = entity.level().clip(new ClipContext(vec3d1, source, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)).getType(); - hitResult = entity.level().clip(new ClipContext(vec3d1, source, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)).getType();
+ hitResult = entity.level().clip(new ClipContext(vec3d1, source, entity.physics().afterOrEqual(1_16_0) ? ClipContext.Block.COLLIDER : ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)).getType(); + hitResult = entity.level().clip(new ClipContext(vec3d1, source, entity.physics().afterOrEqual(1_16_0) ? ClipContext.Block.COLLIDER : ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)).getType();
@@ -568,147 +568,121 @@ index 21c6c8710add54a811fcd6d68ec75ad124219bc9..a29d85de45a6f96047a79cecbf17a797
private final Level world; private final Level world;
private final double posX, posY, posZ; private final double posX, posY, posZ;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 456eb52fd5fff7950d64dedb36cee011448c6e89..f685c3c894963d5100fdf5d5bda99adf248f41ec 100644 index d82d64c98fc7624dfcc86fcbf49cde108bb34ede..062bc318e9c4e3b9a6429ce0eaaa29081cd1d227 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -695,6 +695,205 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -695,6 +695,170 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
return chunk != null ? chunk.getNoiseBiome(x, y, z) : this.getUncachedNoiseBiome(x, y, z); return chunk != null ? chunk.getNoiseBiome(x, y, z) : this.getUncachedNoiseBiome(x, y, z);
} }
// Paper end - optimise random ticking // Paper end - optimise random ticking
+ // Sakura start - physics version api + // Sakura start - physics version api
+ public net.minecraft.world.phys.BlockHitResult.Type rayTrace(net.minecraft.world.phys.Vec3 vec3d, net.minecraft.world.phys.Vec3 vec3d1) { + public final net.minecraft.world.phys.BlockHitResult.Type clipLegacy(Vec3 from, Vec3 to) {
+ // May deviate from vanilla here; I remember noticing a bug and there's no fix commit. + int toX = Mth.floor(to.x);
+ int i = Mth.floor(vec3d1.x); + int toY = Mth.floor(to.y);
+ int j = Mth.floor(vec3d1.y); + int toZ = Mth.floor(to.z);
+ int k = Mth.floor(vec3d1.z); + int fromX = Mth.floor(from.x);
+ int l = Mth.floor(vec3d.x); + int fromY = Mth.floor(from.y);
+ int i1 = Mth.floor(vec3d.y); + int fromZ = Mth.floor(from.z);
+ int j1 = Mth.floor(vec3d.z);
+ BlockPos.MutableBlockPos blockposition = new BlockPos.MutableBlockPos(l, i1, j1);
+ LevelChunk chunk = this.getChunkIfLoaded(l >> 4, j1 >> 4);
+ +
+ // probably a bad idea to copy this over so we don't need to do a null check + BlockPos.MutableBlockPos blockPos = new BlockPos.MutableBlockPos(fromX, fromY, fromZ);
+ LevelChunk chunk = this.getChunkIfLoaded(fromX >> 4, fromZ >> 4);
+ if (chunk == null) { + if (chunk == null) {
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; + return net.minecraft.world.phys.BlockHitResult.Type.MISS;
+ } + }
+ +
+ BlockState iblockdata = chunk.getBlockState(blockposition); + BlockState blockstate = chunk.getBlockState(blockPos);
+ net.minecraft.world.phys.shapes.VoxelShape shape = iblockdata.getShape(this, blockposition); + VoxelShape shape = blockstate.getShape(this, blockPos);
+
+ for (AABB bb : shape.toAabbs()) { + for (AABB bb : shape.toAabbs()) {
+ if (clip(bb, blockposition, vec3d, vec3d1)) { + if (this.clip(bb, blockPos, from, to)) {
+ return net.minecraft.world.phys.BlockHitResult.Type.BLOCK; + return net.minecraft.world.phys.BlockHitResult.Type.BLOCK;
+ } + }
+ } + }
+ +
+ int k1 = 200; + for (int steps = 0; steps < 16; ++steps) {
+ + if (fromX == toX && fromY == toY && fromZ == toZ) {
+ while (k1-- >= 0) {
+ if (l == i && i1 == j && j1 == k) {
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; + return net.minecraft.world.phys.BlockHitResult.Type.MISS;
+ } + }
+ +
+ boolean flag3 = true; + boolean moveX = true;
+ boolean flag4 = true; + boolean moveY = true;
+ boolean flag5 = true; + boolean moveZ = true;
+ double d0 = 999.0D; + double d0 = 999.0D;
+ double d1 = 999.0D; + double d1 = 999.0D;
+ double d2 = 999.0D; + double d2 = 999.0D;
+ +
+ if (i > l) { + if (toX > fromX) {
+ d0 = (double) l + 1.0D; + d0 = (double) fromX + 1.0D;
+ } else if (i < l) { + } else if (toX < fromX) {
+ d0 = (double) l + 0.0D; + d0 = (double) fromX + 0.0D;
+ } else { + } else {
+ flag3 = false; + moveX = false;
+ } + }
+ +
+ if (j > i1) { + if (toY > fromY) {
+ d1 = (double) i1 + 1.0D; + d1 = (double) fromY + 1.0D;
+ } else if (j < i1) { + } else if (toY < fromY) {
+ d1 = (double) i1 + 0.0D; + d1 = (double) fromY + 0.0D;
+ } else { + } else {
+ flag4 = false; + moveY = false;
+ } + }
+ +
+ if (k > j1) { + if (toZ > fromZ) {
+ d2 = (double) j1 + 1.0D; + d2 = (double) fromZ + 1.0D;
+ } else if (k < j1) { + } else if (toZ < fromZ) {
+ d2 = (double) j1 + 0.0D; + d2 = (double) fromZ + 0.0D;
+ } else { + } else {
+ flag5 = false; + moveZ = false;
+ } + }
+ +
+ double d3 = 999.0D; + double d3 = 999.0D;
+ double d4 = 999.0D; + double d4 = 999.0D;
+ double d5 = 999.0D; + double d5 = 999.0D;
+ double d6 = vec3d1.x - vec3d.x; + double d6 = to.x - from.x;
+ double d7 = vec3d1.y - vec3d.y; + double d7 = to.y - from.y;
+ double d8 = vec3d1.z - vec3d.z; + double d8 = to.z - from.z;
+ +
+ if (flag3) { + if (moveX) d3 = (d0 - from.x) / d6;
+ d3 = (d0 - vec3d.x) / d6; + if (moveY) d4 = (d1 - from.y) / d7;
+ } + if (moveZ) d5 = (d2 - from.z) / d8;
+ +
+ if (flag4) { + if (d3 == -0.0D) d3 = -1.0E-4D;
+ d4 = (d1 - vec3d.y) / d7; + if (d4 == -0.0D) d4 = -1.0E-4D;
+ } + if (d5 == -0.0D) d5 = -1.0E-4D;
+
+ if (flag5) {
+ d5 = (d2 - vec3d.z) / d8;
+ }
+
+ if (d3 == -0.0D) {
+ d3 = -1.0E-4D;
+ }
+
+ if (d4 == -0.0D) {
+ d4 = -1.0E-4D;
+ }
+
+ if (d5 == -0.0D) {
+ d5 = -1.0E-4D;
+ }
+
+ Direction enumdirection;
+ +
+ Direction moveDir;
+ if (d3 < d4 && d3 < d5) { + if (d3 < d4 && d3 < d5) {
+ enumdirection = i > l ? Direction.WEST : Direction.EAST; + moveDir = toX > fromX ? Direction.WEST : Direction.EAST;
+ vec3d = new net.minecraft.world.phys.Vec3(d0, vec3d.y + d7 * d3, vec3d.z + d8 * d3); + from = new Vec3(d0, from.y + d7 * d3, from.z + d8 * d3);
+ } else if (d4 < d5) { + } else if (d4 < d5) {
+ enumdirection = j > i1 ? Direction.DOWN : Direction.UP; + moveDir = toY > fromY ? Direction.DOWN : Direction.UP;
+ vec3d = new net.minecraft.world.phys.Vec3(vec3d.x + d6 * d4, d1, vec3d.z + d8 * d4); + from = new Vec3(from.x + d6 * d4, d1, from.z + d8 * d4);
+ } else { + } else {
+ enumdirection = k > j1 ? Direction.NORTH : Direction.SOUTH; + moveDir = toZ > fromZ ? Direction.NORTH : Direction.SOUTH;
+ vec3d = new net.minecraft.world.phys.Vec3(vec3d.x + d6 * d5, vec3d.y + d7 * d5, d2); + from = new Vec3(from.x + d6 * d5, from.y + d7 * d5, d2);
+ } + }
+ +
+ l = Mth.floor(vec3d.x) - (enumdirection == Direction.EAST ? 1 : 0); + fromX = Mth.floor(from.x) - (moveDir == Direction.EAST ? 1 : 0);
+ i1 = Mth.floor(vec3d.y) - (enumdirection == Direction.UP ? 1 : 0); + fromY = Mth.floor(from.y) - (moveDir == Direction.UP ? 1 : 0);
+ j1 = Mth.floor(vec3d.z) - (enumdirection == Direction.SOUTH ? 1 : 0); + fromZ = Mth.floor(from.z) - (moveDir == Direction.SOUTH ? 1 : 0);
+ blockposition.set(l, i1, j1); + blockPos.set(fromX, fromY, fromZ);
+
+ int chunkX = l >> 4;
+ int chunkZ = j1 >> 4;
+ +
+ int chunkX = fromX >> 4;
+ int chunkZ = fromZ >> 4;
+ if (chunkX != chunk.locX || chunkZ != chunk.locZ) { + if (chunkX != chunk.locX || chunkZ != chunk.locZ) {
+ chunk = this.getChunkIfLoaded(chunkX, chunkZ); + chunk = this.getChunkIfLoaded(chunkX, chunkZ);
+ } + }
+
+ if (chunk == null) { + if (chunk == null) {
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; + return net.minecraft.world.phys.BlockHitResult.Type.MISS;
+ } + }
+ +
+ iblockdata = chunk.getBlockState(blockposition); + blockstate = chunk.getBlockState(blockPos);
+ shape = iblockdata.getShape(this, blockposition); + shape = blockstate.getShape(this, blockPos);
+
+ for (AABB bb : shape.toAabbs()) { + for (AABB bb : shape.toAabbs()) {
+ if (clip(bb, blockposition, vec3d, vec3d1)) { + if (this.clip(bb, blockPos, from, to)) {
+ return net.minecraft.world.phys.BlockHitResult.Type.BLOCK; + return net.minecraft.world.phys.BlockHitResult.Type.BLOCK;
+ } + }
+ } + }
+ } + }
+
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS; + return net.minecraft.world.phys.BlockHitResult.Type.MISS;
+ } + }
+ +
@@ -720,63 +694,54 @@ index 456eb52fd5fff7950d64dedb36cee011448c6e89..f685c3c894963d5100fdf5d5bda99adf
+ double y = vec3d1.y - vec3d.y; + double y = vec3d1.y - vec3d.y;
+ double z = vec3d1.z - vec3d.z; + double z = vec3d1.z - vec3d.z;
+ +
+ double minXd = clip(bb.minX, x, vec3d.x); + double minXd = this.clip(bb.minX, x, vec3d.x);
+ double minYd = clip(bb.minY, y, vec3d.y); + double minYd = this.clip(bb.minY, y, vec3d.y);
+ double minZd = clip(bb.minZ, z, vec3d.z); + double minZd = this.clip(bb.minZ, z, vec3d.z);
+ double maxXd = clip(bb.maxX, x, vec3d.x); + double maxXd = this.clip(bb.maxX, x, vec3d.x);
+ double maxYd = clip(bb.maxY, y, vec3d.y); + double maxYd = this.clip(bb.maxY, y, vec3d.y);
+ double maxZd = clip(bb.maxZ, z, vec3d.z); + double maxZd = this.clip(bb.maxZ, z, vec3d.z);
+ +
+ return clipX(vec3d, bb, minXd, y, z) || clipY(vec3d, bb, minYd, x, z) || clipZ(vec3d, bb, minZd, x, y) + return this.clipX(vec3d, bb, minXd, y, z) || this.clipY(vec3d, bb, minYd, x, z) || this.clipZ(vec3d, bb, minZd, x, y)
+ || clipX(vec3d, bb, maxXd, y, z) || clipY(vec3d, bb, maxYd, x, z) || clipZ(vec3d, bb, maxZd, x, y); + || this.clipX(vec3d, bb, maxXd, y, z) || this.clipY(vec3d, bb, maxYd, x, z) || this.clipZ(vec3d, bb, maxZd, x, y);
+ } + }
+ +
+ private double clip(double bound, double axisD, double axisN) { + private double clip(double bound, double axisD, double axisN) {
+ // This is my friend jerry, he was an epsilon. Unfortunately, once day
+ // he was cast to a float. Now he's spending his retirement here as a double.
+ if (axisD * axisD < 1.0000000116860974E-7D) { + if (axisD * axisD < 1.0000000116860974E-7D) {
+ return -1.0; + return -1.0;
+ } + }
+
+ return (bound - axisN) / axisD; + return (bound - axisN) / axisD;
+ } + }
+ +
+ private boolean clipX(net.minecraft.world.phys.Vec3 vec3d, AABB bb, double n, double y, double z) { + private boolean clipX(Vec3 vec3d, AABB bb, double n, double y, double z) {
+ if (n < 0.0 || n > 1.0) { + if (n < 0.0 || n > 1.0) {
+ return false; + return false;
+ } + }
+
+ y = vec3d.y + y * n; + y = vec3d.y + y * n;
+ z = vec3d.z + z * n; + z = vec3d.z + z * n;
+
+ return y >= bb.minY && y <= bb.maxY && z >= bb.minZ && z <= bb.maxZ; + return y >= bb.minY && y <= bb.maxY && z >= bb.minZ && z <= bb.maxZ;
+ } + }
+ +
+ private boolean clipY(net.minecraft.world.phys.Vec3 vec3d, AABB bb, double n, double x, double z) { + private boolean clipY(Vec3 vec3d, AABB bb, double n, double x, double z) {
+ if (n < 0.0 || n > 1.0) { + if (n < 0.0 || n > 1.0) {
+ return false; + return false;
+ } + }
+
+ x = vec3d.x + x * n; + x = vec3d.x + x * n;
+ z = vec3d.z + z * n; + z = vec3d.z + z * n;
+
+ return x >= bb.minX && x <= bb.maxX && z >= bb.minZ && z <= bb.maxZ; + return x >= bb.minX && x <= bb.maxX && z >= bb.minZ && z <= bb.maxZ;
+ } + }
+ +
+ private boolean clipZ(net.minecraft.world.phys.Vec3 vec3d, AABB bb, double n, double x, double y) { + private boolean clipZ(Vec3 vec3d, AABB bb, double n, double x, double y) {
+ if (n < 0.0 || n > 1.0) { + if (n < 0.0 || n > 1.0) {
+ return false; + return false;
+ } + }
+
+ x = vec3d.x + x * n; + x = vec3d.x + x * n;
+ y = vec3d.y + y * n; + y = vec3d.y + y * n;
+
+ return x >= bb.minX && x <= bb.maxX && y >= bb.minY && y <= bb.maxY; + return x >= bb.minX && x <= bb.maxX && y >= bb.minY && y <= bb.maxY;
+ } + }
+ // Sakura end - physics version api + // Sakura end - physics version api
public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api
public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities public final me.samsuik.sakura.entity.merge.EntityMergeHandler mergeHandler = new me.samsuik.sakura.entity.merge.EntityMergeHandler(); // Sakura - merge cannon entities
public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache public final me.samsuik.sakura.explosion.density.BlockDensityCache densityCache = new me.samsuik.sakura.explosion.density.BlockDensityCache(); // Sakura - explosion density cache
public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks
diff --git a/src/main/java/net/minecraft/world/level/block/FallingBlock.java b/src/main/java/net/minecraft/world/level/block/FallingBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/FallingBlock.java b/src/main/java/net/minecraft/world/level/block/FallingBlock.java
index 1ea1232a5ba3e48eef3a139d6487c9a190155ebd..4cf5147c8b089c3fa5476a05501fae0d9afaf341 100644 index 1ea1232a5ba3e48eef3a139d6487c9a190155ebd..4cf5147c8b089c3fa5476a05501fae0d9afaf341 100644
--- a/src/main/java/net/minecraft/world/level/block/FallingBlock.java --- a/src/main/java/net/minecraft/world/level/block/FallingBlock.java

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Reduce entity tracker player updates
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index b2c99286e89f7f04aaa6efed245d344f15aa35fb..925809750c80a74d80255f6b611c486915530b34 100644 index e80e1d7ac52ef6f81dab85916f8107bc3e9339c6..47e1bec18c9bed6028b63ed6a1bcc66bcd4df238 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -927,7 +927,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -928,7 +928,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
if (tracker == null) { if (tracker == null) {
continue; continue;
} }
@@ -20,10 +20,10 @@ index b2c99286e89f7f04aaa6efed245d344f15aa35fb..925809750c80a74d80255f6b611c4869
tracker.serverEntity.sendChanges(); tracker.serverEntity.sendChanges();
} }
@@ -1179,12 +1183,30 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1205,12 +1209,30 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
} return true;
} }
// Paper end - optimise entity tracker // Sakura end - visibility api and command
+ // Sakura start - reduce entity tracker player updates + // Sakura start - reduce entity tracker player updates
+ private final int playerUpdateInterval; + private final int playerUpdateInterval;
+ private Vec3 entityPosition; + private Vec3 entityPosition;

View File

@@ -5,11 +5,11 @@ Subject: [PATCH] Add explosions dropping items config
diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java
index 726910c21440c62e35220294e4b639f4a8d242e2..64978e2c3bb5056e85b50a04f2d7fa8f8c76cd4b 100644 index 4ed468653f2487e62ad3c187d558978b05a3264d..ec0a3764e129faecce4fd35f4e301a6fe8a9061b 100644
--- a/src/main/java/net/minecraft/world/level/Explosion.java --- a/src/main/java/net/minecraft/world/level/Explosion.java
+++ b/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java
@@ -908,6 +908,11 @@ public class Explosion { @@ -908,6 +908,11 @@ public class Explosion {
this.level.densityCache.clear(-1); this.level.densityCache.invalidate();
} }
// Sakura end - explosion density cache // Sakura end - explosion density cache
+ // Sakura start - config for explosions dropping items + // Sakura start - config for explosions dropping items

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Old enchanted golden apples
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 2f7e51b1509d3db78ed8dbd073e2f9ded820390b..a4b59cb05111aed52758061c314aafc56d75dc2d 100644 index 195de6437fce730d45777afae91e3ae9ba99bd0b..7b383a7a301e2164df56f420c3d0e6528ed603d6 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -4571,6 +4571,11 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -4574,6 +4574,11 @@ public abstract class LivingEntity extends Entity implements Attackable {
public final ItemStack eat(Level world, ItemStack stack) { public final ItemStack eat(Level world, ItemStack stack) {
FoodProperties foodinfo = (FoodProperties) stack.get(DataComponents.FOOD); FoodProperties foodinfo = (FoodProperties) stack.get(DataComponents.FOOD);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Entity tracking range modifier
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
index 925809750c80a74d80255f6b611c486915530b34..0ba22484917ebb88a23a33c0ab5a171ae4630c59 100644 index 47e1bec18c9bed6028b63ed6a1bcc66bcd4df238..80c5515b481c01e3a2fb59d4a69bc0a0d2b01792 100644
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java --- a/src/main/java/net/minecraft/server/level/ChunkMap.java
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
@@ -1264,7 +1264,10 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1290,7 +1290,10 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
double vec3d_dz = player.getZ() - this.entity.getZ(); double vec3d_dz = player.getZ() - this.entity.getZ();
// Paper end - remove allocation of Vec3D here // Paper end - remove allocation of Vec3D here
int i = ChunkMap.this.getPlayerViewDistance(player); int i = ChunkMap.this.getPlayerViewDistance(player);
@@ -19,9 +19,9 @@ index 925809750c80a74d80255f6b611c486915530b34..0ba22484917ebb88a23a33c0ab5a171a
+ // Sakura end - entity tracking range modifier + // Sakura end - entity tracking range modifier
double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper
double d2 = d0 * d0; double d2 = d0 * d0;
boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player) && ChunkMap.this.isChunkTracked(player, this.entity.chunkPosition().x, this.entity.chunkPosition().z); // Paper start - Configurable entity tracking range by Y
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 95b582042133624a47c67719f86990862a539030..62783c4c951089cbc00073b5945ce56ec7dbae7a 100644 index 007bc568d3fb23f08790044aa3171727996927dc..4a5844be3683f502eebe01eed7ff1c2a6bf99962 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -333,6 +333,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -333,6 +333,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -33,10 +33,10 @@ index 95b582042133624a47c67719f86990862a539030..62783c4c951089cbc00073b5945ce56e
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) {
super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile);
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index e340694c74add2f0e06b3e8bc9cc0bd50699e119..817b7248e4e055a66d1edbdd3d6e2ce854ff9542 100644 index ff8580ca3e74e7e28afbfa8c2e566b98ced2dbff..c989f7051167ad6b83f0c916aefd068198711dab 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3018,6 +3018,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -3017,6 +3017,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return (this.getHandle().requestedViewDistance() == 0) ? Bukkit.getViewDistance() : this.getHandle().requestedViewDistance(); return (this.getHandle().requestedViewDistance() == 0) ? Bukkit.getViewDistance() : this.getHandle().requestedViewDistance();
} }

View File

@@ -42,10 +42,10 @@ index 5db5ba026462ca642dcee718af732f80fadabef5..51e26395b53628b34b1f7f68935a9ba4
boolean isEmpty(); boolean isEmpty();
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index f685c3c894963d5100fdf5d5bda99adf248f41ec..1dd832b3082e201bf9206e8668de097e022463d8 100644 index 062bc318e9c4e3b9a6429ce0eaaa29081cd1d227..11e89d518d45b42bb39689e6ac1635b54ec8e41f 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
+++ b/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java
@@ -1615,7 +1615,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -1579,7 +1579,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
tilesThisCycle--; tilesThisCycle--;
toRemove.add(tickingblockentity); // Paper - Fix MC-117075; use removeAll toRemove.add(tickingblockentity); // Paper - Fix MC-117075; use removeAll
// Spigot end // Spigot end

View File

@@ -59,10 +59,10 @@ index c03608fec96b51e1867f43d8f42e5aefb1520e46..ca2e49c4e46e5c05091e11b8254e2ae5
* Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback * Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback
* on all currently scheduled tasks. * on all currently scheduled tasks.
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index fb761723228ed9c2fafa15299866e28e8efac788..f3507f7b2ba0e838af2f68ad73aaee7c0421f9f3 100644 index 0ec9f586a66130227b1a21db3634edd6fe677db4..3091b303327fc58065cf0e341f83364be9da532e 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1736,7 +1736,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1734,7 +1734,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
// Paper start - Folia scheduler API // Paper start - Folia scheduler API
((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick(); ((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick();
getAllLevels().forEach(level -> { getAllLevels().forEach(level -> {