mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
port Implement elytra settings patch
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
# This file is auto generated, any changes may be overridden!
|
# This file is auto generated, any changes may be overridden!
|
||||||
# See CONTRIBUTING.md on how to add access transformers.
|
# See CONTRIBUTING.md on how to add access transformers.
|
||||||
protected net.minecraft.world.entity.Entity dimensions
|
protected net.minecraft.world.entity.Entity dimensions
|
||||||
|
public net.minecraft.world.entity.LivingEntity canGlide()Z
|
||||||
public net.minecraft.world.entity.monster.Shulker MAX_SCALE
|
public net.minecraft.world.entity.monster.Shulker MAX_SCALE
|
||||||
|
public net.minecraft.world.entity.player.Player canGlide()Z
|
||||||
|
|||||||
@@ -1,136 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 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
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
index 8829e613e1c307e9a40b30a797cada500971453d..d711bef21fba8e32ae99a0a52992e609e4841734 100644
|
|
||||||
--- a/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
+++ b/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
@@ -3772,7 +3772,17 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
||||||
}).toList();
|
|
||||||
EquipmentSlot enumitemslot = (EquipmentSlot) Util.getRandom(list, this.random);
|
|
||||||
|
|
||||||
- this.getItemBySlot(enumitemslot).hurtAndBreak(1, this, enumitemslot);
|
|
||||||
+ // Purpur start
|
|
||||||
+ int damage = level().purpurConfig.elytraDamagePerSecond;
|
|
||||||
+ if (level().purpurConfig.elytraDamageMultiplyBySpeed > 0) {
|
|
||||||
+ double speed = getDeltaMovement().lengthSqr();
|
|
||||||
+ if (speed > level().purpurConfig.elytraDamageMultiplyBySpeed) {
|
|
||||||
+ damage *= (int) speed;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ this.getItemBySlot(enumitemslot).hurtAndBreak(damage, this, enumitemslot);
|
|
||||||
+ // Purpur end
|
|
||||||
}
|
|
||||||
|
|
||||||
this.gameEvent(GameEvent.ELYTRA_GLIDE);
|
|
||||||
@@ -3781,7 +3791,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
- protected boolean canGlide() {
|
|
||||||
+ public boolean canGlide() { // Purpur
|
|
||||||
if (!this.onGround() && !this.isPassenger() && !this.hasEffect(MobEffects.LEVITATION)) {
|
|
||||||
Iterator iterator = EquipmentSlot.VALUES.iterator();
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
|
||||||
index 8ccc760e84aec8aabbe5b8112b332cee13849b23..fee0ffaaf94c484c9272d3b5743b90bb70e0d08d 100644
|
|
||||||
--- a/net/minecraft/world/entity/player/Player.java
|
|
||||||
+++ b/net/minecraft/world/entity/player/Player.java
|
|
||||||
@@ -1664,7 +1664,7 @@ public abstract class Player extends LivingEntity {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
- protected boolean canGlide() {
|
|
||||||
+ public boolean canGlide() { // Purpur
|
|
||||||
return !this.abilities.flying && super.canGlide();
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java
|
|
||||||
index 29a048a9b09166838616ac7ba1d31625d56b0bca..184e6d9bf393188fc1f1c7acd545b4ac6d31f6a4 100644
|
|
||||||
--- a/net/minecraft/world/item/FireworkRocketItem.java
|
|
||||||
+++ b/net/minecraft/world/item/FireworkRocketItem.java
|
|
||||||
@@ -66,6 +66,18 @@ public class FireworkRocketItem extends Item implements ProjectileItem {
|
|
||||||
com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand));
|
|
||||||
if (event.callEvent() && delayed.attemptSpawn()) {
|
|
||||||
user.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below
|
|
||||||
+
|
|
||||||
+ // Purpur start
|
|
||||||
+ if (world.purpurConfig.elytraDamagePerFireworkBoost > 0) {
|
|
||||||
+ List<net.minecraft.world.entity.EquipmentSlot> list = net.minecraft.world.entity.EquipmentSlot.VALUES.stream().filter((enumitemslot) -> net.minecraft.world.entity.LivingEntity.canGlideUsing(user.getItemBySlot(enumitemslot), enumitemslot)).toList();
|
|
||||||
+ net.minecraft.world.entity.EquipmentSlot enumitemslot = net.minecraft.Util.getRandom(list, user.random);
|
|
||||||
+
|
|
||||||
+ ItemStack glideItem = user.getItemBySlot(enumitemslot);
|
|
||||||
+ if (user.canGlide()) {
|
|
||||||
+ glideItem.hurtAndBreak(world.purpurConfig.elytraDamagePerFireworkBoost, user, enumitemslot);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Purpur end
|
|
||||||
if (event.shouldConsume() && !user.hasInfiniteMaterials()) {
|
|
||||||
itemStack.shrink(1); // Moved up from below
|
|
||||||
} else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory();
|
|
||||||
diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java
|
|
||||||
index 122859ba52e9719f98111a9c543dab27abac39b5..c616ebbf0f709b8c3a500a23a2190f7023f7757d 100644
|
|
||||||
--- a/net/minecraft/world/item/ItemStack.java
|
|
||||||
+++ b/net/minecraft/world/item/ItemStack.java
|
|
||||||
@@ -786,6 +786,12 @@ public final class ItemStack implements DataComponentHolder {
|
|
||||||
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
|
||||||
+ // Purpur start
|
|
||||||
+ if (this.has(DataComponents.GLIDER)) {
|
|
||||||
+ setDamageValue(this.getMaxDamage() - 1);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ // Purpur end
|
|
||||||
|
|
||||||
this.shrink(1);
|
|
||||||
breakCallback.accept(item);
|
|
||||||
diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java
|
|
||||||
index 2b2af4b7cc2c8be8c3aed30885be26816c021bdc..aff4f33be216f62d6c6e139dcd7fd82efdbd267c 100644
|
|
||||||
--- a/net/minecraft/world/item/TridentItem.java
|
|
||||||
+++ b/net/minecraft/world/item/TridentItem.java
|
|
||||||
@@ -132,6 +132,18 @@ public class TridentItem extends Item implements ProjectileItem {
|
|
||||||
f4 *= f / f6;
|
|
||||||
f5 *= f / f6;
|
|
||||||
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(entityhuman, stack, f3, f4, f5); // CraftBukkit
|
|
||||||
+
|
|
||||||
+ // Purpur start
|
|
||||||
+ List<EquipmentSlot> list = EquipmentSlot.VALUES.stream().filter((enumitemslot) -> LivingEntity.canGlideUsing(entityhuman.getItemBySlot(enumitemslot), enumitemslot)).toList();
|
|
||||||
+ if (!list.isEmpty()) {
|
|
||||||
+ EquipmentSlot enumitemslot = net.minecraft.Util.getRandom(list, entityhuman.random);
|
|
||||||
+ ItemStack glideItem = entityhuman.getItemBySlot(enumitemslot);
|
|
||||||
+ if (glideItem.has(net.minecraft.core.component.DataComponents.GLIDER) && world.purpurConfig.elytraDamagePerTridentBoost > 0) {
|
|
||||||
+ glideItem.hurtAndBreak(world.purpurConfig.elytraDamagePerTridentBoost, entityhuman, enumitemslot);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Purpur end
|
|
||||||
+
|
|
||||||
entityhuman.push((double) f3, (double) f4, (double) f5);
|
|
||||||
entityhuman.startAutoSpinAttack(20, 8.0F, stack);
|
|
||||||
if (entityhuman.onGround()) {
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index 6b7a6a7889353f9557c6e3bfa8ff8caf66416c1b..bc355a6b03877ca5e74688df13a089b487cde86c 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -109,6 +109,17 @@ public class PurpurWorldConfig {
|
|
||||||
tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ public int elytraDamagePerSecond = 1;
|
|
||||||
+ public double elytraDamageMultiplyBySpeed = 0;
|
|
||||||
+ public int elytraDamagePerFireworkBoost = 0;
|
|
||||||
+ public int elytraDamagePerTridentBoost = 0;
|
|
||||||
+ private void elytraSettings() {
|
|
||||||
+ elytraDamagePerSecond = getInt("gameplay-mechanics.elytra.damage-per-second", elytraDamagePerSecond);
|
|
||||||
+ elytraDamageMultiplyBySpeed = getDouble("gameplay-mechanics.elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed);
|
|
||||||
+ elytraDamagePerFireworkBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost);
|
|
||||||
+ elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
public double minecartMaxSpeed = 0.4D;
|
|
||||||
public boolean minecartPlaceAnywhere = false;
|
|
||||||
public boolean minecartControllable = false;
|
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 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
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
index e0b348d8c9f030e745b84d88ad52f70e4214e098..b4add726d6e1c192ecb9524dd9ea6e6c8b6a345d 100644
|
||||||
|
--- a/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
+++ b/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
@@ -3537,7 +3537,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||||
|
if (i1 % 2 == 0) {
|
||||||
|
List<EquipmentSlot> list = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList();
|
||||||
|
EquipmentSlot equipmentSlot = Util.getRandom(list, this.random);
|
||||||
|
- this.getItemBySlot(equipmentSlot).hurtAndBreak(1, this, equipmentSlot);
|
||||||
|
+
|
||||||
|
+ // Purpur start - Implement elytra settings
|
||||||
|
+ int damage = level().purpurConfig.elytraDamagePerSecond;
|
||||||
|
+ if (level().purpurConfig.elytraDamageMultiplyBySpeed > 0) {
|
||||||
|
+ double speed = getDeltaMovement().lengthSqr();
|
||||||
|
+ if (speed > level().purpurConfig.elytraDamageMultiplyBySpeed) {
|
||||||
|
+ damage *= (int) speed;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ this.getItemBySlot(equipmentSlot).hurtAndBreak(damage, this, equipmentSlot);
|
||||||
|
+ // Purpur end - Implement elytra settings
|
||||||
|
}
|
||||||
|
|
||||||
|
this.gameEvent(GameEvent.ELYTRA_GLIDE);
|
||||||
|
diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java
|
||||||
|
index 75a9bd205f32b77c5d242cb9fac0f571ce36045a..b03f182c62c699cc222e67c1ae6eadf99c45d48d 100644
|
||||||
|
--- a/net/minecraft/world/item/FireworkRocketItem.java
|
||||||
|
+++ b/net/minecraft/world/item/FireworkRocketItem.java
|
||||||
|
@@ -66,6 +66,19 @@ public class FireworkRocketItem extends Item implements ProjectileItem {
|
||||||
|
com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand));
|
||||||
|
if (event.callEvent() && delayed.attemptSpawn()) {
|
||||||
|
player.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below
|
||||||
|
+
|
||||||
|
+ // Purpur start - Implement elytra settings
|
||||||
|
+ if (level.purpurConfig.elytraDamagePerFireworkBoost > 0) {
|
||||||
|
+ List<net.minecraft.world.entity.EquipmentSlot> list = net.minecraft.world.entity.EquipmentSlot.VALUES.stream().filter((enumitemslot) -> net.minecraft.world.entity.LivingEntity.canGlideUsing(player.getItemBySlot(enumitemslot), enumitemslot)).toList();
|
||||||
|
+ net.minecraft.world.entity.EquipmentSlot enumitemslot = net.minecraft.Util.getRandom(list, player.random);
|
||||||
|
+
|
||||||
|
+ ItemStack glideItem = player.getItemBySlot(enumitemslot);
|
||||||
|
+ if (player.canGlide()) {
|
||||||
|
+ glideItem.hurtAndBreak(level.purpurConfig.elytraDamagePerFireworkBoost, player, enumitemslot);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Implement elytra settings
|
||||||
|
+
|
||||||
|
if (event.shouldConsume() && !player.hasInfiniteMaterials()) {
|
||||||
|
itemInHand.shrink(1); // Moved up from below
|
||||||
|
} else {
|
||||||
|
diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java
|
||||||
|
index 5d44b568718681b0a5d241037b38a787ad5aaa45..06dfd5424dcf7ab83e524803c8c11f29a6f2ea36 100644
|
||||||
|
--- a/net/minecraft/world/item/ItemStack.java
|
||||||
|
+++ b/net/minecraft/world/item/ItemStack.java
|
||||||
|
@@ -731,6 +731,14 @@ public final class ItemStack implements DataComponentHolder {
|
||||||
|
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
+
|
||||||
|
+ // Purpur start - Implement elytra settings
|
||||||
|
+ if (this.has(DataComponents.GLIDER)) {
|
||||||
|
+ setDamageValue(this.getMaxDamage() - 1);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Implement elytra settings
|
||||||
|
+
|
||||||
|
this.shrink(1);
|
||||||
|
onBreak.accept(item);
|
||||||
|
}
|
||||||
|
diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java
|
||||||
|
index 23284dbeff327d1b8dc89f3a0dc0ee549cec2daa..cf1bc55f1b5aa610bcb10316ac320344e9739086 100644
|
||||||
|
--- a/net/minecraft/world/item/TridentItem.java
|
||||||
|
+++ b/net/minecraft/world/item/TridentItem.java
|
||||||
|
@@ -130,6 +130,18 @@ public class TridentItem extends Item implements ProjectileItem {
|
||||||
|
f1 *= tridentSpinAttackStrength / squareRoot;
|
||||||
|
f2 *= tridentSpinAttackStrength / squareRoot;
|
||||||
|
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(player, stack, f, f1, f2); // CraftBukkit
|
||||||
|
+
|
||||||
|
+ // Purpur start - Implement elytra settings
|
||||||
|
+ List<EquipmentSlot> list = EquipmentSlot.VALUES.stream().filter((enumitemslot) -> LivingEntity.canGlideUsing(entity.getItemBySlot(enumitemslot), enumitemslot)).toList();
|
||||||
|
+ if (!list.isEmpty()) {
|
||||||
|
+ EquipmentSlot enumitemslot = net.minecraft.Util.getRandom(list, entity.random);
|
||||||
|
+ ItemStack glideItem = entity.getItemBySlot(enumitemslot);
|
||||||
|
+ if (glideItem.has(net.minecraft.core.component.DataComponents.GLIDER) && level.purpurConfig.elytraDamagePerTridentBoost > 0) {
|
||||||
|
+ glideItem.hurtAndBreak(level.purpurConfig.elytraDamagePerTridentBoost, entity, enumitemslot);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Implement elytra settings
|
||||||
|
+
|
||||||
|
player.push(f, f1, f2);
|
||||||
|
player.startAutoSpinAttack(20, 8.0F, stack);
|
||||||
|
if (player.onGround()) {
|
||||||
@@ -97,6 +97,17 @@ public class PurpurWorldConfig {
|
|||||||
tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight);
|
tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int elytraDamagePerSecond = 1;
|
||||||
|
public double elytraDamageMultiplyBySpeed = 0;
|
||||||
|
public int elytraDamagePerFireworkBoost = 0;
|
||||||
|
public int elytraDamagePerTridentBoost = 0;
|
||||||
|
private void elytraSettings() {
|
||||||
|
elytraDamagePerSecond = getInt("gameplay-mechanics.elytra.damage-per-second", elytraDamagePerSecond);
|
||||||
|
elytraDamageMultiplyBySpeed = getDouble("gameplay-mechanics.elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed);
|
||||||
|
elytraDamagePerFireworkBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost);
|
||||||
|
elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost);
|
||||||
|
}
|
||||||
|
|
||||||
public double minecartMaxSpeed = 0.4D;
|
public double minecartMaxSpeed = 0.4D;
|
||||||
public boolean minecartPlaceAnywhere = false;
|
public boolean minecartPlaceAnywhere = false;
|
||||||
public boolean minecartControllable = false;
|
public boolean minecartControllable = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user