diff --git a/patches/unapplied/server/Add-BlockBreakProgressUpdateEvent.patch b/patches/server/Add-BlockBreakProgressUpdateEvent.patch similarity index 100% rename from patches/unapplied/server/Add-BlockBreakProgressUpdateEvent.patch rename to patches/server/Add-BlockBreakProgressUpdateEvent.patch 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-PlayerShieldDisableEvent.patch b/patches/server/Add-PlayerShieldDisableEvent.patch similarity index 100% rename from patches/unapplied/server/Add-PlayerShieldDisableEvent.patch rename to patches/server/Add-PlayerShieldDisableEvent.patch diff --git a/patches/unapplied/server/Add-PlayerTradeEvent-and-PlayerPurchaseEvent.patch b/patches/server/Add-PlayerTradeEvent-and-PlayerPurchaseEvent.patch similarity index 100% rename from patches/unapplied/server/Add-PlayerTradeEvent-and-PlayerPurchaseEvent.patch rename to patches/server/Add-PlayerTradeEvent-and-PlayerPurchaseEvent.patch diff --git a/patches/unapplied/server/Add-ShulkerDuplicateEvent.patch b/patches/server/Add-ShulkerDuplicateEvent.patch similarity index 100% rename from patches/unapplied/server/Add-ShulkerDuplicateEvent.patch rename to patches/server/Add-ShulkerDuplicateEvent.patch diff --git a/patches/unapplied/server/Add-api-for-spawn-egg-texture-colors.patch b/patches/server/Add-api-for-spawn-egg-texture-colors.patch similarity index 100% rename from patches/unapplied/server/Add-api-for-spawn-egg-texture-colors.patch rename to patches/server/Add-api-for-spawn-egg-texture-colors.patch diff --git a/patches/unapplied/server/Add-drops-to-shear-events.patch b/patches/server/Add-drops-to-shear-events.patch similarity index 98% rename from patches/unapplied/server/Add-drops-to-shear-events.patch rename to patches/server/Add-drops-to-shear-events.patch index 097b90ee47..11d83f391a 100644 --- a/patches/unapplied/server/Add-drops-to-shear-events.patch +++ b/patches/server/Add-drops-to-shear-events.patch @@ -243,20 +243,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + // Paper start - shear drops API + this.generateShearedMushrooms(stack -> { + this.forceDrops = true; -+ this.spawnAtLocation(stack); ++ this.spawnAtLocation(stack, this.getBbHeight()); + this.forceDrops = false; + }); + } + private void generateShearedMushrooms(java.util.function.Consumer stackConsumer) { + // Paper end - shear drops API - if (this.level() instanceof ServerLevel serverLevel && serverLevel.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { + if (this.level() instanceof ServerLevel serverLevel) { LootTable lootTable = serverLevel.getServer().reloadableRegistries().getLootTable(BuiltInLootTables.BOGGED_SHEAR); LootParams lootParams = new LootParams.Builder(serverLevel) @@ -0,0 +0,0 @@ public class Bogged extends AbstractSkeleton implements Shearable { .create(LootContextParamSets.SHEARING); for (ItemStack itemStack : lootTable.getRandomItems(lootParams)) { -- this.spawnAtLocation(itemStack); +- this.spawnAtLocation(itemStack, this.getBbHeight()); + stackConsumer.accept(itemStack); // Paper } } diff --git a/patches/unapplied/server/Add-experience-points-API.patch b/patches/server/Add-experience-points-API.patch similarity index 100% rename from patches/unapplied/server/Add-experience-points-API.patch rename to patches/server/Add-experience-points-API.patch 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 100% rename from patches/unapplied/server/Configurable-max-block-fluid-ticks.patch rename to patches/server/Configurable-max-block-fluid-ticks.patch 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 96% rename from patches/unapplied/server/Disable-memory-reserve-allocating.patch rename to patches/server/Disable-memory-reserve-allocating.patch index 81920c9578..a8b1b59279 100644 --- a/patches/unapplied/server/Disable-memory-reserve-allocating.patch +++ b/patches/server/Disable-memory-reserve-allocating.patch @@ -14,6 +14,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 public static void preload() { - MemoryReserve.allocate(); + // MemoryReserve.allocate(); // Paper - Disable memory reserve allocating - (new CrashReport("Don't panic!", new Throwable())).getFriendlyReport(); + (new CrashReport("Don't panic!", new Throwable())).getFriendlyReport(ReportType.CRASH); } } diff --git a/patches/unapplied/server/Dont-resend-blocks-on-interactions.patch b/patches/server/Dont-resend-blocks-on-interactions.patch similarity index 97% rename from patches/unapplied/server/Dont-resend-blocks-on-interactions.patch rename to patches/server/Dont-resend-blocks-on-interactions.patch index 5979de2fcd..34b6f42eb8 100644 --- a/patches/unapplied/server/Dont-resend-blocks-on-interactions.patch +++ b/patches/server/Dont-resend-blocks-on-interactions.patch @@ -54,8 +54,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + //} + // Paper end - Don't resync blocks } else if (!iblockdata.isAir()) { - iblockdata.attack(this.level, pos, this.player); - f = iblockdata.getDestroyProgress(this.player, this.player.level(), pos); + EnchantmentHelper.onHitBlock(this.level, this.player.getMainHandItem(), this.player, this.player, EquipmentSlot.MAINHAND, Vec3.atCenterOf(pos), iblockdata, (item) -> { + this.player.onEquippedItemBroken(item, EquipmentSlot.MAINHAND); @@ -0,0 +0,0 @@ public class ServerPlayerGameMode { if (event.useItemInHand() == Event.Result.DENY) { // If we 'insta destroyed' then the client needs to be informed. 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/Expose-LootTable-of-DecoratedPot.patch b/patches/server/Expose-LootTable-of-DecoratedPot.patch similarity index 100% rename from patches/unapplied/server/Expose-LootTable-of-DecoratedPot.patch rename to patches/server/Expose-LootTable-of-DecoratedPot.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 93% rename from patches/unapplied/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch rename to patches/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch index 6b23f09441..50aaf354e4 100644 --- a/patches/unapplied/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch +++ b/patches/server/Fire-EntityDamageByEntityEvent-for-unowned-wither-sk.patch @@ -16,4 +16,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + flag = entity.hurt(this.damageSources().magic().customCausingEntity(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls } - if (flag && entity instanceof LivingEntity) { + 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 88% rename from patches/unapplied/server/Fix-DamageSource-API.patch rename to patches/server/Fix-DamageSource-API.patch index ac16ccc25a..91afbd4fef 100644 --- a/patches/unapplied/server/Fix-DamageSource-API.patch +++ b/patches/server/Fix-DamageSource-API.patch @@ -93,16 +93,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } @Override -diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +diff --git a/src/main/java/net/minecraft/world/entity/decoration/BlockAttachedEntity.java b/src/main/java/net/minecraft/world/entity/decoration/BlockAttachedEntity.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -+++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -0,0 +0,0 @@ public abstract class HangingEntity extends Entity { +--- a/src/main/java/net/minecraft/world/entity/decoration/BlockAttachedEntity.java ++++ 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) { // CraftBukkit start - fire break events -- Entity damager = (source.isIndirect()) ? source.getEntity() : source.getDirectEntity(); -+ Entity damager = (source.isIndirect() && source.getEntity() != null) ? source.getEntity() : source.getDirectEntity(); // Paper - fix DamageSource API +- Entity damager = (source.isDirect()) ? source.getDirectEntity() : source.getEntity(); ++ Entity damager = (!source.isDirect() && source.getEntity() != null) ? source.getEntity() : source.getDirectEntity(); // Paper - fix DamageSource API HangingBreakEvent event; if (damager != null) { event = new HangingBreakByEntityEvent((Hanging) this.getBukkitEntity(), damager.getBukkitEntity(), source.is(DamageTypeTags.IS_EXPLOSION) ? HangingBreakEvent.RemoveCause.EXPLOSION : HangingBreakEvent.RemoveCause.ENTITY); @@ -116,9 +116,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.dead = true; - this.level().explode(this, this.level().damageSources().explosion(this, this.entityIgniter, net.minecraft.world.damagesource.DamageTypes.EXPLOSION), 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) - this.discard(EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause this.spawnLingeringCloud(); - // CraftBukkit start + this.triggerOnDeathMobEffects(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 --- a/src/main/java/net/minecraft/world/entity/projectile/EvokerFangs.java @@ -137,14 +137,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 { - - entityplayer.connection.teleport(teleEvent.getTo()); - entity.resetFallDistance(); -- entity.hurt(this.damageSources().fall().customEntityDamager(this), 5.0F); // CraftBukkit -+ entity.hurt(this.damageSources().fall().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API - } - // CraftBukkit end - this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_TELEPORT, SoundSource.PLAYERS); + // 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 { 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 @@ -157,7 +157,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + flag = entity.hurt(this.damageSources().magic().customEventDamager(this), 5.0F); // Paper - Fire EntityDamageByEntityEvent for unowned wither skulls // Paper - fix DamageSource API } - if (flag && entity instanceof LivingEntity) { + if (flag && entity instanceof LivingEntity entityliving) { diff --git a/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageSource.java b/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageSource.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/damage/CraftDamageSource.java @@ -176,7 +176,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @Override public boolean isIndirect() { - return this.getHandle().getEntity() != this.getHandle().getDamager(); -+ return this.getHandle().isIndirect(); // Paper - fix DamageSource API ++ return !this.getHandle().isDirect(); // Paper - fix DamageSource API } @Override diff --git a/patches/unapplied/server/Fix-NPE-on-null-loc-for-EntityTeleportEvent.patch b/patches/server/Fix-NPE-on-null-loc-for-EntityTeleportEvent.patch similarity index 89% rename from patches/unapplied/server/Fix-NPE-on-null-loc-for-EntityTeleportEvent.patch rename to patches/server/Fix-NPE-on-null-loc-for-EntityTeleportEvent.patch index 2a871ebd07..8fcd3827b4 100644 --- a/patches/unapplied/server/Fix-NPE-on-null-loc-for-EntityTeleportEvent.patch +++ b/patches/server/Fix-NPE-on-null-loc-for-EntityTeleportEvent.patch @@ -38,16 +38,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 Location to = teleport.getTo(); this.teleportTo(to.getX(), to.getY(), to.getZ()); } else { -diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/FollowOwnerGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/FollowOwnerGoal.java +diff --git a/src/main/java/net/minecraft/world/entity/TamableAnimal.java b/src/main/java/net/minecraft/world/entity/TamableAnimal.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/goal/FollowOwnerGoal.java -+++ b/src/main/java/net/minecraft/world/entity/ai/goal/FollowOwnerGoal.java -@@ -0,0 +0,0 @@ public class FollowOwnerGoal extends Goal { +--- a/src/main/java/net/minecraft/world/entity/TamableAnimal.java ++++ b/src/main/java/net/minecraft/world/entity/TamableAnimal.java +@@ -0,0 +0,0 @@ public abstract class TamableAnimal extends Animal implements OwnableEntity { } else { // CraftBukkit start - EntityTeleportEvent event = CraftEventFactory.callEntityTeleportEvent(this.tamable, (double) x + 0.5D, (double) y, (double) z + 0.5D); + EntityTeleportEvent event = CraftEventFactory.callEntityTeleportEvent(this, (double) x + 0.5D, (double) y, (double) z + 0.5D); - if (event.isCancelled()) { -+ if (event.isCancelled() || event.getTo() == null) { // Paper ++ if (event.isCancelled() || event.getTo() == null) { // Paper - prevent NP on null event to location return false; } Location to = event.getTo(); 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 100% rename from patches/unapplied/server/Fix-possible-StackOverflowError-for-some-dispenses.patch rename to patches/server/Fix-possible-StackOverflowError-for-some-dispenses.patch diff --git a/patches/unapplied/server/Fixup-NamespacedKey-handling.patch b/patches/server/Fixup-NamespacedKey-handling.patch similarity index 100% rename from patches/unapplied/server/Fixup-NamespacedKey-handling.patch rename to patches/server/Fixup-NamespacedKey-handling.patch diff --git a/patches/unapplied/server/Improve-Registry.patch b/patches/server/Improve-Registry.patch similarity index 100% rename from patches/unapplied/server/Improve-Registry.patch rename to patches/server/Improve-Registry.patch diff --git a/patches/unapplied/server/Improve-tag-parser-handling.patch b/patches/server/Improve-tag-parser-handling.patch similarity index 100% rename from patches/unapplied/server/Improve-tag-parser-handling.patch rename to patches/server/Improve-tag-parser-handling.patch diff --git a/patches/unapplied/server/Item-Mutation-Fixes.patch b/patches/server/Item-Mutation-Fixes.patch similarity index 94% rename from patches/unapplied/server/Item-Mutation-Fixes.patch rename to patches/server/Item-Mutation-Fixes.patch index d6fe9cbfe6..beefe5683e 100644 --- a/patches/unapplied/server/Item-Mutation-Fixes.patch +++ b/patches/server/Item-Mutation-Fixes.patch @@ -14,7 +14,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.access.execute((world, blockposition) -> { - ItemStack itemstack2 = itemstack; + ItemStack itemstack2 = itemstack; // Paper - diff on change - List list = this.getEnchantmentList(world.enabledFeatures(), itemstack, id, this.costs[id]); + List list = this.getEnchantmentList(world.registryAccess(), itemstack, id, this.costs[id]); // CraftBukkit start @@ -0,0 +0,0 @@ public class EnchantmentMenu extends AbstractContainerMenu { @@ -22,14 +22,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } // CraftBukkit end - if (itemstack.is(Items.BOOK)) { -- itemstack2 = itemstack.transmuteCopy(Items.ENCHANTED_BOOK, 1); +- itemstack2 = itemstack.transmuteCopy(Items.ENCHANTED_BOOK); + // Paper start + itemstack2 = org.bukkit.craftbukkit.inventory.CraftItemStack.getOrCloneOnMutation(item, event.getItem()); + if (itemstack2 != itemstack) { this.enchantSlots.setItem(0, itemstack2); } + if (itemstack2.is(Items.BOOK)) { -+ itemstack2 = itemstack2.transmuteCopy(Items.ENCHANTED_BOOK, 1); ++ itemstack2 = itemstack2.transmuteCopy(Items.ENCHANTED_BOOK); + this.enchantSlots.setItem(0, itemstack2); + } + // Paper end 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/Properly-handle-experience-dropping-on-block-break.patch b/patches/server/Properly-handle-experience-dropping-on-block-break.patch similarity index 100% rename from patches/unapplied/server/Properly-handle-experience-dropping-on-block-break.patch rename to patches/server/Properly-handle-experience-dropping-on-block-break.patch diff --git a/patches/unapplied/server/Reduce-allocation-of-Vec3D-by-entity-tracker.patch b/patches/server/Reduce-allocation-of-Vec3D-by-entity-tracker.patch similarity index 97% rename from patches/unapplied/server/Reduce-allocation-of-Vec3D-by-entity-tracker.patch rename to patches/server/Reduce-allocation-of-Vec3D-by-entity-tracker.patch index 375ba1b8e2..ec72f4274f 100644 --- a/patches/unapplied/server/Reduce-allocation-of-Vec3D-by-entity-tracker.patch +++ b/patches/server/Reduce-allocation-of-Vec3D-by-entity-tracker.patch @@ -56,4 +56,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + // Paper end - reduce allocation of Vec3D here Packet packet1 = null; boolean flag2 = flag1 || this.tickCount % 60 == 0; - boolean flag3 = Math.abs(i - this.yRotp) >= 1 || Math.abs(j - this.xRotp) >= 1; + boolean flag3 = Math.abs(i - this.lastSentYRot) >= 1 || Math.abs(j - this.lastSentXRot) >= 1; diff --git a/patches/unapplied/server/Validate-ResourceLocation-in-NBT-reading.patch b/patches/server/Validate-ResourceLocation-in-NBT-reading.patch similarity index 91% rename from patches/unapplied/server/Validate-ResourceLocation-in-NBT-reading.patch rename to patches/server/Validate-ResourceLocation-in-NBT-reading.patch index 77da505baf..9e449ba6fa 100644 --- a/patches/unapplied/server/Validate-ResourceLocation-in-NBT-reading.patch +++ b/patches/server/Validate-ResourceLocation-in-NBT-reading.patch @@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 if (!nbt.contains("Name", 8)) { return Blocks.AIR.defaultBlockState(); } else { -- ResourceLocation resourceLocation = new ResourceLocation(nbt.getString("Name")); +- ResourceLocation resourceLocation = ResourceLocation.parse(nbt.getString("Name")); - Optional> optional = blockLookup.get(ResourceKey.create(Registries.BLOCK, resourceLocation)); + // Paper start - Validate resource location + ResourceLocation resourceLocation = ResourceLocation.tryParse(nbt.getString("Name")); @@ -25,10 +25,10 @@ diff --git a/src/main/java/net/minecraft/resources/ResourceLocation.java b/src/m index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/resources/ResourceLocation.java +++ b/src/main/java/net/minecraft/resources/ResourceLocation.java -@@ -0,0 +0,0 @@ public class ResourceLocation implements Comparable { - private final String path; +@@ -0,0 +0,0 @@ public final class ResourceLocation implements Comparable { + + assert isValidPath(path); - protected ResourceLocation(String namespace, String path, @Nullable ResourceLocation.Dummy extraData) { + // Paper start - Validate ResourceLocation + // Check for the max network string length (capped at Short.MAX_VALUE) as well as the max bytes of a StringTag (length written as an unsigned short) + final String resourceLocation = namespace + ":" + path; @@ -47,7 +47,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 default boolean tryLoadLootTable(CompoundTag nbt) { if (nbt.contains("LootTable", 8)) { -- this.setLootTable(ResourceKey.create(Registries.LOOT_TABLE, new ResourceLocation(nbt.getString("LootTable")))); +- this.setLootTable(ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation.parse(nbt.getString("LootTable")))); + this.setLootTable(net.minecraft.Optionull.map(ResourceLocation.tryParse(nbt.getString("LootTable")), rl -> ResourceKey.create(Registries.LOOT_TABLE, rl))); // Paper - Validate ResourceLocation if (this.lootableData() != null && this.getLootTable() != null) this.lootableData().loadNbt(nbt); // Paper - LootTable API if (nbt.contains("LootTableSeed", 4)) { @@ -60,7 +60,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 } public static Optional> by(CompoundTag nbt) { -- return BuiltInRegistries.ENTITY_TYPE.getOptional(new ResourceLocation(nbt.getString("id"))); +- return BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.parse(nbt.getString("id"))); + return BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(nbt.getString("id"))); // Paper - Validate ResourceLocation } @@ -70,10 +70,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -0,0 +0,0 @@ public abstract class LivingEntity extends Entity implements Attackable { - if (nbt.contains("SleepingX", 99) && nbt.contains("SleepingY", 99) && nbt.contains("SleepingZ", 99)) { BlockPos blockposition = new BlockPos(nbt.getInt("SleepingX"), nbt.getInt("SleepingY"), nbt.getInt("SleepingZ")); -- + + if (this.position().distanceToSqr(blockposition.getX(), blockposition.getY(), blockposition.getZ()) < 16 * 16) { // Paper - The sleeping pos will always also set the actual pos, so a desync suggests something is wrong this.setSleepingPos(blockposition); this.entityData.set(LivingEntity.DATA_POSE, Pose.SLEEPING); @@ -88,11 +87,11 @@ diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/n index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -0,0 +0,0 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti - +@@ -0,0 +0,0 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab + this.leashData = this.readLeashData(nbt); this.setLeftHanded(nbt.getBoolean("LeftHanded")); if (nbt.contains("DeathLootTable", 8)) { -- this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, new ResourceLocation(nbt.getString("DeathLootTable"))); +- this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation.parse(nbt.getString("DeathLootTable"))); + this.lootTable = net.minecraft.Optionull.map(ResourceLocation.tryParse(nbt.getString("DeathLootTable")), rl -> ResourceKey.create(Registries.LOOT_TABLE, rl)); // Paper - Validate ResourceLocation this.lootTableSeed = nbt.getLong("DeathLootTableSeed"); } @@ -105,11 +104,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.setCritArrow(nbt.getBoolean("crit")); this.setPierceLevel(nbt.getByte("PierceLevel")); if (nbt.contains("SoundEvent", 8)) { -- this.soundEvent = (SoundEvent) BuiltInRegistries.SOUND_EVENT.getOptional(new ResourceLocation(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent()); +- this.soundEvent = (SoundEvent) BuiltInRegistries.SOUND_EVENT.getOptional(ResourceLocation.parse(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent()); + this.soundEvent = (SoundEvent) BuiltInRegistries.SOUND_EVENT.getOptional(ResourceLocation.tryParse(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent()); // Paper - Validate resource location } - this.setShotFromCrossbow(nbt.getBoolean("ShotFromCrossbow")); + if (nbt.contains("item", 10)) { diff --git a/src/main/java/net/minecraft/world/entity/vehicle/ContainerEntity.java b/src/main/java/net/minecraft/world/entity/vehicle/ContainerEntity.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/ContainerEntity.java @@ -118,7 +117,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 default void readChestVehicleSaveData(CompoundTag nbt, HolderLookup.Provider registriesLookup) { this.clearItemStacks(); if (nbt.contains("LootTable", 8)) { -- this.setLootTable(ResourceKey.create(Registries.LOOT_TABLE, new ResourceLocation(nbt.getString("LootTable")))); +- this.setLootTable(ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation.parse(nbt.getString("LootTable")))); + this.setLootTable(net.minecraft.Optionull.map(ResourceLocation.tryParse(nbt.getString("LootTable")), rl -> ResourceKey.create(Registries.LOOT_TABLE, rl))); // Paper - Validate ResourceLocation // Paper start - LootTable API if (this.getLootTable() != null) { @@ -131,7 +130,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 while (iterator.hasNext()) { String s = (String) iterator.next(); -- this.recipesUsed.put(new ResourceLocation(s), nbttagcompound1.getInt(s)); +- this.recipesUsed.put(ResourceLocation.parse(s), nbttagcompound1.getInt(s)); + // Paper start - Validate ResourceLocation + final ResourceLocation resourceLocation = ResourceLocation.tryParse(s); + if (resourceLocation != null) { @@ -149,7 +148,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 private boolean tryLoadLootTable(CompoundTag nbt) { if (nbt.contains("LootTable", 8)) { -- this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, new ResourceLocation(nbt.getString("LootTable"))); +- this.lootTable = ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation.parse(nbt.getString("LootTable"))); + this.lootTable = net.minecraft.Optionull.map(ResourceLocation.tryParse(nbt.getString("LootTable")), rl -> ResourceKey.create(Registries.LOOT_TABLE, rl)); // Paper - Validate ResourceLocation this.lootTableSeed = nbt.getLong("LootTableSeed"); return true; diff --git a/patches/unapplied/server/add-more-scoreboard-API.patch b/patches/server/add-more-scoreboard-API.patch similarity index 100% rename from patches/unapplied/server/add-more-scoreboard-API.patch rename to patches/server/add-more-scoreboard-API.patch 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