From 91ce35606f22d364618692367be15758f0b27e56 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 --- .../net/minecraft/server/ChunkRegionLoader.java | 1 + src/main/java/net/minecraft/server/Entity.java | 6 ++++++ .../java/net/minecraft/server/EntityArrow.java | 7 +++++++ .../net/minecraft/server/EntityEnderSignal.java | 7 +++++++ .../net/minecraft/server/EntityFireworks.java | 7 +++++++ .../net/minecraft/server/EntityLlamaSpit.java | 7 +++++++ .../net/minecraft/server/EntityProjectile.java | 7 +++++++ .../java/net/pl3x/purpur/PurpurWorldConfig.java | 16 ++++++++++++++++ 8 files changed, 58 insertions(+) diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java index 1685237df..a8c0f9216 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java @@ -468,6 +468,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 ce0821a65..b92e956e6 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -1590,6 +1590,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } + // Purpur start + public boolean canSaveToDisk() { + return true; + } + // Purpur end + public boolean c(NBTTagCompound nbttagcompound) { String s = this.getSaveID(); diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java index 9c97edf9c..48da1e662 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java @@ -68,6 +68,13 @@ public abstract class EntityArrow extends Entity implements IProjectile { } + // Purpur start + @Override + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + // Purpur end + public void a(SoundEffect soundeffect) { this.av = soundeffect; } diff --git a/src/main/java/net/minecraft/server/EntityEnderSignal.java b/src/main/java/net/minecraft/server/EntityEnderSignal.java index 7ebd7da1c..74f8257ec 100644 --- a/src/main/java/net/minecraft/server/EntityEnderSignal.java +++ b/src/main/java/net/minecraft/server/EntityEnderSignal.java @@ -19,6 +19,13 @@ 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(itemstack.cloneItemStack(), (itemstack1) -> { // Purpur - decompile error diff --git a/src/main/java/net/minecraft/server/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java index 5c3731f68..ce3168e5d 100644 --- a/src/main/java/net/minecraft/server/EntityFireworks.java +++ b/src/main/java/net/minecraft/server/EntityFireworks.java @@ -21,6 +21,13 @@ public class EntityFireworks extends Entity implements IProjectile { super(entitytypes, world); } + // Purpur start + @Override + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + // Purpur end + // Spigot Start - copied from tick @Override public void inactiveTick() { diff --git a/src/main/java/net/minecraft/server/EntityLlamaSpit.java b/src/main/java/net/minecraft/server/EntityLlamaSpit.java index b7a92e100..b95ee50a4 100644 --- a/src/main/java/net/minecraft/server/EntityLlamaSpit.java +++ b/src/main/java/net/minecraft/server/EntityLlamaSpit.java @@ -19,6 +19,13 @@ public class EntityLlamaSpit extends Entity implements IProjectile { this.setPosition(entityllama.locX() - (double) (entityllama.getWidth() + 1.0F) * 0.5D * (double) MathHelper.sin(entityllama.aI * 0.017453292F), entityllama.getHeadY() - 0.10000000149011612D, entityllama.locZ() + (double) (entityllama.getWidth() + 1.0F) * 0.5D * (double) MathHelper.cos(entityllama.aI * 0.017453292F)); } + // Purpur start + @Override + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + // Purpur end + @Override public void tick() { super.tick(); diff --git a/src/main/java/net/minecraft/server/EntityProjectile.java b/src/main/java/net/minecraft/server/EntityProjectile.java index f5c8074dc..674f2ccc7 100644 --- a/src/main/java/net/minecraft/server/EntityProjectile.java +++ b/src/main/java/net/minecraft/server/EntityProjectile.java @@ -35,6 +35,13 @@ public abstract class EntityProjectile extends Entity implements IProjectile { this.projectileSource = (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity(); // CraftBukkit } + // Purpur start + @Override + public boolean canSaveToDisk() { + return world != null && world.purpurConfig.saveProjectilesToDisk; + } + // Purpur end + public void a(Entity entity, float f, float f1, float f2, float f3, float f4) { float f5 = -MathHelper.sin(f1 * 0.017453292F) * MathHelper.cos(f * 0.017453292F); float f6 = -MathHelper.sin((f + f2) * 0.017453292F); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index d4b4dfdd3..51585a7d8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -164,6 +164,7 @@ public class PurpurWorldConfig { public boolean playerSleepOnlyWithCondition = false; public String playerSleepCondition = "time >= 12541 && time <= 23458"; public boolean useBetterMending = false; + public boolean saveProjectilesToDisk = true; private void gameplayMechanicsSettings() { boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); @@ -192,6 +193,21 @@ public class PurpurWorldConfig { playerSleepOnlyWithCondition = getBoolean("gameplay-mechanics.player.sleep.only-with-condition", playerSleepOnlyWithCondition); playerSleepCondition = getString("gameplay-mechanics.player.sleep.condition", playerSleepCondition); useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); + if (PurpurConfig.version < 4) { + Object oldVal = PurpurConfig.config.get("world-settings.default.gameplay-mechanics.saveProjectilesToDisk"); + if (oldVal instanceof Boolean) { + PurpurConfig.config.addDefault("world-settings.default.gameplay-mechanics.save-projectiles-to-disk", oldVal); + PurpurConfig.config.set("world-settings.default.gameplay-mechanics.save-projectiles-to-disk", oldVal); + saveProjectilesToDisk = (boolean) oldVal; + } + oldVal = PurpurConfig.config.get("world-settings." + worldName + ".gameplay-mechanics.saveProjectilesToDisk"); + if (oldVal instanceof Boolean) { + PurpurConfig.config.set("world-settings." + worldName + ".gameplay-mechanics.save-projectiles-to-disk", oldVal); + saveProjectilesToDisk = (boolean) oldVal; + } + set("gameplay-mechanics.saveProjectilesToDisk", null); + } + saveProjectilesToDisk = getBoolean("gameplay-mechanics.save-projectiles-to-disk", saveProjectilesToDisk); } public int elytraDamagePerSecond = 1; -- 2.24.0