mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-06-21 09:47:45 +02:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@2e7bb166 Deprecate dyes custom tag in favour of vanilla tag (#13855) PaperMC/Paper@6048c2d9 Fix LivingEntity#knockback ignored when its Player (#13842) PaperMC/Paper@b80b6046 fix: Attack strength ticker cooldown incorrectly reset (#13856) PaperMC/Paper@1835b046 Call AsyncPlayerPreLoginEvent/AsyncPlayerConnectionConfigureEvent on virtual threads (#13816) PaperMC/Paper@afea65c2 Fix leash event for boats and elytra (#13697) PaperMC/Paper@39bd1bac [ci/skip] Rebuild patches PaperMC/Paper@11dbf110 Call BlockRedstoneEvent for more interactions (#12206) PaperMC/Paper@b8b4a1c7 Update Player#getClientViewDistance (#13530) PaperMC/Paper@b685281d [ci/skip] Mention documenting new config options in CONTRIBUTING.md (#13664)
91 lines
6.2 KiB
Diff
91 lines
6.2 KiB
Diff
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 8f536177aabda1387d3562912b48ae8fce1dd278..fbb288020b0526d44312610782f41ab443a42ad9 100644
|
|
--- a/net/minecraft/world/entity/LivingEntity.java
|
|
+++ b/net/minecraft/world/entity/LivingEntity.java
|
|
@@ -3937,7 +3937,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
|
if (freeFallInterval % 2 == 0) {
|
|
List<EquipmentSlot> slotsWithGliders = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList();
|
|
EquipmentSlot slotToDamage = Util.getRandom(slotsWithGliders, this.random);
|
|
- this.getItemBySlot(slotToDamage).hurtAndBreak(1, this, slotToDamage);
|
|
+ // 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(slotToDamage).hurtAndBreak(damage, this, slotToDamage);
|
|
+ // 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 0afc0916e358d4b9c9c360358a6c1aebe1ac723b..ce4380f76c89008b5fa8cd5fd666a0c22e93b26b 100644
|
|
--- a/net/minecraft/world/item/FireworkRocketItem.java
|
|
+++ b/net/minecraft/world/item/FireworkRocketItem.java
|
|
@@ -73,6 +73,17 @@ public class FireworkRocketItem extends Item implements ProjectileItem {
|
|
if (player.dropAllLeashConnections(player, hand)) { // Paper - PlayerUnleashEntityEvent
|
|
level.playSound(null, player, SoundEvents.LEAD_BREAK, SoundSource.NEUTRAL, 1.0F, 1.0F);
|
|
}
|
|
+ // Purpur start - Implement elytra settings
|
|
+ if (level.purpurConfig.elytraDamagePerFireworkBoost > 0) {
|
|
+ java.util.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.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()) {
|
|
itemStack.shrink(1); // Moved up from below
|
|
} else {
|
|
diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java
|
|
index aa62f69da48884f1d4e8834fe4cb9c02ce1d472e..2e511d2adaedef5e954532783beb8a77b3e000d4 100644
|
|
--- a/net/minecraft/world/item/ItemStack.java
|
|
+++ b/net/minecraft/world/item/ItemStack.java
|
|
@@ -694,6 +694,14 @@ public final class ItemStack implements DataComponentHolder, ItemInstance {
|
|
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 4352c807848acbac4e58cd84f376425c3ae6f2f7..50e38d147934d060a0cf342cec609d7d10476298 100644
|
|
--- a/net/minecraft/world/item/TridentItem.java
|
|
+++ b/net/minecraft/world/item/TridentItem.java
|
|
@@ -125,6 +125,16 @@ public class TridentItem extends Item implements ProjectileItem {
|
|
yd *= riptideStrength / dist;
|
|
zd *= riptideStrength / dist;
|
|
if (!org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(player, itemStack, xd, yd, zd)) return false; // Paper - Add player riptide event
|
|
+ // Purpur start - Implement elytra settings
|
|
+ List<net.minecraft.world.entity.EquipmentSlot> list = net.minecraft.world.entity.EquipmentSlot.VALUES.stream().filter((enumitemslot) -> LivingEntity.canGlideUsing(entity.getItemBySlot(enumitemslot), enumitemslot)).toList();
|
|
+ if (!list.isEmpty()) {
|
|
+ net.minecraft.world.entity.EquipmentSlot enumitemslot = net.minecraft.util.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(xd, yd, zd);
|
|
player.startAutoSpinAttack(20, 8.0F, itemStack);
|
|
if (player.onGround()) {
|