From 45a5536c2818a6513a6819b879d3c1df14e8c318 Mon Sep 17 00:00:00 2001 From: Encode42 Date: Tue, 9 Mar 2021 16:08:40 -0500 Subject: [PATCH] Various Ender Pearl configuration options (#191) --- ...er-Pearl-cooldown-damage-and-Endermi.patch | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch diff --git a/patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch new file mode 100644 index 000000000..a3fce18d9 --- /dev/null +++ b/patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -0,0 +1,70 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Encode42 +Date: Sun, 7 Mar 2021 19:08:16 -0500 +Subject: [PATCH] Configurable Ender Pearl cooldown, damage, and Endermite RNG + +- Survival and Creative Cooldown speed +- Damage dealt on pearl usage +- Endermite spawn chance + +diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java +index e8650c1bfa8f94ba461b7094125679112d825980..060ac3be0c08a297c456c650400c9f56afd0114d 100644 +--- a/src/main/java/net/minecraft/server/EntityEnderPearl.java ++++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java +@@ -53,7 +53,7 @@ public class EntityEnderPearl extends EntityProjectileThrowable { + Bukkit.getPluginManager().callEvent(teleEvent); + + if (!teleEvent.isCancelled() && !entityplayer.playerConnection.isDisconnected()) { +- if (this.random.nextFloat() < 0.05F && this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING)) { ++ if (this.random.nextFloat() < this.world.purpurConfig.enderPearlEndermiteChance && this.world.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING)) { // Purpur + EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.a(this.world); + + entityendermite.setPlayerSpawned(true); +@@ -68,7 +68,7 @@ public class EntityEnderPearl extends EntityProjectileThrowable { + entityplayer.playerConnection.teleport(teleEvent.getTo()); + entity.fallDistance = 0.0F; + CraftEventFactory.entityDamage = this; +- entity.damageEntity(DamageSource.FALL, 5.0F); ++ entity.damageEntity(DamageSource.FALL, this.world.purpurConfig.enderPearlDamage); // Purpur + CraftEventFactory.entityDamage = null; + } + // CraftBukkit end +diff --git a/src/main/java/net/minecraft/server/ItemEnderPearl.java b/src/main/java/net/minecraft/server/ItemEnderPearl.java +index 0e154ee2976694dacf8d41fcd831f21fbbda13af..f2cafb9f9365a3428f8fa0c35e9b6045d5729a8f 100644 +--- a/src/main/java/net/minecraft/server/ItemEnderPearl.java ++++ b/src/main/java/net/minecraft/server/ItemEnderPearl.java +@@ -27,7 +27,7 @@ public class ItemEnderPearl extends Item { + + world.playSound((EntityHuman) null, entityhuman.locX(), entityhuman.locY(), entityhuman.locZ(), SoundEffects.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (Entity.SHARED_RANDOM.nextFloat() * 0.4F + 0.8F)); + entityhuman.b(StatisticList.ITEM_USED.b(this)); +- entityhuman.getCooldownTracker().setCooldown(this, 20); ++ entityhuman.getCooldownTracker().setCooldown(this, entityhuman.abilities.canInstantlyBuild ? world.purpurConfig.enderPearlCooldownCreative : world.purpurConfig.enderPearlCooldown); // Purpur + } else { + // Paper end + if (entityhuman instanceof EntityPlayer) { +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index bf8a842e7c43946c87c8f27afdf364b1475cf44e..9b7c1b16ad191f58fea0625ebf547431a6e8ddad 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -170,6 +170,10 @@ public class PurpurWorldConfig { + public List itemImmuneToFire = new ArrayList<>(); + public boolean dontRunWithScissors = false; + public double scissorsRunningDamage = 1D; ++ public float enderPearlDamage = 5.0F; ++ public int enderPearlCooldown = 20; ++ public int enderPearlCooldownCreative = 20; ++ public float enderPearlEndermiteChance = 0.05F; + private void itemSettings() { + itemImmuneToCactus.clear(); + getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { +@@ -200,6 +204,10 @@ public class PurpurWorldConfig { + }); + dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); + scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); ++ enderPearlDamage = (float) getDouble("gameplay-mechanics.item.ender-pearl.damage", enderPearlDamage); ++ enderPearlCooldown = getInt("gameplay-mechanics.item.ender-pearl.cooldown", enderPearlCooldown); ++ enderPearlCooldownCreative = getInt("gameplay-mechanics.item.ender-pearl.creative-cooldown", enderPearlCooldownCreative); ++ enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); + } + + public boolean idleTimeoutKick = true;