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:
@@ -2,7 +2,7 @@ group=me.samsuik.sakura
|
||||
version=1.21.1-R0.1-SNAPSHOT
|
||||
mcVersion=1.21.1
|
||||
|
||||
paperRef=ff251e42b661b5373374a2b250345289fc052882
|
||||
paperRef=c5a10665b8b80af650500b9263036f778f06d500
|
||||
|
||||
org.gradle.jvmargs=-Xmx2G
|
||||
org.gradle.vfs.watch=false
|
||||
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..65e3c06062f529fd3e70eedccfe38b93c6c66c60
|
||||
index 0000000000000000000000000000000000000000..97a54930416951645e35f7bd7ec11325d1ba4d53
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java
|
||||
@@ -0,0 +1,19 @@
|
||||
+package me.samsuik.sakura.utils.objects;
|
||||
+
|
||||
+public final class Expiry {
|
||||
+ private long expireAt;
|
||||
+ private int expireAt;
|
||||
+ private final int inc;
|
||||
+
|
||||
+ public Expiry(long tick, int inc) {
|
||||
+ public Expiry(int tick, int inc) {
|
||||
+ this.expireAt = tick + inc;
|
||||
+ this.inc = inc;
|
||||
+ }
|
||||
+
|
||||
+ public void refresh(long tick) {
|
||||
+ public void refresh(int tick) {
|
||||
+ this.expireAt = tick + this.inc;
|
||||
+ }
|
||||
+
|
||||
+ public boolean isExpired(long tick) {
|
||||
+ public boolean isExpired(int tick) {
|
||||
+ return tick >= this.expireAt;
|
||||
+ }
|
||||
+}
|
||||
|
||||
@@ -1031,7 +1031,7 @@ index 0000000000000000000000000000000000000000..4024f9738e039ffffd560a07a2210f75
|
||||
+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
|
||||
index 23ddd26af762c1cd7fb3920669abb96b3213ab37..741ca90ca91c77f3cc58a7020169165b20250225 100644
|
||||
index 696d075ca2883f3c37e35f983c4d020e5db89d16..f7a636990d581ad0230317a716d2662ea25480e3 100644
|
||||
--- a/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
|
||||
@@ -1039,10 +1039,10 @@ index 23ddd26af762c1cd7fb3920669abb96b3213ab37..741ca90ca91c77f3cc58a7020169165b
|
||||
// Spigot end
|
||||
public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files
|
||||
+ 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
|
||||
|
||||
@@ -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));
|
||||
// CraftBukkit end
|
||||
this.paperConfigurations = services.paperConfigurations(); // Paper - add paper configuration files
|
||||
@@ -1070,7 +1070,7 @@ index dd56c8e041116ef3602a9f89c998c8208ab89b51..6cc0386531bea4ed11d9461c6810d7d1
|
||||
this.setPvpAllowed(dedicatedserverproperties.pvp);
|
||||
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
|
||||
index 2fe9d9b38c01d04416843fdd48d3e33899b7de63..06d4c259894e7706d8a73229d079d59cf1797881 100644
|
||||
index c96f3dcd365bc140b1f4680ef6bd770c80f8eda1..fb2e895aa658175329708828de3e1030bf28620b 100644
|
||||
--- a/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.
|
||||
@@ -1112,7 +1112,7 @@ index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..7da2fc17f6e7bf888ef0c2a8eba0fc3b
|
||||
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
|
||||
index 1b36e94617d4e777c419660936460d5cf8a4b3e8..1a984af91856ff85a884bd8ae470cc938fe65f91 100644
|
||||
index b7af2d4300facf41a025c8ca322bf6541949b3ab..6a5b42a830bdd92cb4516e9b2aff5474d3a0eda1 100644
|
||||
--- a/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 {
|
||||
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..00953ca239c677ece37715b759a1f02608e252be
|
||||
index 0000000000000000000000000000000000000000..58e2bada4d9120a4802def5caece906fd1628f67
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java
|
||||
@@ -0,0 +1,141 @@
|
||||
@@ -113,7 +113,7 @@ index 0000000000000000000000000000000000000000..00953ca239c677ece37715b759a1f026
|
||||
+ long chunkKey = ChunkPos.asLong(position.getX() >> 4, position.getZ() >> 4);
|
||||
+
|
||||
+ 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
|
||||
+ config.init(level);
|
||||
@@ -129,11 +129,11 @@ index 0000000000000000000000000000000000000000..00953ca239c677ece37715b759a1f026
|
||||
+ return config;
|
||||
+ });
|
||||
+
|
||||
+ local.expiry().refresh(MinecraftServer.currentTickLong);
|
||||
+ local.expiry().refresh(MinecraftServer.currentTick);
|
||||
+ return local;
|
||||
+ }
|
||||
+
|
||||
+ public synchronized void expire(long tick) {
|
||||
+ public synchronized void expire(int tick) {
|
||||
+ if (tick % 200 != 0) return;
|
||||
+
|
||||
+ // 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
|
||||
index 741ca90ca91c77f3cc58a7020169165b20250225..39cc9aba054696c063133d529e79594a5ce2c0cd 100644
|
||||
index f7a636990d581ad0230317a716d2662ea25480e3..f0ba7597de6f1eb025639cbe0f35f51d839fe4c2 100644
|
||||
--- a/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();
|
||||
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
|
||||
|
||||
@@ -256,7 +256,7 @@ index 7da2fc17f6e7bf888ef0c2a8eba0fc3b4c10436e..c811bc64d0686fdec58defb707d57e53
|
||||
public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray
|
||||
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
|
||||
index 90d4834f97d3ba996d46493246b1947511553424..a132b4e10b0c6d0818bd406dcf93d317f0a0774a 100644
|
||||
index cd3381d8225e0322b3e285b3c4aa0a1265a91cc0..7d70fb7553a04bebf9300b0372afd36802b7045c 100644
|
||||
--- a/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 {
|
||||
|
||||
@@ -250,47 +250,67 @@ index 1a37654aff9a9c86c9f7af10a1cf721371f0c5ec..82644b34a77dc5e5af38260b7b07b3ec
|
||||
|
||||
public ClientboundSectionBlocksUpdatePacket(SectionPos sectionPos, ShortSet positions, LevelChunkSection section) {
|
||||
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
|
||||
index 1e0a6e5a3c907ab55ee6f2780a7d43bd455f2b7b..e8642811b86443c791541eb96c4df4298f975e3b 100644
|
||||
index af8cb316ac169aa8d98a88765b85bb013b9ba961..76d4b7e9dad6536c100e5940f9f528ba2561e3b8 100644
|
||||
--- a/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
|
||||
+ if (this.entity.isPrimedTNT && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.TNT_VISIBILITY)
|
||||
+ || this.entity.isFallingBlock && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.SAND_VISIBILITY)) {
|
||||
+ flag = false;
|
||||
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) {
|
||||
super(new RegionStorageInfo(session.getLevelId(), world.dimension(), "chunk"), session.getDimensionPath(world.dimension()).resolve("region"), dataFixer, dsync);
|
||||
@@ -943,6 +944,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
}
|
||||
((ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerTrackedEntity)tracker).moonrise$clearPlayers();
|
||||
}
|
||||
+
|
||||
+ this.minimalEntities.clear(); // Sakura - visibility api and command
|
||||
}
|
||||
// Paper end - optimise entity tracker
|
||||
|
||||
@@ -1179,6 +1182,29 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
}
|
||||
}
|
||||
// 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 (flag && (this.entity.isPrimedTNT || this.entity.isFallingBlock) && player.visibility.isToggled(me.samsuik.sakura.player.visibility.Visibility.Setting.MINIMAL)) {
|
||||
+ long key = entity.blockPosition().asLong();
|
||||
+
|
||||
+ if (level.minimalTNT.containsKey(key)) {
|
||||
+ flag = level.minimalTNT.get(key) == entity.getId();
|
||||
+ 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 {
|
||||
+ level.minimalTNT.put(key, entity.getId());
|
||||
+ 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
|
||||
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
|
||||
index 06d4c259894e7706d8a73229d079d59cf1797881..b10d442b2b05a9400674031c9d140a8ac42a3255 100644
|
||||
index fb2e895aa658175329708828de3e1030bf28620b..07f36cd0dea417459e7022fe7e73a5177fc7c67a 100644
|
||||
--- a/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.
|
||||
@@ -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
|
||||
index 6c280abdef5f80b668d6090f9d35283a33e21e0c..5ac73657e6d2e44cadd5b807ff2130f2db6a2c0f 100644
|
||||
index c396580a9cfd86ff261bed439bb4662ae88010b5..007bc568d3fb23f08790044aa3171727996927dc 100644
|
||||
--- a/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
|
||||
@@ -345,7 +365,7 @@ index 6c280abdef5f80b668d6090f9d35283a33e21e0c..5ac73657e6d2e44cadd5b807ff2130f2
|
||||
nbt.putBoolean("spawn_extra_particles_on_fall", this.spawnExtraParticlesOnFall);
|
||||
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
|
||||
index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1dd8e35b15 100644
|
||||
index 6998f32f8d79dbdb6b31ffaa126602fc4a428616..65ed367fe5b4a19ecbd0fe0193dcf0d4c5d2521d 100644
|
||||
--- a/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;
|
||||
@@ -372,7 +392,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
|
||||
|
||||
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;
|
||||
public boolean processedDisconnect;
|
||||
|
||||
@@ -438,7 +458,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
|
||||
public CraftPlayer getCraftPlayer() {
|
||||
return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity();
|
||||
// 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;
|
||||
this.player.compassTarget = CraftLocation.toBukkit(packet6.pos, this.getCraftPlayer().getWorld());
|
||||
}
|
||||
@@ -451,7 +471,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
|
||||
// CraftBukkit end
|
||||
if (packet.isTerminal()) {
|
||||
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");
|
||||
CrashReportCategory crashreportsystemdetails = crashreport.addCategory("Packet being sent");
|
||||
|
||||
@@ -465,7 +485,7 @@ index b43f87ff4b9853b5d4bbea5ff9686d64d9d0d26b..79533a1677430039f410f66b55927e1d
|
||||
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
|
||||
index 4320af392b7bd29d6a5d6da44361ffd0da16036a..797707c97dec5c89aaaeb2f2bb6ac39808f6e394 100644
|
||||
index fcccf989c25f0a259b160c4ff7873f7009e64d14..5f066ffa28b6eb6560c4645ce52f7cbc36c7d3f5 100644
|
||||
--- a/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
|
||||
@@ -477,7 +497,7 @@ index 4320af392b7bd29d6a5d6da44361ffd0da16036a..797707c97dec5c89aaaeb2f2bb6ac398
|
||||
if (this.player.containerMenu != oldContainer) {
|
||||
return;
|
||||
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
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -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) {
|
||||
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
|
||||
index a0d5082590ee03060f0dbb4770d196efc316c328..aea2720cfe7a0bfcf03653b5d527937c86a16dac 100644
|
||||
index ad740739437be632fc7fedec488a7d0c49534688..ff8580ca3e74e7e28afbfa8c2e566b98ced2dbff 100644
|
||||
--- a/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;
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ index f56e5c0f53f9b52a9247b9be9265b949494fc924..f8e0746433057297c88f0237502da856
|
||||
public static <T> TicketType<T> create(String name, Comparator<T> argumentComparator) {
|
||||
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
|
||||
index 84be48a2fb7d99fac15f2f71576e82503a84da79..6e9d9d7938049734b06a30f88e4a657dfa01265a 100644
|
||||
index 26a144e56cf906e1eb0ad52d217bcc0ef5bbd30d..3d82da439c31f9a6967077197de21e2356778112 100644
|
||||
--- a/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
|
||||
@@ -125,7 +125,7 @@ index ef245198ce6385c66f58e0dbcdebffbe6d2b625e..b7c8c2335d59853dbc97d3b9496b5e3a
|
||||
|
||||
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
|
||||
index 75c8125e20b70433fe9d143a3193d821043327c3..77071ef825951cbdcbad79f4496add9dc499e856 100644
|
||||
index 75c8125e20b70433fe9d143a3193d821043327c3..20764fba3c7cfe26cf622c3ee4848839408fa6af 100644
|
||||
--- a/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
|
||||
@@ -136,11 +136,11 @@ index 75c8125e20b70433fe9d143a3193d821043327c3..77071ef825951cbdcbad79f4496add9d
|
||||
+ private long lastMovementLoadTicket = 0;
|
||||
+
|
||||
+ 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() {
|
||||
+ this.lastMovementLoadTicket = net.minecraft.server.MinecraftServer.currentTickLong;
|
||||
+ this.lastMovementLoadTicket = net.minecraft.server.MinecraftServer.currentTick;
|
||||
+ }
|
||||
+ // Sakura end - load chunks on movement
|
||||
|
||||
|
||||
@@ -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
|
||||
index 0f8d7e9b38bd1e834b9f1f015e4e971437130164..5abe92349a31069b25a1020c3d518a1b0103bbc8 100644
|
||||
index 7499ee50e3c62c3107979ea8a100f1da96f2c980..4c53e39aa153f490a473175df00679d0d01d2bd0 100644
|
||||
--- a/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));
|
||||
@@ -425,7 +425,7 @@ index 0f8d7e9b38bd1e834b9f1f015e4e971437130164..5abe92349a31069b25a1020c3d518a1b
|
||||
// Paper 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) {
|
||||
final long diff = currentTime - tickSection;
|
||||
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);
|
||||
tps5.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);
|
||||
}
|
||||
// Paper end - rewrite chunk system
|
||||
@@ -458,7 +458,7 @@ index dcb5651d1d9b10b40430fb2f713beedf68336704..601dbdec2476757cdaf8b6a9cc7e8cae
|
||||
public boolean isChunkLoaded(int chunkX, int 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
|
||||
index b10d442b2b05a9400674031c9d140a8ac42a3255..ab8803d030353ec8ca1c727bc1c0502da00ff5fa 100644
|
||||
index 07f36cd0dea417459e7022fe7e73a5177fc7c67a..61ebb6db40626442b75cf768e1bacce3c5c09ec0 100644
|
||||
--- a/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.
|
||||
|
||||
@@ -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
|
||||
index 663fd121bf042a6a651f1b22eb01a15466c8c323..7daf9f7ea047cdd7afe031baca77fe00f2324692 100644
|
||||
index 76d4b7e9dad6536c100e5940f9f528ba2561e3b8..e80e1d7ac52ef6f81dab85916f8107bc3e9339c6 100644
|
||||
--- a/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.tickingGenerated = new AtomicInteger();
|
||||
this.playerMap = new PlayerMap();
|
||||
|
||||
@@ -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
|
||||
index f375728a95465bbcbb8581cb43e48fc0e6966858..4435e0cd1370f3720102734ac3647674d5f46730 100644
|
||||
index 1927afe8646219403e013c92a6da0a47caf5d7d5..3233e54b6f85ab03859b5a3f2912b7cfb115d050 100644
|
||||
--- a/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
|
||||
@@ -78,10 +78,10 @@ index f375728a95465bbcbb8581cb43e48fc0e6966858..4435e0cd1370f3720102734ac3647674
|
||||
public Entity(EntityType<?> type, Level world) {
|
||||
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
|
||||
index 5886f44fdc605d3b814566808d8477e09df2fd3b..7384c7f81e0f9bfe05c05561a1ec87f3fa17f010 100644
|
||||
index c811bc64d0686fdec58defb707d57e539c261b48..0925de100a7da3bba6c3fab7a0c79b2ee0d86904 100644
|
||||
--- a/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) {
|
||||
try {
|
||||
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..c8040daf71384d1fe7bd16478741b4c9cca1100c
|
||||
index 0000000000000000000000000000000000000000..dbd38e3b5b32c324eff6875269f09131425796a4
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/me/samsuik/sakura/entity/merge/EntityMergeHandler.java
|
||||
@@ -0,0 +1,76 @@
|
||||
@@ -59,7 +59,7 @@ index 0000000000000000000000000000000000000000..c8040daf71384d1fe7bd16478741b4c9
|
||||
+ *
|
||||
+ * @param tick server tick
|
||||
+ */
|
||||
+ public void expire(long tick) {
|
||||
+ public void expire(int tick) {
|
||||
+ if (tick % 200 == 0) {
|
||||
+ 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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e36f9a427d
|
||||
index 0000000000000000000000000000000000000000..2c2a26fdb3081ced574070e5e6f3a1b4c09b578d
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/me/samsuik/sakura/entity/merge/TrackedMergeHistory.java
|
||||
@@ -0,0 +1,73 @@
|
||||
@@ -363,14 +363,14 @@ index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e3
|
||||
+ return this.historyMap.get(originPosition);
|
||||
+ }
|
||||
+
|
||||
+ public void expire(long tick) {
|
||||
+ public void expire(int tick) {
|
||||
+ this.historyMap.values().removeIf(p -> p.expiry().isExpired(tick));
|
||||
+ }
|
||||
+
|
||||
+ private static final class PositionHistory {
|
||||
+ private final LongOpenHashSet positions = new LongOpenHashSet();
|
||||
+ private final Expiry expiry = new Expiry(MinecraftServer.currentTickLong, 200);
|
||||
+ private final long created = MinecraftServer.currentTickLong;
|
||||
+ private final Expiry expiry = new Expiry(MinecraftServer.currentTick, 200);
|
||||
+ private final long created = MinecraftServer.currentTick;
|
||||
+ private int cycles = 0;
|
||||
+
|
||||
+ public Expiry expiry() {
|
||||
@@ -378,7 +378,7 @@ index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e3
|
||||
+ }
|
||||
+
|
||||
+ public boolean has(long position) {
|
||||
+ this.expiry.refresh(MinecraftServer.currentTickLong);
|
||||
+ this.expiry.refresh(MinecraftServer.currentTick);
|
||||
+ return this.positions.contains(position);
|
||||
+ }
|
||||
+
|
||||
@@ -392,25 +392,25 @@ index 0000000000000000000000000000000000000000..12f12705678e260654c0af7e23e403e3
|
||||
+ }
|
||||
+
|
||||
+ 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);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
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
|
||||
+++ 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.localConfig().expire(currentTickLong); // Sakura - add local config
|
||||
worldserver.minimalTNT.clear(); // Sakura - visibility api
|
||||
+ worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities
|
||||
worldserver.localConfig().expire(currentTick); // Sakura - add local config
|
||||
+ worldserver.mergeHandler.expire(currentTick); // Sakura - merge cannon entities
|
||||
}
|
||||
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
|
||||
index ab8803d030353ec8ca1c727bc1c0502da00ff5fa..3e160ec5f14b57732f0fe66e2d3ef3a2e7ba1406 100644
|
||||
index 61ebb6db40626442b75cf768e1bacce3c5c09ec0..65a71789571f896fc25a3eec22ee7808130a1578 100644
|
||||
--- a/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.
|
||||
@@ -438,7 +438,7 @@ index ab8803d030353ec8ca1c727bc1c0502da00ff5fa..3e160ec5f14b57732f0fe66e2d3ef3a2
|
||||
this.guardEntityTick(this::tickNonPassenger, entity);
|
||||
gameprofilerfiller.pop();
|
||||
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
|
||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
||||
@@ -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
|
||||
index 7384c7f81e0f9bfe05c05561a1ec87f3fa17f010..9e426b7a588da307cbc42256f7255c95254d88a9 100644
|
||||
index 0925de100a7da3bba6c3fab7a0c79b2ee0d86904..186f1be4aca5295ca260f3808d332cb5ed77bc7e 100644
|
||||
--- a/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
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..b760b03f9ddc1fb2aed135105030fc1b5dc2c9c9
|
||||
index 0000000000000000000000000000000000000000..35454e122e87892099226ba8fd8d444664be9037
|
||||
--- /dev/null
|
||||
+++ 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;
|
||||
+
|
||||
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
@@ -58,10 +58,7 @@ index 0000000000000000000000000000000000000000..b760b03f9ddc1fb2aed135105030fc1b
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public void clear(long tick) {
|
||||
+ // trim size every 30 seconds
|
||||
+ if (tick != -1 && tick % 600 == 0)
|
||||
+ this.densityDataMap.trim();
|
||||
+ public void invalidate() {
|
||||
+ 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
|
||||
index d2542876279eec14f952f0b20d4ea665c7de00f4..af3bcb2dff44d9a734cab9610abbe5d7430c5d57 100644
|
||||
index 012bec9a32acc26f65c8efbfde341b0d15a4e822..8041737aa751bec1c51ee3d9dacd6dfb2b845265 100644
|
||||
--- a/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
|
||||
worldserver.localConfig().expire(currentTickLong); // Sakura - add local config
|
||||
worldserver.minimalTNT.clear(); // Sakura - visibility api
|
||||
worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities
|
||||
+ worldserver.densityCache.clear(currentTickLong); // Sakura - explosion density cache
|
||||
@@ -1823,6 +1823,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
|
||||
worldserver.localConfig().expire(currentTick); // Sakura - add local config
|
||||
worldserver.mergeHandler.expire(currentTick); // Sakura - merge cannon entities
|
||||
+ worldserver.densityCache.invalidate(); // Sakura - explosion density cache
|
||||
}
|
||||
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
|
||||
index 74e32f74322b3e3bc8c2e3f5f8b740025c29443e..3ad6f5f19c9fae2f00c662971eaa613c1a0ddbcf 100644
|
||||
index 80bd249e9572fd0c9ebf53c4731ed50a65290c74..fd1d9e0a8b55378c9cd06369d1850f97b63ab7d7 100644
|
||||
--- a/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 {
|
||||
@@ -182,7 +179,7 @@ index 74e32f74322b3e3bc8c2e3f5f8b740025c29443e..3ad6f5f19c9fae2f00c662971eaa613c
|
||||
|
||||
+ // Sakura start - explosion density cache
|
||||
+ if (!this.toBlow.isEmpty() && !this.level.paperConfig().environment.optimizeExplosions) {
|
||||
+ this.level.densityCache.clear(-1);
|
||||
+ this.level.densityCache.invalidate();
|
||||
+ }
|
||||
+ // Sakura end - explosion density cache
|
||||
Iterator iterator = list.iterator();
|
||||
@@ -210,19 +207,19 @@ index 74e32f74322b3e3bc8c2e3f5f8b740025c29443e..3ad6f5f19c9fae2f00c662971eaa613c
|
||||
|
||||
return blockDensity;
|
||||
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
|
||||
+++ 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
|
||||
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.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
|
||||
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
|
||||
index 8b33e35c843e5c0b8988a2ef2a38a2673035292f..5ec557652558bb44e9be7d32fc214091d29aac78 100644
|
||||
index 1aa36b456b1c635d3184aeab70d1d84266e22c4b..afb76b13f404a12a5f5b9ffe72756d31290a9a85 100644
|
||||
--- a/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 {
|
||||
@@ -231,14 +228,14 @@ index 8b33e35c843e5c0b8988a2ef2a38a2673035292f..5ec557652558bb44e9be7d32fc214091
|
||||
|
||||
+ // Sakura start - explosion density cache
|
||||
+ if (!world.paperConfig().environment.optimizeExplosions) {
|
||||
+ world.densityCache.clear(-1);
|
||||
+ world.densityCache.invalidate();
|
||||
+ }
|
||||
+ // Sakura end - explosion density cache
|
||||
world.setBlock(pos, iblockdata1, 2);
|
||||
this.updateNeighbours(world, pos);
|
||||
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
|
||||
index 76aca266d3f3222502ff4c196228f08fcd88c5f8..6a63e60d80ee53a4611dfcdd9ab974f8227fae59 100644
|
||||
index 76aca266d3f3222502ff4c196228f08fcd88c5f8..b965d1b38a0a3f08531060039e46913dff3bfd0e 100644
|
||||
--- a/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 {
|
||||
@@ -247,7 +244,7 @@ index 76aca266d3f3222502ff4c196228f08fcd88c5f8..6a63e60d80ee53a4611dfcdd9ab974f8
|
||||
|
||||
+ // Sakura start - explosion density cache
|
||||
+ if (!world.paperConfig().environment.optimizeExplosions) {
|
||||
+ world.densityCache.clear(-1);
|
||||
+ world.densityCache.invalidate();
|
||||
+ }
|
||||
+ // Sakura end - explosion density cache
|
||||
world.setBlock(blockposition1, (BlockState) iblockdata3.setValue(TripWireHookBlock.FACING, enumdirection1), 3);
|
||||
|
||||
@@ -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
|
||||
index 3e160ec5f14b57732f0fe66e2d3ef3a2e7ba1406..d9495f6585c13ed2b1cdbe971a721d5b717920aa 100644
|
||||
index 65a71789571f896fc25a3eec22ee7808130a1578..fc84d393df406cc9895ee063422afe562762d443 100644
|
||||
--- a/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.
|
||||
@@ -511,7 +511,7 @@ index a8e540c8a27135336fb2d6e37aec13d598b2000e..e64c85bf8fbd3ad0d7e8a6e4a34aed81
|
||||
// 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
|
||||
index da423a9211dd72bc531d7f0f65aab08b5c44f39c..d3ddf3c99cb6338cea6e1cad3d96c931885e5a20 100644
|
||||
index dfc6a49b2e4d7dd943a404e1f8445f9b67f41cde..4702f1d07ad32e94aeada46122f84ac68ece9af7 100644
|
||||
--- a/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 {
|
||||
@@ -608,10 +608,10 @@ index da423a9211dd72bc531d7f0f65aab08b5c44f39c..d3ddf3c99cb6338cea6e1cad3d96c931
|
||||
float blockDensity = this.level.densityCache.getDensity(vec3d, entity);
|
||||
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
|
||||
index 67e5a3ae24b131ee1579a06d8b10ba9b0ac1ad41..d65a8857fd90063e277141d0e9fd553e39fc0880 100644
|
||||
index 8e12d473bfd7dad4dfda8bba503f475151da0ad1..eaafb99543869234e6bb8eb227bf9a0d6e8346d0 100644
|
||||
--- a/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;
|
||||
|
||||
@@ -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
|
||||
index 8126c4fdbbc586cf3722c6ee2986338de044602e..0a8f593784322454335236d6f0dbb6ec9a9b8332 100644
|
||||
index f3832bf2064117ef2fe804ae3fd679b1f2b0343b..9051dc762e48191fd56d26e0d0499ef12b10a240 100644
|
||||
--- 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
|
||||
@@ -336,10 +336,16 @@ public final class ChunkEntitySlices {
|
||||
@@ -98,10 +98,10 @@ index efc0c1acc8239dd7b00211a1d3bfd3fc3b2c810c..0ffbc8b459c3475ff0a9c307cb7bd144
|
||||
\ 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
|
||||
index 70ce20d946287a7449da4efc958be5a9fa683afe..503e5afa3d9130738a9374e591277aae9dc08282 100644
|
||||
index eaafb99543869234e6bb8eb227bf9a0d6e8346d0..ec47e7da3c06ee74e0c134e4a881ab373fc68af8 100644
|
||||
--- a/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);
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ index 70ce20d946287a7449da4efc958be5a9fa683afe..503e5afa3d9130738a9374e591277aae
|
||||
this.getProfiler().incrementCounter("getEntities");
|
||||
|
||||
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 (maxCount != Integer.MAX_VALUE) {
|
||||
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..c5eb573f946d24d2a44a46e0f395e00e4dc29bd6
|
||||
index 0000000000000000000000000000000000000000..e52cae27c2bbf4fa02d49d1c69d8e1240fddfb81
|
||||
--- /dev/null
|
||||
+++ 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;
|
||||
+
|
||||
+import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
+import me.samsuik.sakura.utils.objects.Expiry;
|
||||
+import com.google.common.cache.Cache;
|
||||
+import com.google.common.cache.CacheBuilder;
|
||||
+import net.minecraft.core.BlockPos;
|
||||
+
|
||||
+import java.util.concurrent.TimeUnit;
|
||||
+
|
||||
+public final class DurableBlockManager {
|
||||
+ private final Long2ObjectOpenHashMap<DurableBlock> blocks = new Long2ObjectOpenHashMap<>();
|
||||
+ private long serverTick;
|
||||
+ private final Cache<BlockPos, DurableBlock> durableBlocks = CacheBuilder.newBuilder()
|
||||
+ .expireAfterAccess(1, TimeUnit.MINUTES)
|
||||
+ .maximumSize(65534)
|
||||
+ .build();
|
||||
+
|
||||
+ public boolean damage(BlockPos pos, DurableMaterial material) {
|
||||
+ long packed = pos.asLong();
|
||||
+ // Expires after 1200 ticks (1 minute) without any changes.
|
||||
+ DurableBlock block = this.blocks.computeIfAbsent(packed, k -> new DurableBlock(
|
||||
+ new Expiry(this.serverTick, 1200),
|
||||
+ material.durability()
|
||||
+ ));
|
||||
+
|
||||
+ if (block.damage()) {
|
||||
+ this.blocks.remove(packed);
|
||||
+ return true;
|
||||
+ } else {
|
||||
+ block.getExpiry().refresh(this.serverTick);
|
||||
+ return false;
|
||||
+ DurableBlock block = this.durableBlocks.getIfPresent(pos);
|
||||
+ if (block == null) {
|
||||
+ this.durableBlocks.put(pos, block = new DurableBlock(material.durability()));
|
||||
+ }
|
||||
+ return block.damage();
|
||||
+ }
|
||||
+
|
||||
+ public int durability(BlockPos pos, DurableMaterial material) {
|
||||
+ DurableBlock block = this.blocks.get(pos.asLong());
|
||||
+ return block != null ? block.getDurability() : material.durability();
|
||||
+ }
|
||||
+
|
||||
+ public void expire(long tick) {
|
||||
+ if (tick % 200 == 0) {
|
||||
+ this.blocks.values().removeIf(block -> block.getExpiry().isExpired(tick));
|
||||
+ }
|
||||
+ this.serverTick = tick;
|
||||
+ final DurableBlock block = this.durableBlocks.getIfPresent(pos);
|
||||
+ return block != null ? block.durability() : material.durability();
|
||||
+ }
|
||||
+
|
||||
+ private static final class DurableBlock {
|
||||
+ private final Expiry expiry;
|
||||
+ private int durability;
|
||||
+
|
||||
+ public DurableBlock(Expiry expiry, int durability) {
|
||||
+ this.expiry = expiry;
|
||||
+ public DurableBlock(int durability) {
|
||||
+ this.durability = durability;
|
||||
+ }
|
||||
+
|
||||
+ public Expiry getExpiry() {
|
||||
+ return this.expiry;
|
||||
+ }
|
||||
+
|
||||
+ public int getDurability() {
|
||||
+ public int 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
|
||||
index af3bcb2dff44d9a734cab9610abbe5d7430c5d57..479e10d3b431ce1292c97b4c2af18c79433e43e8 100644
|
||||
index 8041737aa751bec1c51ee3d9dacd6dfb2b845265..7073914cfd5759bea92ce098ad36a86afee5dd37 100644
|
||||
--- a/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
|
||||
worldserver.minimalTNT.clear(); // Sakura - visibility api
|
||||
worldserver.mergeHandler.expire(currentTickLong); // Sakura - merge cannon entities
|
||||
worldserver.densityCache.clear(currentTickLong); // Sakura - explosion density cache
|
||||
+ worldserver.durabilityManager.expire(currentTickLong); // Sakura
|
||||
@@ -1824,6 +1824,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||
worldserver.localConfig().expire(currentTick); // Sakura - add local config
|
||||
worldserver.mergeHandler.expire(currentTick); // Sakura - merge cannon entities
|
||||
worldserver.densityCache.invalidate(); // Sakura - explosion density cache
|
||||
+ worldserver.redstoneTracker.expire(currentTick); // Sakura
|
||||
}
|
||||
this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
|
||||
|
||||
@@ -122,7 +104,7 @@ index a8008c7550488be34b51f4280f5569170b1ebd1d..2e5a46b9d27b930870c68dbde93d8731
|
||||
public String getDescriptionId() {
|
||||
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
|
||||
index fef6966070e0b539f246293652140fb9504c06bd..1c57725cef4bb0613b4bb539814c914aed5c179d 100644
|
||||
index 4702f1d07ad32e94aeada46122f84ac68ece9af7..da6f8d2f9b27de6c256920187c9841536842147b 100644
|
||||
--- a/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 {
|
||||
@@ -174,11 +156,11 @@ index fef6966070e0b539f246293652140fb9504c06bd..1c57725cef4bb0613b4bb539814c914a
|
||||
Entity sourceEntity = this.source == null ? null : this.source;
|
||||
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
|
||||
index 17dadcfbc016992c0c999d2b02da69b4c8f0712c..603b2e94e36570441567a4ea8481f032f0571fa4 100644
|
||||
index ec47e7da3c06ee74e0c134e4a881ab373fc68af8..88aa465a4bc6ae79dbad8dc8ecc21345f70abf0b 100644
|
||||
--- a/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
|
||||
public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api
|
||||
@@ -697,6 +697,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||
// 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.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
|
||||
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315f68d7b00
|
||||
index 0000000000000000000000000000000000000000..2e322ac7c8751ab4586fcce7974c26dacad18e4a
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java
|
||||
@@ -0,0 +1,285 @@
|
||||
@@ -135,7 +135,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
|
||||
+ long key = cacheKey(position, previous, next);
|
||||
+ 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);
|
||||
+ return true;
|
||||
+ }
|
||||
@@ -181,7 +181,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
|
||||
+
|
||||
+ public boolean isTracked(BlockPos position) {
|
||||
+ 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() {
|
||||
@@ -242,7 +242,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
|
||||
+
|
||||
+ RedstoneCache redstoneCache = new RedstoneCache(
|
||||
+ wires, updates, connected,
|
||||
+ new Expiry(MinecraftServer.currentTickLong, 200)
|
||||
+ new Expiry(MinecraftServer.currentTick, 200)
|
||||
+ );
|
||||
+
|
||||
+ // 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;
|
||||
+
|
||||
+ this.wireCaches.values().removeIf(cache -> {
|
||||
@@ -324,7 +324,7 @@ index 0000000000000000000000000000000000000000..4f5af6e241b0194ed982144fd9320315
|
||||
+ });
|
||||
+
|
||||
+ // 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
|
||||
index 603b2e94e36570441567a4ea8481f032f0571fa4..456eb52fd5fff7950d64dedb36cee011448c6e89 100644
|
||||
index 88aa465a4bc6ae79dbad8dc8ecc21345f70abf0b..d82d64c98fc7624dfcc86fcbf49cde108bb34ede 100644
|
||||
--- a/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.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
|
||||
@@ -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
|
||||
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 {
|
||||
BlockState iblockdata2 = this.getBlockState(pos);
|
||||
|
||||
|
||||
@@ -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
|
||||
index ea0d9335446b20073b9aafb9de453097355db79c..d3b3194751df29ac5bd12339dc64695d308780d3 100644
|
||||
index 4423973d4d9a2c3879d98d1d4c8b8c117c677ac5..634a2e000ad788525fbb9f76be9cab8b0397dccc 100644
|
||||
--- a/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 {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ index a5d13c6b0d8765e4a65b43f5835fd907738e1da4..19f0d8cf94a60b66cead3c129ded69fc
|
||||
protected int getExplosionCount() {
|
||||
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
|
||||
index c4fb10b05f88e3d743ef2a58dd4be09c167a04ee..f1f07e69082d3c43b4b2792af2115ef5d7aef452 100644
|
||||
index deb032f9e80b2a001e2908a81bd62b00c87ba02e..9241f5cfc79f2f75ddffd41c012879306c94af4a 100644
|
||||
--- a/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
|
||||
@@ -475,7 +475,7 @@ index 4d0cfa1f96a04713cb1d51c7aaaf91374a0d6c17..96c43df6834e20a9e04eb095f36a644e
|
||||
// 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
|
||||
index 21c6c8710add54a811fcd6d68ec75ad124219bc9..a29d85de45a6f96047a79cecbf17a797330d1ea5 100644
|
||||
index 90f2a510fb2b33534f12ec4d86d9bf33bd532b58..488748a0c34b3c7e7f3348ebbbb5155c2c353368 100644
|
||||
--- a/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 {
|
||||
@@ -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;
|
||||
+ // Sakura start - physics version api
|
||||
+ } else if (entity.physics().before(1_14_0)) {
|
||||
+ hitResult = entity.level().rayTrace(vec3d1, source);
|
||||
+ hitResult = entity.level().clipLegacy(vec3d1, source);
|
||||
} 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, 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 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
|
||||
index 456eb52fd5fff7950d64dedb36cee011448c6e89..f685c3c894963d5100fdf5d5bda99adf248f41ec 100644
|
||||
index d82d64c98fc7624dfcc86fcbf49cde108bb34ede..062bc318e9c4e3b9a6429ce0eaaa29081cd1d227 100644
|
||||
--- a/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);
|
||||
}
|
||||
// Paper end - optimise random ticking
|
||||
+ // 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) {
|
||||
+ // May deviate from vanilla here; I remember noticing a bug and there's no fix commit.
|
||||
+ int i = Mth.floor(vec3d1.x);
|
||||
+ int j = Mth.floor(vec3d1.y);
|
||||
+ int k = Mth.floor(vec3d1.z);
|
||||
+ int l = Mth.floor(vec3d.x);
|
||||
+ int i1 = Mth.floor(vec3d.y);
|
||||
+ int j1 = Mth.floor(vec3d.z);
|
||||
+ BlockPos.MutableBlockPos blockposition = new BlockPos.MutableBlockPos(l, i1, j1);
|
||||
+ LevelChunk chunk = this.getChunkIfLoaded(l >> 4, j1 >> 4);
|
||||
+ public final net.minecraft.world.phys.BlockHitResult.Type clipLegacy(Vec3 from, Vec3 to) {
|
||||
+ int toX = Mth.floor(to.x);
|
||||
+ int toY = Mth.floor(to.y);
|
||||
+ int toZ = Mth.floor(to.z);
|
||||
+ int fromX = Mth.floor(from.x);
|
||||
+ int fromY = Mth.floor(from.y);
|
||||
+ int fromZ = Mth.floor(from.z);
|
||||
+
|
||||
+ // 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) {
|
||||
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS;
|
||||
+ }
|
||||
+
|
||||
+ BlockState iblockdata = chunk.getBlockState(blockposition);
|
||||
+ net.minecraft.world.phys.shapes.VoxelShape shape = iblockdata.getShape(this, blockposition);
|
||||
+
|
||||
+ BlockState blockstate = chunk.getBlockState(blockPos);
|
||||
+ VoxelShape shape = blockstate.getShape(this, blockPos);
|
||||
+ 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;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ int k1 = 200;
|
||||
+
|
||||
+ while (k1-- >= 0) {
|
||||
+ if (l == i && i1 == j && j1 == k) {
|
||||
+ for (int steps = 0; steps < 16; ++steps) {
|
||||
+ if (fromX == toX && fromY == toY && fromZ == toZ) {
|
||||
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS;
|
||||
+ }
|
||||
+
|
||||
+ boolean flag3 = true;
|
||||
+ boolean flag4 = true;
|
||||
+ boolean flag5 = true;
|
||||
+ boolean moveX = true;
|
||||
+ boolean moveY = true;
|
||||
+ boolean moveZ = true;
|
||||
+ double d0 = 999.0D;
|
||||
+ double d1 = 999.0D;
|
||||
+ double d2 = 999.0D;
|
||||
+
|
||||
+ if (i > l) {
|
||||
+ d0 = (double) l + 1.0D;
|
||||
+ } else if (i < l) {
|
||||
+ d0 = (double) l + 0.0D;
|
||||
+ if (toX > fromX) {
|
||||
+ d0 = (double) fromX + 1.0D;
|
||||
+ } else if (toX < fromX) {
|
||||
+ d0 = (double) fromX + 0.0D;
|
||||
+ } else {
|
||||
+ flag3 = false;
|
||||
+ moveX = false;
|
||||
+ }
|
||||
+
|
||||
+ if (j > i1) {
|
||||
+ d1 = (double) i1 + 1.0D;
|
||||
+ } else if (j < i1) {
|
||||
+ d1 = (double) i1 + 0.0D;
|
||||
+ if (toY > fromY) {
|
||||
+ d1 = (double) fromY + 1.0D;
|
||||
+ } else if (toY < fromY) {
|
||||
+ d1 = (double) fromY + 0.0D;
|
||||
+ } else {
|
||||
+ flag4 = false;
|
||||
+ moveY = false;
|
||||
+ }
|
||||
+
|
||||
+ if (k > j1) {
|
||||
+ d2 = (double) j1 + 1.0D;
|
||||
+ } else if (k < j1) {
|
||||
+ d2 = (double) j1 + 0.0D;
|
||||
+ if (toZ > fromZ) {
|
||||
+ d2 = (double) fromZ + 1.0D;
|
||||
+ } else if (toZ < fromZ) {
|
||||
+ d2 = (double) fromZ + 0.0D;
|
||||
+ } else {
|
||||
+ flag5 = false;
|
||||
+ moveZ = false;
|
||||
+ }
|
||||
+
|
||||
+ double d3 = 999.0D;
|
||||
+ double d4 = 999.0D;
|
||||
+ double d5 = 999.0D;
|
||||
+ double d6 = vec3d1.x - vec3d.x;
|
||||
+ double d7 = vec3d1.y - vec3d.y;
|
||||
+ double d8 = vec3d1.z - vec3d.z;
|
||||
+ double d6 = to.x - from.x;
|
||||
+ double d7 = to.y - from.y;
|
||||
+ double d8 = to.z - from.z;
|
||||
+
|
||||
+ if (flag3) {
|
||||
+ d3 = (d0 - vec3d.x) / d6;
|
||||
+ }
|
||||
+ if (moveX) d3 = (d0 - from.x) / d6;
|
||||
+ if (moveY) d4 = (d1 - from.y) / d7;
|
||||
+ if (moveZ) d5 = (d2 - from.z) / d8;
|
||||
+
|
||||
+ if (flag4) {
|
||||
+ d4 = (d1 - vec3d.y) / d7;
|
||||
+ }
|
||||
+
|
||||
+ 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;
|
||||
+ 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 moveDir;
|
||||
+ if (d3 < d4 && d3 < d5) {
|
||||
+ enumdirection = i > l ? Direction.WEST : Direction.EAST;
|
||||
+ vec3d = new net.minecraft.world.phys.Vec3(d0, vec3d.y + d7 * d3, vec3d.z + d8 * d3);
|
||||
+ moveDir = toX > fromX ? Direction.WEST : Direction.EAST;
|
||||
+ from = new Vec3(d0, from.y + d7 * d3, from.z + d8 * d3);
|
||||
+ } else if (d4 < d5) {
|
||||
+ enumdirection = j > i1 ? Direction.DOWN : Direction.UP;
|
||||
+ vec3d = new net.minecraft.world.phys.Vec3(vec3d.x + d6 * d4, d1, vec3d.z + d8 * d4);
|
||||
+ moveDir = toY > fromY ? Direction.DOWN : Direction.UP;
|
||||
+ from = new Vec3(from.x + d6 * d4, d1, from.z + d8 * d4);
|
||||
+ } else {
|
||||
+ enumdirection = k > j1 ? Direction.NORTH : Direction.SOUTH;
|
||||
+ vec3d = new net.minecraft.world.phys.Vec3(vec3d.x + d6 * d5, vec3d.y + d7 * d5, d2);
|
||||
+ moveDir = toZ > fromZ ? Direction.NORTH : Direction.SOUTH;
|
||||
+ from = new Vec3(from.x + d6 * d5, from.y + d7 * d5, d2);
|
||||
+ }
|
||||
+
|
||||
+ l = Mth.floor(vec3d.x) - (enumdirection == Direction.EAST ? 1 : 0);
|
||||
+ i1 = Mth.floor(vec3d.y) - (enumdirection == Direction.UP ? 1 : 0);
|
||||
+ j1 = Mth.floor(vec3d.z) - (enumdirection == Direction.SOUTH ? 1 : 0);
|
||||
+ blockposition.set(l, i1, j1);
|
||||
+
|
||||
+ int chunkX = l >> 4;
|
||||
+ int chunkZ = j1 >> 4;
|
||||
+ fromX = Mth.floor(from.x) - (moveDir == Direction.EAST ? 1 : 0);
|
||||
+ fromY = Mth.floor(from.y) - (moveDir == Direction.UP ? 1 : 0);
|
||||
+ fromZ = Mth.floor(from.z) - (moveDir == Direction.SOUTH ? 1 : 0);
|
||||
+ blockPos.set(fromX, fromY, fromZ);
|
||||
+
|
||||
+ int chunkX = fromX >> 4;
|
||||
+ int chunkZ = fromZ >> 4;
|
||||
+ if (chunkX != chunk.locX || chunkZ != chunk.locZ) {
|
||||
+ chunk = this.getChunkIfLoaded(chunkX, chunkZ);
|
||||
+ }
|
||||
+
|
||||
+ if (chunk == null) {
|
||||
+ return net.minecraft.world.phys.BlockHitResult.Type.MISS;
|
||||
+ }
|
||||
+
|
||||
+ iblockdata = chunk.getBlockState(blockposition);
|
||||
+ shape = iblockdata.getShape(this, blockposition);
|
||||
+
|
||||
+ blockstate = chunk.getBlockState(blockPos);
|
||||
+ shape = blockstate.getShape(this, blockPos);
|
||||
+ 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.MISS;
|
||||
+ }
|
||||
+
|
||||
@@ -720,63 +694,54 @@ index 456eb52fd5fff7950d64dedb36cee011448c6e89..f685c3c894963d5100fdf5d5bda99adf
|
||||
+ double y = vec3d1.y - vec3d.y;
|
||||
+ double z = vec3d1.z - vec3d.z;
|
||||
+
|
||||
+ double minXd = clip(bb.minX, x, vec3d.x);
|
||||
+ double minYd = clip(bb.minY, y, vec3d.y);
|
||||
+ double minZd = clip(bb.minZ, z, vec3d.z);
|
||||
+ double maxXd = clip(bb.maxX, x, vec3d.x);
|
||||
+ double maxYd = clip(bb.maxY, y, vec3d.y);
|
||||
+ double maxZd = clip(bb.maxZ, z, vec3d.z);
|
||||
+ double minXd = this.clip(bb.minX, x, vec3d.x);
|
||||
+ double minYd = this.clip(bb.minY, y, vec3d.y);
|
||||
+ double minZd = this.clip(bb.minZ, z, vec3d.z);
|
||||
+ double maxXd = this.clip(bb.maxX, x, vec3d.x);
|
||||
+ double maxYd = this.clip(bb.maxY, y, vec3d.y);
|
||||
+ 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)
|
||||
+ || clipX(vec3d, bb, maxXd, y, z) || clipY(vec3d, bb, maxYd, x, z) || clipZ(vec3d, bb, maxZd, x, y);
|
||||
+ return this.clipX(vec3d, bb, minXd, y, z) || this.clipY(vec3d, bb, minYd, x, z) || this.clipZ(vec3d, bb, minZd, 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) {
|
||||
+ // 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) {
|
||||
+ return -1.0;
|
||||
+ }
|
||||
+
|
||||
+ 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) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ y = vec3d.y + y * n;
|
||||
+ z = vec3d.z + z * n;
|
||||
+
|
||||
+ 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) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ x = vec3d.x + x * n;
|
||||
+ z = vec3d.z + z * n;
|
||||
+
|
||||
+ 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) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ x = vec3d.x + x * n;
|
||||
+ y = vec3d.y + y * n;
|
||||
+
|
||||
+ return x >= bb.minX && x <= bb.maxX && y >= bb.minY && y <= bb.maxY;
|
||||
+ }
|
||||
+ // 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.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
|
||||
index 1ea1232a5ba3e48eef3a139d6487c9a190155ebd..4cf5147c8b089c3fa5476a05501fae0d9afaf341 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/block/FallingBlock.java
|
||||
|
||||
@@ -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
|
||||
index b2c99286e89f7f04aaa6efed245d344f15aa35fb..925809750c80a74d80255f6b611c486915530b34 100644
|
||||
index e80e1d7ac52ef6f81dab85916f8107bc3e9339c6..47e1bec18c9bed6028b63ed6a1bcc66bcd4df238 100644
|
||||
--- a/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) {
|
||||
continue;
|
||||
}
|
||||
@@ -20,10 +20,10 @@ index b2c99286e89f7f04aaa6efed245d344f15aa35fb..925809750c80a74d80255f6b611c4869
|
||||
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
|
||||
+ private final int playerUpdateInterval;
|
||||
+ private Vec3 entityPosition;
|
||||
|
||||
@@ -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
|
||||
index 726910c21440c62e35220294e4b639f4a8d242e2..64978e2c3bb5056e85b50a04f2d7fa8f8c76cd4b 100644
|
||||
index 4ed468653f2487e62ad3c187d558978b05a3264d..ec0a3764e129faecce4fd35f4e301a6fe8a9061b 100644
|
||||
--- a/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 {
|
||||
this.level.densityCache.clear(-1);
|
||||
this.level.densityCache.invalidate();
|
||||
}
|
||||
// Sakura end - explosion density cache
|
||||
+ // Sakura start - config for explosions dropping items
|
||||
|
||||
@@ -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
|
||||
index 2f7e51b1509d3db78ed8dbd073e2f9ded820390b..a4b59cb05111aed52758061c314aafc56d75dc2d 100644
|
||||
index 195de6437fce730d45777afae91e3ae9ba99bd0b..7b383a7a301e2164df56f420c3d0e6528ed603d6 100644
|
||||
--- a/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) {
|
||||
FoodProperties foodinfo = (FoodProperties) stack.get(DataComponents.FOOD);
|
||||
|
||||
@@ -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
|
||||
index 925809750c80a74d80255f6b611c486915530b34..0ba22484917ebb88a23a33c0ab5a171ae4630c59 100644
|
||||
index 47e1bec18c9bed6028b63ed6a1bcc66bcd4df238..80c5515b481c01e3a2fb59d4a69bc0a0d2b01792 100644
|
||||
--- a/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();
|
||||
// Paper end - remove allocation of Vec3D here
|
||||
int i = ChunkMap.this.getPlayerViewDistance(player);
|
||||
@@ -19,9 +19,9 @@ index 925809750c80a74d80255f6b611c486915530b34..0ba22484917ebb88a23a33c0ab5a171a
|
||||
+ // Sakura end - entity tracking range modifier
|
||||
double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper
|
||||
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
|
||||
index 95b582042133624a47c67719f86990862a539030..62783c4c951089cbc00073b5945ce56ec7dbae7a 100644
|
||||
index 007bc568d3fb23f08790044aa3171727996927dc..4a5844be3683f502eebe01eed7ff1c2a6bf99962 100644
|
||||
--- a/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
|
||||
@@ -33,10 +33,10 @@ index 95b582042133624a47c67719f86990862a539030..62783c4c951089cbc00073b5945ce56e
|
||||
public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) {
|
||||
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
|
||||
index e340694c74add2f0e06b3e8bc9cc0bd50699e119..817b7248e4e055a66d1edbdd3d6e2ce854ff9542 100644
|
||||
index ff8580ca3e74e7e28afbfa8c2e566b98ced2dbff..c989f7051167ad6b83f0c916aefd068198711dab 100644
|
||||
--- a/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();
|
||||
}
|
||||
|
||||
|
||||
@@ -42,10 +42,10 @@ index 5db5ba026462ca642dcee718af732f80fadabef5..51e26395b53628b34b1f7f68935a9ba4
|
||||
|
||||
boolean isEmpty();
|
||||
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
|
||||
+++ 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--;
|
||||
toRemove.add(tickingblockentity); // Paper - Fix MC-117075; use removeAll
|
||||
// Spigot end
|
||||
|
||||
@@ -59,10 +59,10 @@ index c03608fec96b51e1867f43d8f42e5aefb1520e46..ca2e49c4e46e5c05091e11b8254e2ae5
|
||||
* Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback
|
||||
* 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
|
||||
index fb761723228ed9c2fafa15299866e28e8efac788..f3507f7b2ba0e838af2f68ad73aaee7c0421f9f3 100644
|
||||
index 0ec9f586a66130227b1a21db3634edd6fe677db4..3091b303327fc58065cf0e341f83364be9da532e 100644
|
||||
--- a/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
|
||||
((io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler) Bukkit.getGlobalRegionScheduler()).tick();
|
||||
getAllLevels().forEach(level -> {
|
||||
Reference in New Issue
Block a user