2025-03-26 03:05:00 +11:00

46 lines
2.1 KiB
Diff

--- a/net/minecraft/world/level/block/entity/TileEntityBanner.java
+++ b/net/minecraft/world/level/block/entity/TileEntityBanner.java
@@ -20,6 +20,10 @@
import net.minecraft.world.level.block.BlockBannerAbstract;
import net.minecraft.world.level.block.state.IBlockData;
+// CraftBukkit start
+import java.util.List;
+// CraftBukkit end
+
public class TileEntityBanner extends TileEntity implements INamableTileEntity {
public static final int MAX_PATTERNS = 6;
@@ -68,7 +72,7 @@
this.name = parseCustomNameSafe(nbttagcompound.get("CustomName"), holderlookup_a);
RegistryOps<NBTBase> registryops = holderlookup_a.<NBTBase>createSerializationContext(DynamicOpsNBT.INSTANCE);
- this.patterns = (BannerPatternLayers) nbttagcompound.read("patterns", BannerPatternLayers.CODEC, registryops).orElse(BannerPatternLayers.EMPTY);
+ this.setPatterns((BannerPatternLayers) nbttagcompound.read("patterns", BannerPatternLayers.CODEC, registryops).orElse(BannerPatternLayers.EMPTY)); // CraftBukkit - apply limits
}
@Override
@@ -99,7 +103,7 @@
@Override
protected void applyImplicitComponents(DataComponentGetter datacomponentgetter) {
super.applyImplicitComponents(datacomponentgetter);
- this.patterns = (BannerPatternLayers) datacomponentgetter.getOrDefault(DataComponents.BANNER_PATTERNS, BannerPatternLayers.EMPTY);
+ this.setPatterns((BannerPatternLayers) datacomponentgetter.getOrDefault(DataComponents.BANNER_PATTERNS, BannerPatternLayers.EMPTY)); // CraftBukkit - apply limits
this.name = (IChatBaseComponent) datacomponentgetter.get(DataComponents.CUSTOM_NAME);
}
@@ -115,4 +119,13 @@
nbttagcompound.remove("patterns");
nbttagcompound.remove("CustomName");
}
+
+ // CraftBukkit start
+ public void setPatterns(BannerPatternLayers bannerpatternlayers) {
+ if (bannerpatternlayers.layers().size() > 20) {
+ bannerpatternlayers = new BannerPatternLayers(List.copyOf(bannerpatternlayers.layers().subList(0, 20)));
+ }
+ this.patterns = bannerpatternlayers;
+ }
+ // CraftBukkit end
}