From 9282eae4be5cd0125c1e71e4038064cf433c7596 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 18 Feb 2020 20:07:08 -0600 Subject: [PATCH] Add option to disable saving projectiles to disk --- .../java/net/minecraft/server/ChunkRegionLoader.java | 1 + src/main/java/net/minecraft/server/Entity.java | 6 ++++++ .../java/net/minecraft/server/EntityEnderSignal.java | 9 ++++++++- src/main/java/net/minecraft/server/IProjectile.java | 7 +++++++ src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 2 ++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java index ac58fcb79..0041027ec 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java @@ -467,6 +467,7 @@ public class ChunkRegionLoader { while (iterator1.hasNext()) { Entity entity = (Entity) iterator1.next(); + if (!entity.canSaveToDisk()) continue; // Purpur NBTTagCompound nbttagcompound4 = new NBTTagCompound(); // Paper start if (asyncsavedata == null && !entity.dead && (int) Math.floor(entity.locX()) >> 4 != chunk.getPos().x || (int) Math.floor(entity.locZ()) >> 4 != chunk.getPos().z) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index a219443b3..35edfaa15 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -303,6 +303,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.headHeight = this.getHeadHeight(EntityPose.STANDING, this.size); } + // Purpur start + public boolean canSaveToDisk() { + return true; + } + // Purpur end + public boolean isSpectator() { return false; } diff --git a/src/main/java/net/minecraft/server/EntityEnderSignal.java b/src/main/java/net/minecraft/server/EntityEnderSignal.java index 84bf27299..82a5aaf5b 100644 --- a/src/main/java/net/minecraft/server/EntityEnderSignal.java +++ b/src/main/java/net/minecraft/server/EntityEnderSignal.java @@ -19,9 +19,16 @@ public class EntityEnderSignal extends Entity { this.setPosition(d0, d1, d2); } + // Purpur start + @Override + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + // Purpur end + public void b(ItemStack itemstack) { if (itemstack.getItem() != Items.ENDER_EYE || itemstack.hasTag()) { - this.getDataWatcher().set(EntityEnderSignal.b, SystemUtils.a((Object) itemstack.cloneItemStack(), (itemstack1) -> { + this.getDataWatcher().set(EntityEnderSignal.b, SystemUtils.a(itemstack.cloneItemStack(), (itemstack1) -> { // Purpur - decompile error itemstack1.setCount(1); })); } diff --git a/src/main/java/net/minecraft/server/IProjectile.java b/src/main/java/net/minecraft/server/IProjectile.java index a961f5d5d..c5d788f22 100644 --- a/src/main/java/net/minecraft/server/IProjectile.java +++ b/src/main/java/net/minecraft/server/IProjectile.java @@ -18,6 +18,13 @@ public abstract class IProjectile extends Entity { super(entitytypes, world); } + // Purpur start + @Override + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + // Purpur end + public void setShooter(@Nullable Entity entity) { if (entity != null) { this.shooter = entity.getUniqueID(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 54208a018..551d0ae31 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -118,11 +118,13 @@ public class PurpurWorldConfig { public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean milkCuresBadOmen = true; + public boolean saveProjectilesToDisk = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; private void miscGameplayMechanicsSettings() { disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); + saveProjectilesToDisk = getBoolean("gameplay-mechanics.save-projectiles-to-disk", saveProjectilesToDisk); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); } -- 2.26.2