aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0012-Adventure.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0012-Adventure.patch')
-rw-r--r--patches/server/0012-Adventure.patch204
1 files changed, 111 insertions, 93 deletions
diff --git a/patches/server/0012-Adventure.patch b/patches/server/0012-Adventure.patch
index 6d6a1e0f6c..f07557f17e 100644
--- a/patches/server/0012-Adventure.patch
+++ b/patches/server/0012-Adventure.patch
@@ -26,7 +26,7 @@ index 756a2ab6ad416f55fa3864cff9818473840b04fc..701a2ffd04df48d437b2cb963dd150af
}
diff --git a/src/main/java/io/papermc/paper/adventure/AdventureComponent.java b/src/main/java/io/papermc/paper/adventure/AdventureComponent.java
new file mode 100644
-index 0000000000000000000000000000000000000000..e597a90def72c5903382d7169fb7a2fb667b8a69
+index 0000000000000000000000000000000000000000..85546e1ac1d1ed7f70c3c0a1bf49937f865ad091
--- /dev/null
+++ b/src/main/java/io/papermc/paper/adventure/AdventureComponent.java
@@ -0,0 +1,82 @@
@@ -43,27 +43,27 @@ index 0000000000000000000000000000000000000000..e597a90def72c5903382d7169fb7a2fb
+import net.minecraft.network.chat.Style;
+import net.minecraft.util.FormattedCharSequence;
+import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
-+import org.checkerframework.checker.nullness.qual.Nullable;
++import org.jetbrains.annotations.Nullable;
+
+public final class AdventureComponent implements net.minecraft.network.chat.Component {
-+ final Component wrapped;
-+ private net.minecraft.network.chat.@MonotonicNonNull Component converted;
++ final Component adventure;
++ private net.minecraft.network.chat.@MonotonicNonNull Component vanilla;
+
-+ public AdventureComponent(final Component wrapped) {
-+ this.wrapped = wrapped;
++ public AdventureComponent(final Component adventure) {
++ this.adventure = adventure;
+ }
+
+ public net.minecraft.network.chat.Component deepConverted() {
-+ net.minecraft.network.chat.Component converted = this.converted;
-+ if (converted == null) {
-+ converted = PaperAdventure.WRAPPER_AWARE_SERIALIZER.serialize(this.wrapped);
-+ this.converted = converted;
++ net.minecraft.network.chat.Component vanilla = this.vanilla;
++ if (vanilla == null) {
++ vanilla = PaperAdventure.WRAPPER_AWARE_SERIALIZER.serialize(this.adventure);
++ this.vanilla = vanilla;
+ }
-+ return converted;
++ return vanilla;
+ }
+
+ public net.minecraft.network.chat.@Nullable Component deepConvertedIfPresent() {
-+ return this.converted;
++ return this.vanilla;
+ }
+
+ @Override
@@ -73,8 +73,8 @@ index 0000000000000000000000000000000000000000..e597a90def72c5903382d7169fb7a2fb
+
+ @Override
+ public String getContents() {
-+ if (this.wrapped instanceof TextComponent) {
-+ return ((TextComponent) this.wrapped).content();
++ if (this.adventure instanceof TextComponent) {
++ return ((TextComponent) this.adventure).content();
+ } else {
+ return this.deepConverted().getContents();
+ }
@@ -82,7 +82,7 @@ index 0000000000000000000000000000000000000000..e597a90def72c5903382d7169fb7a2fb
+
+ @Override
+ public String getString() {
-+ return PaperAdventure.PLAIN.serialize(this.wrapped);
++ return PaperAdventure.PLAIN.serialize(this.adventure);
+ }
+
+ @Override
@@ -108,7 +108,7 @@ index 0000000000000000000000000000000000000000..e597a90def72c5903382d7169fb7a2fb
+ public static class Serializer implements JsonSerializer<AdventureComponent> {
+ @Override
+ public JsonElement serialize(final AdventureComponent src, final Type type, final JsonSerializationContext context) {
-+ return PaperAdventure.GSON.serializer().toJsonTree(src.wrapped, Component.class);
++ return PaperAdventure.GSON.serializer().toJsonTree(src.adventure, Component.class);
+ }
+ }
+}
@@ -502,10 +502,10 @@ index 0000000000000000000000000000000000000000..eeedc30a45d9637d68f04f185b3dd90d
+}
diff --git a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java
new file mode 100644
-index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e1d7adadf
+index 0000000000000000000000000000000000000000..f506244b4917b362a954d2bf73ba0b5f46c96843
--- /dev/null
+++ b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java
-@@ -0,0 +1,381 @@
+@@ -0,0 +1,359 @@
+package io.papermc.paper.adventure;
+
+import com.mojang.brigadier.exceptions.CommandSyntaxException;
@@ -527,7 +527,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+import net.kyori.adventure.text.format.TextColor;
+import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
-+import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer;
++import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
+import net.kyori.adventure.translation.GlobalTranslator;
+import net.kyori.adventure.translation.TranslationRegistry;
+import net.kyori.adventure.translation.Translator;
@@ -544,8 +544,8 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.WrittenBookItem;
+import org.bukkit.ChatColor;
-+import org.checkerframework.checker.nullness.qual.NonNull;
-+import org.checkerframework.checker.nullness.qual.Nullable;
++import org.jetbrains.annotations.NotNull;
++import org.jetbrains.annotations.Nullable;
+
+public final class PaperAdventure {
+ public static final AttributeKey<Locale> LOCALE_ATTRIBUTE = AttributeKey.valueOf("adventure:locale");
@@ -560,7 +560,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+ }
+ }
+ }
-+ final @NonNull String translated = Language.getInstance().getOrDefault(translatable.key());
++ final @NotNull String translated = Language.getInstance().getOrDefault(translatable.key());
+
+ final Matcher matcher = LOCALIZATION_PATTERN.matcher(translated);
+ final List<Component> args = translatable.args();
@@ -599,7 +599,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+ })
+ .build();
+ public static final LegacyComponentSerializer LEGACY_SECTION_UXRC = LegacyComponentSerializer.builder().flattener(FLATTENER).hexColors().useUnusualXRepeatedCharacterHexFormat().build();
-+ public static final PlainComponentSerializer PLAIN = PlainComponentSerializer.builder().flattener(FLATTENER).build();
++ public static final PlainTextComponentSerializer PLAIN = PlainTextComponentSerializer.builder().flattener(FLATTENER).build();
+ public static final GsonComponentSerializer GSON = GsonComponentSerializer.builder()
+ .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.INSTANCE)
+ .build();
@@ -609,7 +609,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+ .build();
+ private static final Codec<CompoundTag, String, IOException, IOException> NBT_CODEC = new Codec<CompoundTag, String, IOException, IOException>() {
+ @Override
-+ public @NonNull CompoundTag decode(final @NonNull String encoded) throws IOException {
++ public @NotNull CompoundTag decode(final @NotNull String encoded) throws IOException {
+ try {
+ return TagParser.parseTag(encoded);
+ } catch (final CommandSyntaxException e) {
@@ -618,7 +618,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+ }
+
+ @Override
-+ public @NonNull String encode(final @NonNull CompoundTag decoded) {
++ public @NotNull String encode(final @NotNull CompoundTag decoded) {
+ return decoded.toString();
+ }
+ };
@@ -671,6 +671,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+ }
+
+ public static net.minecraft.network.chat.Component asVanilla(final Component component) {
++ if (component == null) return null;
+ if (true) return new AdventureComponent(component);
+ return net.minecraft.network.chat.Component.Serializer.fromJson(GSON.serializer().toJsonTree(component));
+ }
@@ -697,7 +698,7 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+
+ public static String asJsonString(final net.minecraft.network.chat.Component component, final Locale locale) {
+ if (component instanceof AdventureComponent) {
-+ return asJsonString(((AdventureComponent) component).wrapped, locale);
++ return asJsonString(((AdventureComponent) component).adventure, locale);
+ }
+ return net.minecraft.network.chat.Component.Serializer.toJson(component);
+ }
@@ -722,71 +723,47 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+ // BossBar
+
+ public static BossEvent.BossBarColor asVanilla(final BossBar.Color color) {
-+ if (color == BossBar.Color.PINK) {
-+ return BossEvent.BossBarColor.PINK;
-+ } else if (color == BossBar.Color.BLUE) {
-+ return BossEvent.BossBarColor.BLUE;
-+ } else if (color == BossBar.Color.RED) {
-+ return BossEvent.BossBarColor.RED;
-+ } else if (color == BossBar.Color.GREEN) {
-+ return BossEvent.BossBarColor.GREEN;
-+ } else if (color == BossBar.Color.YELLOW) {
-+ return BossEvent.BossBarColor.YELLOW;
-+ } else if (color == BossBar.Color.PURPLE) {
-+ return BossEvent.BossBarColor.PURPLE;
-+ } else if (color == BossBar.Color.WHITE) {
-+ return BossEvent.BossBarColor.WHITE;
-+ }
-+ throw new IllegalArgumentException(color.name());
++ return switch (color) {
++ case PINK -> BossEvent.BossBarColor.PINK;
++ case BLUE -> BossEvent.BossBarColor.BLUE;
++ case RED -> BossEvent.BossBarColor.RED;
++ case GREEN -> BossEvent.BossBarColor.GREEN;
++ case YELLOW -> BossEvent.BossBarColor.YELLOW;
++ case PURPLE -> BossEvent.BossBarColor.PURPLE;
++ case WHITE -> BossEvent.BossBarColor.WHITE;
++ };
+ }
+
+ public static BossBar.Color asAdventure(final BossEvent.BossBarColor color) {
-+ if(color == BossEvent.BossBarColor.PINK) {
-+ return BossBar.Color.PINK;
-+ } else if(color == BossEvent.BossBarColor.BLUE) {
-+ return BossBar.Color.BLUE;
-+ } else if(color == BossEvent.BossBarColor.RED) {
-+ return BossBar.Color.RED;
-+ } else if(color == BossEvent.BossBarColor.GREEN) {
-+ return BossBar.Color.GREEN;
-+ } else if(color == BossEvent.BossBarColor.YELLOW) {
-+ return BossBar.Color.YELLOW;
-+ } else if(color == BossEvent.BossBarColor.PURPLE) {
-+ return BossBar.Color.PURPLE;
-+ } else if(color == BossEvent.BossBarColor.WHITE) {
-+ return BossBar.Color.WHITE;
-+ }
-+ throw new IllegalArgumentException(color.name());
++ return switch (color) {
++ case PINK -> BossBar.Color.PINK;
++ case BLUE -> BossBar.Color.BLUE;
++ case RED -> BossBar.Color.RED;
++ case GREEN -> BossBar.Color.GREEN;
++ case YELLOW -> BossBar.Color.YELLOW;
++ case PURPLE -> BossBar.Color.PURPLE;
++ case WHITE -> BossBar.Color.WHITE;
++ };
+ }
+
+ public static BossEvent.BossBarOverlay asVanilla(final BossBar.Overlay overlay) {
-+ if (overlay == BossBar.Overlay.PROGRESS) {
-+ return BossEvent.BossBarOverlay.PROGRESS;
-+ } else if (overlay == BossBar.Overlay.NOTCHED_6) {
-+ return BossEvent.BossBarOverlay.NOTCHED_6;
-+ } else if (overlay == BossBar.Overlay.NOTCHED_10) {
-+ return BossEvent.BossBarOverlay.NOTCHED_10;
-+ } else if (overlay == BossBar.Overlay.NOTCHED_12) {
-+ return BossEvent.BossBarOverlay.NOTCHED_12;
-+ } else if (overlay == BossBar.Overlay.NOTCHED_20) {
-+ return BossEvent.BossBarOverlay.NOTCHED_20;
-+ }
-+ throw new IllegalArgumentException(overlay.name());
++ return switch (overlay) {
++ case PROGRESS -> BossEvent.BossBarOverlay.PROGRESS;
++ case NOTCHED_6 -> BossEvent.BossBarOverlay.NOTCHED_6;
++ case NOTCHED_10 -> BossEvent.BossBarOverlay.NOTCHED_10;
++ case NOTCHED_12 -> BossEvent.BossBarOverlay.NOTCHED_12;
++ case NOTCHED_20 -> BossEvent.BossBarOverlay.NOTCHED_20;
++ };
+ }
+
+ public static BossBar.Overlay asAdventure(final BossEvent.BossBarOverlay overlay) {
-+ if (overlay == BossEvent.BossBarOverlay.PROGRESS) {
-+ return BossBar.Overlay.PROGRESS;
-+ } else if (overlay == BossEvent.BossBarOverlay.NOTCHED_6) {
-+ return BossBar.Overlay.NOTCHED_6;
-+ } else if (overlay == BossEvent.BossBarOverlay.NOTCHED_10) {
-+ return BossBar.Overlay.NOTCHED_10;
-+ } else if (overlay == BossEvent.BossBarOverlay.NOTCHED_12) {
-+ return BossBar.Overlay.NOTCHED_12;
-+ } else if (overlay == BossEvent.BossBarOverlay.NOTCHED_20) {
-+ return BossBar.Overlay.NOTCHED_20;
-+ }
-+ throw new IllegalArgumentException(overlay.name());
++ return switch (overlay) {
++ case PROGRESS -> BossBar.Overlay.PROGRESS;
++ case NOTCHED_6 -> BossBar.Overlay.NOTCHED_6;
++ case NOTCHED_10 -> BossBar.Overlay.NOTCHED_10;
++ case NOTCHED_12 -> BossBar.Overlay.NOTCHED_12;
++ case NOTCHED_20 -> BossBar.Overlay.NOTCHED_20;
++ };
+ }
+
+ public static void setFlag(final BossBar bar, final BossBar.Flag flag, final boolean value) {
@@ -876,14 +853,15 @@ index 0000000000000000000000000000000000000000..f763a3ea5796737304e0c1f41349622e
+
+ // Colors
+
-+ public static @NonNull TextColor asAdventure(ChatFormatting minecraftColor) {
-+ if (minecraftColor.getColor() == null) {
++ public static @NotNull TextColor asAdventure(final ChatFormatting formatting) {
++ final Integer color = formatting.getColor();
++ if (color == null) {
+ throw new IllegalArgumentException("Not a valid color");
+ }
-+ return TextColor.color(minecraftColor.getColor());
++ return TextColor.color(color);
+ }
+
-+ public static @Nullable ChatFormatting asVanilla(TextColor color) {
++ public static @Nullable ChatFormatting asVanilla(final TextColor color) {
+ return ChatFormatting.getByHexValue(color.value());
+ }
+}
@@ -939,7 +917,7 @@ index 0000000000000000000000000000000000000000..7493efba31403cbe7f26e493f165f1b8
+}
diff --git a/src/main/java/io/papermc/paper/adventure/WrapperAwareSerializer.java b/src/main/java/io/papermc/paper/adventure/WrapperAwareSerializer.java
new file mode 100644
-index 0000000000000000000000000000000000000000..6b202f4b3ddbe1f5dde188136f39414dc68ae4e4
+index 0000000000000000000000000000000000000000..76be058996599dd798d26a166d1a5139ee72761a
--- /dev/null
+++ b/src/main/java/io/papermc/paper/adventure/WrapperAwareSerializer.java
@@ -0,0 +1,19 @@
@@ -952,7 +930,7 @@ index 0000000000000000000000000000000000000000..6b202f4b3ddbe1f5dde188136f39414d
+ @Override
+ public Component deserialize(final net.minecraft.network.chat.Component input) {
+ if (input instanceof AdventureComponent) {
-+ return ((AdventureComponent) input).wrapped;
++ return ((AdventureComponent) input).adventure;
+ }
+ return PaperAdventure.GSON.serializer().fromJson(net.minecraft.network.chat.Component.Serializer.toJsonTree(input), Component.class);
+ }
@@ -2368,7 +2346,7 @@ index 446fdca49a5a6999626a7ee3a1d5c168b15a09dd..f9863e138994f6c7a7975a852f106faa
public boolean isOp() {
return true;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
-index bfb1ced180ff4943ba15eb16f01530cd1b5b8a90..10e23477f58c7189dee1b3c06a21d656c9b50e82 100644
+index bfb1ced180ff4943ba15eb16f01530cd1b5b8a90..b62ddd41236b6561672eeedf4bbdd4fa220130e7 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -252,14 +252,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2533,7 +2511,47 @@ index bfb1ced180ff4943ba15eb16f01530cd1b5b8a90..10e23477f58c7189dee1b3c06a21d656
}
@Override
-@@ -1740,6 +1804,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1305,7 +1369,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+
+ @Override
+ public void setResourcePack(String url) {
+- this.setResourcePack(url, null);
++ this.setResourcePack(url, (byte[]) null);
+ }
+
+ @Override
+@@ -1320,7 +1384,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+
+ @Override
+ public void setResourcePack(String url, byte[] hash, boolean force) {
+- this.setResourcePack(url, hash, null, force);
++ this.setResourcePack(url, hash, (String) null, force);
+ }
+
+ @Override
+@@ -1336,6 +1400,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+ }
+ }
+
++ // Paper start
++ @Override
++ public void setResourcePack(String url, byte[] hashBytes, net.kyori.adventure.text.Component prompt, boolean force) {
++ Validate.notNull(url, "Resource pack URL cannot be null");
++ final String hash;
++ if (hashBytes != null) {
++ Validate.isTrue(hashBytes.length == 20, "Resource pack hash should be 20 bytes long but was " + hashBytes.length);
++ hash = BaseEncoding.base16().lowerCase().encode(hashBytes);
++ } else {
++ hash = "";
++ }
++ this.getHandle().sendTexturePack(url, hash, force, io.papermc.paper.adventure.PaperAdventure.asVanilla(prompt));
++ }
++ // Paper end
++
+ public void addChannel(String channel) {
+ Preconditions.checkState(this.channels.size() < 128, "Cannot register channel '%s'. Too many channels registered!", channel);
+ channel = StandardMessenger.validateAndCorrectChannel(channel);
+@@ -1740,6 +1819,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return (this.getHandle().clientViewDistance == null) ? Bukkit.getViewDistance() : this.getHandle().clientViewDistance;
}
@@ -2546,7 +2564,7 @@ index bfb1ced180ff4943ba15eb16f01530cd1b5b8a90..10e23477f58c7189dee1b3c06a21d656
@Override
public int getPing() {
return this.getHandle().latency;
-@@ -1785,6 +1855,194 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
+@@ -1785,6 +1870,194 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().allowsListing();
}
@@ -3505,7 +3523,7 @@ index f9b7b8f7ccc95b73967a51420fd6ce88d80d75fe..0de5a46423ae0403dcbfca630dfd7c5a
boolean hadFormat = false;
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
-index afdf4bc63dfaa469a16701541332e5380a027c22..4a25660971042322b1f9322b906e2775e81a6f01 100644
+index afdf4bc63dfaa469a16701541332e5380a027c22..8cbd488ee38a568d746ccb909710a2bce85ab762 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -57,6 +57,33 @@ public final class CraftMagicNumbers implements UnsafeValues {
@@ -3529,7 +3547,7 @@ index afdf4bc63dfaa469a16701541332e5380a027c22..4a25660971042322b1f9322b906e2775
+ }
+
+ @Override
-+ public net.kyori.adventure.text.serializer.plain.PlainComponentSerializer plainComponentSerializer() {
++ public net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer plainComponentSerializer() {
+ return io.papermc.paper.adventure.PaperAdventure.PLAIN;
+ }
+