From 83d23c810c94b218e206369485f20eceac7dc13f Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 30 Sep 2024 18:20:16 +0200 Subject: [PATCH 1/6] Create Limited set for Entity --- .../1065-Create-Limited-set-for-Entity.patch | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 patches/server/1065-Create-Limited-set-for-Entity.patch diff --git a/patches/server/1065-Create-Limited-set-for-Entity.patch b/patches/server/1065-Create-Limited-set-for-Entity.patch new file mode 100644 index 000000000000..ada041003a1a --- /dev/null +++ b/patches/server/1065-Create-Limited-set-for-Entity.patch @@ -0,0 +1,93 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Intybyte +Date: Mon, 30 Sep 2024 17:16:36 +0200 +Subject: [PATCH] Create Limited set for Entity + + +diff --git a/src/main/java/io/papermc/paper/entity/PaperLimitedSet.java b/src/main/java/io/papermc/paper/entity/PaperLimitedSet.java +new file mode 100644 +index 0000000000000000000000000000000000000000..456c8cdb38d29a73a96dc44f7e8e4ce799cbab38 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/entity/PaperLimitedSet.java +@@ -0,0 +1,40 @@ ++package io.papermc.paper.entity; ++ ++import org.jetbrains.annotations.NotNull; ++import java.util.Collection; ++import java.util.HashSet; ++ ++public class PaperLimitedSet extends HashSet { ++ private final int maxTags; ++ ++ public PaperLimitedSet(int maxTags) { ++ this.maxTags = maxTags; ++ } ++ ++ @Override ++ public boolean add(String tag) { ++ // Enforce the max tag limit ++ if (this.size() >= maxTags) { ++ return false; ++ } ++ return this.add(tag); ++ } ++ ++ @Override ++ public boolean addAll(@NotNull Collection tags) { ++ int currentSize = this.size(); ++ boolean edited = false; ++ ++ for (String tag : tags) { ++ if (currentSize >= maxTags) { ++ break; ++ } ++ ++ boolean added = this.add(tag); ++ if (added) currentSize++; ++ ++ edited = added || edited; ++ } ++ return edited; ++ } ++} +diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java +index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..f696033cb1d937274ccbb9c04e1c755c13d6f7e1 100644 +--- a/src/main/java/net/minecraft/world/entity/Entity.java ++++ b/src/main/java/net/minecraft/world/entity/Entity.java +@@ -3,9 +3,9 @@ package net.minecraft.world.entity; + import com.google.common.collect.ImmutableList; + import com.google.common.collect.ImmutableList.Builder; + import com.google.common.collect.Lists; +-import com.google.common.collect.Sets; + import com.google.common.collect.UnmodifiableIterator; + import com.mojang.logging.LogUtils; ++import io.papermc.paper.entity.PaperLimitedSet; + import it.unimi.dsi.fastutil.doubles.DoubleList; + import it.unimi.dsi.fastutil.doubles.DoubleListIterator; + import it.unimi.dsi.fastutil.floats.FloatArraySet; +@@ -134,7 +134,6 @@ import net.minecraft.world.scores.Team; + import org.slf4j.Logger; + import org.bukkit.Bukkit; + import org.bukkit.Location; +-import org.bukkit.Server; + import org.bukkit.block.BlockFace; + import org.bukkit.command.CommandSender; + import org.bukkit.entity.Hanging; +@@ -566,7 +565,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + this.packetPositionCodec = new VecDeltaCodec(); + this.uuid = Mth.createInsecureUUID(this.random); + this.stringUUID = this.uuid.toString(); +- this.tags = Sets.newHashSet(); ++ this.tags = new PaperLimitedSet(1024); + this.pistonDeltas = new double[]{0.0D, 0.0D, 0.0D}; + this.mainSupportingBlockPos = Optional.empty(); + this.onGroundNoBlocks = false; +@@ -654,7 +653,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + } + + public boolean addTag(String tag) { +- return this.tags.size() >= 1024 ? false : this.tags.add(tag); ++ return this.tags.add(tag); + } + + public boolean removeTag(String tag) { From 38e62786b001d3905165c76603dea80db244e951 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 30 Sep 2024 19:19:17 +0200 Subject: [PATCH 2/6] Create Limited set for Entity --- .../1065-Create-Limited-set-for-Entity.patch | 29 ++++--------------- 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/patches/server/1065-Create-Limited-set-for-Entity.patch b/patches/server/1065-Create-Limited-set-for-Entity.patch index ada041003a1a..2c9fd18ef865 100644 --- a/patches/server/1065-Create-Limited-set-for-Entity.patch +++ b/patches/server/1065-Create-Limited-set-for-Entity.patch @@ -51,43 +51,24 @@ index 0000000000000000000000000000000000000000..456c8cdb38d29a73a96dc44f7e8e4ce7 + } +} diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..f696033cb1d937274ccbb9c04e1c755c13d6f7e1 100644 +index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..5f45c130213c008778093b33f2fa61632087a894 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3,9 +3,9 @@ package net.minecraft.world.entity; - import com.google.common.collect.ImmutableList; - import com.google.common.collect.ImmutableList.Builder; - import com.google.common.collect.Lists; --import com.google.common.collect.Sets; - import com.google.common.collect.UnmodifiableIterator; - import com.mojang.logging.LogUtils; -+import io.papermc.paper.entity.PaperLimitedSet; - import it.unimi.dsi.fastutil.doubles.DoubleList; - import it.unimi.dsi.fastutil.doubles.DoubleListIterator; - import it.unimi.dsi.fastutil.floats.FloatArraySet; -@@ -134,7 +134,6 @@ import net.minecraft.world.scores.Team; - import org.slf4j.Logger; - import org.bukkit.Bukkit; - import org.bukkit.Location; --import org.bukkit.Server; - import org.bukkit.block.BlockFace; - import org.bukkit.command.CommandSender; - import org.bukkit.entity.Hanging; -@@ -566,7 +565,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -566,7 +566,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.packetPositionCodec = new VecDeltaCodec(); this.uuid = Mth.createInsecureUUID(this.random); this.stringUUID = this.uuid.toString(); - this.tags = Sets.newHashSet(); -+ this.tags = new PaperLimitedSet(1024); ++ this.tags = new io.papermc.paper.entity.PaperLimitedSet(1024); // Paper - Create Limited set for Entity this.pistonDeltas = new double[]{0.0D, 0.0D, 0.0D}; this.mainSupportingBlockPos = Optional.empty(); this.onGroundNoBlocks = false; -@@ -654,7 +653,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -654,7 +654,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean addTag(String tag) { - return this.tags.size() >= 1024 ? false : this.tags.add(tag); -+ return this.tags.add(tag); ++ return this.tags.add(tag); // Paper - Create Limited set for Entity } public boolean removeTag(String tag) { From 6061cd44a6bc0dd5de636970522931314cdf36ae Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 30 Sep 2024 19:19:17 +0200 Subject: [PATCH 3/6] Create Limited set for Entity --- ...tch => 1065-Apply-requested-changes.patch} | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) rename patches/server/{1065-Create-Limited-set-for-Entity.patch => 1065-Apply-requested-changes.patch} (61%) diff --git a/patches/server/1065-Create-Limited-set-for-Entity.patch b/patches/server/1065-Apply-requested-changes.patch similarity index 61% rename from patches/server/1065-Create-Limited-set-for-Entity.patch rename to patches/server/1065-Apply-requested-changes.patch index ada041003a1a..1711f8f4859f 100644 --- a/patches/server/1065-Create-Limited-set-for-Entity.patch +++ b/patches/server/1065-Apply-requested-changes.patch @@ -1,25 +1,26 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 30 Sep 2024 17:16:36 +0200 -Subject: [PATCH] Create Limited set for Entity +Subject: [PATCH] Apply requested changes -diff --git a/src/main/java/io/papermc/paper/entity/PaperLimitedSet.java b/src/main/java/io/papermc/paper/entity/PaperLimitedSet.java +diff --git a/src/main/java/io/papermc/paper/util/SizeLimitedSet.java b/src/main/java/io/papermc/paper/util/SizeLimitedSet.java new file mode 100644 -index 0000000000000000000000000000000000000000..456c8cdb38d29a73a96dc44f7e8e4ce799cbab38 +index 0000000000000000000000000000000000000000..7f5427a8a0fd19bc9856806a46dea9057f3a7e1d --- /dev/null -+++ b/src/main/java/io/papermc/paper/entity/PaperLimitedSet.java -@@ -0,0 +1,40 @@ -+package io.papermc.paper.entity; ++++ b/src/main/java/io/papermc/paper/util/SizeLimitedSet.java +@@ -0,0 +1,38 @@ ++package io.papermc.paper.util; + -+import org.jetbrains.annotations.NotNull; ++import org.jspecify.annotations.NullMarked; +import java.util.Collection; +import java.util.HashSet; + -+public class PaperLimitedSet extends HashSet { ++@NullMarked ++public class SizeLimitedSet extends HashSet { + private final int maxTags; + -+ public PaperLimitedSet(int maxTags) { ++ public SizeLimitedSet(int maxTags) { + this.maxTags = maxTags; + } + @@ -29,43 +30,37 @@ index 0000000000000000000000000000000000000000..456c8cdb38d29a73a96dc44f7e8e4ce7 + if (this.size() >= maxTags) { + return false; + } -+ return this.add(tag); ++ return super.add(tag); + } + + @Override -+ public boolean addAll(@NotNull Collection tags) { -+ int currentSize = this.size(); ++ public boolean addAll(Collection tags) { + boolean edited = false; + + for (String tag : tags) { -+ if (currentSize >= maxTags) { ++ if (this.size() >= maxTags) { + break; + } + + boolean added = this.add(tag); -+ if (added) currentSize++; -+ + edited = added || edited; + } + return edited; + } +} diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..f696033cb1d937274ccbb9c04e1c755c13d6f7e1 100644 +index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..5df45ab464f78d1836b0c75a5c79d58bfd4702cb 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3,9 +3,9 @@ package net.minecraft.world.entity; +@@ -3,7 +3,6 @@ package net.minecraft.world.entity; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import com.google.common.collect.UnmodifiableIterator; import com.mojang.logging.LogUtils; -+import io.papermc.paper.entity.PaperLimitedSet; import it.unimi.dsi.fastutil.doubles.DoubleList; - import it.unimi.dsi.fastutil.doubles.DoubleListIterator; - import it.unimi.dsi.fastutil.floats.FloatArraySet; -@@ -134,7 +134,6 @@ import net.minecraft.world.scores.Team; +@@ -134,7 +133,6 @@ import net.minecraft.world.scores.Team; import org.slf4j.Logger; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -73,21 +68,21 @@ index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..f696033cb1d937274ccbb9c04e1c755c import org.bukkit.block.BlockFace; import org.bukkit.command.CommandSender; import org.bukkit.entity.Hanging; -@@ -566,7 +565,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -566,7 +564,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.packetPositionCodec = new VecDeltaCodec(); this.uuid = Mth.createInsecureUUID(this.random); this.stringUUID = this.uuid.toString(); - this.tags = Sets.newHashSet(); -+ this.tags = new PaperLimitedSet(1024); ++ this.tags = new io.papermc.paper.util.SizeLimitedSet(1024); // Paper - Create Limited set for Entity this.pistonDeltas = new double[]{0.0D, 0.0D, 0.0D}; this.mainSupportingBlockPos = Optional.empty(); this.onGroundNoBlocks = false; -@@ -654,7 +653,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -654,7 +652,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean addTag(String tag) { - return this.tags.size() >= 1024 ? false : this.tags.add(tag); -+ return this.tags.add(tag); ++ return this.tags.add(tag); // Paper - Create Limited set for Entity } public boolean removeTag(String tag) { From 579f5784b05a34065e6eee1fe1e71359f9001ff9 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 1 Oct 2024 17:39:17 +0200 Subject: [PATCH 4/6] Create Limited set for Entity --- ...anges.patch => 1065-Create-Limited-set-for-Entity.patch} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename patches/server/{1065-Apply-requested-changes.patch => 1065-Create-Limited-set-for-Entity.patch} (94%) diff --git a/patches/server/1065-Apply-requested-changes.patch b/patches/server/1065-Create-Limited-set-for-Entity.patch similarity index 94% rename from patches/server/1065-Apply-requested-changes.patch rename to patches/server/1065-Create-Limited-set-for-Entity.patch index 1711f8f4859f..ea067469ad18 100644 --- a/patches/server/1065-Apply-requested-changes.patch +++ b/patches/server/1065-Create-Limited-set-for-Entity.patch @@ -1,12 +1,12 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Mon, 30 Sep 2024 17:16:36 +0200 -Subject: [PATCH] Apply requested changes +Subject: [PATCH] Create Limited set for Entity diff --git a/src/main/java/io/papermc/paper/util/SizeLimitedSet.java b/src/main/java/io/papermc/paper/util/SizeLimitedSet.java new file mode 100644 -index 0000000000000000000000000000000000000000..7f5427a8a0fd19bc9856806a46dea9057f3a7e1d +index 0000000000000000000000000000000000000000..9c12f8ed4e0e68b703e244ef8d6825afb98ce8b2 --- /dev/null +++ b/src/main/java/io/papermc/paper/util/SizeLimitedSet.java @@ -0,0 +1,38 @@ @@ -43,7 +43,7 @@ index 0000000000000000000000000000000000000000..7f5427a8a0fd19bc9856806a46dea905 + } + + boolean added = this.add(tag); -+ edited = added || edited; ++ edited |= added; + } + return edited; + } From 40cbd15853e6c6ce293d9edc84eebd1f4c721022 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 1 Oct 2024 17:41:34 +0200 Subject: [PATCH 5/6] Create Limited set for Entity --- .../1065-Create-Limited-set-for-Entity.patch | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/patches/server/1065-Create-Limited-set-for-Entity.patch b/patches/server/1065-Create-Limited-set-for-Entity.patch index ea067469ad18..8999a884c18f 100644 --- a/patches/server/1065-Create-Limited-set-for-Entity.patch +++ b/patches/server/1065-Create-Limited-set-for-Entity.patch @@ -49,26 +49,10 @@ index 0000000000000000000000000000000000000000..9c12f8ed4e0e68b703e244ef8d6825af + } +} diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..5df45ab464f78d1836b0c75a5c79d58bfd4702cb 100644 +index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..94e6637045e4a4f0a4d79d3aba245b13465dfa27 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3,7 +3,6 @@ package net.minecraft.world.entity; - import com.google.common.collect.ImmutableList; - import com.google.common.collect.ImmutableList.Builder; - import com.google.common.collect.Lists; --import com.google.common.collect.Sets; - import com.google.common.collect.UnmodifiableIterator; - import com.mojang.logging.LogUtils; - import it.unimi.dsi.fastutil.doubles.DoubleList; -@@ -134,7 +133,6 @@ import net.minecraft.world.scores.Team; - import org.slf4j.Logger; - import org.bukkit.Bukkit; - import org.bukkit.Location; --import org.bukkit.Server; - import org.bukkit.block.BlockFace; - import org.bukkit.command.CommandSender; - import org.bukkit.entity.Hanging; -@@ -566,7 +564,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -566,7 +566,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.packetPositionCodec = new VecDeltaCodec(); this.uuid = Mth.createInsecureUUID(this.random); this.stringUUID = this.uuid.toString(); @@ -77,7 +61,7 @@ index 4b54d0ea31062972e68ee8fafe3cfaf68f65a5cd..5df45ab464f78d1836b0c75a5c79d58b this.pistonDeltas = new double[]{0.0D, 0.0D, 0.0D}; this.mainSupportingBlockPos = Optional.empty(); this.onGroundNoBlocks = false; -@@ -654,7 +652,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -654,7 +654,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean addTag(String tag) { From 2a19d4420faf0cba6cd0f99952621459900901c7 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 1 Oct 2024 17:41:34 +0200 Subject: [PATCH 6/6] Create Limited set for Entity --- patches/server/1065-Create-Limited-set-for-Entity.patch | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/patches/server/1065-Create-Limited-set-for-Entity.patch b/patches/server/1065-Create-Limited-set-for-Entity.patch index 8999a884c18f..ea950dd08115 100644 --- a/patches/server/1065-Create-Limited-set-for-Entity.patch +++ b/patches/server/1065-Create-Limited-set-for-Entity.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Create Limited set for Entity diff --git a/src/main/java/io/papermc/paper/util/SizeLimitedSet.java b/src/main/java/io/papermc/paper/util/SizeLimitedSet.java new file mode 100644 -index 0000000000000000000000000000000000000000..9c12f8ed4e0e68b703e244ef8d6825afb98ce8b2 +index 0000000000000000000000000000000000000000..d6789463dc8d671f3dc1f011e1c81ae94d105a95 --- /dev/null +++ b/src/main/java/io/papermc/paper/util/SizeLimitedSet.java -@@ -0,0 +1,38 @@ +@@ -0,0 +1,37 @@ +package io.papermc.paper.util; + +import org.jspecify.annotations.NullMarked; @@ -42,8 +42,7 @@ index 0000000000000000000000000000000000000000..9c12f8ed4e0e68b703e244ef8d6825af + break; + } + -+ boolean added = this.add(tag); -+ edited |= added; ++ edited |= this.add(tag); + } + return edited; + }