diff --git a/build-data/paper.at b/build-data/paper.at index dba668950c..cf8a486b80 100644 --- a/build-data/paper.at +++ b/build-data/paper.at @@ -36,6 +36,10 @@ public net.minecraft.network.protocol.game.ServerboundInteractPacket$ActionType # Configurable RCON IP address public net.minecraft.server.dedicated.Settings getStringRaw(Ljava/lang/String;)Ljava/lang/String; +# Mob Spawner API Enhancements +public net.minecraft.world.level.BaseSpawner isNearPlayer(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)Z +public net.minecraft.world.level.BaseSpawner delay(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V + # LootTable API public org.bukkit.craftbukkit.block.CraftBlockEntityState getTileEntity()Lnet/minecraft/world/level/block/entity/BlockEntity; public org.bukkit.craftbukkit.block.CraftLootable setLootTable(Lorg/bukkit/loot/LootTable;J)V diff --git a/patches/unapplied/api/Add-BlockSoundGroup-interface.patch b/patches/api/Add-BlockSoundGroup-interface.patch similarity index 95% rename from patches/unapplied/api/Add-BlockSoundGroup-interface.patch rename to patches/api/Add-BlockSoundGroup-interface.patch index 8387646011..20b223020c 100644 --- a/patches/unapplied/api/Add-BlockSoundGroup-interface.patch +++ b/patches/api/Add-BlockSoundGroup-interface.patch @@ -68,9 +68,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java @@ -0,0 +0,0 @@ public interface Block extends Metadatable { + * @return true if the block data can be placed here */ - @NotNull - VoxelShape getCollisionShape(); + boolean canPlace(@NotNull BlockData data); + + // Paper start + /** diff --git a/patches/unapplied/api/Add-Heightmap-API.patch b/patches/api/Add-Heightmap-API.patch similarity index 100% rename from patches/unapplied/api/Add-Heightmap-API.patch rename to patches/api/Add-Heightmap-API.patch diff --git a/patches/unapplied/api/Amend-PlayerInteractAtEntityEvent-javadoc-for-ArmorS.patch b/patches/api/Amend-PlayerInteractAtEntityEvent-javadoc-for-ArmorS.patch similarity index 100% rename from patches/unapplied/api/Amend-PlayerInteractAtEntityEvent-javadoc-for-ArmorS.patch rename to patches/api/Amend-PlayerInteractAtEntityEvent-javadoc-for-ArmorS.patch diff --git a/patches/unapplied/api/Fix-Spigot-annotation-mistakes.patch b/patches/api/Fix-Spigot-annotation-mistakes.patch similarity index 100% rename from patches/unapplied/api/Fix-Spigot-annotation-mistakes.patch rename to patches/api/Fix-Spigot-annotation-mistakes.patch diff --git a/patches/unapplied/api/Mob-Spawner-API-Enhancements.patch b/patches/api/Mob-Spawner-API-Enhancements.patch similarity index 100% rename from patches/unapplied/api/Mob-Spawner-API-Enhancements.patch rename to patches/api/Mob-Spawner-API-Enhancements.patch diff --git a/patches/unapplied/api/PlayerDeathEvent-getItemsToKeep.patch b/patches/api/PlayerDeathEvent-getItemsToKeep.patch similarity index 100% rename from patches/unapplied/api/PlayerDeathEvent-getItemsToKeep.patch rename to patches/api/PlayerDeathEvent-getItemsToKeep.patch diff --git a/patches/unapplied/api/Server-Tick-Events.patch b/patches/api/Server-Tick-Events.patch similarity index 100% rename from patches/unapplied/api/Server-Tick-Events.patch rename to patches/api/Server-Tick-Events.patch diff --git a/patches/unapplied/server/Add-Heightmap-API.patch b/patches/server/Add-Heightmap-API.patch similarity index 100% rename from patches/unapplied/server/Add-Heightmap-API.patch rename to patches/server/Add-Heightmap-API.patch diff --git a/patches/unapplied/server/Fix-CB-call-to-changed-postToMainThread-method.patch b/patches/server/Fix-CB-call-to-changed-postToMainThread-method.patch similarity index 100% rename from patches/unapplied/server/Fix-CB-call-to-changed-postToMainThread-method.patch rename to patches/server/Fix-CB-call-to-changed-postToMainThread-method.patch diff --git a/patches/unapplied/server/Fix-CraftServer-isPrimaryThread-and-MinecraftServer-.patch b/patches/server/Fix-CraftServer-isPrimaryThread-and-MinecraftServer-.patch similarity index 100% rename from patches/unapplied/server/Fix-CraftServer-isPrimaryThread-and-MinecraftServer-.patch rename to patches/server/Fix-CraftServer-isPrimaryThread-and-MinecraftServer-.patch diff --git a/patches/unapplied/server/Fix-sounds-when-item-frames-are-modified-MC-123450.patch b/patches/server/Fix-sounds-when-item-frames-are-modified-MC-123450.patch similarity index 100% rename from patches/unapplied/server/Fix-sounds-when-item-frames-are-modified-MC-123450.patch rename to patches/server/Fix-sounds-when-item-frames-are-modified-MC-123450.patch diff --git a/patches/unapplied/server/Implement-CraftBlockSoundGroup.patch b/patches/server/Implement-CraftBlockSoundGroup.patch similarity index 94% rename from patches/unapplied/server/Implement-CraftBlockSoundGroup.patch rename to patches/server/Implement-CraftBlockSoundGroup.patch index cc014ec24d..6deda421ca 100644 --- a/patches/unapplied/server/Implement-CraftBlockSoundGroup.patch +++ b/patches/server/Implement-CraftBlockSoundGroup.patch @@ -53,9 +53,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -0,0 +0,0 @@ public class CraftBlock implements Block { - VoxelShape shape = this.getNMS().getCollisionShape(world, position); - return new CraftVoxelShape(shape); + + return iblockdata.canSurvive(world, this.position); } ++ + // Paper start + @Override + public com.destroystokyo.paper.block.BlockSoundGroup getSoundGroup() { diff --git a/patches/unapplied/server/Mob-Spawner-API-Enhancements.patch b/patches/server/Mob-Spawner-API-Enhancements.patch similarity index 56% rename from patches/unapplied/server/Mob-Spawner-API-Enhancements.patch rename to patches/server/Mob-Spawner-API-Enhancements.patch index ad07f9dee7..7fdc3a3819 100644 --- a/patches/unapplied/server/Mob-Spawner-API-Enhancements.patch +++ b/patches/server/Mob-Spawner-API-Enhancements.patch @@ -8,33 +8,6 @@ diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java -@@ -0,0 +0,0 @@ public abstract class BaseSpawner { - - private static final Logger LOGGER = LogManager.getLogger(); - private static final int EVENT_SPAWN = 1; -- private static WeightedRandomList EMPTY_POTENTIALS = WeightedRandomList.create(); -+ public static WeightedRandomList EMPTY_POTENTIALS = WeightedRandomList.create(); // Paper - private->public - public int spawnDelay = 20; - public WeightedRandomList spawnPotentials; - public SpawnData nextSpawnData; -@@ -0,0 +0,0 @@ public abstract class BaseSpawner { - this.spawnPotentials = BaseSpawner.EMPTY_POTENTIALS; // CraftBukkit - SPIGOT-3496, MC-92282 - } - -- private boolean isNearPlayer(Level world, BlockPos pos) { -+ public boolean isNearPlayer(Level world, BlockPos pos) { // Paper private->public - return world.isAffectsSpawningPlayerNearby((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, (double) this.requiredPlayerRange); // Paper - } - -@@ -0,0 +0,0 @@ public abstract class BaseSpawner { - } - } - -- private void delay(Level world, BlockPos pos) { -+ public void delay(Level world, BlockPos pos) { // Paper private->public - if (this.maxSpawnDelay <= this.minSpawnDelay) { - this.spawnDelay = this.minSpawnDelay; - } else { @@ -0,0 +0,0 @@ public abstract class BaseSpawner { } @@ -46,14 +19,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 this.spawnDelay = nbt.getShort("Delay"); + } + // Paper end - List list = Lists.newArrayList(); + boolean flag = nbt.contains("SpawnPotentials", 9); + boolean flag1 = nbt.contains("SpawnData", 10); - if (nbt.contains("SpawnPotentials", 9)) { @@ -0,0 +0,0 @@ public abstract class BaseSpawner { - this.setNextSpawnData(world, pos, mobspawnerdata); - }); + } } -- + + // Paper start - use ints if set + if (nbt.contains("Paper.MinSpawnDelay", 99)) { + this.minSpawnDelay = nbt.getInt("Paper.MinSpawnDelay"); @@ -63,35 +35,35 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 if (nbt.contains("MinSpawnDelay", 99)) { - this.minSpawnDelay = nbt.getShort("MinSpawnDelay"); - this.maxSpawnDelay = nbt.getShort("MaxSpawnDelay"); -+ this.minSpawnDelay = nbt.getInt("MinSpawnDelay"); // Paper - short->int -+ this.maxSpawnDelay = nbt.getInt("MaxSpawnDelay"); // Paper - short->int ++ this.minSpawnDelay = nbt.getInt("MinSpawnDelay"); // Paper - short -> int ++ this.maxSpawnDelay = nbt.getInt("MaxSpawnDelay"); // Paper - short -> int this.spawnCount = nbt.getShort("SpawnCount"); } @@ -0,0 +0,0 @@ public abstract class BaseSpawner { - if (minecraftkey == null) { - return nbt; - } else { -- nbt.putShort("Delay", (short) this.spawnDelay); -- nbt.putShort("MinSpawnDelay", (short) this.minSpawnDelay); -- nbt.putShort("MaxSpawnDelay", (short) this.maxSpawnDelay); -+ // Paper start -+ if (spawnDelay > Short.MAX_VALUE) { -+ nbt.putInt("Paper.Delay", this.spawnDelay); -+ } -+ nbt.putShort("Delay", (short) Math.min(Short.MAX_VALUE, this.spawnDelay)); + } + + public CompoundTag save(CompoundTag nbttagcompound) { +- nbttagcompound.putShort("Delay", (short) this.spawnDelay); +- nbttagcompound.putShort("MinSpawnDelay", (short) this.minSpawnDelay); +- nbttagcompound.putShort("MaxSpawnDelay", (short) this.maxSpawnDelay); ++ // Paper start ++ if (spawnDelay > Short.MAX_VALUE) { ++ nbttagcompound.putInt("Paper.Delay", this.spawnDelay); ++ } ++ nbttagcompound.putShort("Delay", (short) Math.min(Short.MAX_VALUE, this.spawnDelay)); + -+ if (minSpawnDelay > Short.MAX_VALUE || maxSpawnDelay > Short.MAX_VALUE) { -+ nbt.putInt("Paper.MinSpawnDelay", this.minSpawnDelay); -+ nbt.putInt("Paper.MaxSpawnDelay", this.maxSpawnDelay); -+ } ++ if (minSpawnDelay > Short.MAX_VALUE || maxSpawnDelay > Short.MAX_VALUE) { ++ nbttagcompound.putInt("Paper.MinSpawnDelay", this.minSpawnDelay); ++ nbttagcompound.putInt("Paper.MaxSpawnDelay", this.maxSpawnDelay); ++ } + -+ nbt.putShort("MinSpawnDelay", (short) Math.min(Short.MAX_VALUE, this.minSpawnDelay)); -+ nbt.putShort("MaxSpawnDelay", (short) Math.min(Short.MAX_VALUE, this.maxSpawnDelay)); -+ // Paper end - nbt.putShort("SpawnCount", (short) this.spawnCount); - nbt.putShort("MaxNearbyEntities", (short) this.maxNearbyEntities); - nbt.putShort("RequiredPlayerRange", (short) this.requiredPlayerRange); ++ nbttagcompound.putShort("MinSpawnDelay", (short) Math.min(Short.MAX_VALUE, this.minSpawnDelay)); ++ nbttagcompound.putShort("MaxSpawnDelay", (short) Math.min(Short.MAX_VALUE, this.maxSpawnDelay)); ++ // Paper end + nbttagcompound.putShort("SpawnCount", (short) this.spawnCount); + nbttagcompound.putShort("MaxNearbyEntities", (short) this.maxNearbyEntities); + nbttagcompound.putShort("RequiredPlayerRange", (short) this.requiredPlayerRange); diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java @@ -122,8 +94,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + entity.put("Item", item.save(new net.minecraft.nbt.CompoundTag())); + compound.put("Entity", entity); + compound.putInt("Weight", this.getSnapshotNBT().contains("Weight", org.bukkit.craftbukkit.util.CraftMagicNumbers.NBT.TAG_ANY_NUMBER) ? this.getSnapshotNBT().getInt("Weight") : 1); -+ this.getSnapshot().getSpawner().setNextSpawnData(world.getHandle(), getPosition(), new net.minecraft.world.level.SpawnData(compound)); -+ this.getSnapshot().getSpawner().spawnPotentials= net.minecraft.world.level.BaseSpawner.EMPTY_POTENTIALS; ++ this.getSnapshot().getSpawner().setNextSpawnData(world.getHandle(), getPosition(), new net.minecraft.world.level.SpawnData(compound, java.util.Optional.empty())); // 1.18 todo - is empty optional correct ++ this.getSnapshot().getSpawner().spawnPotentials = net.minecraft.util.random.SimpleWeightedRandomList.empty(); // 1.18 todo - previously used removed field, check + } + // Paper end } diff --git a/patches/unapplied/server/Optimize-Captured-TileEntity-Lookup.patch b/patches/server/Optimize-Captured-TileEntity-Lookup.patch similarity index 95% rename from patches/unapplied/server/Optimize-Captured-TileEntity-Lookup.patch rename to patches/server/Optimize-Captured-TileEntity-Lookup.patch index 4aa94be0fb..1925711d6f 100644 --- a/patches/unapplied/server/Optimize-Captured-TileEntity-Lookup.patch +++ b/patches/server/Optimize-Captured-TileEntity-Lookup.patch @@ -16,7 +16,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @@ -0,0 +0,0 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Nullable - public BlockEntity getTileEntity(BlockPos blockposition, boolean validate) { + public BlockEntity getBlockEntity(BlockPos blockposition, boolean validate) { - if (this.capturedTileEntities.containsKey(blockposition)) { - return this.capturedTileEntities.get(blockposition); + // Paper start - Optimize capturedTileEntities lookup diff --git a/patches/server/Player-affects-spawning-API.patch b/patches/server/Player-affects-spawning-API.patch index afb3abe98c..3b4b2a657f 100644 --- a/patches/server/Player-affects-spawning-API.patch +++ b/patches/server/Player-affects-spawning-API.patch @@ -67,7 +67,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 @@ -0,0 +0,0 @@ public abstract class BaseSpawner { } - private boolean isNearPlayer(Level world, BlockPos pos) { + public boolean isNearPlayer(Level world, BlockPos pos) { - return world.hasNearbyAlivePlayer((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, (double) this.requiredPlayerRange); + return world.isAffectsSpawningPlayerNearby((double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, (double) this.requiredPlayerRange); // Paper } diff --git a/patches/unapplied/server/PlayerDeathEvent-getItemsToKeep.patch b/patches/server/PlayerDeathEvent-getItemsToKeep.patch similarity index 100% rename from patches/unapplied/server/PlayerDeathEvent-getItemsToKeep.patch rename to patches/server/PlayerDeathEvent-getItemsToKeep.patch diff --git a/patches/unapplied/server/Server-Tick-Events.patch b/patches/server/Server-Tick-Events.patch similarity index 97% rename from patches/unapplied/server/Server-Tick-Events.patch rename to patches/server/Server-Tick-Events.patch index 0eec3b56bb..42d8da8af5 100644 --- a/patches/unapplied/server/Server-Tick-Events.patch +++ b/patches/server/Server-Tick-Events.patch @@ -18,15 +18,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 ++this.tickCount; this.tickChildren(shouldKeepTicking); @@ -0,0 +0,0 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop