diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index b9aa5bb13..c13535fdf 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -86,7 +86,7 @@ index 23074f0b00cde60e3a42335c7aa3eb4f6162d44d..56015828fe1f0bf66eefa41164e58cc4 if ((entity instanceof AbstractFish && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { ServerGamePacketListenerImpl.this.send(new ClientboundAddMobPacket((AbstractFish) entity)); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 23c17a1ebb63290168b2b67f2dbeb7741c368e7b..20930c864ee1cb39367b5515dc8579f31d40ad21 100644 +index 23c17a1ebb63290168b2b67f2dbeb7741c368e7b..8389be51e564c734b899ee1049eeb811d111d263 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -230,7 +230,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i @@ -155,7 +155,7 @@ index 23c17a1ebb63290168b2b67f2dbeb7741c368e7b..20930c864ee1cb39367b5515dc8579f3 + + public void onMount(Player rider) { + if (this instanceof Mob) { -+ ((Mob) this).setGoalTarget(null, null, false); ++ ((Mob) this).setTarget(null, null, false); + ((Mob) this).getNavigation().stop(); + } + rider.setJumping(false); // fixes jump on mount @@ -2517,7 +2517,7 @@ index e17a3afa41fd628d2c4a3637ae19418e258a99b8..6a39bd861f27d517f8de9fc3f589c7e2 this.dragonFight.updateDragon(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index ede0ced64d74d71547d1b8bb6853c5aacc1b486a..318bf2a0feea7b5eb15b56565d4aecc4cd2eb2b4 100644 +index ede0ced64d74d71547d1b8bb6853c5aacc1b486a..ba20d4bddf965a9207fa0f12f7337f51a8aff301 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 @@ -85,6 +85,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -2528,11 +2528,12 @@ index ede0ced64d74d71547d1b8bb6853c5aacc1b486a..318bf2a0feea7b5eb15b56565d4aecc4 // Paper start private boolean canPortal = false; -@@ -107,15 +108,117 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -106,16 +107,118 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + navigationflying.setCanOpenDoors(false); navigationflying.setCanFloat(true); navigationflying.setCanPassDoors(true); - return navigationflying; + this.moveControl = new net.pl3x.purpur.controller.FlyingWithSpacebarMoveControllerWASD(this, 0.1F); // Purpur + return navigationflying; } + // Purpur start diff --git a/patches/server/0022-Silk-touch-spawners.patch b/patches/server/0022-Silk-touch-spawners.patch index 1ea3240a1..9f6acf8ab 100644 --- a/patches/server/0022-Silk-touch-spawners.patch +++ b/patches/server/0022-Silk-touch-spawners.patch @@ -30,7 +30,7 @@ index 20444c6887cbdd444b23bf018a6d63f22359e5e7..68321b5e425c0500a5691f8020317612 public static final Item CHEST = registerBlock(Blocks.CHEST, CreativeModeTab.TAB_DECORATIONS); public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE, CreativeModeTab.TAB_DECORATIONS); 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 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf08c2ec0f 100644 +index 130ffb06b12565efb35afb55b6da20b1b16f6f06..bc4646a7a72c33a3671115953a2bbd7cfe5d7d92 100644 --- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java @@ -1,9 +1,19 @@ @@ -53,7 +53,7 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -@@ -13,6 +23,19 @@ import net.minecraft.world.level.block.entity.SpawnerBlockEntity; +@@ -13,6 +23,20 @@ import net.minecraft.world.level.block.entity.SpawnerBlockEntity; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; @@ -66,6 +66,7 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf + +import java.util.List; +import java.util.Locale; ++import java.util.Optional; + +import static net.kyori.adventure.text.format.TextDecoration.ITALIC; +// Purpur end @@ -73,7 +74,7 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf public class SpawnerBlock extends BaseEntityBlock { protected SpawnerBlock(BlockBehaviour.Properties settings) { -@@ -30,6 +53,55 @@ public class SpawnerBlock extends BaseEntityBlock { +@@ -30,6 +54,55 @@ public class SpawnerBlock extends BaseEntityBlock { return createTickerHelper(type, BlockEntityType.MOB_SPAWNER, world.isClientSide ? SpawnerBlockEntity::clientTick : SpawnerBlockEntity::serverTick); } @@ -81,9 +82,9 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, ItemStack stack) { + if (level.purpurConfig.silkTouchEnabled && player.getBukkitEntity().hasPermission("purpur.drop.spawners") && isSilkTouch(level, stack)) { -+ ResourceLocation type = ((SpawnerBlockEntity) blockEntity).getSpawner().getEntityId(level, pos); -+ if (type != null) { -+ final Component mobName = PaperAdventure.asAdventure(EntityType.getFromKey(type).getDescription()); ++ Optional> type = EntityType.by(((SpawnerBlockEntity) blockEntity).getSpawner().nextSpawnData.getEntityToSpawn()); ++ if (type.isPresent()) { ++ final Component mobName = PaperAdventure.asAdventure(type.get().getDescription()); + CompoundTag display = new CompoundTag(); + CompoundTag tag = new CompoundTag(); + @@ -112,7 +113,7 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf + } + + ItemStack item = new ItemStack(Blocks.SPAWNER.asItem()); -+ tag.putString("Purpur.mob_type", type.toString()); ++ tag.putString("Purpur.mob_type", type.get().getName()); + item.setTag(tag); + + popResource(level, pos, item); @@ -129,7 +130,7 @@ index 130ffb06b12565efb35afb55b6da20b1b16f6f06..f59883d2b08ff18fd4b7e342f4d899cf @Override public void spawnAfterBreak(BlockState state, ServerLevel world, BlockPos pos, ItemStack stack) { super.spawnAfterBreak(state, world, pos, stack); -@@ -38,6 +110,7 @@ public class SpawnerBlock extends BaseEntityBlock { +@@ -38,6 +111,7 @@ public class SpawnerBlock extends BaseEntityBlock { @Override public int getExpDrop(BlockState iblockdata, ServerLevel worldserver, BlockPos blockposition, ItemStack itemstack) { diff --git a/patches/server/0081-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0081-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index ae75753bd..5a83870bf 100644 --- a/patches/server/0081-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0081-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d37aa315753ffff5601d42987beae7af4a267ce1..299e628db2ddb0f36294c12dd5b55db6c519ac22 100644 +index d37aa315753ffff5601d42987beae7af4a267ce1..80a57d726ee663aa37a3b93c883f835a2ebc765e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2537,5 +2537,25 @@ public class ServerPlayer extends Player { @@ -29,7 +29,7 @@ index d37aa315753ffff5601d42987beae7af4a267ce1..299e628db2ddb0f36294c12dd5b55db6 + if (this.level == toLevel) { + this.connection.teleport(to); + } else { -+ this.server.getPlayerList().moveToWorld(this, toLevel, true, to, !toLevel.paperConfig.disableTeleportationSuffocationCheck); ++ this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig.disableTeleportationSuffocationCheck); + } + } + // Purpur end diff --git a/patches/server/0131-Implement-TPSBar.patch b/patches/server/0131-Implement-TPSBar.patch index 59d1b21bb..28277ecd7 100644 --- a/patches/server/0131-Implement-TPSBar.patch +++ b/patches/server/0131-Implement-TPSBar.patch @@ -42,7 +42,7 @@ index fe029ec70afad56bb7a7361f347e9b9aef5e00ba..2c37694a6055513803708c9fb40fb0c4 } } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d3d7a668d78f52b56654fe89148ecdfd662c769e..244440eb9d4e85cb73bb6c0dd645d069a036917c 100644 +index e07095a3ed1af5a8bb7715c264535ae952e264d9..dd186ad2080d358ee1ed5c8ac6725a9e3dcaeb39 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -256,6 +256,7 @@ public class ServerPlayer extends Player { @@ -70,7 +70,7 @@ index d3d7a668d78f52b56654fe89148ecdfd662c769e..244440eb9d4e85cb73bb6c0dd645d069 // CraftBukkit start - World fallback code, either respawn location or global spawn @@ -2566,5 +2569,13 @@ public class ServerPlayer extends Player { - this.server.getPlayerList().moveToWorld(this, toLevel, true, to, !toLevel.paperConfig.disableTeleportationSuffocationCheck); + this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig.disableTeleportationSuffocationCheck); } } + diff --git a/patches/server/0139-Add-StructureGenerateEvent.patch b/patches/server/0139-Add-StructureGenerateEvent.patch index d5184f413..ab9c23631 100644 --- a/patches/server/0139-Add-StructureGenerateEvent.patch +++ b/patches/server/0139-Add-StructureGenerateEvent.patch @@ -19,7 +19,7 @@ along with this program. If not, see . Co-authored-by: Mariell Hoversholm diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java -index f8a2aa31e38f64f88a82d5a388b58f1962d5fda0..c34023c69c9a97824417a40f5fac8f2e71f4b6f3 100644 +index f8a2aa31e38f64f88a82d5a388b58f1962d5fda0..b98f05c32d81195e779701d90d30f345c9695cbf 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java @@ -454,7 +454,14 @@ public abstract class ChunkGenerator implements BiomeManager.NoiseBiomeSource { @@ -29,8 +29,8 @@ index f8a2aa31e38f64f88a82d5a388b58f1962d5fda0..c34023c69c9a97824417a40f5fac8f2e - + // Purpur start + if (new net.pl3x.purpur.event.world.StructureGenerateEvent( -+ accessor.getWorld().getWorld(), -+ org.bukkit.StructureType.getStructureTypes().get(feature.feature.getFeatureName().toLowerCase()), ++ structureAccessor.getWorld().getWorld(), ++ org.bukkit.StructureType.getStructureTypes().get(structurestart.getFeature().getFeatureName().toLowerCase()), + chunkcoordintpair.x, + chunkcoordintpair.z + ).callEvent()) diff --git a/patches/server/0182-Hide-hidden-players-from-entity-selector.patch b/patches/server/0182-Hide-hidden-players-from-entity-selector.patch index fc6c46c86..d40c883b3 100644 --- a/patches/server/0182-Hide-hidden-players-from-entity-selector.patch +++ b/patches/server/0182-Hide-hidden-players-from-entity-selector.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Hide hidden players from entity selector diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java -index 35cc3bba20afd4a47160cc674415ba6a3a0ec0ec..eaa1af57bdf4cb890706e839cbbae15f00933391 100644 +index 35cc3bba20afd4a47160cc674415ba6a3a0ec0ec..39c8cb9494aa516a3d828010a8e3329db9d25707 100644 --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java @@ -184,10 +184,10 @@ public class EntitySelector { @@ -13,11 +13,11 @@ index 35cc3bba20afd4a47160cc674415ba6a3a0ec0ec..eaa1af57bdf4cb890706e839cbbae15f if (this.playerName != null) { entityplayer = source.getServer().getPlayerList().getPlayerByName(this.playerName); - return (List) (entityplayer == null ? Collections.emptyList() : Lists.newArrayList(new ServerPlayer[]{entityplayer})); -+ return entityplayer == null || !canSee(commandlistenerwrapper, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur ++ return entityplayer == null || !canSee(source, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur } else if (this.entityUUID != null) { entityplayer = source.getServer().getPlayerList().getPlayer(this.entityUUID); - return (List) (entityplayer == null ? Collections.emptyList() : Lists.newArrayList(new ServerPlayer[]{entityplayer})); -+ return entityplayer == null || !canSee(commandlistenerwrapper, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur ++ return entityplayer == null || !canSee(source, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur } else { Vec3 vec3d = (Vec3) this.position.apply(source.getPosition()); Predicate predicate = this.getPredicate(vec3d); @@ -26,7 +26,7 @@ index 35cc3bba20afd4a47160cc674415ba6a3a0ec0ec..eaa1af57bdf4cb890706e839cbbae15f if (predicate.test(entityplayer1)) { - return Lists.newArrayList(new ServerPlayer[]{entityplayer1}); -+ return !canSee(commandlistenerwrapper, entityplayer1) ? Collections.emptyList() : Lists.newArrayList(entityplayer1); // Purpur ++ return !canSee(source, entityplayer1) ? Collections.emptyList() : Lists.newArrayList(entityplayer1); // Purpur } } @@ -34,7 +34,7 @@ index 35cc3bba20afd4a47160cc674415ba6a3a0ec0ec..eaa1af57bdf4cb890706e839cbbae15f if (this.isWorldLimited()) { object = source.getLevel().getPlayers(predicate); -+ ((List) object).removeIf(entityplayer3 -> !canSee(commandlistenerwrapper, (ServerPlayer) entityplayer3)); // Purpur ++ ((List) object).removeIf(entityplayer3 -> !canSee(source, (ServerPlayer) entityplayer3)); // Purpur } else { object = Lists.newArrayList(); Iterator iterator = source.getServer().getPlayerList().getPlayers().iterator(); @@ -43,7 +43,7 @@ index 35cc3bba20afd4a47160cc674415ba6a3a0ec0ec..eaa1af57bdf4cb890706e839cbbae15f ServerPlayer entityplayer2 = (ServerPlayer) iterator.next(); - if (predicate.test(entityplayer2)) { -+ if (predicate.test(entityplayer2) && canSee(commandlistenerwrapper, entityplayer2)) { // Purpur ++ if (predicate.test(entityplayer2) && canSee(source, entityplayer2)) { // Purpur ((List) object).add(entityplayer2); } }