diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 9c749f332..c70522c15 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -276,19 +276,18 @@ index ec2396f0e5d62b10450eaa7239a8c5479638b3c3..72bb60535d2f35435ae8b96faced60a1 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 774556a62eb240da42e84db4502e2ed43495be17..50e78e5220bd8cb48e585866b2cb25f6688ed9e0 100644 +index 774556a62eb240da42e84db4502e2ed43495be17..fb87620c742ff7912f5e8ccd2a7930dd605576d9 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -@@ -11,8 +11,7 @@ public final class Versioning { +@@ -11,7 +11,7 @@ public final class Versioning { public static String getBukkitVersion() { String result = "Unknown-Version"; - InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); -- Properties properties = new Properties(); + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Purpur + Properties properties = new Properties(); if (stream != null) { - try { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java index 40dcdf6885e99b26283a9ea2bd4d4bf6ec358e71..5fc8cc40ab627eba0b2110c73d31af213a935733 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 02948550b..a4898a25a 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -79,7 +79,7 @@ index 9a94249834f8b0b8d3f6aeaf0c859ba875079250..0ade0256c3a227ea6a2971b2c5889b99 if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 37632d0c41149e6269fead808903765f0e59dbcc..856803084d30cc4cbdb53bd6db15e7db5ea16154 100644 +index 37632d0c41149e6269fead808903765f0e59dbcc..eed3fa6b14b1e93f8d6571bba5675796e3418f49 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -377,7 +377,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -124,7 +124,7 @@ index 37632d0c41149e6269fead808903765f0e59dbcc..856803084d30cc4cbdb53bd6db15e7db return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end -+ urpur start ++ // Purpur start + @Nullable + private Player rider = null; + @@ -2009,7 +2009,7 @@ index b05b560b7570e97bc234b75f26233909fcf575b3..71234b258157579d3a47064e7e299bb7 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index d8056421249c8e75e96a55ec07dce84d2bba9c5c..d22509f74bab68a06a8fa1a8547a2689053c6f85 100644 +index d8056421249c8e75e96a55ec07dce84d2bba9c5c..be0c77cd7ca3c9b9379c16b47dc5b5e354847ccf 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -86,6 +86,23 @@ public class Turtle extends Animal { @@ -2079,23 +2079,6 @@ index d8056421249c8e75e96a55ec07dce84d2bba9c5c..d22509f74bab68a06a8fa1a8547a2689 this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); -@@ -523,6 +543,16 @@ public class Turtle extends Animal { - - } - -+ // Purpur start -+ public void purpurTick(Player rider) { -+ if (turtle.isInWater()) { -+ waterController.purpurTick(rider); -+ } else { -+ super.purpurTick(rider); -+ } -+ } -+ // Purpur end -+ - @Override - protected boolean isValidTarget(LevelReader world, BlockPos pos) { - return !world.isEmptyBlock(pos.above()) ? false : TurtleEggBlock.isSand(world, pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java index eecb7511582e5e316b71fa4a4734881424be5ca7..2efa2e19485f9d959a55115ab62f985454689379 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -2792,7 +2775,7 @@ index a6f3fba3b02b0b4d2a4e9e5205301c6f52d0188a..4eebfc27ded55e4d764d04f35d3e9c9e protected void defineSynchedData() { } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818afb47d20 100644 +index f56bb431be7d5f1a1b8edec41af1f3a28289316d..152111ff4c29e6cf13afeba8c9707f407c2b3531 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -107,6 +107,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -2803,7 +2786,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 public EnderDragon(EntityType entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); -@@ -129,6 +130,38 @@ public class EnderDragon extends Mob implements Enemy { +@@ -129,6 +130,37 @@ public class EnderDragon extends Mob implements Enemy { this.noCulling = true; this.phaseManager = new EnderDragonPhaseManager(this); this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE); // CraftBukkit @@ -2838,11 +2821,10 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 + @Override + public boolean dismountsUnderwater() { + return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.enderDragonRidableInWater; -+ } } public void setDragonFight(EndDragonFight fight) { -@@ -143,6 +176,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -143,6 +175,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2860,7 +2842,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } -@@ -204,6 +248,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -204,6 +247,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2898,7 +2880,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -230,6 +305,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -230,6 +304,8 @@ public class EnderDragon extends Mob implements Enemy { float f; if (this.isDeadOrDying()) { @@ -2907,7 +2889,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 float f1 = (this.random.nextFloat() - 0.5F) * 8.0F; f = (this.random.nextFloat() - 0.5F) * 4.0F; -@@ -242,9 +319,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -242,9 +318,9 @@ public class EnderDragon extends Mob implements Enemy { f = 0.2F / ((float) vec3d.horizontalDistance() * 10.0F + 1.0F); f *= (float) Math.pow(2.0D, vec3d.y); @@ -2919,7 +2901,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 this.flapTime += f * 0.5F; } else { this.flapTime += f; -@@ -278,7 +355,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -278,7 +354,7 @@ public class EnderDragon extends Mob implements Enemy { } this.phaseManager.getCurrentPhase().doClientTick(); @@ -2928,7 +2910,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase(); idragoncontroller.doServerTick(); -@@ -347,7 +424,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -347,7 +423,7 @@ public class EnderDragon extends Mob implements Enemy { this.tickPart(this.body, (double) (f11 * 0.5F), 0.0D, (double) (-f12 * 0.5F)); this.tickPart(this.wing1, (double) (f12 * 4.5F), 2.0D, (double) (f11 * 4.5F)); this.tickPart(this.wing2, (double) (f12 * -4.5F), 2.0D, (double) (f11 * -4.5F)); @@ -2937,7 +2919,7 @@ index f56bb431be7d5f1a1b8edec41af1f3a28289316d..a6feb1cf892050068ea2f30a0c785818 this.knockBack(this.level().getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.knockBack(this.level().getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.hurt(this.level().getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); -@@ -391,7 +468,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -391,7 +467,7 @@ public class EnderDragon extends Mob implements Enemy { } if (!this.level().isClientSide) { diff --git a/patches/server/0007-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch index a0f1db9c2..3aa2dae30 100644 --- a/patches/server/0007-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 856803084d30cc4cbdb53bd6db15e7db5ea16154..4e21ff640261d95f7db1134793fb5e2e91015fd6 100644 +index eed3fa6b14b1e93f8d6571bba5675796e3418f49..dc685733cbbd83408437085602e7a7c18d109e29 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -157,7 +157,7 @@ import org.bukkit.plugin.PluginManager; @@ -427,7 +427,7 @@ index 71234b258157579d3a47064e7e299bb7fb90908f..7d02e552a27632939bb9c40a62f4e0df return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index d22509f74bab68a06a8fa1a8547a2689053c6f85..a2f31ca5fd5dbbcdd6854fa00d5011b2897fd714 100644 +index be0c77cd7ca3c9b9379c16b47dc5b5e354847ccf..ee34cb8ee470c6ea4527ddca456d1b6d6f906f2c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -103,6 +103,11 @@ public class Turtle extends Animal { @@ -759,10 +759,10 @@ index 13096fa2032679006f4264e03fdf86a71454f3ca..a5fd822713b56ebb2bec51364be71557 @Override protected void defineSynchedData() { diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index a6feb1cf892050068ea2f30a0c785818afb47d20..315c26930b06a6c9e17f790a1582b8e83c19a782 100644 +index 152111ff4c29e6cf13afeba8c9707f407c2b3531..e9cdda0dd902cade5cc32acf4dcdc6c3174e0191 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -187,6 +187,11 @@ public class EnderDragon extends Mob implements Enemy { +@@ -186,6 +186,11 @@ public class EnderDragon extends Mob implements Enemy { } // Purpur end diff --git a/patches/server/0018-Silk-touch-spawners.patch b/patches/server/0018-Silk-touch-spawners.patch index b99569b6e..d65d2f6b8 100644 --- a/patches/server/0018-Silk-touch-spawners.patch +++ b/patches/server/0018-Silk-touch-spawners.patch @@ -18,7 +18,7 @@ index f692149d91b525bda6dc79d489d7496ea24037e8..7fbd4bf29bcc0795aa4b0e6d5d4bc374 public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE); public static final Item FARMLAND = registerBlock(Blocks.FARMLAND); diff --git a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java -index e8b1c44da90f60cde20cda65aba2aa1e30f89d25..72fe95069f449544ff8a17643e4bd654b698822e 100644 +index e8b1c44da90f60cde20cda65aba2aa1e30f89d25..c2e03881fff78aff203b5838180894bb70f419b9 100644 --- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java @@ -42,6 +42,58 @@ public class SpawnerBlock extends BaseEntityBlock { @@ -29,12 +29,12 @@ index e8b1c44da90f60cde20cda65aba2aa1e30f89d25..72fe95069f449544ff8a17643e4bd654 + @Override + public void playerDestroy(Level level, net.minecraft.world.entity.player.Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, ItemStack stack, boolean includeDrops) { + if (level.purpurConfig.silkTouchEnabled && player.getBukkitEntity().hasPermission("purpur.drop.spawners") && isSilkTouch(level, stack)) { -+ Optional> type = net.minecraft.world.entity.EntityType.by(((SpawnerBlockEntity) blockEntity).getSpawner().nextSpawnData.getEntityToSpawn()); ++ java.util.Optional> type = net.minecraft.world.entity.EntityType.by(((SpawnerBlockEntity) blockEntity).getSpawner().nextSpawnData.getEntityToSpawn()); + + net.minecraft.world.entity.EntityType entityType = type.orElse(null); + final net.kyori.adventure.text.Component mobName = io.papermc.paper.adventure.PaperAdventure.asAdventure(entityType == null ? Component.empty() : entityType.getDescription()); -+ CompoundTag display = new CompoundTag(); -+ CompoundTag tag = new CompoundTag(); ++ net.minecraft.nbt.CompoundTag display = new net.minecraft.nbt.CompoundTag(); ++ net.minecraft.nbt.CompoundTag tag = new net.minecraft.nbt.CompoundTag(); + + String name = level.purpurConfig.silkTouchSpawnerName; + if (name != null && !name.isEmpty() && !name.equals("Monster Spawner")) { diff --git a/patches/server/0036-Ender-dragon-always-drop-full-exp.patch b/patches/server/0036-Ender-dragon-always-drop-full-exp.patch index 425a6a3f7..d9f632b5d 100644 --- a/patches/server/0036-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0036-Ender-dragon-always-drop-full-exp.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 315c26930b06a6c9e17f790a1582b8e83c19a782..e28e25b0563bb6022ad1fb49f1c46fe619b65602 100644 +index e9cdda0dd902cade5cc32acf4dcdc6c3174e0191..cfe7086b0259eefcd221a54529c111f7eb1adc38 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -749,7 +749,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -748,7 +748,7 @@ public class EnderDragon extends Mob implements Enemy { boolean flag = this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); short short0 = 500; diff --git a/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch index 9712c8f0f..ccb40a3c2 100644 --- a/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch @@ -131,10 +131,10 @@ index d3da7487f911ff791dca5f7b546dccda751fe44c..84e0a41620fd52af0cd22dc92fd13ee4 } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index e28e25b0563bb6022ad1fb49f1c46fe619b65602..2a0e45b9580b73c453aba02f822f10bd3a1f7c9d 100644 +index cfe7086b0259eefcd221a54529c111f7eb1adc38..5381ee91770a0f1012b5478d6615540263e46533 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -605,7 +605,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -604,7 +604,7 @@ public class EnderDragon extends Mob implements Enemy { BlockState iblockdata = this.level().getBlockState(blockposition); if (!iblockdata.isAir() && !iblockdata.is(BlockTags.DRAGON_TRANSPARENT)) { diff --git a/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch index 543dbfda2..c758ae8d3 100644 --- a/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch @@ -379,7 +379,7 @@ index 7d02e552a27632939bb9c40a62f4e0df7bd60bbc..b16d075581a352714f86f1b87805f24c return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index e273bf2847d4c5daaa320f36672083c996428f61..5c082d99b54f33a3f640172f86f96990f654fc38 100644 +index f16b2d368ca247cad5764d11efa4fe754eadc6d6..cc1ccef921e70c33e5d6acbd73d5eecc4ea99064 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -113,6 +113,11 @@ public class Turtle extends Animal { @@ -555,10 +555,10 @@ index aaec706b7eaa6afdf7959e6dd53cc39344bb97df..dcc1d71c2eeea48669651165868899ba return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index 2a0e45b9580b73c453aba02f822f10bd3a1f7c9d..f3ef0116537c660d46c17e1ccb0dcb62bc552b91 100644 +index 5381ee91770a0f1012b5478d6615540263e46533..5643f35f02fff5a2d4072d246f8646772695b797 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -192,6 +192,11 @@ public class EnderDragon extends Mob implements Enemy { +@@ -191,6 +191,11 @@ public class EnderDragon extends Mob implements Enemy { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.enderDragonMaxHealth); } diff --git a/patches/server/0129-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0129-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index 734468ce1..32841fab2 100644 --- a/patches/server/0129-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0129-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configs for if Wither/Ender Dragon can ride vehicles diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index f3ef0116537c660d46c17e1ccb0dcb62bc552b91..d116f6d5c5ca8cc956264ef14f59001a2ff32d49 100644 +index 5643f35f02fff5a2d4072d246f8646772695b797..dc7804371b65c43367ec87e79433106e8a11a6ff 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -1189,6 +1189,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -1188,6 +1188,7 @@ public class EnderDragon extends Mob implements Enemy { @Override protected boolean canRide(Entity entity) { diff --git a/patches/server/0206-Extended-OfflinePlayer-API.patch b/patches/server/0206-Extended-OfflinePlayer-API.patch index a290e9e2b..c57eac638 100644 --- a/patches/server/0206-Extended-OfflinePlayer-API.patch +++ b/patches/server/0206-Extended-OfflinePlayer-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Extended OfflinePlayer API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -index 2bbc39c257965ad91ee360cdfcd3538a0f041c7e..d0e3b531392738679894a989293ae49eb319676c 100644 +index 2bbc39c257965ad91ee360cdfcd3538a0f041c7e..91fbc0cfc84045e32a4ee16fba8164de7901c7e6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java @@ -567,4 +567,213 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa @@ -212,10 +212,10 @@ index 2bbc39c257965ad91ee360cdfcd3538a0f041c7e..d0e3b531392738679894a989293ae49e + File playerDir = server.console.playerDataStorage.getPlayerDir(); + try { + File tempFile = File.createTempFile(this.getUniqueId()+"-", ".dat", playerDir); -+ net.minecraft.nbt.NbtIo.writeCompressed(compoundTag, tempFile); ++ net.minecraft.nbt.NbtIo.writeCompressed(compoundTag, tempFile.toPath()); + File playerDataFile = new File(playerDir, this.getUniqueId()+".dat"); + File playerDataFileOld = new File(playerDir, this.getUniqueId()+".dat_old"); -+ net.minecraft.Util.safeReplaceFile(playerDataFile, tempFile, playerDataFileOld); ++ net.minecraft.Util.safeReplaceFile(playerDataFile.toPath(), tempFile.toPath(), playerDataFileOld.toPath()); + } catch (java.io.IOException e) { + e.printStackTrace(); + } diff --git a/patches/server/0231-Shears-can-have-looting-enchantment.patch b/patches/server/0231-Shears-can-have-looting-enchantment.patch index daa85ac1a..97a8b881d 100644 --- a/patches/server/0231-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0231-Shears-can-have-looting-enchantment.patch @@ -157,6 +157,18 @@ index 7f1ffc0ac402fcf0ec086986e959ecc9f78dde03..1351d52374d1c2367932e5ecd5f46379 @Override public int getMinCost(int level) { return 15 + (level - 1) * 9; +diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +index f81faaf6d69b09f635d71491303fca1d494001c5..f782e8dd9d3456f345859dffd69e5830d576ccd1 100644 +--- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java ++++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +@@ -81,6 +81,7 @@ public class CraftEnchantment extends Enchantment { + case CROSSBOW -> EnchantmentTarget.CROSSBOW; + case VANISHABLE -> EnchantmentTarget.VANISHABLE; + case BOW_AND_CROSSBOW -> EnchantmentTarget.BOW_AND_CROSSBOW; // Purpur ++ case WEAPON_AND_SHEARS -> EnchantmentTarget.WEAPON_AND_SHEARS; // Purpur + }; + } + diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index d56c2776d08306245618dca04cd39891bb61c1bd..730a4a2e46aeb233d8036e8d7e1749dcb397e6c0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0289-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0289-Config-to-remove-explosion-radius-clamp.patch index 75558571d..b23284f57 100644 --- a/patches/server/0289-Config-to-remove-explosion-radius-clamp.patch +++ b/patches/server/0289-Config-to-remove-explosion-radius-clamp.patch @@ -4,18 +4,6 @@ Date: Mon, 9 Jan 2023 19:45:55 -0500 Subject: [PATCH] Config to remove explosion radius clamp -diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index d116f6d5c5ca8cc956264ef14f59001a2ff32d49..624dad43a1088e1d6423561e2cf418f329fbca38 100644 ---- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -111,6 +111,7 @@ public class EnderDragon extends Mob implements Enemy { - - public EnderDragon(EntityType entitytypes, Level world) { - super(EntityType.ENDER_DRAGON, world); -+ this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY); // Purpur - moved instantiation from field - this.fightOrigin = BlockPos.ZERO; - this.growlTime = 100; - this.nodes = new Node[24]; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java index 370952a7be8df3ea00c0816235d84927df4ed79d..b0b8a0391bfd347fea44271b0408de2792d6489b 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java