From 6856a5dd2c336f056751f0355ac5c6e920add9d0 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 11 Sep 2021 12:06:44 -0500 Subject: [PATCH] Updated Upstream (Paper & Airplane) Upstream has released updates that appear to apply and compile correctly Paper Changes: https://github.com/PaperMC/Paper/commit/04324c58b29f3eee8f8f12dbc2da129e715d4f42 Disable enderpearls when they hit non-ticking chunk if disableEnderpearlExploit is enabled https://github.com/PaperMC/Paper/commit/310c718ed552b349f3472a6efceeca8b2ba66448 Fix CocaoDecorator causing a crash during generation (Fixes #6028) https://github.com/PaperMC/Paper/commit/295703efb643867f7962ab99c2f4702e52518c2e Fixup enderpearl patch https://github.com/PaperMC/Paper/commit/c3d50184ebd2617ca067623558feb2baa6f08948 Do not create nether portals that delete undestroyable blocks Fixes #5773 https://github.com/PaperMC/Paper/commit/1b383d7e9b423879564c41c6970fa3e4bf845bbb Fix VanillaGoals when in reobfuscated environment (#6580) https://github.com/PaperMC/Paper/commit/8a2b23a6a468eaad88e7eb49ee43a8ed44cb84d0 Remove method rename and fix reobf for Goal#getFlags (#6528) https://github.com/PaperMC/Paper/commit/d060913a61b7fc578455684ceb39b735b0c1d238 [ci skip] Fix typos in Paper comments (#6588) Airplane Changes: https://github.com/TECHNOVE/Airplane/commit/01dd14c643b94043b752f5ab4e53cb92a920716f Remove tuinity from list of configs https://github.com/TECHNOVE/Airplane/commit/ee3acc2118f9e63243ecfd6156f13e71ba64106b Improve compat of container bitset patch https://github.com/TECHNOVE/Airplane/commit/e7d60ac96ffe9cf25c7529bec0315a8efe869992 Upstream https://github.com/TECHNOVE/Airplane/commit/b2e5f77cbe02e9261afbf17e0ba6bb817ab188d2 Fix including old snakeyaml in server jar https://github.com/TECHNOVE/Airplane/commit/007e960396bfb36a97c27e963f1808b3828136c6 Merge pull request #58 from Machine-Maker/fix/old-snakeyaml-dep https://github.com/TECHNOVE/Airplane/commit/2386904e3097a2f45e44e5c4d04e93c8410ea765 Revert .gitignore change --- gradle.properties | 2 +- .../server/0001-Airplane-Server-Changes.patch | 175 +++++++++++------- patches/server/0003-Rebrand.patch | 10 +- patches/server/0004-Purpur-config-files.patch | 6 +- ...e-config-options-per-projectile-type.patch | 8 +- ...sable-zombie-aggressiveness-towards-.patch | 10 +- 6 files changed, 128 insertions(+), 83 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5d03c6ff6..ce1103d40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ version = 1.17.1-R0.1-SNAPSHOT mcVersion = 1.17.1 packageVersion = 1_17_R1 -paperCommit = 5960af9d8707cae5e612820e3b7794575048c23b +paperCommit = d060913a61b7fc578455684ceb39b735b0c1d238 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/server/0001-Airplane-Server-Changes.patch b/patches/server/0001-Airplane-Server-Changes.patch index fb2db9583..c74d6f02d 100644 --- a/patches/server/0001-Airplane-Server-Changes.patch +++ b/patches/server/0001-Airplane-Server-Changes.patch @@ -19,7 +19,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index b3687f632bbf06c933a6ef04dc2236ccf3c030b8..8a4c00b978b289d162321a043efb0a5ca4c9ef4a 100644 +index b3687f632bbf06c933a6ef04dc2236ccf3c030b8..c1e70d5f127804deabcf626b725390863e896d38 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,9 +2,12 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCach @@ -46,18 +46,21 @@ index b3687f632bbf06c933a6ef04dc2236ccf3c030b8..8a4c00b978b289d162321a043efb0a5c // Paper start implementation("org.jline:jline-terminal-jansi:3.12.1") implementation("net.minecrell:terminalconsoleappender:1.2.0") -@@ -65,6 +68,10 @@ dependencies { +@@ -65,6 +68,13 @@ dependencies { implementation("org.quiltmc:tiny-mappings-parser:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Paper + implementation("com.github.technove:AIR:fe3dbb4420") // Airplane - config -+ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.7.2") // Airplane - more config ++ implementation("org.yaml:snakeyaml:1.28") ++ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.7.2") { // Airplane - more config ++ exclude(group="org.yaml", module="snakeyaml") // exclude snakeyaml dependency because its old (1.26) ++ } // Airplane - more config + implementation("com.github.technove:Flare:2c4a2114a0") // Airplane - flare + testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("junit:junit:4.13.1") testImplementation("org.hamcrest:hamcrest-library:1.3") -@@ -83,6 +90,7 @@ tasks.jar { +@@ -83,6 +93,7 @@ tasks.jar { "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", "Implementation-Version" to "git-Paper-$implementationVersion", @@ -65,7 +68,7 @@ index b3687f632bbf06c933a6ef04dc2236ccf3c030b8..8a4c00b978b289d162321a043efb0a5c "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -140,6 +148,22 @@ relocation { +@@ -140,6 +151,22 @@ relocation { } } @@ -125,7 +128,7 @@ index 218f5bafeed8551b55b91c7fccaf6935c8b631ca..f5d01bce4d5547b4aeca96b7962b2090 metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index dcae40fde8087ce09ec8b9360f2abc860b88c975..0f0b0bbcc0e47b8fe3e1e5d4a4ef0eed389d020b 100644 +index f421e6a2e43e0a673dbb8a9a2b4331387e523e02..3cb9e223c90f97aa106ee1e9512d33897a6bac1a 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -202,16 +202,26 @@ public class PaperConfig { @@ -1400,23 +1403,26 @@ index 0000000000000000000000000000000000000000..aa8467b9dda1f7707e41f50ac7b3e9d7 +} diff --git a/src/main/java/gg/airplane/structs/ItemListWithBitset.java b/src/main/java/gg/airplane/structs/ItemListWithBitset.java new file mode 100644 -index 0000000000000000000000000000000000000000..04565b596f7579eb22263ef844513aeba3437eb3 +index 0000000000000000000000000000000000000000..1b7a4ee47f4445d7f2ac91d3a73ae113edbdddb2 --- /dev/null +++ b/src/main/java/gg/airplane/structs/ItemListWithBitset.java -@@ -0,0 +1,105 @@ +@@ -0,0 +1,114 @@ +package gg.airplane.structs; + +import net.minecraft.core.NonNullList; +import net.minecraft.world.item.ItemStack; +import org.apache.commons.lang.Validate; +import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; + ++import java.util.AbstractList; +import java.util.Arrays; ++import java.util.List; + -+public class ItemListWithBitset extends NonNullList { -+ public static ItemListWithBitset fromNonNullList(NonNullList list) { -+ if (list instanceof ItemListWithBitset) { -+ return (ItemListWithBitset) list; ++public class ItemListWithBitset extends AbstractList { ++ public static ItemListWithBitset fromList(List list) { ++ if (list instanceof ItemListWithBitset ours) { ++ return ours; + } + return new ItemListWithBitset(list); + } @@ -1432,7 +1438,15 @@ index 0000000000000000000000000000000000000000..04565b596f7579eb22263ef844513aeb + private long bitSet = 0; + private final long allBits; + -+ private ItemListWithBitset(NonNullList list) { ++ private static class OurNonNullList extends NonNullList { ++ protected OurNonNullList(List delegate) { ++ super(delegate, ItemStack.EMPTY); ++ } ++ } ++ ++ public final NonNullList nonNullList = new OurNonNullList(this); ++ ++ private ItemListWithBitset(List list) { + this(list.size()); + + for (int i = 0; i < list.size(); i++) { @@ -1441,8 +1455,6 @@ index 0000000000000000000000000000000000000000..04565b596f7579eb22263ef844513aeb + } + + public ItemListWithBitset(int size) { -+ super(null, ItemStack.EMPTY); -+ + Validate.isTrue(size < Long.BYTES * 8, "size is too large"); + + this.items = createArray(size); @@ -1659,15 +1671,15 @@ index 505546d32eea4682452dbac02311433157f6a30e..5c7b9ad379f3c272e15648dd16f4df92 public static CompletableFuture> sequenceFailFast(List> futures) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 099db3a627c1d3c08f3b923bb02a1cb8a0a268ab..635ccc60d32333e178b28faae9c26de107b380d7 100644 +index 1d7c26354eee1dff5e66b6234d408ed8f800415c..1415932d2005e25a155e07eb7ecb7246e2ea2439 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1721,7 +1721,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Airplane"; // Airplane - Airplane > //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Airplane"; // Airplane - Airplane > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { @@ -1680,12 +1692,12 @@ index 099db3a627c1d3c08f3b923bb02a1cb8a0a268ab..635ccc60d32333e178b28faae9c26de1 } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 7b6c547e71230fbb3733f99a4597b3f5b51547b8..8242200f073aee40482b190c7c0aafd5320ac4fe 100644 +index 1bf19965d12514dee34545235bfbadc0b74ddc8b..2a569d05edf0f5337afbcd6803c0513d338ca55e 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -223,6 +223,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider io.papermc.paper.util.ObfHelper.INSTANCE.getClass(); // load mappings for stacktrace deobf and etc. + io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider // Paper end + gg.airplane.AirplaneConfig.load(); // Airplane - config + gg.airplane.commands.AirplaneCommands.init(); // Airplane - command @@ -1693,7 +1705,7 @@ index 7b6c547e71230fbb3733f99a4597b3f5b51547b8..8242200f073aee40482b190c7c0aafd5 this.setPvpAllowed(dedicatedserverproperties.pvp); this.setFlightAllowed(dedicatedserverproperties.allowFlight); diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 4386402e5e55438475c48b023c61bfb2dbe71a8f..2eacfbe3512f374169d96ac66c8be5a4f1561b6a 100644 +index 4045b7999948710517259edf1cda7028a96cc4c9..961787473601fcddef98f321eb4fb5127c0f8ebc 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -2402,8 +2402,28 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially @@ -1768,7 +1780,7 @@ index b7c9294fdd3d799d410afba4a1118aa371c98533..c71bc00973899feec0ec5530bf3d2379 this.wasOnGround = this.entity.isOnGround(); this.teleportDelay = 0; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cebaf0fb8187335ca303621a2cb412bb22584e23..d743d50a9b3ad9502fc11adc6fe43e9a58d7a94b 100644 +index 9e4ad810dd6348ad95c9a7e6d1bd63f6ec37c986..416f579560115caddadf6a400b80a4d1d6ebe04c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -772,7 +772,20 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -2197,7 +2209,7 @@ index 42d466f7f162943886078eba3db18f2dfc2d7bee..32da2d3f87758bee359522769ebbee73 } diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java -index f779f202985d34cb7e379b0f3d5690dd20f091ba..36b5d504cd864ab30cc239201d6a4a52c9d16b7d 100644 +index a96831d5df2b88203aec8fe2a5909708764b38ee..441e2edd8357c4f11093b4dee2192780ac3f3579 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java @@ -49,9 +49,12 @@ public class GoalSelector { @@ -2458,7 +2470,7 @@ index c7e16e96633e17b951f0681599c5b3efc3ce1e6c..8d329bca0818033df41fbd781028919c return false; } diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 37356b36f0ae12d55150f399318581fa77c30cee..008e3b769011df76697ad0abcdde5727cef05f64 100644 +index 6339203bda5e569d5df241dd589eb36e7233704b..461173191361fdb0c2c950eacf03ba43693e1908 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -42,6 +42,36 @@ public abstract class Projectile extends Entity { @@ -2499,39 +2511,50 @@ index 37356b36f0ae12d55150f399318581fa77c30cee..008e3b769011df76697ad0abcdde5727 if (entity != null) { this.ownerUUID = entity.getUUID(); diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -index f57864ce919ef4721cfb5913c636fe8903ce4cc1..4792d3d60e60202face2eb851c9f5b122dcfc19d 100644 +index f57864ce919ef4721cfb5913c636fe8903ce4cc1..610d756b4a264deb58ea8144c951f652697805ee 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java -@@ -40,7 +40,7 @@ import org.bukkit.inventory.InventoryHolder; +@@ -40,7 +40,10 @@ import org.bukkit.inventory.InventoryHolder; public abstract class AbstractMinecartContainer extends AbstractMinecart implements Container, MenuProvider { -- private NonNullList itemStacks; -+ private gg.airplane.structs.ItemListWithBitset itemStacks; // Airplane ++ // Airplane start + private NonNullList itemStacks; ++ private gg.airplane.structs.ItemListWithBitset itemStacksOptimized; ++ // Airplane end @Nullable public ResourceLocation lootTable; public long lootTableSeed; -@@ -89,12 +89,12 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme +@@ -89,12 +92,18 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme protected AbstractMinecartContainer(EntityType type, Level world) { super(type, world); - this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); // CraftBukkit - SPIGOT-3513 -+ this.itemStacks = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 // Airplane ++ // Airplane start ++ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 ++ this.itemStacks = this.itemStacksOptimized.nonNullList; ++ // Airplane end } protected AbstractMinecartContainer(EntityType type, double x, double y, double z, Level world) { super(type, world, x, y, z); - this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); // CraftBukkit - SPIGOT-3513 -+ this.itemStacks = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 // Airplane ++ // Airplane start ++ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // CraftBukkit - SPIGOT-3513 ++ this.itemStacks = this.itemStacksOptimized.nonNullList; ++ // Airplane end } @Override -@@ -217,7 +217,7 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme +@@ -217,7 +226,10 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme protected void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.lootableData.loadNbt(nbt); // Paper - this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ this.itemStacks = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // Airplane ++ // Airplane start ++ this.itemStacksOptimized = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); ++ this.itemStacks = this.itemStacksOptimized.nonNullList; ++ // Airplane end if (nbt.contains("LootTable", 8)) { this.lootTable = new ResourceLocation(nbt.getString("LootTable")); this.lootTableSeed = nbt.getLong("LootTableSeed"); @@ -2864,19 +2887,21 @@ index 2b814006fa30dd233dcb345d1d20ce3bf6469053..b5c6b0bc307aef2835761cfa50413ceb } } diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -index 52de9852f87d346714a950b60a0004d386ac10f0..305a8f5ea917c7e242011fa98a3e161517afe9be 100644 +index 52de9852f87d346714a950b60a0004d386ac10f0..86bbd9fcee5982cf901ef0480052025ccf57ccb4 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -@@ -32,7 +32,7 @@ import org.bukkit.entity.HumanEntity; +@@ -32,7 +32,10 @@ import org.bukkit.entity.HumanEntity; public class ChestBlockEntity extends RandomizableContainerBlockEntity implements LidBlockEntity { private static final int EVENT_SET_OPEN_COUNT = 1; -- private NonNullList items; -+ private gg.airplane.structs.ItemListWithBitset items; // Airplane ++ // Airplane start + private NonNullList items; ++ private gg.airplane.structs.ItemListWithBitset optimizedItems; ++ // Airplane end public final ContainerOpenersCounter openersCounter; private final ChestLidController chestLidController; -@@ -66,9 +66,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement +@@ -66,9 +69,13 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement } // CraftBukkit end @@ -2884,88 +2909,102 @@ index 52de9852f87d346714a950b60a0004d386ac10f0..305a8f5ea917c7e242011fa98a3e1615 protected ChestBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); - this.items = NonNullList.withSize(27, ItemStack.EMPTY); -+ this.items = new gg.airplane.structs.ItemListWithBitset(27); // Airplane - use with bitset ++ // Airplane start ++ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(27); ++ this.items = this.optimizedItems.nonNullList; ++ // Airplane end this.openersCounter = new ContainerOpenersCounter() { @Override protected void onOpen(Level world, BlockPos pos, BlockState state) { -@@ -99,6 +100,23 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement +@@ -99,6 +106,23 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement this.chestLidController = new ChestLidController(); } + // Airplane start + @Override + public boolean hasEmptySlot(Direction enumdirection) { -+ return isNative ? !this.items.hasFullStacks() : super.hasEmptySlot(enumdirection); ++ return isNative ? !this.optimizedItems.hasFullStacks() : super.hasEmptySlot(enumdirection); + } + + @Override + public boolean isCompletelyFull(Direction enumdirection) { -+ return isNative ? this.items.hasFullStacks() && super.isCompletelyFull(enumdirection) : super.isCompletelyFull(enumdirection); ++ return isNative ? this.optimizedItems.hasFullStacks() && super.isCompletelyFull(enumdirection) : super.isCompletelyFull(enumdirection); + } + + @Override + public boolean isCompletelyEmpty(Direction enumdirection) { -+ return isNative && this.items.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); ++ return isNative && this.optimizedItems.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); + } + // Airplane end + public ChestBlockEntity(BlockPos pos, BlockState state) { this(BlockEntityType.CHEST, pos, state); } -@@ -116,7 +134,7 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement +@@ -116,7 +140,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement @Override public void load(CompoundTag nbt) { super.load(nbt); - this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ this.items = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // Airplane ++ // Airplane start ++ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); ++ this.items = this.optimizedItems.nonNullList; ++ // Airplane end if (!this.tryLoadLootTable(nbt)) { ContainerHelper.loadAllItems(nbt, this.items); } -@@ -189,7 +207,7 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement +@@ -189,7 +216,10 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement @Override protected void setItems(NonNullList list) { - this.items = list; -+ this.items = gg.airplane.structs.ItemListWithBitset.fromNonNullList(list); // Airplane ++ // Airplane start ++ this.optimizedItems = gg.airplane.structs.ItemListWithBitset.fromList(list); ++ this.items = this.optimizedItems.nonNullList; ++ // Airplane end } @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index d41851f9119c334cae3fc2c433d6450a3eed9096..ddf82e65d3ef1f53b72017bf5159b9f7b5484632 100644 +index d41851f9119c334cae3fc2c433d6450a3eed9096..97061e93c4a3b6ffcd15f07284a31dd17739837c 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -@@ -44,7 +44,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -44,7 +44,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public static final int MOVE_ITEM_SPEED = 8; public static final int HOPPER_CONTAINER_SIZE = 5; -- private NonNullList items; -+ private gg.airplane.structs.ItemListWithBitset items; // Airplane ++ // Airplane start + private NonNullList items; ++ private gg.airplane.structs.ItemListWithBitset optimizedItems; // Airplane ++ // Airplane end private int cooldownTime; private long tickedGameTime; -@@ -80,14 +80,31 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -80,14 +83,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public HopperBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.HOPPER, pos, state); - this.items = NonNullList.withSize(5, ItemStack.EMPTY); -+ this.items = new gg.airplane.structs.ItemListWithBitset(5); // Airplane ++ // Airplane start ++ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(5); ++ this.items = this.optimizedItems.nonNullList; ++ // Airplane end this.cooldownTime = -1; } + // Airplane start + @Override -+ public boolean hasEmptySlot(Direction enumdirection) { -+ return !this.items.hasFullStacks(); ++ public boolean hasEmptySlot(Direction enumdirection) { ++ return !this.optimizedItems.hasFullStacks(); + } + + @Override + public boolean isCompletelyFull(Direction enumdirection) { -+ return this.items.hasFullStacks() && super.isCompletelyFull(enumdirection); ++ return this.optimizedItems.hasFullStacks() && super.isCompletelyFull(enumdirection); + } + + @Override + public boolean isCompletelyEmpty(Direction enumdirection) { -+ return this.items.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); ++ return this.optimizedItems.isCompletelyEmpty() || super.isCompletelyEmpty(enumdirection); + } + // Airplane end + @@ -2973,20 +3012,23 @@ index d41851f9119c334cae3fc2c433d6450a3eed9096..ddf82e65d3ef1f53b72017bf5159b9f7 public void load(CompoundTag nbt) { super.load(nbt); - this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); -+ this.items = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); // Airplane ++ // Airplane start ++ this.optimizedItems = new gg.airplane.structs.ItemListWithBitset(this.getContainerSize()); ++ this.items = this.optimizedItems.nonNullList; ++ // Airplane end if (!this.tryLoadLootTable(nbt)) { ContainerHelper.loadAllItems(nbt, this.items); } -@@ -160,7 +177,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -160,7 +186,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen flag = HopperBlockEntity.a(world, pos, state, (Container) blockEntity, blockEntity); // CraftBukkit } - if (!blockEntity.inventoryFull()) { -+ if (!blockEntity.items.hasFullStacks() || !blockEntity.inventoryFull()) { // Airplane - use bitset first ++ if (!blockEntity.optimizedItems.hasFullStacks() || !blockEntity.inventoryFull()) { // Airplane - use bitset first flag |= booleansupplier.getAsBoolean(); } -@@ -199,7 +216,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -199,7 +225,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen skipPushModeEventFire = skipHopperEvents; boolean foundItem = false; for (int i = 0; i < hopper.getContainerSize(); ++i) { @@ -2995,7 +3037,7 @@ index d41851f9119c334cae3fc2c433d6450a3eed9096..ddf82e65d3ef1f53b72017bf5159b9f7 if (!item.isEmpty()) { foundItem = true; ItemStack origItemStack = item; -@@ -403,12 +420,18 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -403,12 +429,18 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } private static boolean isFullContainer(Container inventory, Direction direction) { @@ -3016,7 +3058,7 @@ index d41851f9119c334cae3fc2c433d6450a3eed9096..ddf82e65d3ef1f53b72017bf5159b9f7 } private static boolean allMatch(Container iinventory, Direction enumdirection, java.util.function.BiPredicate test) { if (iinventory instanceof WorldlyContainer) { -@@ -585,7 +608,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -585,7 +617,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, enumdirection)) { boolean flag = false; @@ -3025,12 +3067,15 @@ index d41851f9119c334cae3fc2c433d6450a3eed9096..ddf82e65d3ef1f53b72017bf5159b9f7 if (itemstack1.isEmpty()) { // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem -@@ -731,7 +754,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -731,7 +763,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @Override protected void setItems(NonNullList list) { - this.items = list; -+ this.items = gg.airplane.structs.ItemListWithBitset.fromNonNullList(list); // Airplane ++ // Airplane start ++ this.optimizedItems = gg.airplane.structs.ItemListWithBitset.fromList(list); ++ this.items = this.optimizedItems.nonNullList; ++ // Airplane end } public static void entityInside(Level world, BlockPos pos, BlockState state, Entity entity, HopperBlockEntity blockEntity) { diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0003-Rebrand.patch index f8eddbde0..ef954b32f 100644 --- a/patches/server/0003-Rebrand.patch +++ b/patches/server/0003-Rebrand.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 8a4c00b978b289d162321a043efb0a5ca4c9ef4a..399641413d38f1a27165a0cf60b6c7c781cf1488 100644 +index c1e70d5f127804deabcf626b725390863e896d38..c6b4a4d679614b13215768e0c38b9fe0e9ca76a7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,7 +32,7 @@ repositories { @@ -25,7 +25,7 @@ index 8a4c00b978b289d162321a043efb0a5ca4c9ef4a..399641413d38f1a27165a0cf60b6c7c7 implementation("org.quiltmc:tiny-mappings-parser:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") // Paper -@@ -89,8 +90,7 @@ tasks.jar { +@@ -92,8 +93,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -147,20 +147,20 @@ index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..8c3c68465197fafc14849dc38a572e30 .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 635ccc60d32333e178b28faae9c26de107b380d7..e3d8caadffecde0b46e52ba1ef5175f623e1cd15 100644 +index 1415932d2005e25a155e07eb7ecb7246e2ea2439..e3d8caadffecde0b46e52ba1ef5175f623e1cd15 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1721,7 +1721,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Airplane"; // Airplane - Airplane > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! + return "Purpur"; // Purpur - Purpur > // Airplane - Airplane > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 8242200f073aee40482b190c7c0aafd5320ac4fe..f15a8118880ee3c9a71f450a84b873aa076c6350 100644 +index 2a569d05edf0f5337afbcd6803c0513d338ca55e..d7b8f37dfdc8967e52136dbcebb8532498e40232 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -283,11 +283,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0004-Purpur-config-files.patch index 0996ad0e1..60408c7be 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0004-Purpur-config-files.patch @@ -30,7 +30,7 @@ index f5d01bce4d5547b4aeca96b7962b2090f47ea541..05f1b6d103ec20f196b60944f5bc0073 metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 9364b58d2dc9ab199ac4303806a799d158e3fbe4..5cb4635690efd400853ab6378886642dd3bf2983 100644 +index 7037f868f0e925a79fbf6be8f3810d9e75133fda..2ac56ca31d57991aef4fd77212cd9a537753b8d7 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -118,6 +118,11 @@ public class PaperConfig { @@ -81,7 +81,7 @@ index 71e29d29ed5c2d61832e2f124967bb223708406f..224669ecaad37ac2f16900700eea40ef if (this.source.acceptsSuccess() && !this.silent) { this.source.sendMessage(message, Util.NIL_UUID); diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index f15a8118880ee3c9a71f450a84b873aa076c6350..ef0d4086af9a05bf5f0dd1eae965e496b1de6199 100644 +index d7b8f37dfdc8967e52136dbcebb8532498e40232..4807731e3e4d0725446a9f0e589c6b7527de9cf4 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -219,6 +219,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -98,8 +98,8 @@ index f15a8118880ee3c9a71f450a84b873aa076c6350..ef0d4086af9a05bf5f0dd1eae965e496 + net.pl3x.purpur.PurpurConfig.registerCommands(); + // Purpur end com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now - io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider io.papermc.paper.util.ObfHelper.INSTANCE.getClass(); // load mappings for stacktrace deobf and etc. + io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java index 6f4e6105aa1d6546daa2424f57972fd29db25fa3..4c55bb04ff41fabb47c6477ba33e0e0aabd1c843 100644 --- a/src/main/java/net/minecraft/world/level/Level.java diff --git a/patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch index 8e31bfa3d..d1c0f0a4d 100644 --- a/patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0106-Despawn-rate-config-options-per-projectile-type.patch @@ -127,11 +127,11 @@ index f1a12b147d55e34d4f8374593640a311598cf1a6..c4bdebd4310035a5cce5a5790f538eb0 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index 0837875231ef96ff58f2fee3e558d7066d613cb8..0079464e934f495f55a4e7edbe7031ec13e4d8d4 100644 +index ae6ccfc11a206e64c0cbced7ca692ba7e50aab03..d5d6fde1e375e5cdfc7726edd4c9b202c4cb0171 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -33,6 +33,7 @@ public abstract class Projectile extends Entity { - private Entity cachedOwner; + public Entity cachedOwner; private boolean leftOwner; private boolean hasBeenShot; + public int life; // Purpur - moved from AbstractArrow @@ -225,10 +225,10 @@ index 77941e3981e49cf5662b3e3c86a9c419080b17c8..8c6243aab556c993b43ab52e216bcb0a + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index 541ca82405d0b4d1457dcd63b58dc61eb67482d6..a65e0a3357a27dfdf62ba45ebfeb531958851285 100644 +index 1b2ada3663cc0739782ac591f2ee1f6d0fb94841..6599f267e30d15ad179e98d3683273cd9bbc3bd0 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -121,4 +121,11 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { +@@ -131,4 +131,11 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { return super.changeDimension(destination); } diff --git a/patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch index bcff5dab7..f65594f7a 100644 --- a/patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0107-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -6,13 +6,13 @@ Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index 79006251a707dd94099db26fbb503f8699b7a8b5..7550a2f35454ace8909620931ec6fc0812883ad2 100644 +index 181abe014baba9ac51064c003381281a8fa43fe4..cfd1dcec3efcd4caf2431cbda99bc9f15d39ed69 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -@@ -234,6 +234,10 @@ public class MobGoalHelper { - deobfuscationMap.put("wither_a", "wither_do_nothing"); - deobfuscationMap.put("wolf_a", "wolf_avoid_entity"); - deobfuscationMap.put("zombie_a", "zombie_attack_turtle_egg"); +@@ -135,6 +135,10 @@ public class MobGoalHelper { + static { + // TODO these kinda should be checked on each release, in case obfuscation changes + deobfuscationMap.put("abstract_skeleton_1", "abstract_skeleton_melee"); + // Purpur start + deobfuscationMap.put("zombie_1", "zombie_attack_villager"); + deobfuscationMap.put("drowned_1", "drowned_attack_villager");