From 26e2a9cbd2a5a1aca271970deafcca120289edf6 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Thu, 24 Oct 2024 09:53:28 -0400 Subject: [PATCH] Patch --- .../Add-BlockBreakProgressUpdateEvent.patch | 2 +- .../server/Add-CartographyItemEvent.patch | 0 .../server/Add-FluidState-API.patch | 0 .../server/Add-Lifecycle-Event-system.patch | 0 ...g-for-mobs-immune-to-default-effects.patch | 2 +- ...kSnapshot-includeLightData-parameter.patch | 0 ...ing-message-for-initial-server-start.patch | 0 .../Configurable-max-block-fluid-ticks.patch | 2 +- .../server/Deep-clone-nbt-tags-in-PDC.patch | 2 +- .../server/Deprecate-ItemStack-setType.patch | 0 .../Disable-memory-reserve-allocating.patch | 0 .../server/Expanded-Hopper-API.patch | 0 ...eByEntityEvent-for-unowned-wither-sk.patch | 4 +- .../server/Fix-DamageSource-API.patch | 38 ++++----- .../server/Fix-bees-aging-inside-hives.patch | 0 ...invalid-block-entity-during-world-ge.patch | 0 ...tackOverflowError-for-some-dispenses.patch | 80 +++++++------------ .../server/Improve-tag-parser-handling.patch | 23 ++---- .../server/Item-Mutation-Fixes.patch | 0 .../server/ItemStack-Tooltip-API.patch | 0 .../server/More-Raid-API.patch | 0 .../Per-world-ticks-per-spawn-settings.patch | 2 +- ...he-changed-item-from-dispense-events.patch | 22 ++--- ...and-End-Portal-Frames-from-being-des.patch | 28 +++---- .../server/add-number-format-api.patch | 0 .../server/improve-BanList-types.patch | 0 ...re-disarming-not-working-as-intended.patch | 22 ----- 27 files changed, 83 insertions(+), 144 deletions(-) rename patches/{unapplied => }/server/Add-BlockBreakProgressUpdateEvent.patch (97%) rename patches/{unapplied => }/server/Add-CartographyItemEvent.patch (100%) rename patches/{unapplied => }/server/Add-FluidState-API.patch (100%) rename patches/{unapplied => }/server/Add-Lifecycle-Event-system.patch (100%) rename patches/{unapplied => }/server/Add-config-for-mobs-immune-to-default-effects.patch (98%) rename patches/{unapplied => }/server/Add-getChunkSnapshot-includeLightData-parameter.patch (100%) rename patches/{unapplied => }/server/Add-onboarding-message-for-initial-server-start.patch (100%) rename patches/{unapplied => }/server/Configurable-max-block-fluid-ticks.patch (97%) rename patches/{unapplied => }/server/Deep-clone-nbt-tags-in-PDC.patch (98%) rename patches/{unapplied => }/server/Deprecate-ItemStack-setType.patch (100%) rename patches/{unapplied => }/server/Disable-memory-reserve-allocating.patch (100%) rename patches/{unapplied => }/server/Expanded-Hopper-API.patch (100%) rename patches/{unapplied => }/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch (75%) rename patches/{unapplied => }/server/Fix-DamageSource-API.patch (84%) rename patches/{unapplied => }/server/Fix-bees-aging-inside-hives.patch (100%) rename patches/{unapplied => }/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch (100%) rename patches/{unapplied => }/server/Fix-possible-StackOverflowError-for-some-dispenses.patch (53%) rename patches/{unapplied => }/server/Improve-tag-parser-handling.patch (94%) rename patches/{unapplied => }/server/Item-Mutation-Fixes.patch (100%) rename patches/{unapplied => }/server/ItemStack-Tooltip-API.patch (100%) rename patches/{unapplied => }/server/More-Raid-API.patch (100%) rename patches/{unapplied => }/server/Per-world-ticks-per-spawn-settings.patch (100%) rename patches/{unapplied => }/server/Properly-track-the-changed-item-from-dispense-events.patch (80%) rename patches/{unapplied => }/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch (95%) rename patches/{unapplied => }/server/add-number-format-api.patch (100%) rename patches/{unapplied => }/server/improve-BanList-types.patch (100%) delete mode 100644 patches/unapplied/server/Fix-tripwire-disarming-not-working-as-intended.patch diff --git a/patches/unapplied/server/Add-BlockBreakProgressUpdateEvent.patch b/patches/server/Add-BlockBreakProgressUpdateEvent.patch similarity index 97% rename from patches/unapplied/server/Add-BlockBreakProgressUpdateEvent.patch rename to patches/server/Add-BlockBreakProgressUpdateEvent.patch index 64879d04cb..da32132fd6 100644 --- a/patches/unapplied/server/Add-BlockBreakProgressUpdateEvent.patch +++ b/patches/server/Add-BlockBreakProgressUpdateEvent.patch @@ -8,7 +8,7 @@ diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/mai index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe if (entity instanceof Player) entityhuman = (Player) entity; // CraftBukkit end diff --git a/patches/unapplied/server/Add-CartographyItemEvent.patch b/patches/server/Add-CartographyItemEvent.patch similarity index 100% rename from patches/unapplied/server/Add-CartographyItemEvent.patch rename to patches/server/Add-CartographyItemEvent.patch diff --git a/patches/unapplied/server/Add-FluidState-API.patch b/patches/server/Add-FluidState-API.patch similarity index 100% rename from patches/unapplied/server/Add-FluidState-API.patch rename to patches/server/Add-FluidState-API.patch diff --git a/patches/unapplied/server/Add-Lifecycle-Event-system.patch b/patches/server/Add-Lifecycle-Event-system.patch similarity index 100% rename from patches/unapplied/server/Add-Lifecycle-Event-system.patch rename to patches/server/Add-Lifecycle-Event-system.patch diff --git a/patches/unapplied/server/Add-config-for-mobs-immune-to-default-effects.patch b/patches/server/Add-config-for-mobs-immune-to-default-effects.patch similarity index 98% rename from patches/unapplied/server/Add-config-for-mobs-immune-to-default-effects.patch rename to patches/server/Add-config-for-mobs-immune-to-default-effects.patch index 78b8a49f91..213b129bf5 100644 --- a/patches/unapplied/server/Add-config-for-mobs-immune-to-default-effects.patch +++ b/patches/server/Add-config-for-mobs-immune-to-default-effects.patch @@ -8,7 +8,7 @@ diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.jav index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -0,0 +0,0 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -0,0 +0,0 @@ public class WitherBoss extends Monster implements RangedAttackMob { @Override public boolean canBeAffected(MobEffectInstance effect) { diff --git a/patches/unapplied/server/Add-getChunkSnapshot-includeLightData-parameter.patch b/patches/server/Add-getChunkSnapshot-includeLightData-parameter.patch similarity index 100% rename from patches/unapplied/server/Add-getChunkSnapshot-includeLightData-parameter.patch rename to patches/server/Add-getChunkSnapshot-includeLightData-parameter.patch diff --git a/patches/unapplied/server/Add-onboarding-message-for-initial-server-start.patch b/patches/server/Add-onboarding-message-for-initial-server-start.patch similarity index 100% rename from patches/unapplied/server/Add-onboarding-message-for-initial-server-start.patch rename to patches/server/Add-onboarding-message-for-initial-server-start.patch diff --git a/patches/unapplied/server/Configurable-max-block-fluid-ticks.patch b/patches/server/Configurable-max-block-fluid-ticks.patch similarity index 97% rename from patches/unapplied/server/Configurable-max-block-fluid-ticks.patch rename to patches/server/Configurable-max-block-fluid-ticks.patch index d1569062ef..00638674f8 100644 --- a/patches/unapplied/server/Configurable-max-block-fluid-ticks.patch +++ b/patches/server/Configurable-max-block-fluid-ticks.patch @@ -8,7 +8,7 @@ diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/mai index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe if (!this.isDebug() && flag) { j = this.getGameTime(); gameprofilerfiller.push("blockTicks"); diff --git a/patches/unapplied/server/Deep-clone-nbt-tags-in-PDC.patch b/patches/server/Deep-clone-nbt-tags-in-PDC.patch similarity index 98% rename from patches/unapplied/server/Deep-clone-nbt-tags-in-PDC.patch rename to patches/server/Deep-clone-nbt-tags-in-PDC.patch index 65d2bf0711..b409926ca1 100644 --- a/patches/unapplied/server/Deep-clone-nbt-tags-in-PDC.patch +++ b/patches/server/Deep-clone-nbt-tags-in-PDC.patch @@ -25,7 +25,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + clone.persistentDataContainer = new CraftPersistentDataContainer(this.persistentDataContainer.getTagsCloned(), CraftMetaItem.DATA_TYPE_REGISTRY); // Paper - deep clone NBT tags clone.hideFlag = this.hideFlag; clone.hideTooltip = this.hideTooltip; - clone.unbreakable = this.unbreakable; + clone.tooltipStyle = this.tooltipStyle; diff --git a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java b/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/persistence/CraftPersistentDataContainer.java diff --git a/patches/unapplied/server/Deprecate-ItemStack-setType.patch b/patches/server/Deprecate-ItemStack-setType.patch similarity index 100% rename from patches/unapplied/server/Deprecate-ItemStack-setType.patch rename to patches/server/Deprecate-ItemStack-setType.patch diff --git a/patches/unapplied/server/Disable-memory-reserve-allocating.patch b/patches/server/Disable-memory-reserve-allocating.patch similarity index 100% rename from patches/unapplied/server/Disable-memory-reserve-allocating.patch rename to patches/server/Disable-memory-reserve-allocating.patch diff --git a/patches/unapplied/server/Expanded-Hopper-API.patch b/patches/server/Expanded-Hopper-API.patch similarity index 100% rename from patches/unapplied/server/Expanded-Hopper-API.patch rename to patches/server/Expanded-Hopper-API.patch diff --git a/patches/unapplied/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch b/patches/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch similarity index 75% rename from patches/unapplied/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch rename to patches/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch index 50aaf354e4..f94adfad5a 100644 --- a/patches/unapplied/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch +++ b/patches/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch @@ -12,8 +12,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } } } else { -- flag = entity.hurt(this.damageSources().magic(), 5.0F); -+ flag = entity.hurt(this.damageSources().magic().customCausingEntity(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls +- flag = entity.hurtServer(worldserver, this.damageSources().magic(), 5.0F); ++ flag = entity.hurtServer(worldserver, this.damageSources().magic().customCausingEntity(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls } if (flag && entity instanceof LivingEntity entityliving) { diff --git a/patches/unapplied/server/Fix-DamageSource-API.patch b/patches/server/Fix-DamageSource-API.patch similarity index 84% rename from patches/unapplied/server/Fix-DamageSource-API.patch rename to patches/server/Fix-DamageSource-API.patch index 8cb536a507..89adf4e5f1 100644 --- a/patches/unapplied/server/Fix-DamageSource-API.patch +++ b/patches/server/Fix-DamageSource-API.patch @@ -91,8 +91,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 return; } -- if (!this.hurt(this.damageSources().lightningBolt().customEntityDamager(lightning), 5.0F)) { -+ if (!this.hurt(this.damageSources().lightningBolt().customEventDamager(lightning), 5.0F)) { // Paper - fix DamageSource API +- if (!this.hurtServer(world, this.damageSources().lightningBolt().customEntityDamager(lightning), 5.0F)) { ++ if (!this.hurtServer(world, this.damageSources().lightningBolt().customEventDamager(lightning), 5.0F)) { // Paper - fix DamageSource API return; } // CraftBukkit end @@ -104,8 +104,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @Override public void thunderHit(ServerLevel world, LightningBolt lightning) { -- this.hurt(this.damageSources().lightningBolt().customEntityDamager(lightning), Float.MAX_VALUE); // CraftBukkit -+ this.hurt(this.damageSources().lightningBolt().customEventDamager(lightning), Float.MAX_VALUE); // CraftBukkit // Paper - fix DamageSource API +- this.hurtServer(world, this.damageSources().lightningBolt().customEntityDamager(lightning), Float.MAX_VALUE); // CraftBukkit ++ this.hurtServer(world, this.damageSources().lightningBolt().customEventDamager(lightning), Float.MAX_VALUE); // CraftBukkit // Paper - fix DamageSource API } @Override @@ -115,7 +115,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +++ b/src/main/java/net/minecraft/world/entity/decoration/BlockAttachedEntity.java @@ -0,0 +0,0 @@ public abstract class BlockAttachedEntity extends Entity { } else { - if (!this.isRemoved() && !this.level().isClientSide) { + if (!this.isRemoved()) { // CraftBukkit start - fire break events - Entity damager = (source.isDirect()) ? source.getDirectEntity() : source.getEntity(); + Entity damager = (!source.isDirect() && source.getEntity() != null) ? source.getEntity() : source.getDirectEntity(); // Paper - fix DamageSource API @@ -126,14 +126,14 @@ diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -@@ -0,0 +0,0 @@ public class Creeper extends Monster implements PowerableMob { +@@ -0,0 +0,0 @@ public class Creeper extends Monster { if (!event.isCancelled()) { // CraftBukkit end this.dead = true; -- this.level().explode(this, net.minecraft.world.level.Explosion.getDefaultDamageSource(this.level(), this).customCausingEntityDamager(this.entityIgniter), null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); // CraftBukkit -+ this.level().explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) +- worldserver.explode(this, net.minecraft.world.level.Explosion.getDefaultDamageSource(this.level(), this).customCausingEntityDamager(this.entityIgniter), null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); // CraftBukkit ++ worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) this.spawnLingeringCloud(); - this.triggerOnDeathMobEffects(Entity.RemovalReason.KILLED); + this.triggerOnDeathMobEffects(worldserver, Entity.RemovalReason.KILLED); this.discard(EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause diff --git a/src/main/java/net/minecraft/world/entity/projectile/EvokerFangs.java b/src/main/java/net/minecraft/world/entity/projectile/EvokerFangs.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 @@ -153,14 +153,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java @@ -0,0 +0,0 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { - // entity.changeDimension(new DimensionTransition(worldserver, this.position(), entity.getDeltaMovement(), entity.getYRot(), entity.getXRot(), DimensionTransition.DO_NOTHING)); // CraftBukkit - moved up - entity.resetFallDistance(); - entityplayer.resetCurrentImpulseContext(); -- entity.hurt(this.damageSources().fall().customEntityDamager(this), 5.0F); // CraftBukkit -+ entity.hurt(this.damageSources().fall().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API - this.playSound(worldserver, this.position()); - } - } else { + if (entityplayer1 != null) { + entityplayer1.resetFallDistance(); + entityplayer1.resetCurrentImpulseContext(); +- entityplayer1.hurtServer(entityplayer.serverLevel(), this.damageSources().enderPearl().customEntityDamager(this), 5.0F); // CraftBukkit ++ entityplayer1.hurtServer(entityplayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API + } + + this.playSound(worldserver, vec3d); diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java @@ -169,8 +169,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } } } else { -- flag = entity.hurt(this.damageSources().magic().customCausingEntity(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls -+ flag = entity.hurt(this.damageSources().magic().customEventDamager(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls // Paper - fix DamageSource API +- flag = entity.hurtServer(worldserver, this.damageSources().magic().customCausingEntity(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls ++ flag = entity.hurtServer(worldserver, this.damageSources().magic().customEventDamager(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls // Paper - fix DamageSource API } if (flag && entity instanceof LivingEntity entityliving) { diff --git a/patches/unapplied/server/Fix-bees-aging-inside-hives.patch b/patches/server/Fix-bees-aging-inside-hives.patch similarity index 100% rename from patches/unapplied/server/Fix-bees-aging-inside-hives.patch rename to patches/server/Fix-bees-aging-inside-hives.patch diff --git a/patches/unapplied/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch b/patches/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch similarity index 100% rename from patches/unapplied/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch rename to patches/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch diff --git a/patches/unapplied/server/Fix-possible-StackOverflowError-for-some-dispenses.patch b/patches/server/Fix-possible-StackOverflowError-for-some-dispenses.patch similarity index 53% rename from patches/unapplied/server/Fix-possible-StackOverflowError-for-some-dispenses.patch rename to patches/server/Fix-possible-StackOverflowError-for-some-dispenses.patch index 058db9b15e..a34f91c7f8 100644 --- a/patches/unapplied/server/Fix-possible-StackOverflowError-for-some-dispenses.patch +++ b/patches/server/Fix-possible-StackOverflowError-for-some-dispenses.patch @@ -21,8 +21,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // Chain to handler for new item ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem()); -- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != ArmorItem.DISPENSE_ITEM_BEHAVIOR) { -+ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != this) { // Paper - fix possible StackOverflowError +- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE) { ++ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE && idispensebehavior != this) { // Paper - fix possible StackOverflowError idispensebehavior.dispense(pointer, eventStack); return stack; } @@ -30,35 +30,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // Chain to handler for new item ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem()); -- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != ArmorItem.DISPENSE_ITEM_BEHAVIOR) { -+ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != this) { // Paper - fix possible StackOverflowError +- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE) { ++ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE && idispensebehavior != this) { // Paper - fix possible StackOverflowError idispensebehavior.dispense(pointer, eventStack); return stack; } -@@ -0,0 +0,0 @@ public interface DispenseItemBehavior { - // Chain to handler for new item - ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); - DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem()); -- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != ArmorItem.DISPENSE_ITEM_BEHAVIOR) { -+ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != this) { // Paper - fix possible StackOverflowError - idispensebehavior.dispense(pointer, eventStack); - return stack; - } -@@ -0,0 +0,0 @@ public interface DispenseItemBehavior { - OptionalDispenseItemBehavior dispensebehaviormaybe1 = new OptionalDispenseItemBehavior() { - @Override - protected ItemStack execute(BlockSource pointer, ItemStack stack) { -- this.setSuccess(ArmorItem.dispenseArmor(pointer, stack)); -+ this.setSuccess(ArmorItem.dispenseArmor(pointer, stack, this)); // Paper - fix possible StackOverflowError - return stack; - } - }; @@ -0,0 +0,0 @@ public interface DispenseItemBehavior { stack.shrink(1); this.setSuccess(true); } else { -- this.setSuccess(ArmorItem.dispenseArmor(pointer, stack)); -+ this.setSuccess(ArmorItem.dispenseArmor(pointer, stack, this)); // Paper - fix possible StackOverflowError +- this.setSuccess(EquipmentDispenseItemBehavior.dispenseEquipment(pointer, stack)); ++ this.setSuccess(EquipmentDispenseItemBehavior.dispenseEquipment(pointer, stack, this)); // Paper - fix possible StackOverflowError } return stack; @@ -66,8 +48,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 stack.shrink(1); this.setSuccess(true); } else { -- this.setSuccess(ArmorItem.dispenseArmor(pointer, stack)); -+ this.setSuccess(ArmorItem.dispenseArmor(pointer, stack, this)); // Paper - fix possible StackOverflowError +- this.setSuccess(EquipmentDispenseItemBehavior.dispenseEquipment(pointer, stack)); ++ this.setSuccess(EquipmentDispenseItemBehavior.dispenseEquipment(pointer, stack, this)); // Paper - fix possible StackOverflowError } return stack; @@ -75,43 +57,39 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 // Chain to handler for new item ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem()); -- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != ArmorItem.DISPENSE_ITEM_BEHAVIOR) { -+ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != this) { // Paper - fix possible StackOverflowError +- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE) { ++ if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE && idispensebehavior != this) { // Paper - fix possible StackOverflowError idispensebehavior.dispense(pointer, eventStack); return stack; } -diff --git a/src/main/java/net/minecraft/world/item/ArmorItem.java b/src/main/java/net/minecraft/world/item/ArmorItem.java +diff --git a/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/item/ArmorItem.java -+++ b/src/main/java/net/minecraft/world/item/ArmorItem.java -@@ -0,0 +0,0 @@ public class ArmorItem extends Item implements Equipable { - public static final DispenseItemBehavior DISPENSE_ITEM_BEHAVIOR = new DefaultDispenseItemBehavior() { - @Override - protected ItemStack execute(BlockSource pointer, ItemStack stack) { -- return ArmorItem.dispenseArmor(pointer, stack) ? stack : super.execute(pointer, stack); -+ return ArmorItem.dispenseArmor(pointer, stack, this) ? stack : super.execute(pointer, stack); // Paper - fix possible StackOverflowError - } - }; - protected final ArmorItem.Type type; - protected final Holder material; - private final Supplier defaultModifiers; +--- a/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java ++++ b/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java +@@ -0,0 +0,0 @@ public class EquipmentDispenseItemBehavior extends DefaultDispenseItemBehavior { + @Override + protected ItemStack execute(BlockSource pointer, ItemStack stack) { +- return EquipmentDispenseItemBehavior.dispenseEquipment(pointer, stack) ? stack : super.execute(pointer, stack); ++ return EquipmentDispenseItemBehavior.dispenseEquipment(pointer, stack, null) ? stack : super.execute(pointer, stack); // Paper - fix possible StackOverflowError + } + +- public static boolean dispenseEquipment(BlockSource pointer, ItemStack stack) { + @Deprecated @io.papermc.paper.annotation.DoNotUse // Paper - public static boolean dispenseArmor(BlockSource pointer, ItemStack armor) { ++ public static boolean dispenseEquipment(BlockSource pointer, ItemStack armor) { + // Paper start -+ return dispenseArmor(pointer, armor, null); ++ return dispenseEquipment(pointer, armor, null); + } -+ public static boolean dispenseArmor(BlockSource pointer, ItemStack armor, @javax.annotation.Nullable DispenseItemBehavior currentBehavior) { -+ // Paper end ++ public static boolean dispenseEquipment(BlockSource pointer, ItemStack stack, @javax.annotation.Nullable DispenseItemBehavior currentBehavior) { BlockPos blockposition = pointer.pos().relative((Direction) pointer.state().getValue(DispenserBlock.FACING)); - List list = pointer.level().getEntitiesOfClass(LivingEntity.class, new AABB(blockposition), EntitySelector.NO_SPECTATORS.and(new EntitySelector.MobCanWearArmorEntitySelector(armor))); - -@@ -0,0 +0,0 @@ public class ArmorItem extends Item implements Equipable { + List list = pointer.level().getEntitiesOfClass(LivingEntity.class, new AABB(blockposition), (entityliving) -> { + return entityliving.canEquipWithDispenser(stack); +@@ -0,0 +0,0 @@ public class EquipmentDispenseItemBehavior extends DefaultDispenseItemBehavior { // Chain to handler for new item ItemStack eventStack = CraftItemStack.asNMSCopy(event.getItem()); DispenseItemBehavior idispensebehavior = (DispenseItemBehavior) DispenserBlock.DISPENSER_REGISTRY.get(eventStack.getItem()); -- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != ArmorItem.DISPENSE_ITEM_BEHAVIOR) { -+ if (idispensebehavior != DispenseItemBehavior.NOOP && (currentBehavior == null || idispensebehavior != currentBehavior)) { // Paper - fix possible StackOverflowError +- if (idispensebehavior != DispenseItemBehavior.NOOP && idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE) { ++ if (idispensebehavior != DispenseItemBehavior.NOOP && (currentBehavior == null || idispensebehavior != EquipmentDispenseItemBehavior.INSTANCE)) { // Paper - fix possible StackOverflowError idispensebehavior.dispense(pointer, eventStack); return true; } diff --git a/patches/unapplied/server/Improve-tag-parser-handling.patch b/patches/server/Improve-tag-parser-handling.patch similarity index 94% rename from patches/unapplied/server/Improve-tag-parser-handling.patch rename to patches/server/Improve-tag-parser-handling.patch index 51d80c7043..fb61a00c31 100644 --- a/patches/unapplied/server/Improve-tag-parser-handling.patch +++ b/patches/server/Improve-tag-parser-handling.patch @@ -170,24 +170,15 @@ diff --git a/src/main/java/net/minecraft/network/chat/contents/SelectorContents. index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/network/chat/contents/SelectorContents.java +++ b/src/main/java/net/minecraft/network/chat/contents/SelectorContents.java -@@ -0,0 +0,0 @@ public class SelectorContents implements ComponentContents { - EntitySelectorParser entitySelectorParser = new EntitySelectorParser(new StringReader(pattern), true); - entitySelector = entitySelectorParser.parse(); - } catch (CommandSyntaxException var3) { -- LOGGER.warn("Invalid selector component: {}: {}", pattern, var3.getMessage()); -+ return null; // Paper - } - - return entitySelector; -@@ -0,0 +0,0 @@ public class SelectorContents implements ComponentContents { - @Override - public MutableComponent resolve(@Nullable CommandSourceStack source, @Nullable Entity sender, int depth) throws CommandSyntaxException { - if (source != null && this.selector != null) { +@@ -0,0 +0,0 @@ public record SelectorContents(SelectorPattern selector, Optional sep + if (source == null) { + return Component.empty(); + } else { - Optional optional = ComponentUtils.updateForEntity(source, this.separator, sender, depth); + Optional optional = ComponentUtils.updateSeparatorForEntity(source, this.separator, sender, depth); // Paper - validate separator - return ComponentUtils.formatList(this.selector.findEntities(source), optional, Entity::getDisplayName); - } else { - return Component.empty(); + return ComponentUtils.formatList(this.selector.resolved().findEntities(source), optional, Entity::getDisplayName); + } + } diff --git a/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java b/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/network/chat/contents/TranslatableContents.java diff --git a/patches/unapplied/server/Item-Mutation-Fixes.patch b/patches/server/Item-Mutation-Fixes.patch similarity index 100% rename from patches/unapplied/server/Item-Mutation-Fixes.patch rename to patches/server/Item-Mutation-Fixes.patch diff --git a/patches/unapplied/server/ItemStack-Tooltip-API.patch b/patches/server/ItemStack-Tooltip-API.patch similarity index 100% rename from patches/unapplied/server/ItemStack-Tooltip-API.patch rename to patches/server/ItemStack-Tooltip-API.patch diff --git a/patches/unapplied/server/More-Raid-API.patch b/patches/server/More-Raid-API.patch similarity index 100% rename from patches/unapplied/server/More-Raid-API.patch rename to patches/server/More-Raid-API.patch diff --git a/patches/unapplied/server/Per-world-ticks-per-spawn-settings.patch b/patches/server/Per-world-ticks-per-spawn-settings.patch similarity index 100% rename from patches/unapplied/server/Per-world-ticks-per-spawn-settings.patch rename to patches/server/Per-world-ticks-per-spawn-settings.patch index 0a408328d1..8017108c1c 100644 --- a/patches/unapplied/server/Per-world-ticks-per-spawn-settings.patch +++ b/patches/server/Per-world-ticks-per-spawn-settings.patch @@ -22,8 +22,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + // Paper end - public abstract ResourceKey getTypeKey(); + public abstract ResourceKey getTypeKey(); @@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // CraftBukkit Ticks things for (SpawnCategory spawnCategory : SpawnCategory.values()) { diff --git a/patches/unapplied/server/Properly-track-the-changed-item-from-dispense-events.patch b/patches/server/Properly-track-the-changed-item-from-dispense-events.patch similarity index 80% rename from patches/unapplied/server/Properly-track-the-changed-item-from-dispense-events.patch rename to patches/server/Properly-track-the-changed-item-from-dispense-events.patch index b879104ac7..53ebbbfd7f 100644 --- a/patches/unapplied/server/Properly-track-the-changed-item-from-dispense-events.patch +++ b/patches/server/Properly-track-the-changed-item-from-dispense-events.patch @@ -19,8 +19,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } try { -- entitytypes.spawn(pointer.level(), stack, (Player) null, pointer.pos().relative(enumdirection), MobSpawnType.DISPENSER, enumdirection != Direction.UP, false); -+ entitytypes.spawn(pointer.level(), itemstack1, (Player) null, pointer.pos().relative(enumdirection), MobSpawnType.DISPENSER, enumdirection != Direction.UP, false); // Paper - track changed item in dispense event +- entitytypes.spawn(pointer.level(), stack, (Player) null, pointer.pos().relative(enumdirection), EntitySpawnReason.DISPENSER, enumdirection != Direction.UP, false); ++ entitytypes.spawn(pointer.level(), itemstack1, (Player) null, pointer.pos().relative(enumdirection), EntitySpawnReason.DISPENSER, enumdirection != Direction.UP, false); // Paper - track changed item in dispense event } catch (Exception exception) { DispenseItemBehavior.LOGGER.error("Error while dispensing spawn egg from dispenser at {}", pointer.pos(), exception); // CraftBukkit - decompile error return ItemStack.EMPTY; @@ -33,7 +33,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 entityarmorstand.setYRot(enumdirection.toYRot()); - }, worldserver, stack, (Player) null); + }, worldserver, newStack, (Player) null); // Paper - track changed items in the dispense event - ArmorStand entityarmorstand = (ArmorStand) EntityType.ARMOR_STAND.spawn(worldserver, consumer, blockposition, MobSpawnType.DISPENSER, false, false); + ArmorStand entityarmorstand = (ArmorStand) EntityType.ARMOR_STAND.spawn(worldserver, consumer, blockposition, EntitySpawnReason.DISPENSER, false, false); if (entityarmorstand != null) { @@ -0,0 +0,0 @@ public interface DispenseItemBehavior { @@ -43,8 +43,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 - ((Saddleable) list.get(0)).equipSaddle(itemstack1, SoundSource.BLOCKS); + ((Saddleable) list.get(0)).equipSaddle(CraftItemStack.asNMSCopy(event.getItem()), SoundSource.BLOCKS); // Paper - track changed items in dispense event // CraftBukkit end - if (shrink) stack.shrink(1); // Paper - actually handle here this.setSuccess(true); + return stack; @@ -0,0 +0,0 @@ public interface DispenseItemBehavior { int y = blockposition.getY(); int z = blockposition.getZ(); @@ -75,22 +75,14 @@ diff --git a/src/main/java/net/minecraft/core/dispenser/ProjectileDispenseBehavi index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/core/dispenser/ProjectileDispenseBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/ProjectileDispenseBehavior.java -@@ -0,0 +0,0 @@ public class ProjectileDispenseBehavior extends DefaultDispenseItemBehavior { - ServerLevel worldserver = pointer.level(); - Direction enumdirection = (Direction) pointer.state().getValue(DispenserBlock.FACING); - Position iposition = this.dispenseConfig.positionFunction().getDispensePosition(pointer, enumdirection); -- Projectile iprojectile = this.projectileItem.asProjectile(worldserver, iposition, stack, enumdirection); -+ // Paper - move down - - // CraftBukkit start - // this.projectileItem.shoot(iprojectile, (double) enumdirection.getStepX(), (double) enumdirection.getStepY(), (double) enumdirection.getStepZ(), this.dispenseConfig.power(), this.dispenseConfig.uncertainty()); @@ -0,0 +0,0 @@ public class ProjectileDispenseBehavior extends DefaultDispenseItemBehavior { } } -+ Projectile iprojectile = this.projectileItem.asProjectile(worldserver, iposition, CraftItemStack.unwrap(event.getItem()), enumdirection); // Paper - move from above and track changed items in the dispense event; unwrap is safe here because all uses of the stack make their own copies - this.projectileItem.shoot(iprojectile, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), this.dispenseConfig.power(), this.dispenseConfig.uncertainty()); +- Projectile iprojectile = Projectile.spawnProjectileUsingShoot(this.projectileItem.asProjectile(worldserver, iposition, stack, enumdirection), worldserver, stack, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), this.dispenseConfig.power(), this.dispenseConfig.uncertainty()); ++ Projectile iprojectile = Projectile.spawnProjectileUsingShoot(this.projectileItem.asProjectile(worldserver, iposition, CraftItemStack.unwrap(event.getItem()), enumdirection), worldserver, stack, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), this.dispenseConfig.power(), this.dispenseConfig.uncertainty()); // Paper - mtrack changed items in the dispense event; unwrap is safe here because all uses of the stack make their own copies ((Entity) iprojectile).projectileSource = new org.bukkit.craftbukkit.projectiles.CraftBlockProjectileSource(pointer.blockEntity()); + // itemstack.shrink(1); // CraftBukkit - Handled during event processing // CraftBukkit end diff --git a/src/main/java/net/minecraft/core/dispenser/ShulkerBoxDispenseBehavior.java b/src/main/java/net/minecraft/core/dispenser/ShulkerBoxDispenseBehavior.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 diff --git a/patches/unapplied/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch b/patches/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch similarity index 95% rename from patches/unapplied/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch rename to patches/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch index 3602dd9a77..385a2dae4f 100644 --- a/patches/unapplied/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch +++ b/patches/server/Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch @@ -12,18 +12,6 @@ So protect them from a multitude of methods of destroying them. A config is provided if you rather let players use these exploits, and let them destroy the worlds End Portals and get on top of the nether easy. -diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/level/Explosion.java -+++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -0,0 +0,0 @@ public class Explosion { - for (float f1 = 0.3F; f > 0.0F; f -= 0.22500001F) { - BlockPos blockposition = BlockPos.containing(d4, d5, d6); - BlockState iblockdata = this.level.getBlockState(blockposition); -+ if (!iblockdata.isDestroyable()) continue; // Paper - Protect Bedrock and End Portal/Frames from being destroyed - FluidState fluid = iblockdata.getFluidState(); // Paper - Perf: Optimize call to getFluid for explosions - - if (!this.level.isInWorldBounds(blockposition)) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/Level.java @@ -39,6 +27,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 CraftBlockState blockstate = this.capturedBlockStates.get(pos); if (blockstate == null) { blockstate = CapturedBlockState.getTreeBlockState(this, pos, flags); +diff --git a/src/main/java/net/minecraft/world/level/ServerExplosion.java b/src/main/java/net/minecraft/world/level/ServerExplosion.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/world/level/ServerExplosion.java ++++ b/src/main/java/net/minecraft/world/level/ServerExplosion.java +@@ -0,0 +0,0 @@ public class ServerExplosion implements Explosion { + for (float f1 = 0.3F; f > 0.0F; f -= 0.22500001F) { + BlockPos blockposition = BlockPos.containing(d4, d5, d6); + BlockState iblockdata = this.level.getBlockState(blockposition); ++ if (!iblockdata.isDestroyable()) continue; // Paper - Protect Bedrock and End Portal/Frames from being destroyed + FluidState fluid = iblockdata.getFluidState(); // Paper - Perf: Optimize call to getFluid for explosions + + if (!this.level.isInWorldBounds(blockposition)) { diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java @@ -112,7 +112,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @@ -0,0 +0,0 @@ public abstract class BlockBehaviour implements FeatureElement { } - protected void onExplosionHit(BlockState state, Level world, BlockPos pos, Explosion explosion, BiConsumer stackMerger) { + protected void onExplosionHit(BlockState state, ServerLevel world, BlockPos pos, Explosion explosion, BiConsumer stackMerger) { - if (!state.isAir() && explosion.getBlockInteraction() != Explosion.BlockInteraction.TRIGGER_BLOCK) { + if (!state.isAir() && explosion.getBlockInteraction() != Explosion.BlockInteraction.TRIGGER_BLOCK && state.isDestroyable()) { // Paper - Protect Bedrock and End Portal/Frames from being destroyed Block block = state.getBlock(); @@ -148,7 +148,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + return !this.isDestroyable() ? PushReaction.BLOCK : this.pushReaction; // Paper - Protect Bedrock and End Portal/Frames from being destroyed } - public boolean isSolidRender(BlockGetter world, BlockPos pos) { + public boolean isSolidRender() { diff --git a/src/main/java/net/minecraft/world/level/portal/PortalForcer.java b/src/main/java/net/minecraft/world/level/portal/PortalForcer.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalForcer.java diff --git a/patches/unapplied/server/add-number-format-api.patch b/patches/server/add-number-format-api.patch similarity index 100% rename from patches/unapplied/server/add-number-format-api.patch rename to patches/server/add-number-format-api.patch diff --git a/patches/unapplied/server/improve-BanList-types.patch b/patches/server/improve-BanList-types.patch similarity index 100% rename from patches/unapplied/server/improve-BanList-types.patch rename to patches/server/improve-BanList-types.patch diff --git a/patches/unapplied/server/Fix-tripwire-disarming-not-working-as-intended.patch b/patches/unapplied/server/Fix-tripwire-disarming-not-working-as-intended.patch deleted file mode 100644 index cb574fcf89..0000000000 --- a/patches/unapplied/server/Fix-tripwire-disarming-not-working-as-intended.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: DungeonDev -Date: Sun, 2 Jul 2023 02:34:54 +0100 -Subject: [PATCH] Fix tripwire disarming not working as intended - -Fixes MC-129055 - -diff --git a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java -index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java -+++ b/src/main/java/net/minecraft/world/level/block/TripWireHookBlock.java -@@ -0,0 +0,0 @@ public class TripWireHookBlock extends Block { - BlockState iblockdata4 = aiblockdata[l]; - - if (iblockdata4 != null) { -+ if (world.getBlockState(blockposition2).is(Blocks.TRIPWIRE) || io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowTripwireDisarmingExploits) { // Paper - Fix tripwire disarming not working as intended - world.setBlock(blockposition2, (BlockState) iblockdata4.trySetValue(TripWireHookBlock.ATTACHED, flag4), 3); -- if (!world.getBlockState(blockposition2).isAir()) { -- ; - } - } - }