Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
eb13b32
commit d78b851
Showing
2 changed files
with
172 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
From 3e7ce447de35ad589437845bdbd9d16f0a41e9f2 Mon Sep 17 00:00:00 2001 | ||
From: William Blake Galbreath <blake.galbreath@gmail.com> | ||
Date: Thu, 25 Jul 2019 18:07:37 -0500 | ||
Subject: [PATCH] Implement elytra settings | ||
|
||
--- | ||
.../java/net/minecraft/server/EntityLiving.java | 14 +++++++++++--- | ||
.../java/net/minecraft/server/ItemFireworks.java | 8 ++++++++ | ||
src/main/java/net/minecraft/server/ItemStack.java | 8 +++++++- | ||
.../java/net/minecraft/server/ItemTrident.java | 10 ++++++++++ | ||
src/main/java/net/minecraft/server/Vec3D.java | 1 + | ||
.../java/net/pl3x/purpur/PurpurWorldConfig.java | 13 +++++++++++++ | ||
6 files changed, 50 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java | ||
index 4e6598cf5a..cbd7ab3a89 100644 | ||
--- a/src/main/java/net/minecraft/server/EntityLiving.java | ||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java | ||
@@ -2588,9 +2588,16 @@ public abstract class EntityLiving extends Entity { | ||
if (itemstack.getItem() == Items.ELYTRA && ItemElytra.e(itemstack)) { | ||
flag = true; | ||
if (!this.world.isClientSide && (this.bp + 1) % 20 == 0) { | ||
- itemstack.damage(1, this, (entityliving) -> { | ||
- entityliving.c(EnumItemSlot.CHEST); | ||
- }); | ||
+ // Purpur start | ||
+ int damage = world.purpurConfig.elytraDamagePerSecond; | ||
+ if (world.purpurConfig.elytraDamageMultiplyBySpeed > 0) { | ||
+ double speed = getMot().length(); | ||
+ if (speed > world.purpurConfig.elytraDamageMultiplyBySpeed) { | ||
+ damage *= (int) speed; | ||
+ } | ||
+ } | ||
+ itemstack.damage(damage, this, (entityliving) -> entityliving.c(EnumItemSlot.CHEST)); | ||
+ // Purpur end | ||
} | ||
} else { | ||
flag = false; | ||
@@ -3237,6 +3244,7 @@ public abstract class EntityLiving extends Entity { | ||
} | ||
} | ||
|
||
+ public void sendBreakAnimation(EnumItemSlot slot) { c(slot); } // Purpur - OBFHELPER | ||
public void c(EnumItemSlot enumitemslot) { | ||
this.world.broadcastEntityEffect(this, d(enumitemslot)); | ||
} | ||
diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java | ||
index 9e86ef4ce2..832cea636b 100644 | ||
--- a/src/main/java/net/minecraft/server/ItemFireworks.java | ||
+++ b/src/main/java/net/minecraft/server/ItemFireworks.java | ||
@@ -38,6 +38,14 @@ public class ItemFireworks extends Item { | ||
// Paper start | ||
com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Firework) entityfireworks.getBukkitEntity()); | ||
if (event.callEvent() && world.addEntity(entityfireworks)) { | ||
+ // Purpur start | ||
+ if (world.purpurConfig.elytraDamagePerFireworkBoost > 0) { | ||
+ ItemStack chestItem = entityhuman.getEquipment(EnumItemSlot.CHEST); | ||
+ if (chestItem.getItem() == Items.ELYTRA) { | ||
+ chestItem.damage(world.purpurConfig.elytraDamagePerFireworkBoost, entityhuman, (entityliving) -> entityliving.sendBreakAnimation(EnumItemSlot.CHEST)); | ||
+ } | ||
+ } | ||
+ // Purpur end | ||
if (event.shouldConsume() && !entityhuman.abilities.canInstantlyBuild) { | ||
itemstack.subtract(1); | ||
} else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); | ||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java | ||
index 0e164840fd..d9b63547d9 100644 | ||
--- a/src/main/java/net/minecraft/server/ItemStack.java | ||
+++ b/src/main/java/net/minecraft/server/ItemStack.java | ||
@@ -393,7 +393,7 @@ public final class ItemStack { | ||
int j; | ||
|
||
if (i > 0) { | ||
- j = EnchantmentManager.getEnchantmentLevel(Enchantments.DURABILITY, this); | ||
+ j = (getItem() == Items.ELYTRA && entityplayer != null && entityplayer.world.purpurConfig.elytraIgnoreUnbreaking) ? 0 : EnchantmentManager.getEnchantmentLevel(Enchantments.DURABILITY, this); // Purpur | ||
int k = 0; | ||
|
||
for (int l = 0; j > 0 && l < i; ++l) { | ||
@@ -439,6 +439,12 @@ public final class ItemStack { | ||
if (this.isDamaged(i, t0.getRandom(), t0 instanceof EntityPlayer ? (EntityPlayer) t0 : null)) { | ||
consumer.accept(t0); | ||
Item item = this.getItem(); | ||
+ // Purpur start | ||
+ if (item == Items.ELYTRA) { | ||
+ setDamage(item.getMaxDurability() - 1); | ||
+ return; | ||
+ } | ||
+ // Purpur end | ||
// CraftBukkit start - Check for item breaking | ||
if (this.count == 1 && t0 instanceof EntityHuman) { | ||
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((EntityHuman) t0, this); | ||
diff --git a/src/main/java/net/minecraft/server/ItemTrident.java b/src/main/java/net/minecraft/server/ItemTrident.java | ||
index c408157368..28f9f6e405 100644 | ||
--- a/src/main/java/net/minecraft/server/ItemTrident.java | ||
+++ b/src/main/java/net/minecraft/server/ItemTrident.java | ||
@@ -93,6 +93,16 @@ public class ItemTrident extends Item { | ||
f2 *= f6 / f5; | ||
f3 *= f6 / f5; | ||
f4 *= f6 / f5; | ||
+ | ||
+ // Purpur start | ||
+ ItemStack chestItem = entityhuman.getEquipment(EnumItemSlot.CHEST); | ||
+ if (chestItem.getItem() == Items.ELYTRA) { | ||
+ if (world.purpurConfig.elytraDamagePerTridentBoost > 0) { | ||
+ chestItem.damage(world.purpurConfig.elytraDamagePerTridentBoost, entityhuman, (entity) -> entity.sendBreakAnimation(EnumItemSlot.CHEST)); | ||
+ } | ||
+ } | ||
+ // Purpur end | ||
+ | ||
entityhuman.f((double) f2, (double) f3, (double) f4); | ||
entityhuman.q(20); | ||
if (entityhuman.onGround) { | ||
diff --git a/src/main/java/net/minecraft/server/Vec3D.java b/src/main/java/net/minecraft/server/Vec3D.java | ||
index d2eb861af2..b89f9fe7b1 100644 | ||
--- a/src/main/java/net/minecraft/server/Vec3D.java | ||
+++ b/src/main/java/net/minecraft/server/Vec3D.java | ||
@@ -93,6 +93,7 @@ public class Vec3D implements IPosition { | ||
return (double) MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); | ||
} | ||
|
||
+ public double length() { return this.g(); } // Purpur - OBFHELPER | ||
public double g() { | ||
return this.x * this.x + this.y * this.y + this.z * this.z; | ||
} | ||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | ||
index 88a7e9ec6e..3b1438dd81 100644 | ||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | ||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | ||
@@ -140,4 +140,17 @@ public class PurpurWorldConfig { | ||
radiusVillagerIronGolemSpawns = getInt("radius-villager-iron-golem-spawns", radiusVillagerIronGolemSpawns); | ||
limitVillagerIronGolemSpawns = getInt("limit-villager-iron-golem-spawns", limitVillagerIronGolemSpawns); | ||
} | ||
+ | ||
+ public int elytraDamagePerSecond = 1; | ||
+ public double elytraDamageMultiplyBySpeed = 0; | ||
+ public boolean elytraIgnoreUnbreaking = false; | ||
+ public int elytraDamagePerFireworkBoost = 0; | ||
+ public int elytraDamagePerTridentBoost = 0; | ||
+ private void elytraSettings() { | ||
+ elytraDamagePerSecond = getInt("elytra.damage-per-second", elytraDamagePerSecond); | ||
+ elytraDamageMultiplyBySpeed = getDouble("elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed); | ||
+ elytraIgnoreUnbreaking = getBoolean("elytra.ignore-unbreaking", elytraIgnoreUnbreaking); | ||
+ elytraDamagePerFireworkBoost = getInt("elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost); | ||
+ elytraDamagePerTridentBoost = getInt("elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); | ||
+ } | ||
} | ||
-- | ||
2.20.1 | ||
|