--- 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 registryops = holderlookup_a.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 }