diff --git a/build.gradle b/build.gradle index 920751524..64eacd530 100644 --- a/build.gradle +++ b/build.gradle @@ -39,9 +39,6 @@ allprojects { maven { url "https://repo.velocitypowered.com/snapshots/" } - maven { - url "https://repo.minestom.net/repository/maven-public/" - } } javadoc { options { @@ -174,9 +171,6 @@ dependencies { } } - // This is the data Minestom uses. from https://github.com/Minestom/MinestomDataGenerator - api "net.minestom:minestom-data-full:${rootProject.properties.get("mcVersion")}" - api "com.github.Minestom:DependencyGetter:v1.0.1" // Adventure, for user-interface diff --git a/code-generators/build.gradle b/code-generators/build.gradle index 91ca580e1..a4ef39178 100644 --- a/code-generators/build.gradle +++ b/code-generators/build.gradle @@ -13,6 +13,10 @@ application { mainClass.set("net.minestom.codegen.Generators") } +repositories { + maven { url "https://repo.minestom.net/repository/maven-public/" } +} + dependencies { implementation 'com.google.code.gson:gson:2.8.6' implementation 'org.jetbrains:annotations:20.1.0' diff --git a/gradle.properties b/gradle.properties index 7a3997b9b..c6d43c2bf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ asmVersion=9.0 mixinVersion=0.8.1 hephaistosVersion=v1.1.8 kotlinVersion=1.5.0 -adventureVersion=4.7.0 \ No newline at end of file +adventureVersion=4.8.1 \ No newline at end of file diff --git a/src/lwjgl/java/net/minestom/demo/largeframebuffers/Demo.java b/src/lwjgl/java/net/minestom/demo/largeframebuffers/Demo.java index e0f4be51d..31859d35a 100644 --- a/src/lwjgl/java/net/minestom/demo/largeframebuffers/Demo.java +++ b/src/lwjgl/java/net/minestom/demo/largeframebuffers/Demo.java @@ -1,9 +1,11 @@ package net.minestom.demo.largeframebuffers; +import net.kyori.adventure.text.Component; import net.minestom.server.MinecraftServer; -import net.minestom.server.chat.ColoredText; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityType; import net.minestom.server.entity.GameMode; -import net.minestom.server.entity.type.decoration.EntityItemFrame; +import net.minestom.server.entity.metadata.other.ItemFrameMeta; import net.minestom.server.instance.Instance; import net.minestom.server.instance.InstanceManager; import net.minestom.server.item.ItemStack; @@ -66,15 +68,26 @@ public class Demo { } private static void createFrame(Instance instance, int id, int x, int y, int z) { - EntityItemFrame itemFrame = new EntityItemFrame(new Position(x, y, z), EntityItemFrame.ItemFrameOrientation.NORTH); - itemFrame.getPosition().setYaw(180f); + Entity itemFrame = new Entity(EntityType.ITEM_FRAME); + + ItemFrameMeta itemFrameMeta = (ItemFrameMeta) itemFrame.getEntityMeta(); + + itemFrameMeta.setNotifyAboutChanges(false); + + itemFrameMeta.setOrientation(ItemFrameMeta.Orientation.NORTH); + ItemStack map = ItemStack.builder(Material.FILLED_MAP) .meta(new MapMeta.Builder().mapId(id).build()) .build(); - itemFrame.setItemStack(map); - itemFrame.setInstance(instance); - itemFrame.setCustomNameVisible(true); - itemFrame.setCustomName(ColoredText.of("MapID: " + id)); + + itemFrameMeta.setItem(map); + itemFrameMeta.setCustomNameVisible(true); + itemFrameMeta.setCustomName(Component.text("MapID: " + id)); + + itemFrameMeta.setNotifyAboutChanges(true); + + itemFrame.setInstance(instance, new Position(x, y, z)); + itemFrame.getPosition().setYaw(180f); } private static void setupMaps(Instance instance, int mapIDStart, int zCoordinate) { diff --git a/src/main/java/net/minestom/server/adventure/AdventurePacketConvertor.java b/src/main/java/net/minestom/server/adventure/AdventurePacketConvertor.java index e4e4cf5ea..7629a4430 100644 --- a/src/main/java/net/minestom/server/adventure/AdventurePacketConvertor.java +++ b/src/main/java/net/minestom/server/adventure/AdventurePacketConvertor.java @@ -3,6 +3,7 @@ package net.minestom.server.adventure; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.key.Key; import net.kyori.adventure.sound.Sound; import net.kyori.adventure.sound.SoundStop; import net.kyori.adventure.text.format.NamedTextColor; @@ -14,6 +15,7 @@ import net.minestom.server.network.packet.server.play.SoundEffectPacket; import net.minestom.server.network.packet.server.play.StopSoundPacket; import net.minestom.server.registry.Registries; import net.minestom.server.sound.SoundEvent; +import net.minestom.server.utils.Position; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -44,6 +46,7 @@ public class AdventurePacketConvertor { /** * Gets the int value of a boss bar overlay. + * * @param overlay the overlay * @return the value */ @@ -53,6 +56,7 @@ public class AdventurePacketConvertor { /** * Gets the byte value of a collection of boss bar flags. + * * @param flags the flags * @return the value */ @@ -66,6 +70,7 @@ public class AdventurePacketConvertor { /** * Gets the int value of a boss bar color. + * * @param color the color * @return the value */ @@ -75,6 +80,7 @@ public class AdventurePacketConvertor { /** * Gets the int value of a sound source. + * * @param source the source * @return the value */ @@ -84,6 +90,7 @@ public class AdventurePacketConvertor { /** * Gets the int value from a named text color. + * * @param color the color * @return the int value */ @@ -93,17 +100,18 @@ public class AdventurePacketConvertor { /** * Creates a sound packet from a sound and a location. + * * @param sound the sound * @param x the x coordinate * @param y the y coordinate * @param z the z coordinate * @return the sound packet */ - public static ServerPacket createSoundPacket(@NotNull Sound sound, double x, double y, double z) { - SoundEvent minestomSound = Registries.getSoundEvent(sound.name()); + public static @NotNull ServerPacket createSoundPacket(@NotNull Sound sound, double x, double y, double z) { + final SoundEvent minestomSound = Registries.getSoundEvent(sound.name()); if (minestomSound == null) { - NamedSoundEffectPacket packet = new NamedSoundEffectPacket(); + final NamedSoundEffectPacket packet = new NamedSoundEffectPacket(); packet.soundName = sound.name().asString(); packet.soundSource = sound.source(); packet.x = (int) x; @@ -113,7 +121,7 @@ public class AdventurePacketConvertor { packet.pitch = sound.pitch(); return packet; } else { - SoundEffectPacket packet = new SoundEffectPacket(); + final SoundEffectPacket packet = new SoundEffectPacket(); packet.soundId = minestomSound.getId(); packet.soundSource = sound.source(); packet.x = (int) x; @@ -126,29 +134,60 @@ public class AdventurePacketConvertor { } /** - * Creates an entity sound packet from an Adventure sound. + * Creates a sound effect packet from a sound and an emitter. + * * @param sound the sound - * @param entity the entity the sound is coming from - * @return the packet + * @param emitter the emitter, must be an {@link Entity} + * @return the sound packet */ - public static ServerPacket createEntitySoundPacket(@NotNull Sound sound, @NotNull Entity entity) { - SoundEvent soundEvent = Registries.getSoundEvent(sound.name()); + public static @NotNull ServerPacket createSoundPacket(@NotNull Sound sound, Sound.@NotNull Emitter emitter) { + if (emitter == Sound.Emitter.self()) + throw new IllegalArgumentException("you must replace instances of Emitter.self() before calling this method"); + if (!(emitter instanceof Entity)) + throw new IllegalArgumentException("you can only call this method with entities"); - if (soundEvent == null) { - throw new IllegalArgumentException("Sound must be a valid sound event."); - } else { - EntitySoundEffectPacket packet = new EntitySoundEffectPacket(); - packet.soundId = soundEvent.getId(); + final Entity entity = (Entity) emitter; + final SoundEvent minestomSound = Registries.getSoundEvent(sound.name()); + + if (minestomSound != null) { + final EntitySoundEffectPacket packet = new EntitySoundEffectPacket(); + packet.soundId = minestomSound.getId(); packet.soundSource = sound.source(); packet.entityId = entity.getEntityId(); packet.volume = sound.volume(); packet.pitch = sound.pitch(); return packet; + } else { + final Position pos = entity.getPosition(); + + final NamedSoundEffectPacket packet = new NamedSoundEffectPacket(); + packet.soundName = sound.name().asString(); + packet.soundSource = sound.source(); + packet.x = (int) pos.getX(); + packet.y = (int) pos.getY(); + packet.z = (int) pos.getX(); + packet.volume = sound.volume(); + packet.pitch = sound.pitch(); + return packet; } } + /** + * Creates an entity sound packet from an Adventure sound. + * + * @param sound the sound + * @param entity the entity the sound is coming from + * @return the packet + * @deprecated Use {@link #createSoundPacket(Sound, Sound.Emitter)} + */ + @Deprecated(forRemoval = true) + public static ServerPacket createEntitySoundPacket(@NotNull Sound sound, @NotNull Entity entity) { + return createSoundPacket(sound, entity); + } + /** * Creates a sound stop packet from a sound stop. + * * @param stop the sound stop * @return the sound stop packet */ @@ -156,14 +195,16 @@ public class AdventurePacketConvertor { StopSoundPacket packet = new StopSoundPacket(); packet.flags = 0x0; - if (stop.source() != null) { + final Sound.Source source = stop.source(); + if (source != null) { packet.flags |= 0x1; - packet.source = AdventurePacketConvertor.getSoundSourceValue(stop.source()); + packet.source = AdventurePacketConvertor.getSoundSourceValue(source); } - if (stop.sound() != null) { + final Key sound = stop.sound(); + if (sound != null) { packet.flags |= 0x2; - packet.sound = stop.sound().asString(); + packet.sound = sound.asString(); } return packet; diff --git a/src/main/java/net/minestom/server/adventure/AdventureSerializer.java b/src/main/java/net/minestom/server/adventure/AdventureSerializer.java index dddbeca1a..e94d6f155 100644 --- a/src/main/java/net/minestom/server/adventure/AdventureSerializer.java +++ b/src/main/java/net/minestom/server/adventure/AdventureSerializer.java @@ -6,6 +6,7 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.translation.GlobalTranslator; import net.kyori.adventure.translation.TranslationRegistry; import net.kyori.adventure.translation.Translator; +import net.minestom.server.utils.ComponentUtils; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -13,6 +14,8 @@ import java.util.Locale; import java.util.Objects; import java.util.function.Function; +import org.jetbrains.annotations.Nullable; + /** * Manager class for handling Adventure serialization. By default AdventureSerializer will simply * serialize components to Strings using {@link GsonComponentSerializer}. However, AdventureSerializer @@ -25,17 +28,19 @@ import java.util.function.Function; * of specific players, or other elements which implement {@link Localizable}. To add your * own translations, use {@link GlobalTranslator#addSource(Translator)} with a * {@link TranslationRegistry} or your own implementation of {@link Translator}. + * + * @deprecated Use {@link MinestomAdventure} */ +@Deprecated(forRemoval = true) public class AdventureSerializer { /** * If components should be automatically translated in outgoing packets. + * @deprecated Use {@link MinestomAdventure#AUTOMATIC_COMPONENT_TRANSLATION} */ - public static final boolean AUTOMATIC_COMPONENT_TRANSLATION = false; - - protected static final Localizable NULL_LOCALIZABLE = () -> null; + @Deprecated(forRemoval = true) + public static final boolean AUTOMATIC_COMPONENT_TRANSLATION = MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION; private static Function serializer = component -> GsonComponentSerializer.gson().serialize(component); - private static Locale defaultLocale = Locale.US; private AdventureSerializer() {} @@ -43,7 +48,9 @@ public class AdventureSerializer { * Gets the root serializer that is used to convert components into strings. * * @return the serializer + * @deprecated The serializer is no longer in use, use the adventure-provided serializers */ + @Deprecated(forRemoval = true) public static @NotNull Function getSerializer() { return AdventureSerializer.serializer; } @@ -52,7 +59,9 @@ public class AdventureSerializer { * Sets the root serializer that is used to convert components into strings. * * @param serializer the serializer + * @deprecated The serializer is no longer in use */ + @Deprecated public static void setSerializer(@NotNull Function serializer) { AdventureSerializer.serializer = serializer; } @@ -63,9 +72,11 @@ public class AdventureSerializer { * does not have a locale. * * @return the default locale + * @deprecated Use {@link MinestomAdventure#getDefaultLocale()} */ + @Deprecated(forRemoval = true) public static @NotNull Locale getDefaultLocale() { - return defaultLocale; + return MinestomAdventure.getDefaultLocale(); } /** @@ -73,10 +84,12 @@ public class AdventureSerializer { * {@link #translate(Component, Localizable)} is called with a localizable that * does not have a locale. * - * @param defaultLocale the new default locale + * @param defaultLocale the new default locale, or {@code null} to return to the default + * @deprecated Use {@link MinestomAdventure#setDefaultLocale(Locale)}} */ - public static void setDefaultLocale(@NotNull Locale defaultLocale) { - AdventureSerializer.defaultLocale = defaultLocale; + @Deprecated(forRemoval = true) + public static void setDefaultLocale(@Nullable Locale defaultLocale) { + MinestomAdventure.setDefaultLocale(defaultLocale); } /** @@ -84,7 +97,9 @@ public class AdventureSerializer { * {@link GlobalTranslator#get()}. * * @return the global translator + * @deprecated Use {@link GlobalTranslator#get()} */ + @Deprecated(forRemoval = true) public static @NotNull GlobalTranslator getTranslator() { return GlobalTranslator.get(); } @@ -97,7 +112,9 @@ public class AdventureSerializer { * @param localizable the localizable * * @return the prepared component + * @deprecated Use {@link GlobalTranslator#translate(String, Locale)} */ + @Deprecated(forRemoval = true) public static @NotNull Component translate(@NotNull Component component, @NotNull Localizable localizable) { return GlobalTranslator.renderer().render(component, Objects.requireNonNullElse(localizable.getLocale(), AdventureSerializer.getDefaultLocale())); } @@ -110,7 +127,9 @@ public class AdventureSerializer { * @param locale the locale * * @return the prepared component + * @deprecated Use {@link GlobalTranslator#translate(String, Locale)} */ + @Deprecated(forRemoval = true) public static @NotNull Component translate(@NotNull Component component, @NotNull Locale locale) { return GlobalTranslator.renderer().render(component, locale); } @@ -121,7 +140,9 @@ public class AdventureSerializer { * @param component the component * * @return the serialized string + * @deprecated Use the Adventure serializers directly */ + @Deprecated(forRemoval = true) public static @NotNull String serialize(@NotNull Component component) { return AdventureSerializer.serializer.apply(component); } @@ -133,7 +154,9 @@ public class AdventureSerializer { * @param localizable the localisable * * @return the string + * @deprecated Use {@link GlobalTranslator#translate(String, Locale)} and the Adventure serializers */ + @Deprecated(forRemoval = true) public static String translateAndSerialize(@NotNull Component component, @NotNull Localizable localizable) { return AdventureSerializer.translateAndSerialize(component, Objects.requireNonNullElse(localizable.getLocale(), AdventureSerializer.getDefaultLocale())); } @@ -145,7 +168,9 @@ public class AdventureSerializer { * @param locale the locale * * @return the string + * @deprecated Use {@link GlobalTranslator#translate(String, Locale)} and the Adventure serializers */ + @Deprecated(forRemoval = true) public static String translateAndSerialize(@NotNull Component component, @NotNull Locale locale) { return AdventureSerializer.serialize(AdventureSerializer.translate(component, locale)); } @@ -157,9 +182,11 @@ public class AdventureSerializer { * @param component the component * @return {@code true} if the component can be translated server-side, * {@code false} otherwise + * @deprecated Use {@link ComponentUtils#isTranslatable(Component)} */ + @Deprecated(forRemoval = true) public static boolean isTranslatable(@NotNull Component component) { - return !component.equals(AdventureSerializer.translate(component, AdventureSerializer.getDefaultLocale())); + return ComponentUtils.isTranslatable(component); } /** @@ -167,14 +194,10 @@ public class AdventureSerializer { * @param components the components * @return {@code true} if any of the components can be translated server-side, * {@code false} otherwise + * @deprecated Use {@link ComponentUtils#areAnyTranslatable(Collection)} */ + @Deprecated(forRemoval = true) public static boolean areAnyTranslatable(@NotNull Collection components) { - for (Component component : components) { - if (AdventureSerializer.isTranslatable(component)) { - return true; - } - } - - return false; + return ComponentUtils.areAnyTranslatable(components); } } diff --git a/src/main/java/net/minestom/server/adventure/Localizable.java b/src/main/java/net/minestom/server/adventure/Localizable.java index c77b65bee..b9325a815 100644 --- a/src/main/java/net/minestom/server/adventure/Localizable.java +++ b/src/main/java/net/minestom/server/adventure/Localizable.java @@ -16,7 +16,7 @@ public interface Localizable { * @return the empty localizable */ static @NotNull Localizable empty() { - return AdventureSerializer.NULL_LOCALIZABLE; + return MinestomAdventure.NULL_LOCALIZABLE; } /** diff --git a/src/main/java/net/minestom/server/adventure/MinestomAdventure.java b/src/main/java/net/minestom/server/adventure/MinestomAdventure.java new file mode 100644 index 000000000..e2429639c --- /dev/null +++ b/src/main/java/net/minestom/server/adventure/MinestomAdventure.java @@ -0,0 +1,55 @@ +package net.minestom.server.adventure; + +import java.io.StringReader; + +import net.kyori.adventure.util.Codec; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Locale; +import java.util.Objects; + +import org.jglrxavpok.hephaistos.nbt.NBT; +import org.jglrxavpok.hephaistos.nbt.NBTException; +import org.jglrxavpok.hephaistos.nbt.SNBTParser; + +/** + * Adventure related constants, etc. + */ +public final class MinestomAdventure { + /** + * A codec to convert between strings and NBT. + */ + public static final Codec NBT_CODEC + = Codec.of(encoded -> new SNBTParser(new StringReader(encoded)).parse(), NBT::toSNBT); + + /** + * If components should be automatically translated in outgoing packets. + */ + public static final boolean AUTOMATIC_COMPONENT_TRANSLATION = false; + + static final Localizable NULL_LOCALIZABLE = () -> null; + + private static Locale defaultLocale = Locale.getDefault(); + + private MinestomAdventure() { + } + + /** + * Gets the default locale used to translate components when no overriding locale has been provided. + * + * @return the default locale + */ + public static @NotNull Locale getDefaultLocale() { + return defaultLocale; + } + + /** + * Sets the default locale used to translate components when no overriding locale has been provided. + * + * @param defaultLocale the new default, or {@code null} to return to {@link Locale#getDefault()} + */ + public static void setDefaultLocale(@Nullable Locale defaultLocale) { + MinestomAdventure.defaultLocale = Objects.requireNonNullElseGet(defaultLocale, Locale::getDefault); + } +} diff --git a/src/main/java/net/minestom/server/adventure/audience/PacketGroupingAudience.java b/src/main/java/net/minestom/server/adventure/audience/PacketGroupingAudience.java index 973408254..cd18eeec1 100644 --- a/src/main/java/net/minestom/server/adventure/audience/PacketGroupingAudience.java +++ b/src/main/java/net/minestom/server/adventure/audience/PacketGroupingAudience.java @@ -90,11 +90,25 @@ public interface PacketGroupingAudience extends ForwardingAudience { PacketUtils.sendGroupedPacket(this.getPlayers(), AdventurePacketConvertor.createSoundPacket(sound, x, y, z)); } + @Override + default void playSound(@NotNull Sound sound, Sound.@NotNull Emitter emitter) { + if (emitter != Sound.Emitter.self()) { + PacketUtils.sendGroupedPacket(this.getPlayers(), AdventurePacketConvertor.createSoundPacket(sound, emitter)); + } else { + // if we're playing on self, we need to delegate to each audience member + for (Audience audience : this.audiences()) { + audience.playSound(sound, emitter); + } + } + } + @Override default void stopSound(@NotNull SoundStop stop) { PacketUtils.sendGroupedPacket(this.getPlayers(), AdventurePacketConvertor.createSoundStopPacket(stop)); } + + @Override default @NotNull Iterable audiences() { return this.getPlayers(); diff --git a/src/main/java/net/minestom/server/adventure/provider/MinestomFlattenerProvider.java b/src/main/java/net/minestom/server/adventure/provider/MinestomFlattenerProvider.java new file mode 100644 index 000000000..d5c47d09f --- /dev/null +++ b/src/main/java/net/minestom/server/adventure/provider/MinestomFlattenerProvider.java @@ -0,0 +1,22 @@ +package net.minestom.server.adventure.provider; + +import net.kyori.adventure.text.TranslatableComponent; +import net.kyori.adventure.text.flattener.ComponentFlattener; +import net.kyori.adventure.translation.GlobalTranslator; +import net.minestom.server.adventure.MinestomAdventure; + +final class MinestomFlattenerProvider { + static final ComponentFlattener INSTANCE; + static { + final ComponentFlattener.Builder builder = ComponentFlattener.basic().toBuilder(); + + // handle server-side translations if needed + builder.complexMapper(TranslatableComponent.class, ((component, consumer) -> { + if (MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION) { + consumer.accept(GlobalTranslator.render(component, MinestomAdventure.getDefaultLocale())); + } + })); + + INSTANCE = builder.build(); + } +} diff --git a/src/main/java/net/minestom/server/adventure/provider/MinestomGsonComponentSerializerProvider.java b/src/main/java/net/minestom/server/adventure/provider/MinestomGsonComponentSerializerProvider.java new file mode 100644 index 000000000..e5edc3d63 --- /dev/null +++ b/src/main/java/net/minestom/server/adventure/provider/MinestomGsonComponentSerializerProvider.java @@ -0,0 +1,29 @@ +package net.minestom.server.adventure.provider; + +import java.util.function.Consumer; + +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("UnstableApiUsage") // we are permitted to provide this +public final class MinestomGsonComponentSerializerProvider implements GsonComponentSerializer.Provider { + @Override + public @NotNull GsonComponentSerializer gson() { + return GsonComponentSerializer.builder() + .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.INSTANCE) + .build(); + } + + @Override + public @NotNull GsonComponentSerializer gsonLegacy() { + return GsonComponentSerializer.builder() + .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.INSTANCE) + .downsampleColors() + .build(); + } + + @Override + public @NotNull Consumer builder() { + return builder -> {}; // we don't need to touch the builder here + } +} diff --git a/src/main/java/net/minestom/server/adventure/provider/MinestomLegacyComponentSerializerProvider.java b/src/main/java/net/minestom/server/adventure/provider/MinestomLegacyComponentSerializerProvider.java new file mode 100644 index 000000000..89d514b9e --- /dev/null +++ b/src/main/java/net/minestom/server/adventure/provider/MinestomLegacyComponentSerializerProvider.java @@ -0,0 +1,31 @@ +package net.minestom.server.adventure.provider; + +import java.util.function.Consumer; + +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("UnstableApiUsage") // we are permitted to provide this +public final class MinestomLegacyComponentSerializerProvider implements LegacyComponentSerializer.Provider { + @Override + public @NotNull LegacyComponentSerializer legacyAmpersand() { + return LegacyComponentSerializer.builder() + .character(LegacyComponentSerializer.AMPERSAND_CHAR) + .flattener(MinestomFlattenerProvider.INSTANCE) + .build(); + } + + @Override + public @NotNull LegacyComponentSerializer legacySection() { + return LegacyComponentSerializer.builder() + .character(LegacyComponentSerializer.SECTION_CHAR) + .flattener(MinestomFlattenerProvider.INSTANCE) + .build(); + } + + @Override + public @NotNull Consumer legacy() { + // we will provide our flattener to allow for custom translations/etc + return builder -> builder.flattener(MinestomFlattenerProvider.INSTANCE); + } +} diff --git a/src/main/java/net/minestom/server/adventure/provider/MinestomPlainTextComponentSerializerProvider.java b/src/main/java/net/minestom/server/adventure/provider/MinestomPlainTextComponentSerializerProvider.java new file mode 100644 index 000000000..85ec04fa6 --- /dev/null +++ b/src/main/java/net/minestom/server/adventure/provider/MinestomPlainTextComponentSerializerProvider.java @@ -0,0 +1,22 @@ +package net.minestom.server.adventure.provider; + +import java.util.function.Consumer; + +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.jetbrains.annotations.NotNull; + +@SuppressWarnings("UnstableApiUsage") // we are permitted to provide this +public final class MinestomPlainTextComponentSerializerProvider implements PlainTextComponentSerializer.Provider { + @Override + public @NotNull PlainTextComponentSerializer plainTextSimple() { + return PlainTextComponentSerializer.builder() + .flattener(MinestomFlattenerProvider.INSTANCE) + .build(); + } + + @Override + public @NotNull Consumer plainText() { + // we will provide our flattener to allow for custom translations/etc + return builder -> builder.flattener(MinestomFlattenerProvider.INSTANCE); + } +} diff --git a/src/main/java/net/minestom/server/adventure/provider/NBTLegacyHoverEventSerializer.java b/src/main/java/net/minestom/server/adventure/provider/NBTLegacyHoverEventSerializer.java new file mode 100644 index 000000000..a69f59669 --- /dev/null +++ b/src/main/java/net/minestom/server/adventure/provider/NBTLegacyHoverEventSerializer.java @@ -0,0 +1,101 @@ +package net.minestom.server.adventure.provider; + +import java.util.UUID; + +import net.kyori.adventure.key.Key; +import net.kyori.adventure.nbt.api.BinaryTagHolder; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.serializer.gson.LegacyHoverEventSerializer; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import net.kyori.adventure.util.Codec; +import net.minestom.server.adventure.MinestomAdventure; +import org.jetbrains.annotations.NotNull; +import org.jglrxavpok.hephaistos.nbt.NBT; +import org.jglrxavpok.hephaistos.nbt.NBTCompound; +import org.jglrxavpok.hephaistos.nbt.NBTException; + +import java.io.IOException; +import java.util.Objects; + +final class NBTLegacyHoverEventSerializer implements LegacyHoverEventSerializer { + static final NBTLegacyHoverEventSerializer INSTANCE = new NBTLegacyHoverEventSerializer(); + + private static final String ITEM_TYPE = "id", ITEM_COUNT = "Count", ITEM_TAG = "tag"; + private static final String ENTITY_TYPE = "type", ENTITY_NAME = "name", ENTITY_ID = "id"; + + private NBTLegacyHoverEventSerializer() { + } + + @Override + public HoverEvent.@NotNull ShowItem deserializeShowItem(@NotNull Component input) throws IOException { + final String raw = PlainTextComponentSerializer.plainText().serialize(input); + try { + // attempt the parse + final NBT nbt = MinestomAdventure.NBT_CODEC.decode(raw); + if (!(nbt instanceof NBTCompound)) throw new IOException("contents were not a compound"); + final NBTCompound contents = (NBTCompound) nbt, tag = contents.getCompound(ITEM_TAG); + + // create the event + return HoverEvent.ShowItem.of( + Key.key(Objects.requireNonNullElse(contents.getString(ITEM_TYPE), "")), + Objects.requireNonNullElse(contents.getByte(ITEM_COUNT), (byte) 1), + tag == null ? null : BinaryTagHolder.encode(tag, MinestomAdventure.NBT_CODEC) + ); + } catch (final NBTException e) { + throw new IOException(e); + } + } + + @Override + public HoverEvent.@NotNull ShowEntity deserializeShowEntity(@NotNull Component input, Codec.Decoder componentDecoder) throws IOException { + final String raw = PlainTextComponentSerializer.plainText().serialize(input); + + try { + final NBT nbt = MinestomAdventure.NBT_CODEC.decode(raw); + if (!(nbt instanceof NBTCompound)) throw new IOException("contents were not a compound"); + + final NBTCompound contents = (NBTCompound) nbt; + + return HoverEvent.ShowEntity.of( + Key.key(Objects.requireNonNullElse(contents.getString(ENTITY_TYPE), "")), + UUID.fromString(Objects.requireNonNullElse(contents.getString(ENTITY_ID), "")), + componentDecoder.decode(Objects.requireNonNullElse(contents.getString(ENTITY_NAME), "")) + ); + } catch (NBTException e) { + throw new IOException(e); + } + } + + @Override + public @NotNull Component serializeShowItem(HoverEvent.@NotNull ShowItem input) throws IOException { + final NBTCompound tag = new NBTCompound(); + tag.setString(ITEM_TYPE, input.item().asString()); + tag.setByte(ITEM_COUNT, (byte) input.count()); + + final BinaryTagHolder nbt = input.nbt(); + if (nbt != null) { + try { + tag.set(ITEM_TAG, nbt.get(MinestomAdventure.NBT_CODEC)); + } catch (NBTException e) { + throw new IOException(e); + } + } + + return Component.text(MinestomAdventure.NBT_CODEC.encode(tag)); + } + + @Override + public @NotNull Component serializeShowEntity(HoverEvent.@NotNull ShowEntity input, Codec.Encoder componentEncoder) throws IOException { + final NBTCompound tag = new NBTCompound(); + tag.setString(ENTITY_ID, input.id().toString()); + tag.setString(ENTITY_TYPE, input.type().asString()); + + final Component name = input.name(); + if (name != null) { + tag.setString(ENTITY_NAME, componentEncoder.encode(name)); + } + + return Component.text(MinestomAdventure.NBT_CODEC.encode(tag)); + } +} diff --git a/src/main/java/net/minestom/server/bossbar/BarColor.java b/src/main/java/net/minestom/server/bossbar/BarColor.java deleted file mode 100644 index 0467e4235..000000000 --- a/src/main/java/net/minestom/server/bossbar/BarColor.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.minestom.server.bossbar; - -/** - * Represents the displayed color of a {@link BossBar}. - * @deprecated Use {@link net.kyori.adventure.bossbar.BossBar.Color} - */ -@Deprecated -public enum BarColor { - PINK, - BLUE, - RED, - GREEN, - YELLOW, - PURPLE, - WHITE; - - public net.kyori.adventure.bossbar.BossBar.Color asAdventureColor() { - return net.kyori.adventure.bossbar.BossBar.Color.valueOf(this.name()); - } -} diff --git a/src/main/java/net/minestom/server/bossbar/BarDivision.java b/src/main/java/net/minestom/server/bossbar/BarDivision.java deleted file mode 100644 index 07bd95a1f..000000000 --- a/src/main/java/net/minestom/server/bossbar/BarDivision.java +++ /dev/null @@ -1,19 +0,0 @@ -package net.minestom.server.bossbar; - -/** - * Used to define the number of segments on a {@link BossBar}. - * - * @deprecated Use {@link net.kyori.adventure.bossbar.BossBar.Overlay} - */ -@Deprecated -public enum BarDivision { - SOLID, - SEGMENT_6, - SEGMENT_10, - SEGMENT_12, - SEGMENT_20; - - public net.kyori.adventure.bossbar.BossBar.Overlay asAdventureOverlay() { - return net.kyori.adventure.bossbar.BossBar.Overlay.values()[this.ordinal()]; - } -} diff --git a/src/main/java/net/minestom/server/bossbar/BossBar.java b/src/main/java/net/minestom/server/bossbar/BossBar.java deleted file mode 100644 index c64b2265a..000000000 --- a/src/main/java/net/minestom/server/bossbar/BossBar.java +++ /dev/null @@ -1,300 +0,0 @@ -package net.minestom.server.bossbar; - -import net.minestom.server.Viewable; -import net.minestom.server.chat.JsonMessage; -import net.minestom.server.entity.Player; -import net.minestom.server.network.packet.server.play.BossBarPacket; -import net.minestom.server.utils.MathUtils; -import net.minestom.server.utils.validate.Check; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.concurrent.CopyOnWriteArraySet; - -/** - * Represents a boss bar which is displayed on the top of the client screen (max amount of boss bar defined by {@link #MAX_BOSSBAR}). - *

- * To use it, create a new instance using the constructor - * and add the {@link Player} you want using {@link #addViewer(Player)} and remove them using {@link #removeViewer(Player)}. - *

- * You can retrieve all the boss bars of a {@link Player} with {@link #getBossBars(Player)}. - * - * @deprecated Use {@link net.kyori.adventure.bossbar.BossBar} - */ -@Deprecated -public class BossBar implements Viewable { - - private static final int MAX_BOSSBAR = 7; - private static final Map> PLAYER_BOSSBAR_MAP = new HashMap<>(); - - private final UUID uuid = UUID.randomUUID(); - private final Set viewers = new CopyOnWriteArraySet<>(); - private final Set unmodifiableViewers = Collections.unmodifiableSet(viewers); - - private JsonMessage title; - private float progress; - private BarColor color; - private BarDivision division; - private byte flags; - - /** - * Creates a new {@link BossBar}. - * - * @param title the boss bar title - * @param color the boss bar color - * @param division the boss bar division - */ - public BossBar(@NotNull JsonMessage title, @NotNull BarColor color, @NotNull BarDivision division) { - this.title = title; - this.color = color; - this.division = division; - } - - /** - * Gets all the visible boss bars of a {@link Player}. - * - * @param player the player to check the boss bars - * @return all the visible boss bars of the player, null if not any - */ - @Nullable - public static Set getBossBars(@NotNull Player player) { - return PLAYER_BOSSBAR_MAP.getOrDefault(player.getUuid(), null); - } - - @Override - public synchronized boolean addViewer(@NotNull Player player) { - // Check already viewer - if (isViewer(player)) { - return false; - } - // Check max boss bar count - final Set playerBossBars = getBossBars(player); - if (playerBossBars != null && playerBossBars.size() >= MAX_BOSSBAR) { - return false; - } - - addToPlayer(player); - return viewers.add(player); - } - - @Override - public synchronized boolean removeViewer(@NotNull Player player) { - // Check not viewer - final boolean result = this.viewers.remove(player); - if (result) { - removeToPlayer(player); - } - // Remove from the map - removePlayer(player); - return result; - } - - @NotNull - @Override - public Set getViewers() { - return unmodifiableViewers; - } - - /** - * Gets the bossbar title. - * - * @return the current title of the bossbar - */ - @NotNull - public JsonMessage getTitle() { - return title; - } - - /** - * Changes the bossbar title. - * - * @param title the new title of the bossbar - */ - public void setTitle(@NotNull JsonMessage title) { - this.title = title; - updateTitle(); - } - - /** - * Gets the bossbar progress. - * - * @return the current progress of the bossbar - */ - public float getProgress() { - return progress; - } - - /** - * Changes the bossbar progress. - * - * @param progress the new progress bar percentage - * @throws IllegalArgumentException if {@code progress} is not between 0 and 1 - */ - public void setProgress(float progress) { - Check.argCondition(!MathUtils.isBetween(progress, 0, 1), - "BossBar progress percentage should be between 0 and 1"); - this.progress = progress; - updateProgress(); - } - - /** - * Gets the bossbar color. - * - * @return the current bossbar color - */ - @NotNull - public BarColor getColor() { - return color; - } - - /** - * Changes the bossbar color. - * - * @param color the new color of the bossbar - */ - public void setColor(@NotNull BarColor color) { - this.color = color; - updateStyle(); - } - - /** - * Gets the bossbar division. - * - * @return the current bossbar division - */ - @NotNull - public BarDivision getDivision() { - return division; - } - - /** - * Changes the bossbar division. - * - * @param division the new bossbar division count - */ - public void setDivision(@NotNull BarDivision division) { - this.division = division; - updateStyle(); - } - - /** - * Gets the bossbar flags. - * - * @return the flags - */ - public byte getFlags() { - return flags; - } - - /** - * Sets the bossbar flags. - * - * @param flags the bossbar flags - * @see Boss bar packet - */ - public void setFlags(byte flags) { - this.flags = flags; - } - - /** - * Deletes the boss bar and remove all of its viewers. - */ - public void delete() { - BossBarPacket bossBarPacket = new BossBarPacket(); - bossBarPacket.uuid = uuid; - bossBarPacket.action = BossBarPacket.Action.REMOVE; - sendPacketToViewers(bossBarPacket); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - BossBar bossBar = (BossBar) o; - return Objects.equals(uuid, bossBar.uuid); - } - - @Override - public int hashCode() { - return Objects.hash(uuid); - } - - /** - * Removes the player from the bossbar map. - * - * @param player the player to remove from the map - */ - private void removePlayer(@NotNull Player player) { - final UUID uuid = player.getUuid(); - if (!PLAYER_BOSSBAR_MAP.containsKey(uuid)) { - return; - } - Set bossBars = PLAYER_BOSSBAR_MAP.get(uuid); - bossBars.remove(this); - if (bossBars.isEmpty()) { - PLAYER_BOSSBAR_MAP.remove(uuid); - } - } - - /** - * Sends a {@link BossBarPacket} to create the bossbar. - *

- * Also add the bossbar to the player viewing list. - * - * @param player the player to create the bossbar to - */ - private void addToPlayer(@NotNull Player player) { - // Add to the map - Set bossBars = PLAYER_BOSSBAR_MAP.computeIfAbsent(player.getUuid(), p -> new HashSet<>()); - bossBars.add(this); - - BossBarPacket bossBarPacket = new BossBarPacket(); - bossBarPacket.uuid = uuid; - bossBarPacket.action = BossBarPacket.Action.ADD; - bossBarPacket.title = title.asComponent(); - bossBarPacket.health = progress; - bossBarPacket.color = color.asAdventureColor(); - bossBarPacket.overlay = division.asAdventureOverlay(); - bossBarPacket.flags = flags; - player.getPlayerConnection().sendPacket(bossBarPacket); - } - - /** - * Sends a {@link BossBarPacket} to remove the bossbar. - * - * @param player the player to remove the bossbar to - */ - private void removeToPlayer(@NotNull Player player) { - if (!player.isRemoved()) { - BossBarPacket bossBarPacket = new BossBarPacket(); - bossBarPacket.uuid = uuid; - bossBarPacket.action = BossBarPacket.Action.REMOVE; - player.getPlayerConnection().sendPacket(bossBarPacket); - } - } - - private void updateTitle() { - BossBarPacket bossBarPacket = new BossBarPacket(); - bossBarPacket.uuid = uuid; - bossBarPacket.action = BossBarPacket.Action.UPDATE_TITLE; - bossBarPacket.title = title.asComponent(); - sendPacketToViewers(bossBarPacket); - } - - private void updateProgress() { - BossBarPacket bossBarPacket = new BossBarPacket(); - bossBarPacket.uuid = uuid; - bossBarPacket.action = BossBarPacket.Action.UPDATE_HEALTH; - bossBarPacket.health = progress; - sendPacketToViewers(bossBarPacket); - } - - private void updateStyle() { - BossBarPacket bossBarPacket = new BossBarPacket(); - bossBarPacket.uuid = uuid; - bossBarPacket.action = BossBarPacket.Action.UPDATE_STYLE; - bossBarPacket.color = color.asAdventureColor(); - sendPacketToViewers(bossBarPacket); - } -} diff --git a/src/main/java/net/minestom/server/command/builder/Command.java b/src/main/java/net/minestom/server/command/builder/Command.java index e84cce5c3..d7907626d 100644 --- a/src/main/java/net/minestom/server/command/builder/Command.java +++ b/src/main/java/net/minestom/server/command/builder/Command.java @@ -4,8 +4,10 @@ import com.google.common.annotations.Beta; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import net.minestom.server.command.CommandSender; -import net.minestom.server.command.builder.arguments.*; -import net.minestom.server.command.builder.arguments.minecraft.SuggestionType; +import net.minestom.server.command.builder.arguments.Argument; +import net.minestom.server.command.builder.arguments.ArgumentLiteral; +import net.minestom.server.command.builder.arguments.ArgumentType; +import net.minestom.server.command.builder.arguments.ArgumentWord; import net.minestom.server.command.builder.condition.CommandCondition; import net.minestom.server.utils.StringUtils; import org.jetbrains.annotations.NotNull; @@ -285,19 +287,6 @@ public class Command { return syntaxes; } - /** - * Allows for tab auto completion, this is called everytime the player press a key in the chat - * when in a dynamic argument ({@link ArgumentDynamicWord} (when {@link SuggestionType#ASK_SERVER} is used) - * and {@link ArgumentDynamicStringArray}). - * - * @param sender the command sender - * @param text the whole player's text - * @return the array containing all the suggestion for the current arg (split SPACE), can be null - */ - public @Nullable String[] onDynamicWrite(@NotNull CommandSender sender, @NotNull String text) { - return null; - } - /** * Called when a {@link CommandSender} executes this command before any syntax callback. *

diff --git a/src/main/java/net/minestom/server/command/builder/arguments/Argument.java b/src/main/java/net/minestom/server/command/builder/arguments/Argument.java index 2b32ffa00..6f67e767a 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/Argument.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/Argument.java @@ -226,7 +226,6 @@ public abstract class Argument { * @param suggestionCallback The suggestion callback to set. * @return 'this' for chaining */ - @Beta public Argument setSuggestionCallback(@NotNull SuggestionCallback suggestionCallback) { this.suggestionCallback = suggestionCallback; return this; diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentDynamicStringArray.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentDynamicStringArray.java deleted file mode 100644 index c9084f849..000000000 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentDynamicStringArray.java +++ /dev/null @@ -1,72 +0,0 @@ -package net.minestom.server.command.builder.arguments; - -import net.minestom.server.command.CommandSender; -import net.minestom.server.command.builder.NodeMaker; -import net.minestom.server.command.builder.exception.ArgumentSyntaxException; -import net.minestom.server.command.builder.suggestion.SuggestionCallback; -import net.minestom.server.network.packet.server.play.DeclareCommandsPacket; -import net.minestom.server.utils.binary.BinaryWriter; -import net.minestom.server.utils.callback.validator.StringArrayValidator; -import net.minestom.server.utils.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * Same as {@link ArgumentStringArray} with the exception - * that this argument can trigger {@link net.minestom.server.command.builder.Command#onDynamicWrite(CommandSender, String)}. - * - * @deprecated Use {@link Argument#setSuggestionCallback(SuggestionCallback)} with any argument type you want - */ -@Deprecated -public class ArgumentDynamicStringArray extends Argument { - - public static final int RESTRICTION_ERROR = 1; - - private StringArrayValidator dynamicRestriction; - - public ArgumentDynamicStringArray(String id) { - super(id, true, true); - } - - @NotNull - @Override - public String[] parse(@NotNull String input) throws ArgumentSyntaxException { - final String[] value = input.split(StringUtils.SPACE); - - // true if 'value' is valid based on the dynamic restriction - final boolean restrictionCheck = dynamicRestriction == null || dynamicRestriction.isValid(value); - - if (!restrictionCheck) { - throw new ArgumentSyntaxException("Argument does not respect the dynamic restriction", input, RESTRICTION_ERROR); - } - - return value; - } - - @Override - public void processNodes(@NotNull NodeMaker nodeMaker, boolean executable) { - DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, true); - - argumentNode.parser = "brigadier:string"; - argumentNode.properties = BinaryWriter.makeArray(packetWriter -> { - packetWriter.writeVarInt(2); // Greedy phrase - }); - argumentNode.suggestionsType = "minecraft:ask_server"; - - nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode}); - } - - /** - * Sets the dynamic restriction of this dynamic argument. - *

- * Will be called once the argument condition is checked. - * - * @param dynamicRestriction the dynamic restriction, can be null to disable - * @return 'this' for chaining - */ - public ArgumentDynamicStringArray fromRestrictions(@Nullable StringArrayValidator dynamicRestriction) { - this.dynamicRestriction = dynamicRestriction; - return this; - } - -} diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentDynamicWord.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentDynamicWord.java deleted file mode 100644 index 2143e83e5..000000000 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentDynamicWord.java +++ /dev/null @@ -1,93 +0,0 @@ -package net.minestom.server.command.builder.arguments; - -import net.minestom.server.command.CommandSender; -import net.minestom.server.command.builder.NodeMaker; -import net.minestom.server.command.builder.arguments.minecraft.SuggestionType; -import net.minestom.server.command.builder.exception.ArgumentSyntaxException; -import net.minestom.server.command.builder.suggestion.SuggestionCallback; -import net.minestom.server.network.packet.server.play.DeclareCommandsPacket; -import net.minestom.server.utils.StringUtils; -import net.minestom.server.utils.binary.BinaryWriter; -import net.minestom.server.utils.callback.validator.StringValidator; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * Same as {@link ArgumentWord} with the exception - * that this argument can trigger {@link net.minestom.server.command.builder.Command#onDynamicWrite(CommandSender, String)} - * when the suggestion type is {@link SuggestionType#ASK_SERVER}, or any other suggestions available in the enum. - * - * @deprecated Use {@link Argument#setSuggestionCallback(SuggestionCallback)} with any argument type you want - */ -@Deprecated -public class ArgumentDynamicWord extends Argument { - - public static final int SPACE_ERROR = 1; - public static final int RESTRICTION_ERROR = 2; - - private final SuggestionType suggestionType; - - private StringValidator dynamicRestriction; - - public ArgumentDynamicWord(@NotNull String id, @NotNull SuggestionType suggestionType) { - super(id); - this.suggestionType = suggestionType; - } - - @NotNull - @Override - public String parse(@NotNull String input) throws ArgumentSyntaxException { - if (input.contains(StringUtils.SPACE)) - throw new ArgumentSyntaxException("Word cannot contain space characters", input, SPACE_ERROR); - - // true if 'value' is valid based on the dynamic restriction - final boolean restrictionCheck = dynamicRestriction == null || dynamicRestriction.isValid(input); - - if (!restrictionCheck) { - throw new ArgumentSyntaxException("Word does not respect the dynamic restriction", input, RESTRICTION_ERROR); - } - - return input; - } - - @Override - public void processNodes(@NotNull NodeMaker nodeMaker, boolean executable) { - DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(this, executable, false, true); - - final SuggestionType suggestionType = this.getSuggestionType(); - - argumentNode.parser = "brigadier:string"; - argumentNode.properties = BinaryWriter.makeArray(packetWriter -> { - packetWriter.writeVarInt(0); // Single word - }); - argumentNode.suggestionsType = suggestionType.getIdentifier(); - - nodeMaker.addNodes(new DeclareCommandsPacket.Node[]{argumentNode}); - } - - /** - * Gets the suggestion type of this argument. - *

- * Suggestions are only suggestion, this means that the end value could not be the expected one. - * - * @return this argument suggestion type - */ - @NotNull - public SuggestionType getSuggestionType() { - return suggestionType; - } - - /** - * Sets the dynamic restriction of this dynamic argument. - *

- * Will be called once the argument condition is checked. - * - * @param dynamicRestriction the dynamic restriction, can be null to disable - * @return 'this' for chaining - */ - @NotNull - public ArgumentDynamicWord fromRestrictions(@Nullable StringValidator dynamicRestriction) { - this.dynamicRestriction = dynamicRestriction; - return this; - } -} diff --git a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java index ef04d815e..16eaf03f3 100644 --- a/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java +++ b/src/main/java/net/minestom/server/command/builder/arguments/ArgumentType.java @@ -270,31 +270,4 @@ public class ArgumentType { public static ArgumentEntity Entities(@NotNull String id) { return new ArgumentEntity(id); } - - /** - * @see ArgumentDynamicWord - * @deprecated will be replaced soon - */ - @Deprecated - public static ArgumentDynamicWord DynamicWord(@NotNull String id, @NotNull SuggestionType suggestionType) { - return new ArgumentDynamicWord(id, suggestionType); - } - - /** - * @see ArgumentDynamicWord - * @deprecated will be replaced soon - */ - @Deprecated - public static ArgumentDynamicWord DynamicWord(@NotNull String id) { - return DynamicWord(id, SuggestionType.ASK_SERVER); - } - - /** - * @see ArgumentDynamicStringArray - * @deprecated will be replaced soon - */ - @Deprecated - public static ArgumentDynamicStringArray DynamicStringArray(@NotNull String id) { - return new ArgumentDynamicStringArray(id); - } } diff --git a/src/main/java/net/minestom/server/entity/Entity.java b/src/main/java/net/minestom/server/entity/Entity.java index 514d0229e..86d53501a 100644 --- a/src/main/java/net/minestom/server/entity/Entity.java +++ b/src/main/java/net/minestom/server/entity/Entity.java @@ -2,6 +2,7 @@ package net.minestom.server.entity; import com.google.common.annotations.Beta; import com.google.common.collect.Queues; +import net.kyori.adventure.sound.Sound; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.event.HoverEvent.ShowEntity; @@ -65,7 +66,7 @@ import java.util.function.UnaryOperator; *

* To create your own entity you probably want to extends {@link LivingEntity} or {@link EntityCreature} instead. */ -public class Entity implements Viewable, Tickable, EventHandler, DataContainer, PermissionHandler, HoverEventSource { +public class Entity implements Viewable, Tickable, EventHandler, DataContainer, PermissionHandler, HoverEventSource, Sound.Emitter { private static final Map ENTITY_BY_ID = new ConcurrentHashMap<>(); private static final Map ENTITY_BY_UUID = new ConcurrentHashMap<>(); diff --git a/src/main/java/net/minestom/server/entity/type/projectile/EntityProjectile.java b/src/main/java/net/minestom/server/entity/EntityProjectile.java similarity index 99% rename from src/main/java/net/minestom/server/entity/type/projectile/EntityProjectile.java rename to src/main/java/net/minestom/server/entity/EntityProjectile.java index 1e5227d79..712c3983b 100644 --- a/src/main/java/net/minestom/server/entity/type/projectile/EntityProjectile.java +++ b/src/main/java/net/minestom/server/entity/EntityProjectile.java @@ -1,4 +1,4 @@ -package net.minestom.server.entity.type.projectile; +package net.minestom.server.entity; import net.minestom.server.entity.Entity; import net.minestom.server.entity.EntityType; diff --git a/src/main/java/net/minestom/server/entity/ItemEntity.java b/src/main/java/net/minestom/server/entity/ItemEntity.java index c110740a0..8fdb5e69b 100644 --- a/src/main/java/net/minestom/server/entity/ItemEntity.java +++ b/src/main/java/net/minestom/server/entity/ItemEntity.java @@ -1,5 +1,6 @@ package net.minestom.server.entity; +import net.minestom.server.entity.metadata.item.ItemEntityMeta; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.entity.EntityItemMergeEvent; import net.minestom.server.instance.Chunk; @@ -18,7 +19,7 @@ import java.util.Set; /** * Represents an item on the ground. */ -public class ItemEntity extends ObjectEntity { +public class ItemEntity extends Entity { /** * Used to slow down the merge check delay @@ -42,6 +43,7 @@ public class ItemEntity extends ObjectEntity { public ItemEntity(@NotNull ItemStack itemStack, @NotNull Position spawnPosition) { super(EntityType.ITEM, spawnPosition); setItemStack(itemStack); + setGravity(0.02f, 0.04f, 1.96f); setBoundingBox(0.25f, 0.25f, 0.25f); } @@ -129,8 +131,8 @@ public class ItemEntity extends ObjectEntity { } @Override - public int getObjectData() { - return 1; + public @NotNull ItemEntityMeta getEntityMeta() { + return (ItemEntityMeta) super.getEntityMeta(); } /** @@ -150,7 +152,7 @@ public class ItemEntity extends ObjectEntity { */ public void setItemStack(@NotNull ItemStack itemStack) { this.itemStack = itemStack; - this.metadata.setIndex((byte) 7, Metadata.Slot(itemStack)); + getEntityMeta().setItem(itemStack); } /** diff --git a/src/main/java/net/minestom/server/entity/Metadata.java b/src/main/java/net/minestom/server/entity/Metadata.java index 5b86533e4..02cfa5422 100644 --- a/src/main/java/net/minestom/server/entity/Metadata.java +++ b/src/main/java/net/minestom/server/entity/Metadata.java @@ -1,6 +1,7 @@ package net.minestom.server.entity; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minestom.server.MinecraftServer; import net.minestom.server.chat.ColoredText; import net.minestom.server.chat.JsonMessage; diff --git a/src/main/java/net/minestom/server/entity/ObjectEntity.java b/src/main/java/net/minestom/server/entity/ObjectEntity.java deleted file mode 100644 index 50b46dd29..000000000 --- a/src/main/java/net/minestom/server/entity/ObjectEntity.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.minestom.server.entity; - -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.EntityMeta} that inherits - * {@link net.minestom.server.entity.metadata.ObjectDataProvider} instead. - */ -@Deprecated -public abstract class ObjectEntity extends Entity { - - public ObjectEntity(@NotNull EntityType entityType, @NotNull Position spawnPosition) { - super(entityType, spawnPosition); - setGravity(0.02f, 0.04f, 1.96f); - } - - /** - * Gets the data of this object entity. - * - * @return an object data - * @see here - */ - public abstract int getObjectData(); - - @Override - public void update(long time) { - - } - - @Override - public void spawn() { - - } - -} diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 95a034ddd..3c5e7539b 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -6,6 +6,7 @@ import net.kyori.adventure.bossbar.BossBar; import net.kyori.adventure.identity.Identified; import net.kyori.adventure.identity.Identity; import net.kyori.adventure.inventory.Book; +import net.kyori.adventure.pointer.Pointers; import net.kyori.adventure.sound.Sound; import net.kyori.adventure.sound.SoundStop; import net.kyori.adventure.text.Component; @@ -29,6 +30,7 @@ import net.minestom.server.command.CommandSender; import net.minestom.server.effects.Effects; import net.minestom.server.entity.damage.DamageType; import net.minestom.server.entity.fakeplayer.FakePlayer; +import net.minestom.server.entity.metadata.PlayerMeta; import net.minestom.server.entity.vehicle.PlayerVehicleInformation; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.inventory.InventoryOpenEvent; @@ -179,6 +181,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, // Adventure private Identity identity; + private final Pointers pointers; public Player(@NotNull UUID uuid, @NotNull String username, @NotNull PlayerConnection playerConnection) { super(EntityType.PLAYER, uuid); @@ -207,6 +210,11 @@ public class Player extends LivingEntity implements CommandSender, Localizable, playerConnectionInit(); this.identity = Identity.identity(uuid); + this.pointers = Pointers.builder() + .withDynamic(Identity.UUID, this::getUuid) + .withDynamic(Identity.NAME, this::getUsername) + .withDynamic(Identity.DISPLAY_NAME, this::getDisplayName) + .build(); } /** @@ -510,16 +518,6 @@ public class Player extends LivingEntity implements CommandSender, Localizable, if (getOpenInventory() != null) getOpenInventory().removeViewer(this); - // Boss bars cache - { - Set bossBars = net.minestom.server.bossbar.BossBar.getBossBars(this); - if (bossBars != null) { - for (net.minestom.server.bossbar.BossBar bossBar : bossBars) { - bossBar.removeViewer(this); - } - } - } - MinecraftServer.getBossBarManager().removeAllBossBars(this); // Advancement tabs cache @@ -833,7 +831,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, @Override public void playSound(@NotNull Sound sound) { - playerConnection.sendPacket(AdventurePacketConvertor.createEntitySoundPacket(sound, this)); + this.playSound(sound, this.position.getX(), this.position.getY(), this.position.getZ()); } @Override @@ -841,6 +839,19 @@ public class Player extends LivingEntity implements CommandSender, Localizable, playerConnection.sendPacket(AdventurePacketConvertor.createSoundPacket(sound, x, y, z)); } + @Override + public void playSound(@NotNull Sound sound, Sound.@NotNull Emitter emitter) { + final ServerPacket packet; + + if (emitter == Sound.Emitter.self()) { + packet = AdventurePacketConvertor.createSoundPacket(sound, this); + } else { + packet = AdventurePacketConvertor.createSoundPacket(sound, emitter); + } + + playerConnection.sendPacket(packet); + } + @Override public void stopSound(@NotNull SoundStop stop) { playerConnection.sendPacket(AdventurePacketConvertor.createSoundStopPacket(stop)); @@ -1037,13 +1048,18 @@ public class Player extends LivingEntity implements CommandSender, Localizable, sendUpdateHealthPacket(); } + @Override + public @NotNull PlayerMeta getEntityMeta() { + return (PlayerMeta) super.getEntityMeta(); + } + /** * Gets the player additional hearts. * * @return the player additional hearts */ public float getAdditionalHearts() { - return metadata.getIndex((byte) 14, 0f); + return getEntityMeta().getAdditionalHearts(); } /** @@ -1052,7 +1068,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, * @param additionalHearts the count of additional hearts */ public void setAdditionalHearts(float additionalHearts) { - this.metadata.setIndex((byte) 14, Metadata.Float(additionalHearts)); + getEntityMeta().setAdditionalHearts(additionalHearts); } /** @@ -2504,6 +2520,11 @@ public class Player extends LivingEntity implements CommandSender, Localizable, return this.identity; } + @Override + public @NotNull Pointers pointers() { + return this.pointers; + } + @Override public void setUuid(@NotNull UUID uuid) { super.setUuid(uuid); diff --git a/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java b/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java index c1d26a8b9..88dcfd66e 100644 --- a/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java +++ b/src/main/java/net/minestom/server/entity/ai/goal/CombinedAttackGoal.java @@ -5,7 +5,7 @@ import net.minestom.server.entity.EntityCreature; import net.minestom.server.entity.EntityType; import net.minestom.server.entity.ai.GoalSelector; import net.minestom.server.entity.pathfinding.Navigator; -import net.minestom.server.entity.type.projectile.EntityProjectile; +import net.minestom.server.entity.EntityProjectile; import net.minestom.server.utils.Position; import net.minestom.server.utils.time.Cooldown; import net.minestom.server.utils.time.TimeUnit; diff --git a/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java b/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java index 56f85ed0e..4332ac8bd 100644 --- a/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java +++ b/src/main/java/net/minestom/server/entity/ai/goal/RangedAttackGoal.java @@ -5,7 +5,7 @@ import net.minestom.server.entity.EntityCreature; import net.minestom.server.entity.EntityType; import net.minestom.server.entity.ai.GoalSelector; import net.minestom.server.entity.pathfinding.Navigator; -import net.minestom.server.entity.type.projectile.EntityProjectile; +import net.minestom.server.entity.EntityProjectile; import net.minestom.server.utils.Position; import net.minestom.server.utils.time.Cooldown; import net.minestom.server.utils.time.TimeUnit; diff --git a/src/main/java/net/minestom/server/entity/hologram/Hologram.java b/src/main/java/net/minestom/server/entity/hologram/Hologram.java index 22d4c7596..fc18fa61d 100644 --- a/src/main/java/net/minestom/server/entity/hologram/Hologram.java +++ b/src/main/java/net/minestom/server/entity/hologram/Hologram.java @@ -3,8 +3,10 @@ package net.minestom.server.entity.hologram; import net.kyori.adventure.text.Component; import net.minestom.server.Viewable; import net.minestom.server.chat.JsonMessage; +import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityType; import net.minestom.server.entity.Player; -import net.minestom.server.entity.type.decoration.EntityArmorStand; +import net.minestom.server.entity.metadata.other.ArmorStandMeta; import net.minestom.server.instance.Instance; import net.minestom.server.utils.Position; import net.minestom.server.utils.validate.Check; @@ -19,7 +21,7 @@ public class Hologram implements Viewable { private static final float OFFSET_Y = -0.9875f; - private final HologramEntity entity; + private final Entity entity; private Position position; private Component text; @@ -73,8 +75,21 @@ public class Hologram implements Viewable { * @param autoViewable {@code true}if the hologram should be visible automatically, otherwise {@code false}. */ public Hologram(Instance instance, Position spawnPosition, Component text, boolean autoViewable) { - this.entity = new HologramEntity(spawnPosition.clone().add(0, OFFSET_Y, 0)); - this.entity.setInstance(instance); + this.entity = new Entity(EntityType.ARMOR_STAND); + + ArmorStandMeta armorStandMeta = (ArmorStandMeta) entity.getEntityMeta(); + + armorStandMeta.setNotifyAboutChanges(false); + + armorStandMeta.setSmall(true); + armorStandMeta.setHasNoGravity(true); + armorStandMeta.setCustomName(Component.empty()); + armorStandMeta.setCustomNameVisible(true); + armorStandMeta.setInvisible(true); + + armorStandMeta.setNotifyAboutChanges(true); + + this.entity.setInstance(instance, spawnPosition.clone().add(0, OFFSET_Y, 0)); this.entity.setAutoViewable(autoViewable); this.position = spawnPosition; @@ -166,7 +181,7 @@ public class Hologram implements Viewable { * * @return the hologram entity */ - public HologramEntity getEntity() { + public Entity getEntity() { return entity; } @@ -201,24 +216,4 @@ public class Hologram implements Viewable { private void checkRemoved() { Check.stateCondition(isRemoved(), "You cannot interact with a removed Hologram"); } - - - public static class HologramEntity extends EntityArmorStand { - - /** - * Constructs a new {@link HologramEntity} with the given {@code spawnPosition}. - * - * @param spawnPosition The spawn position of this hologram entity. - */ - public HologramEntity(Position spawnPosition) { - super(spawnPosition); - setSmall(true); - - setNoGravity(true); - setCustomName(Component.empty()); - setCustomNameVisible(true); - setInvisible(true); - } - - } } diff --git a/src/main/java/net/minestom/server/entity/type/Ageable.java b/src/main/java/net/minestom/server/entity/type/Ageable.java deleted file mode 100644 index a402447aa..000000000 --- a/src/main/java/net/minestom/server/entity/type/Ageable.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.minestom.server.entity.type; - -public interface Ageable { - - boolean isBaby(); - - void setBaby(boolean value); - -} diff --git a/src/main/java/net/minestom/server/entity/type/AgeableCreature.java b/src/main/java/net/minestom/server/entity/type/AgeableCreature.java deleted file mode 100644 index ace7a0078..000000000 --- a/src/main/java/net/minestom/server/entity/type/AgeableCreature.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.minestom.server.entity.type; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.instance.Instance; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class AgeableCreature extends EntityCreature implements Ageable { - - protected AgeableCreature(@NotNull EntityType entityType, @NotNull Position spawnPosition) { - super(entityType, spawnPosition); - } - - protected AgeableCreature(@NotNull EntityType entityType, @NotNull Position spawnPosition, @Nullable Instance instance) { - super(entityType, spawnPosition, instance); - } - - @Override - public boolean isBaby() { - return this.metadata.getIndex((byte) 15, false); - } - - @Override - public void setBaby(boolean value) { - this.metadata.setIndex((byte) 15, Metadata.Boolean(value)); - } - - @Override - public double getEyeHeight() { - return isBaby() ? super.getEyeHeight() / 2 : super.getEyeHeight(); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/Animal.java b/src/main/java/net/minestom/server/entity/type/Animal.java deleted file mode 100644 index db2df4236..000000000 --- a/src/main/java/net/minestom/server/entity/type/Animal.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.minestom.server.entity.type; - -public interface Animal extends Ageable { -} diff --git a/src/main/java/net/minestom/server/entity/type/Constructable.java b/src/main/java/net/minestom/server/entity/type/Constructable.java deleted file mode 100644 index 59e4df64e..000000000 --- a/src/main/java/net/minestom/server/entity/type/Constructable.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.minestom.server.entity.type; - -public interface Constructable { -} diff --git a/src/main/java/net/minestom/server/entity/type/Monster.java b/src/main/java/net/minestom/server/entity/type/Monster.java deleted file mode 100644 index 3c6220e28..000000000 --- a/src/main/java/net/minestom/server/entity/type/Monster.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.minestom.server.entity.type; - -public interface Monster { -} diff --git a/src/main/java/net/minestom/server/entity/type/TameableAnimal.java b/src/main/java/net/minestom/server/entity/type/TameableAnimal.java deleted file mode 100644 index 62bec4516..000000000 --- a/src/main/java/net/minestom/server/entity/type/TameableAnimal.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.minestom.server.entity.type; - -public interface TameableAnimal extends Animal { -} diff --git a/src/main/java/net/minestom/server/entity/type/TameableAnimalCreature.java b/src/main/java/net/minestom/server/entity/type/TameableAnimalCreature.java deleted file mode 100644 index 186d55c80..000000000 --- a/src/main/java/net/minestom/server/entity/type/TameableAnimalCreature.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.minestom.server.entity.type; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.instance.Instance; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.UUID; - -public class TameableAnimalCreature extends AgeableCreature implements TameableAnimal { - - private final static byte SITTING_BIT = 0x1; - private final static byte TAMED_BIT = 0x4; - - protected TameableAnimalCreature(@NotNull EntityType entityType, @NotNull Position spawnPosition) { - super(entityType, spawnPosition); - } - - protected TameableAnimalCreature(@NotNull EntityType entityType, @NotNull Position spawnPosition, @Nullable Instance instance) { - super(entityType, spawnPosition, instance); - } - - public boolean isSitting() { - return (getMask() & SITTING_BIT) != 0; - } - - public void setSitting(boolean value) { - modifyMask(SITTING_BIT, value); - } - - public boolean isTamed() { - return (getMask() & TAMED_BIT) != 0; - } - - public void setTamed(boolean value) { - modifyMask(TAMED_BIT, value); - } - - public UUID getOwner() { - return this.metadata.getIndex((byte) 17, null); - } - - public void setOwner(UUID value) { - this.metadata.setIndex((byte) 17, Metadata.OptUUID(value)); - } - - private byte getMask() { - return this.metadata.getIndex((byte) 16, (byte) 0); - } - - private void setMask(byte mask) { - this.metadata.setIndex((byte) 16, Metadata.Byte(mask)); - } - - private void modifyMask(byte bit, boolean value) { - byte mask = getMask(); - boolean isPresent = (mask & bit) == bit; - if (isPresent == value) { - return; - } - if (value) { - mask |= bit; - } else { - mask &= ~bit; - } - setMask(mask); - } - -} diff --git a/src/main/java/net/minestom/server/entity/type/Vehicle.java b/src/main/java/net/minestom/server/entity/type/Vehicle.java deleted file mode 100644 index 00f5cca78..000000000 --- a/src/main/java/net/minestom/server/entity/type/Vehicle.java +++ /dev/null @@ -1,4 +0,0 @@ -package net.minestom.server.entity.type; - -public interface Vehicle { -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityBee.java b/src/main/java/net/minestom/server/entity/type/animal/EntityBee.java deleted file mode 100644 index 4128ab86a..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityBee.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.BeeMeta} instead. - */ -@Deprecated -public class EntityBee extends AgeableCreature implements Animal { - public EntityBee(Position spawnPosition) { - super(EntityType.BEE, spawnPosition); - setBoundingBox(0.7f, 0.6f, 0.7f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityCat.java b/src/main/java/net/minestom/server/entity/type/animal/EntityCat.java deleted file mode 100644 index a22079b0a..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityCat.java +++ /dev/null @@ -1,74 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.TameableAnimalCreature; -import net.minestom.server.instance.Instance; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.tameable.CatMeta} instead. - */ -@Deprecated -public class EntityCat extends TameableAnimalCreature { - - public EntityCat(@NotNull Position spawnPosition) { - super(EntityType.CAT, spawnPosition); - setBoundingBox(.6D, .7D, .6D); - } - - public EntityCat(@NotNull Position spawnPosition, @Nullable Instance instance) { - super(EntityType.CAT, spawnPosition, instance); - setBoundingBox(.6D, .7D, .6D); - } - - public Color getColor() { - return Color.VALUES[this.metadata.getIndex((byte) 18, 1)]; - } - - public void setColor(Color value) { - this.metadata.setIndex((byte) 18, Metadata.VarInt(value.ordinal())); - } - - public boolean isLying() { - return this.metadata.getIndex((byte) 19, false); - } - - public void setLying(boolean value) { - this.metadata.setIndex((byte) 19, Metadata.Boolean(value)); - } - - public boolean isRelaxed() { - return this.metadata.getIndex((byte) 20, false); - } - - public void setRelaxed(boolean value) { - this.metadata.setIndex((byte) 20, Metadata.Boolean(value)); - } - - public int getCollarColor() { - return this.metadata.getIndex((byte) 21, 14); - } - - public void setCollarColor(int value) { - this.metadata.setIndex((byte) 21, Metadata.VarInt(value)); - } - - public enum Color { - TABBY, - BLACK, - RED, - SIAMESE, - BRITISH_SHORTHAIR, - CALICO, - PERSIAN, - RAGDOLL, - WHITE, - JELLIE, - ALL_BLACK; - - private final static Color[] VALUES = values(); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityChicken.java b/src/main/java/net/minestom/server/entity/type/animal/EntityChicken.java deleted file mode 100644 index e7306d8a1..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityChicken.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.ChickenMeta} instead. - */ -@Deprecated -public class EntityChicken extends AgeableCreature implements Animal { - public EntityChicken(Position spawnPosition) { - super(EntityType.CHICKEN, spawnPosition); - setBoundingBox(0.4f, 0.7f, 0.4f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityCow.java b/src/main/java/net/minestom/server/entity/type/animal/EntityCow.java deleted file mode 100644 index 228a9614a..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityCow.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.CowMeta} instead. - */ -@Deprecated -public class EntityCow extends AgeableCreature implements Animal { - public EntityCow(Position spawnPosition) { - super(EntityType.COW, spawnPosition); - setBoundingBox(0.9f, 1.4f, 0.9f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityDolphin.java b/src/main/java/net/minestom/server/entity/type/animal/EntityDolphin.java deleted file mode 100644 index 56a51db92..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityDolphin.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.water.DolphinMeta} instead. - */ -@Deprecated -public class EntityDolphin extends AgeableCreature implements Animal { - public EntityDolphin(Position spawnPosition) { - super(EntityType.DOLPHIN, spawnPosition); - setBoundingBox(0.9f, 0.6f, 0.9f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityFox.java b/src/main/java/net/minestom/server/entity/type/animal/EntityFox.java deleted file mode 100644 index 8b79e65a6..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityFox.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.FoxMeta} instead. - */ -@Deprecated -public class EntityFox extends AgeableCreature implements Animal { - public EntityFox(Position spawnPosition) { - super(EntityType.FOX, spawnPosition); - setBoundingBox(0.6f, 0.7f, 0.6f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityLlama.java b/src/main/java/net/minestom/server/entity/type/animal/EntityLlama.java deleted file mode 100644 index da945b483..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityLlama.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.instance.Instance; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.LlamaMeta} instead. - */ -@Deprecated -public class EntityLlama extends EntityCreature { - - public EntityLlama(@NotNull Position spawnPosition) { - super(EntityType.LLAMA, spawnPosition); - setBoundingBox(.9D, 1.87D, .9D); - } - - public EntityLlama(@NotNull Position spawnPosition, @Nullable Instance instance) { - super(EntityType.LLAMA, spawnPosition, instance); - setBoundingBox(.9D, 1.87D, .9D); - } - -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityMooshroom.java b/src/main/java/net/minestom/server/entity/type/animal/EntityMooshroom.java deleted file mode 100644 index 368947ae1..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityMooshroom.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.MooshroomMeta} instead. - */ -@Deprecated -public class EntityMooshroom extends AgeableCreature implements Animal { - - public EntityMooshroom(Position spawnPosition) { - super(EntityType.MOOSHROOM, spawnPosition); - setBoundingBox(0.9f, 1.4f, 0.9f); - } - - public MooshroomType getMooshroomType() { - final String identifier = metadata.getIndex((byte) 16, "red"); - return MooshroomType.fromIdentifier(identifier); - } - - public void setMooshroomType(@NotNull MooshroomType mooshroomType) { - this.metadata.setIndex((byte) 16, Metadata.String(mooshroomType.getIdentifier())); - } - - public enum MooshroomType { - RED("red"), - BROWN("brown"); - - private final String identifier; - - MooshroomType(String identifier) { - this.identifier = identifier; - } - - @NotNull - private String getIdentifier() { - return identifier; - } - - public static MooshroomType fromIdentifier(String identifier) { - if (identifier.equals("red")) { - return RED; - } else if (identifier.equals("brown")) { - return BROWN; - } - throw new IllegalArgumentException("Weird thing happened"); - } - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityOcelot.java b/src/main/java/net/minestom/server/entity/type/animal/EntityOcelot.java deleted file mode 100644 index 0d08f19bf..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityOcelot.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.OcelotMeta} instead. - */ -@Deprecated -public class EntityOcelot extends AgeableCreature implements Animal { - public EntityOcelot(Position spawnPosition) { - super(EntityType.OCELOT, spawnPosition); - setBoundingBox(0.6f, 0.7f, 0.6f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityPanda.java b/src/main/java/net/minestom/server/entity/type/animal/EntityPanda.java deleted file mode 100644 index 11709f376..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityPanda.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.PandaMeta} instead. - */ -@Deprecated -public class EntityPanda extends AgeableCreature implements Animal { - public EntityPanda(Position spawnPosition) { - super(EntityType.PANDA, spawnPosition); - setBoundingBox(1.3f, 1.25f, 1.3f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityPig.java b/src/main/java/net/minestom/server/entity/type/animal/EntityPig.java deleted file mode 100644 index 59acb3728..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityPig.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.PigMeta} instead. - */ -@Deprecated -public class EntityPig extends AgeableCreature implements Animal { - - public EntityPig(Position spawnPosition) { - super(EntityType.PIG, spawnPosition); - setBoundingBox(0.9f, 0.9f, 0.9f); - } - - /** - * Gets if the pig has a saddle. - * - * @return true if the pig has a saddle, false otherwise - */ - public boolean hasSaddle() { - return metadata.getIndex((byte) 16, false); - } - - /** - * Sets a saddle to the pig. - * - * @param saddle true to add a saddle, false to remove it - */ - public void setSaddle(boolean saddle) { - this.metadata.setIndex((byte) 16, Metadata.Boolean(saddle)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityPolarBear.java b/src/main/java/net/minestom/server/entity/type/animal/EntityPolarBear.java deleted file mode 100644 index ebb0ab8f2..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityPolarBear.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.PolarBearMeta} instead. - */ -@Deprecated -public class EntityPolarBear extends AgeableCreature implements Animal { - - public EntityPolarBear(Position spawnPosition) { - super(EntityType.POLAR_BEAR, spawnPosition); - setBoundingBox(1.3f, 1.4f, 1.3f); - } - - public boolean isStandingUp() { - return metadata.getIndex((byte) 16, false); - } - - public void setStandingUp(boolean standingUp) { - this.metadata.setIndex((byte) 16, Metadata.Boolean(standingUp)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/animal/EntityRabbit.java b/src/main/java/net/minestom/server/entity/type/animal/EntityRabbit.java deleted file mode 100644 index 841d4e6a4..000000000 --- a/src/main/java/net/minestom/server/entity/type/animal/EntityRabbit.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.animal; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.AgeableCreature; -import net.minestom.server.entity.type.Animal; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.animal.RabbitMeta} instead. - */ -@Deprecated -public class EntityRabbit extends AgeableCreature implements Animal { - - public EntityRabbit(Position spawnPosition) { - super(EntityType.RABBIT, spawnPosition); - setBoundingBox(0.4f, 0.5f, 0.4f); - } - - public int getType() { - return metadata.getIndex((byte) 16, 0); - } - - public void setType(int type) { - this.metadata.setIndex((byte) 16, Metadata.VarInt(type)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java b/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java deleted file mode 100644 index 0942c646f..000000000 --- a/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java +++ /dev/null @@ -1,244 +0,0 @@ -package net.minestom.server.entity.type.decoration; - -import net.minestom.server.entity.*; -import net.minestom.server.event.EventDispatcher; -import net.minestom.server.event.item.EntityEquipEvent; -import net.minestom.server.inventory.EquipmentHandler; -import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.Position; -import net.minestom.server.utils.Vector; -import net.minestom.server.utils.binary.BitmaskUtil; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.other.ArmorStandMeta} instead. - */ -@Deprecated -public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { - - // Equipments - private ItemStack mainHandItem; - private ItemStack offHandItem; - - private ItemStack helmet; - private ItemStack chestplate; - private ItemStack leggings; - private ItemStack boots; - - public EntityArmorStand(Position spawnPosition) { - super(EntityType.ARMOR_STAND, spawnPosition); - - // Refresh BoundingBox - setSmall(false); - - setHeadRotation(new Vector(0, 0, 0)); - setBodyRotation(new Vector(0, 0, 0)); - setLeftArmRotation(new Vector(-10f, 0, -10f)); - setRightArmRotation(new Vector(-15f, 0, -10f)); - setLeftLegRotation(new Vector(-1f, 0, -1f)); - setRightLegRotation(new Vector(1, 0, 1)); - - this.mainHandItem = ItemStack.AIR; - this.offHandItem = ItemStack.AIR; - - this.helmet = ItemStack.AIR; - this.chestplate = ItemStack.AIR; - this.leggings = ItemStack.AIR; - this.boots = ItemStack.AIR; - - } - - @Override - protected boolean addViewer0(@NotNull Player player) { - if (!super.addViewer0(player)) { - return false; - } - player.getPlayerConnection().sendPacket(getEquipmentsPacket()); - return true; - } - - @Override - public int getObjectData() { - return 0; - } - - @NotNull - @Override - public ItemStack getItemInMainHand() { - return mainHandItem; - } - - @Override - public void setItemInMainHand(@NotNull ItemStack itemStack) { - this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); - syncEquipment(EquipmentSlot.MAIN_HAND); - } - - @NotNull - @Override - public ItemStack getItemInOffHand() { - return offHandItem; - } - - @Override - public void setItemInOffHand(@NotNull ItemStack itemStack) { - this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); - syncEquipment(EquipmentSlot.OFF_HAND); - } - - @NotNull - @Override - public ItemStack getHelmet() { - return helmet; - } - - @Override - public void setHelmet(@NotNull ItemStack itemStack) { - this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); - syncEquipment(EquipmentSlot.HELMET); - } - - @NotNull - @Override - public ItemStack getChestplate() { - return chestplate; - } - - @Override - public void setChestplate(@NotNull ItemStack itemStack) { - this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); - syncEquipment(EquipmentSlot.CHESTPLATE); - } - - @NotNull - @Override - public ItemStack getLeggings() { - return leggings; - } - - @Override - public void setLeggings(@NotNull ItemStack itemStack) { - this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); - syncEquipment(EquipmentSlot.LEGGINGS); - } - - @NotNull - @Override - public ItemStack getBoots() { - return boots; - } - - @Override - public void setBoots(@NotNull ItemStack itemStack) { - this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); - syncEquipment(EquipmentSlot.BOOTS); - } - - public boolean isSmall() { - return (getStateMeta() & 0x01) != 0; - } - - public void setSmall(boolean small) { - final byte state = BitmaskUtil.changeBit(getStateMeta(), (byte) 0x01, (byte) (small ? 1 : 0), (byte) 0); - this.metadata.setIndex((byte) 14, Metadata.Byte(state)); - - if (small) { - setBoundingBox(0.25f, 0.9875f, 0.25f); - } else { - setBoundingBox(0.5f, 1.975f, 0.5f); - } - } - - public boolean hasArms() { - return (getStateMeta() & 0x04) != 0; - } - - public void setHasArms(boolean hasArms) { - final byte state = BitmaskUtil.changeBit(getStateMeta(), (byte) 0x08, (byte) (hasArms ? 1 : 0), (byte) 2); - this.metadata.setIndex((byte) 14, Metadata.Byte(state)); - } - - public boolean hasNoBasePlate() { - return (getStateMeta() & 0x08) != 0; - } - - public void setNoBasePlate(boolean noBasePlate) { - final byte state = BitmaskUtil.changeBit(getStateMeta(), (byte) 0x10, (byte) (noBasePlate ? 1 : 0), (byte) 3); - this.metadata.setIndex((byte) 14, Metadata.Byte(state)); - } - - public boolean hasMarker() { - return (getStateMeta() & 0x10) != 0; - } - - public void setMarker(boolean setMarker) { - final byte state = BitmaskUtil.changeBit(getStateMeta(), (byte) 0x20, (byte) (setMarker ? 1 : 0), (byte) 4); - this.metadata.setIndex((byte) 14, Metadata.Byte(state)); - } - - @NotNull - public Vector getHeadRotation() { - return metadata.getIndex((byte) 15, new Vector(0, 0, 0)); - } - - public void setHeadRotation(@NotNull Vector headRotation) { - this.metadata.setIndex((byte) 15, Metadata.Rotation(headRotation)); - } - - @NotNull - public Vector getBodyRotation() { - return metadata.getIndex((byte) 16, new Vector(0, 0, 0)); - } - - public void setBodyRotation(@NotNull Vector bodyRotation) { - this.metadata.setIndex((byte) 16, Metadata.Rotation(bodyRotation)); - } - - @NotNull - public Vector getLeftArmRotation() { - return metadata.getIndex((byte) 17, new Vector(-10, 0, -10)); - } - - public void setLeftArmRotation(@NotNull Vector leftArmRotation) { - this.metadata.setIndex((byte) 17, Metadata.Rotation(leftArmRotation)); - } - - @NotNull - public Vector getRightArmRotation() { - return metadata.getIndex((byte) 18, new Vector(-15, 0, 10)); - } - - public void setRightArmRotation(@NotNull Vector rightArmRotation) { - this.metadata.setIndex((byte) 18, Metadata.Rotation(rightArmRotation)); - } - - @NotNull - public Vector getLeftLegRotation() { - return metadata.getIndex((byte) 19, new Vector(-1, 0, -1)); - } - - public void setLeftLegRotation(@NotNull Vector leftLegRotation) { - this.metadata.setIndex((byte) 19, Metadata.Rotation(leftLegRotation)); - } - - @NotNull - public Vector getRightLegRotation() { - return metadata.getIndex((byte) 20, new Vector(1, 0, 1)); - } - - public void setRightLegRotation(@NotNull Vector rightLegRotation) { - this.metadata.setIndex((byte) 20, Metadata.Rotation(rightLegRotation)); - } - - private byte getStateMeta() { - return metadata.getIndex((byte) 14, (byte) 0); - } - - // Equipments - - private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull EquipmentSlot slot) { - EntityEquipEvent entityEquipEvent = new EntityEquipEvent(this, itemStack, slot); - EventDispatcher.call(entityEquipEvent); - return entityEquipEvent.getEquippedItem(); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/decoration/EntityItemFrame.java b/src/main/java/net/minestom/server/entity/type/decoration/EntityItemFrame.java deleted file mode 100644 index f3fd2ffe5..000000000 --- a/src/main/java/net/minestom/server/entity/type/decoration/EntityItemFrame.java +++ /dev/null @@ -1,80 +0,0 @@ -package net.minestom.server.entity.type.decoration; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.ObjectEntity; -import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.Position; -import net.minestom.server.utils.Rotation; -import org.jetbrains.annotations.NotNull; - -// FIXME: https://wiki.vg/Object_Data#Item_Frame_.28id_71.29 -// "You have to set both Orientation and Yaw/Pitch accordingly, otherwise it will not work." - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.other.ItemFrameMeta} instead. - */ -@Deprecated -public class EntityItemFrame extends ObjectEntity { - - private final ItemFrameOrientation orientation; - - public EntityItemFrame(@NotNull Position spawnPosition, @NotNull ItemFrameOrientation orientation) { - super(EntityType.ITEM_FRAME, spawnPosition); - this.orientation = orientation; - setNoGravity(true); - setGravity(0f, 0f, 0f); - } - - @Override - public int getObjectData() { - return orientation.ordinal(); - } - - /** - * Gets the item stack in the frame. - * - * @return the item stack in the frame - */ - @NotNull - public ItemStack getItemStack() { - return metadata.getIndex((byte) 7, ItemStack.AIR); - } - - /** - * Changes the item stack in the frame. - * - * @param itemStack the new item stack in the frame - */ - public void setItemStack(@NotNull ItemStack itemStack) { - this.metadata.setIndex((byte) 7, Metadata.Slot(itemStack)); - } - - /** - * Gets the item rotation. - * - * @return the item rotation - */ - @NotNull - public Rotation getRotation() { - final int ordinal = metadata.getIndex((byte) 8, 0); - return Rotation.values()[ordinal]; - } - - /** - * Changes the item rotation. - * - * @param rotation the new item rotation - */ - public void setRotation(@NotNull Rotation rotation) { - this.metadata.setIndex((byte) 8, Metadata.VarInt(rotation.ordinal())); - } - - /** - * Represents the orientation of the frame. - */ - public enum ItemFrameOrientation { - DOWN, UP, NORTH, SOUTH, WEST, EAST - } - -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityBlaze.java b/src/main/java/net/minestom/server/entity/type/monster/EntityBlaze.java deleted file mode 100644 index c3620c5d4..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityBlaze.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.BlazeMeta} instead. - */ -@Deprecated -public class EntityBlaze extends EntityCreature implements Monster { - - public EntityBlaze(Position spawnPosition) { - super(EntityType.BLAZE, spawnPosition); - setBoundingBox(0.6f, 1.8f, 0.6f); - } - - @Override - public void setOnFire(boolean fire) { - super.setOnFire(fire); - this.metadata.setIndex((byte) 15, Metadata.Byte((byte) (fire ? 1 : 0))); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityCaveSpider.java b/src/main/java/net/minestom/server/entity/type/monster/EntityCaveSpider.java deleted file mode 100644 index 2ab612f89..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityCaveSpider.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.SpiderMeta} instead. - */ -@Deprecated -public class EntityCaveSpider extends EntityCreature implements Monster { - public EntityCaveSpider(Position spawnPosition) { - super(EntityType.CAVE_SPIDER, spawnPosition); - setBoundingBox(0.7f, 0.5f, 0.7f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityCreeper.java b/src/main/java/net/minestom/server/entity/type/monster/EntityCreeper.java deleted file mode 100644 index 4ac1bb2df..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityCreeper.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.CreeperMeta} instead. - */ -@Deprecated -public class EntityCreeper extends EntityCreature implements Monster { - - public EntityCreeper(Position spawnPosition) { - super(EntityType.CREEPER, spawnPosition); - setBoundingBox(0.6f, 1.7f, 0.6f); - } - - @NotNull - public CreeperState getCreeperState() { - final int state = metadata.getIndex((byte) 15, -1); - return CreeperState.fromState(state); - } - - public void setCreeperState(@NotNull CreeperState creeperState) { - this.metadata.setIndex((byte) 15, Metadata.VarInt(creeperState.getState())); - } - - public boolean isCharged() { - return metadata.getIndex((byte) 16, false); - } - - public void setCharged(boolean charged) { - this.metadata.setIndex((byte) 16, Metadata.Boolean(charged)); - } - - public boolean isIgnited() { - return metadata.getIndex((byte) 17, false); - } - - public void setIgnited(boolean ignited) { - this.metadata.setIndex((byte) 17, Metadata.Boolean(ignited)); - } - - public enum CreeperState { - IDLE(-1), - FUSE(1); - - private final int state; - - CreeperState(int state) { - this.state = state; - } - - private int getState() { - return state; - } - - private static CreeperState fromState(int state) { - if (state == -1) { - return IDLE; - } else if (state == 1) { - return FUSE; - } - throw new IllegalArgumentException("Weird thing happened"); - } - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityEndermite.java b/src/main/java/net/minestom/server/entity/type/monster/EntityEndermite.java deleted file mode 100644 index 85cc67445..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityEndermite.java +++ /dev/null @@ -1,18 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.metadata.monster.EndermiteMeta; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link EndermiteMeta} instead. - */ -@Deprecated -public class EntityEndermite extends EntityCreature implements Monster { - public EntityEndermite(Position spawnPosition) { - super(EntityType.ENDERMITE, spawnPosition); - setBoundingBox(0.4f, 0.3f, 0.4f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityGhast.java b/src/main/java/net/minestom/server/entity/type/monster/EntityGhast.java deleted file mode 100644 index 2e318f404..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityGhast.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.flying.GhastMeta} instead. - */ -@Deprecated -public class EntityGhast extends EntityCreature implements Monster { - - public EntityGhast(Position spawnPosition) { - super(EntityType.GHAST, spawnPosition); - setBoundingBox(4, 4, 4); - } - - public boolean isAttacking() { - return metadata.getIndex((byte) 15, false); - } - - public void setAttacking(boolean attacking) { - this.metadata.setIndex((byte) 15, Metadata.Boolean(attacking)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityGiant.java b/src/main/java/net/minestom/server/entity/type/monster/EntityGiant.java deleted file mode 100644 index 8fc470d3c..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityGiant.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.GiantMeta} instead. - */ -@Deprecated -public class EntityGiant extends EntityCreature implements Monster { - public EntityGiant(Position spawnPosition) { - super(EntityType.GIANT, spawnPosition); - setBoundingBox(3.6f, 10.8f, 3.6f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityGuardian.java b/src/main/java/net/minestom/server/entity/type/monster/EntityGuardian.java deleted file mode 100644 index 23b34a76a..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityGuardian.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.Entity; -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.instance.Instance; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.GuardianMeta} instead. - */ -@Deprecated -public class EntityGuardian extends EntityCreature implements Monster { - - private Entity target; - - public EntityGuardian(@NotNull Position spawnPosition) { - super(EntityType.GUARDIAN, spawnPosition); - setBoundingBox(0.85f, 0.85f, 0.85f); - } - - public EntityGuardian(@NotNull Position spawnPosition, @Nullable Instance instance) { - super(EntityType.GUARDIAN, spawnPosition, instance); - setBoundingBox(0.85f, 0.85f, 0.85f); - } - - EntityGuardian(@NotNull EntityType entityType, @NotNull Position spawnPosition) { - super(entityType, spawnPosition); - } - - EntityGuardian(@NotNull EntityType entityType, @NotNull Position spawnPosition, @Nullable Instance instance) { - super(entityType, spawnPosition, instance); - } - - public boolean isRetractingSpikes() { - return metadata.getIndex((byte) 15, false); - } - - public void setRetractingSpikes(boolean retractingSpikes) { - this.metadata.setIndex((byte) 15, Metadata.Boolean(retractingSpikes)); - } - - public Entity getTarget() { - return target; - } - - public void setTarget(@NotNull Entity target) { - this.target = target; - this.metadata.setIndex((byte) 16, Metadata.VarInt(target.getEntityId())); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityPhantom.java b/src/main/java/net/minestom/server/entity/type/monster/EntityPhantom.java deleted file mode 100644 index 94f5f469c..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityPhantom.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.flying.PhantomMeta} instead. - */ -@Deprecated -public class EntityPhantom extends EntityCreature implements Monster { - - public EntityPhantom(Position spawnPosition) { - super(EntityType.PHANTOM, spawnPosition); - setBoundingBox(0.9f, 0.5f, 0.9f); // TODO change based on size - } - - public int getSize() { - return metadata.getIndex((byte) 17, 0); - } - - public void setSize(int size) { - this.metadata.setIndex((byte) 15, Metadata.VarInt(size)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntitySilverfish.java b/src/main/java/net/minestom/server/entity/type/monster/EntitySilverfish.java deleted file mode 100644 index f7f0df93e..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntitySilverfish.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.SilverfishMeta} instead. - */ -@Deprecated -public class EntitySilverfish extends EntityCreature implements Monster { - public EntitySilverfish(Position spawnPosition) { - super(EntityType.SILVERFISH, spawnPosition); - setBoundingBox(0.4f, 0.3f, 0.4f); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntitySlime.java b/src/main/java/net/minestom/server/entity/type/monster/EntitySlime.java deleted file mode 100644 index 3da2b83bc..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntitySlime.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.other.SlimeMeta} instead. - */ -@Deprecated -public class EntitySlime extends EntityCreature implements Monster { - - public EntitySlime(@NotNull Position spawnPosition) { - this(EntityType.SLIME, spawnPosition); - } - - EntitySlime(@NotNull EntityType type, @NotNull Position spawnPosition) { - super(type, spawnPosition); - setSize(1); - } - - public int getSize() { - return metadata.getIndex((byte) 15, 1); - } - - public void setSize(int size) { - final float boxSize = 0.51000005f * size; - setBoundingBox(boxSize, boxSize, boxSize); - this.metadata.setIndex((byte) 15, Metadata.VarInt(size)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntitySpider.java b/src/main/java/net/minestom/server/entity/type/monster/EntitySpider.java deleted file mode 100644 index 2cb346470..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntitySpider.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.SpiderMeta} instead. - */ -@Deprecated -public class EntitySpider extends EntityCreature implements Monster { - - public EntitySpider(Position spawnPosition) { - super(EntityType.SPIDER, spawnPosition); - setBoundingBox(1.4f, 0.9f, 1.4f); - } - - /** - * Gets if the spider is climbing. - * - * @return true if the spider is climbing, false otherwise - */ - public boolean isClimbing() { - return metadata.getIndex((byte) 15, false); - } - - /** - * Makes the spider climbs. - * - * @param climbing true to make the spider climbs, false otherwise - */ - public void setClimbing(boolean climbing) { - this.metadata.setIndex((byte) 15, Metadata.Boolean(climbing)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityWitch.java b/src/main/java/net/minestom/server/entity/type/monster/EntityWitch.java deleted file mode 100644 index cc72c6b93..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityWitch.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.raider.WitchMeta} instead. - */ -@Deprecated -public class EntityWitch extends EntityCreature implements Monster { - - public EntityWitch(Position spawnPosition) { - super(EntityType.WITCH, spawnPosition); - setBoundingBox(0.6f, 1.95f, 0.6f); - } - - public boolean isDrinkingPotion() { - return metadata.getIndex((byte) 16, false); - } - - public void setDrinkingPotion(boolean drinkingPotion) { - this.metadata.setIndex((byte) 16, Metadata.Boolean(drinkingPotion)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityZombie.java b/src/main/java/net/minestom/server/entity/type/monster/EntityZombie.java deleted file mode 100644 index 598475d31..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityZombie.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Monster; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.zombie.ZombieMeta} instead. - */ -@Deprecated -public class EntityZombie extends EntityCreature implements Monster { - - public EntityZombie(@NotNull Position spawnPosition) { - this(EntityType.ZOMBIE, spawnPosition); - } - - EntityZombie(@NotNull EntityType entityType, @NotNull Position spawnPosition) { - super(entityType, spawnPosition); - setBoundingBox(0.6f, 1.95f, 0.6f); - } - - public boolean isBaby() { - return metadata.getIndex((byte) 15, false); - } - - public void setBaby(boolean baby) { - this.metadata.setIndex((byte) 15, Metadata.Boolean(baby)); - } - - public boolean isBecomingDrowned() { - return metadata.getIndex((byte) 17, false); - } - - public void setBecomingDrowned(boolean becomingDrowned) { - this.metadata.setIndex((byte) 17, Metadata.Boolean(becomingDrowned)); - } - - @Override - public double getEyeHeight() { - return isBaby() ? 0.93 : 1.74; - } -} diff --git a/src/main/java/net/minestom/server/entity/type/monster/EntityZombifiedPiglin.java b/src/main/java/net/minestom/server/entity/type/monster/EntityZombifiedPiglin.java deleted file mode 100644 index a3ce5cdd4..000000000 --- a/src/main/java/net/minestom/server/entity/type/monster/EntityZombifiedPiglin.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.minestom.server.entity.type.monster; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.monster.zombie.ZombifiedPiglinMeta} instead. - */ -@Deprecated -public class EntityZombifiedPiglin extends EntityZombie { - - public EntityZombifiedPiglin(@NotNull Position spawnPosition) { - super(EntityType.ZOMBIFIED_PIGLIN, spawnPosition); - } - -} diff --git a/src/main/java/net/minestom/server/entity/type/other/EntityAreaEffectCloud.java b/src/main/java/net/minestom/server/entity/type/other/EntityAreaEffectCloud.java deleted file mode 100644 index a7e6ddb5e..000000000 --- a/src/main/java/net/minestom/server/entity/type/other/EntityAreaEffectCloud.java +++ /dev/null @@ -1,123 +0,0 @@ -package net.minestom.server.entity.type.other; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.ObjectEntity; -import net.minestom.server.particle.Particle; -import net.minestom.server.utils.Position; -import net.minestom.server.utils.binary.BinaryWriter; - -import java.util.function.Consumer; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.other.AreaEffectCloudMeta} instead. - */ -@Deprecated -public class EntityAreaEffectCloud extends ObjectEntity { - - public Consumer particleDataConsumer; - private float radius; - private int color; - private boolean ignoreRadius; - private Particle particleType; - - public EntityAreaEffectCloud(Position spawnPosition) { - super(EntityType.AREA_EFFECT_CLOUD, spawnPosition); - setRadius(0.5f); - setColor(0); - setIgnoreRadius(false); - setParticle(Particle.EFFECT); - setParticleDataConsumer(packetWriter -> { - }); - } - - /*@NotNull - @Override - public Consumer getMetadataConsumer() { - return packet -> { - super.getMetadataConsumer().accept(packet); - fillMetadataIndex(packet, 7); - fillMetadataIndex(packet, 8); - fillMetadataIndex(packet, 9); - fillMetadataIndex(packet, 10); - }; - }*/ - - /*@Override - protected void fillMetadataIndex(@NotNull BinaryWriter packet, int index) { - super.fillMetadataIndex(packet, index); - if (index == 7) { - packet.writeByte((byte) 7); - packet.writeByte(METADATA_FLOAT); - packet.writeFloat(radius); - } else if (index == 8) { - packet.writeByte((byte) 8); - packet.writeByte(METADATA_VARINT); - packet.writeVarInt(color); - } else if (index == 9) { - packet.writeByte((byte) 9); - packet.writeByte(METADATA_BOOLEAN); - packet.writeBoolean(ignoreRadius); - } else if (index == 10) { - packet.writeByte((byte) 10); - packet.writeByte(METADATA_PARTICLE); - packet.writeVarInt(particle.getId()); - particleDataConsumer.accept(packet); - } - }*/ - - @Override - public int getObjectData() { - return 0; - } - - public float getRadius() { - return radius; - } - - public void setRadius(float radius) { - this.radius = radius; - setBoundingBox(2 * radius, 0.5f, 2 * radius); - //sendMetadataIndex(7); - } - - public int getColor() { - return color; - } - - public void setColor(int color) { - this.color = color; - //sendMetadataIndex(8); - } - - public boolean isIgnoreRadius() { - return ignoreRadius; - } - - public void setIgnoreRadius(boolean ignoreRadius) { - this.ignoreRadius = ignoreRadius; - //sendMetadataIndex(9); - } - - public Particle getParticle() { - return particleType; - } - - public void setParticle(Particle particleType) { - this.particleType = particleType; - //sendMetadataIndex(10); - } - - public Consumer getParticleDataConsumer() { - return particleDataConsumer; - } - - /** - * Used to add data to the particle - * - * @param particleDataConsumer the particle data consumer - * @see Particle data - */ - public void setParticleDataConsumer(Consumer particleDataConsumer) { - this.particleDataConsumer = particleDataConsumer; - } -} diff --git a/src/main/java/net/minestom/server/entity/type/other/EntityEndCrystal.java b/src/main/java/net/minestom/server/entity/type/other/EntityEndCrystal.java deleted file mode 100644 index e1a205a66..000000000 --- a/src/main/java/net/minestom/server/entity/type/other/EntityEndCrystal.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.minestom.server.entity.type.other; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.ObjectEntity; -import net.minestom.server.utils.BlockPosition; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.other.EndCrystalMeta} instead. - */ -@Deprecated -public class EntityEndCrystal extends ObjectEntity { - - public EntityEndCrystal(@NotNull Position spawnPosition) { - super(EntityType.END_CRYSTAL, spawnPosition); - - setBoundingBox(2f, 2f, 2f); - } - - @Nullable - public BlockPosition getBeamTarget() { - return metadata.getIndex((byte) 7, null); - } - - public void setBeamTarget(@Nullable BlockPosition beamTarget) { - this.metadata.setIndex((byte) 7, Metadata.OptPosition(beamTarget)); - } - - public boolean showBottom() { - return metadata.getIndex((byte) 8, true); - } - - public void setShowBottom(boolean showBottom) { - this.metadata.setIndex((byte) 8, Metadata.Boolean(showBottom)); - } - - @Override - public int getObjectData() { - return 0; - } -} diff --git a/src/main/java/net/minestom/server/entity/type/other/EntityIronGolem.java b/src/main/java/net/minestom/server/entity/type/other/EntityIronGolem.java deleted file mode 100644 index 97b5582be..000000000 --- a/src/main/java/net/minestom/server/entity/type/other/EntityIronGolem.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.other; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Constructable; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.golem.IronGolemMeta} instead. - */ -@Deprecated -public class EntityIronGolem extends EntityCreature implements Constructable { - - public EntityIronGolem(Position spawnPosition) { - super(EntityType.IRON_GOLEM, spawnPosition); - setBoundingBox(1.4f, 2.7f, 1.4f); - } - - public boolean isPlayerCreated() { - return metadata.getIndex((byte) 15, 0) == 0x01; - } - - public void setPlayerCreated(boolean playerCreated) { - this.metadata.setIndex((byte) 15, Metadata.Byte((byte) (playerCreated ? 0x01 : 0x00))); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/other/EntitySnowman.java b/src/main/java/net/minestom/server/entity/type/other/EntitySnowman.java deleted file mode 100644 index 5726ce421..000000000 --- a/src/main/java/net/minestom/server/entity/type/other/EntitySnowman.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minestom.server.entity.type.other; - -import net.minestom.server.entity.EntityCreature; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.type.Constructable; -import net.minestom.server.utils.Position; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.golem.SnowGolemMeta} instead. - */ -@Deprecated -public class EntitySnowman extends EntityCreature implements Constructable { - - public EntitySnowman(Position spawnPosition) { - super(EntityType.SNOW_GOLEM, spawnPosition); - setBoundingBox(0.7f, 1.9f, 0.7f); - } - - public boolean hasPumpkinHat() { - return metadata.getIndex((byte) 15, (byte) 0x00) == 0x10; - } - - public void setPumpkinHat(boolean pumpkinHat) { - this.metadata.setIndex((byte) 15, Metadata.Byte((byte) (pumpkinHat ? 0x10 : 0x00))); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/projectile/EntityEyeOfEnder.java b/src/main/java/net/minestom/server/entity/type/projectile/EntityEyeOfEnder.java deleted file mode 100644 index 4ebfa357d..000000000 --- a/src/main/java/net/minestom/server/entity/type/projectile/EntityEyeOfEnder.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.minestom.server.entity.type.projectile; - -import net.minestom.server.entity.Entity; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.item.ItemStack; -import net.minestom.server.item.Material; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.item.EyeOfEnderMeta} instead. - */ -@Deprecated -public class EntityEyeOfEnder extends Entity { - - public EntityEyeOfEnder(@Nullable Entity shooter, @NotNull Position spawnPosition) { - super(EntityType.EYE_OF_ENDER, spawnPosition); - } - - - /** - * Gets the eye of ender item. - * - * @return the item - */ - public ItemStack getItemStack() { - return metadata.getIndex((byte) 7, ItemStack.AIR); - } - - /** - * Changes the eye of ender item. - *

- * Can be null to make it like {@link Material#ENDER_EYE}. - * - * @param itemStack the new item stack - */ - public void setItemStack(ItemStack itemStack) { - this.metadata.setIndex((byte) 7, Metadata.Slot(itemStack)); - } - -} diff --git a/src/main/java/net/minestom/server/entity/type/projectile/EntityPotion.java b/src/main/java/net/minestom/server/entity/type/projectile/EntityPotion.java deleted file mode 100644 index f0c1e1c76..000000000 --- a/src/main/java/net/minestom/server/entity/type/projectile/EntityPotion.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.minestom.server.entity.type.projectile; - -import net.minestom.server.entity.Entity; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.item.ItemStack; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.item.ThrownPotionMeta} instead. - */ -@Deprecated -public class EntityPotion extends Entity { - - public EntityPotion(@Nullable Entity shooter, @NotNull Position spawnPosition, @NotNull ItemStack potion) { - super(EntityType.POTION, spawnPosition); - setBoundingBox(0.25f, 0.25f, 0.25f); - setPotion(potion); - } - - @NotNull - public ItemStack getPotion() { - return metadata.getIndex((byte) 7, ItemStack.AIR); - } - - public void setPotion(@NotNull ItemStack potion) { - this.metadata.setIndex((byte) 7, Metadata.Slot(potion)); - } -} diff --git a/src/main/java/net/minestom/server/entity/type/vehicle/EntityBoat.java b/src/main/java/net/minestom/server/entity/type/vehicle/EntityBoat.java deleted file mode 100644 index 5590a0f96..000000000 --- a/src/main/java/net/minestom/server/entity/type/vehicle/EntityBoat.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.minestom.server.entity.type.vehicle; - -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.ObjectEntity; -import net.minestom.server.entity.type.Vehicle; -import net.minestom.server.utils.Position; -import org.jetbrains.annotations.NotNull; - -/** - * @deprecated Use {@link net.minestom.server.entity.metadata.other.BoatMeta} instead. - */ -@Deprecated -public class EntityBoat extends ObjectEntity implements Vehicle { - - public EntityBoat(Position spawnPosition) { - super(EntityType.BOAT, spawnPosition); - setBoundingBox(1.375f, 0.5625f, 1.375f); - } - - @Override - public int getObjectData() { - return 0; - } - - /** - * Gets the boat type. - * - * @return the boat type - */ - @NotNull - public BoatType getBoatType() { - final int ordinal = metadata.getIndex((byte) 10, 0); - return BoatType.values()[ordinal]; - } - - /** - * Changes the boat type. - * - * @param boatType the new boat type - */ - public void setBoatType(@NotNull BoatType boatType) { - this.metadata.setIndex((byte) 10, Metadata.VarInt(boatType.ordinal())); - - } - - public void refreshPaddle(boolean left, boolean right) { - this.metadata.setIndex((byte) 11, Metadata.Boolean(left)); - this.metadata.setIndex((byte) 12, Metadata.Boolean(right)); - } - - public enum BoatType { - OAK, SPRUCE, BIRCH, JUNGLE, ACACIA, DARK_OAK - } - - -} diff --git a/src/main/java/net/minestom/server/event/entity/EntityShootEvent.java b/src/main/java/net/minestom/server/event/entity/EntityShootEvent.java index 034b64a88..88c02f14e 100644 --- a/src/main/java/net/minestom/server/event/entity/EntityShootEvent.java +++ b/src/main/java/net/minestom/server/event/entity/EntityShootEvent.java @@ -1,13 +1,14 @@ package net.minestom.server.event.entity; import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EntityProjectile; import net.minestom.server.event.trait.CancellableEvent; import net.minestom.server.event.trait.EntityEvent; import net.minestom.server.utils.Position; import org.jetbrains.annotations.NotNull; /** - * Called with {@link net.minestom.server.entity.type.projectile.EntityProjectile#shoot(Position, double, double)} + * Called with {@link EntityProjectile#shoot(Position, double, double)} */ public class EntityShootEvent implements EntityEvent, CancellableEvent { diff --git a/src/main/java/net/minestom/server/instance/Instance.java b/src/main/java/net/minestom/server/instance/Instance.java index 2b3f51cb2..091ec0622 100644 --- a/src/main/java/net/minestom/server/instance/Instance.java +++ b/src/main/java/net/minestom/server/instance/Instance.java @@ -1,6 +1,8 @@ package net.minestom.server.instance; import com.google.common.collect.Queues; +import net.kyori.adventure.identity.Identity; +import net.kyori.adventure.pointer.Pointers; import net.minestom.server.MinecraftServer; import net.minestom.server.Tickable; import net.minestom.server.UpdateManager; @@ -109,6 +111,9 @@ public abstract class Instance implements BlockGetter, BlockSetter, Tickable, Ev // Pathfinder private final PFInstanceSpace instanceSpace = new PFInstanceSpace(this); + // Adventure + private final Pointers pointers; + /** * Creates a new instance. * @@ -124,6 +129,10 @@ public abstract class Instance implements BlockGetter, BlockSetter, Tickable, Ev this.worldBorder = new WorldBorder(this); this.eventNode = EventNode.value("instance-" + uniqueId, EventFilter.INSTANCE, this::equals); + + this.pointers = Pointers.builder() + .withDynamic(Identity.UUID, this::getUniqueId) + .build(); } /** @@ -919,4 +928,9 @@ public abstract class Instance implements BlockGetter, BlockSetter, Tickable, Ev public PFInstanceSpace getInstanceSpace() { return instanceSpace; } + + @Override + public @NotNull Pointers pointers() { + return this.pointers; + } } \ No newline at end of file diff --git a/src/main/java/net/minestom/server/item/ItemMetaBuilder.java b/src/main/java/net/minestom/server/item/ItemMetaBuilder.java index c0d8f9529..b6858ff8c 100644 --- a/src/main/java/net/minestom/server/item/ItemMetaBuilder.java +++ b/src/main/java/net/minestom/server/item/ItemMetaBuilder.java @@ -68,7 +68,7 @@ public abstract class ItemMetaBuilder implements TagWritable { this.displayName = displayName; handleCompound("display", nbtCompound -> { if (displayName != null) { - final String name = AdventureSerializer.serialize(displayName); + final String name = GsonComponentSerializer.gson().serialize(displayName); nbtCompound.setString("Name", name); } else { nbtCompound.removeTag("Name"); diff --git a/src/main/java/net/minestom/server/item/metadata/WritableBookMeta.java b/src/main/java/net/minestom/server/item/metadata/WritableBookMeta.java index 815ab6a5d..f108845ec 100644 --- a/src/main/java/net/minestom/server/item/metadata/WritableBookMeta.java +++ b/src/main/java/net/minestom/server/item/metadata/WritableBookMeta.java @@ -71,7 +71,7 @@ public class WritableBookMeta extends ItemMeta implements ItemMetaBuilder.Provid handleCollection(pages, "pages", nbt, () -> { NBTList list = new NBTList<>(NBTTypes.TAG_String); for (Component page : pages) { - list.add(new NBTString(AdventureSerializer.serialize(page))); + list.add(new NBTString(GsonComponentSerializer.gson().serialize(page))); } return list; }); diff --git a/src/main/java/net/minestom/server/item/metadata/WrittenBookMeta.java b/src/main/java/net/minestom/server/item/metadata/WrittenBookMeta.java index 02c922003..3ce191ae4 100644 --- a/src/main/java/net/minestom/server/item/metadata/WrittenBookMeta.java +++ b/src/main/java/net/minestom/server/item/metadata/WrittenBookMeta.java @@ -117,7 +117,7 @@ public class WrittenBookMeta extends ItemMeta implements ItemMetaBuilder.Provide handleCollection(pages, "pages", nbt, () -> { NBTList list = new NBTList<>(NBTTypes.TAG_String); for (Component page : pages) { - list.add(new NBTString(AdventureSerializer.serialize(page))); + list.add(new NBTString(GsonComponentSerializer.gson().serialize(page))); } return list; }); diff --git a/src/main/java/net/minestom/server/listener/PlayerVehicleListener.java b/src/main/java/net/minestom/server/listener/PlayerVehicleListener.java index 022adb909..28705dbbf 100644 --- a/src/main/java/net/minestom/server/listener/PlayerVehicleListener.java +++ b/src/main/java/net/minestom/server/listener/PlayerVehicleListener.java @@ -2,7 +2,7 @@ package net.minestom.server.listener; import net.minestom.server.entity.Entity; import net.minestom.server.entity.Player; -import net.minestom.server.entity.type.vehicle.EntityBoat; +import net.minestom.server.entity.metadata.other.BoatMeta; import net.minestom.server.network.packet.client.play.ClientSteerBoatPacket; import net.minestom.server.network.packet.client.play.ClientSteerVehiclePacket; import net.minestom.server.network.packet.client.play.ClientVehicleMovePacket; @@ -40,11 +40,12 @@ public class PlayerVehicleListener { public static void boatSteerListener(ClientSteerBoatPacket packet, Player player) { final Entity vehicle = player.getVehicle(); - if (!(vehicle instanceof EntityBoat)) + if (!(vehicle.getEntityMeta() instanceof BoatMeta)) return; - EntityBoat boat = (EntityBoat) vehicle; - boat.refreshPaddle(packet.leftPaddleTurning, packet.rightPaddleTurning); + BoatMeta boat = (BoatMeta) vehicle.getEntityMeta(); + boat.setLeftPaddleTurning(packet.leftPaddleTurning); + boat.setRightPaddleTurning(packet.rightPaddleTurning); } } diff --git a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java index d14ec40df..5d1386e07 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/MapDataPacket.java @@ -38,13 +38,15 @@ public class MapDataPacket implements ComponentHoldingServerPacket { writer.writeBoolean(locked); writer.writeBoolean(trackingPosition); - if (icons != null && icons.length > 0) { - writer.writeVarInt(icons.length); - for (Icon icon : icons) { - icon.write(writer); + if (trackingPosition) { + if (icons != null && icons.length > 0) { + writer.writeVarInt(icons.length); + for (Icon icon : icons) { + icon.write(writer); + } + } else { + writer.writeVarInt(0); } - } else { - writer.writeVarInt(0); } writer.writeByte((byte) columns); diff --git a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java index ec01e998a..e93487ee7 100644 --- a/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java +++ b/src/main/java/net/minestom/server/network/player/NettyPlayerConnection.java @@ -4,8 +4,13 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.socket.SocketChannel; + +import java.util.Objects; + +import net.kyori.adventure.translation.GlobalTranslator; import net.minestom.server.MinecraftServer; import net.minestom.server.adventure.AdventureSerializer; +import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.entity.PlayerSkin; import net.minestom.server.extras.mojangAuth.Decrypter; import net.minestom.server.extras.mojangAuth.Encrypter; @@ -149,8 +154,9 @@ public class NettyPlayerConnection extends PlayerConnection { } else if (message instanceof ServerPacket) { ServerPacket serverPacket = (ServerPacket) message; - if ((AdventureSerializer.AUTOMATIC_COMPONENT_TRANSLATION && !skipTranslating) && getPlayer() != null && serverPacket instanceof ComponentHoldingServerPacket) { - serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> AdventureSerializer.translate(component, getPlayer())); + if ((MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && !skipTranslating) && getPlayer() != null && serverPacket instanceof ComponentHoldingServerPacket) { + serverPacket = ((ComponentHoldingServerPacket) serverPacket).copyWithOperator(component -> + GlobalTranslator.render(component, Objects.requireNonNullElseGet(getPlayer().getLocale(), MinestomAdventure::getDefaultLocale))); } synchronized (tickBufferLock) { diff --git a/src/main/java/net/minestom/server/scoreboard/Team.java b/src/main/java/net/minestom/server/scoreboard/Team.java index 83e3ef4f5..f316c44b8 100644 --- a/src/main/java/net/minestom/server/scoreboard/Team.java +++ b/src/main/java/net/minestom/server/scoreboard/Team.java @@ -1,6 +1,8 @@ package net.minestom.server.scoreboard; import com.google.common.collect.MapMaker; +import net.kyori.adventure.identity.Identity; +import net.kyori.adventure.pointer.Pointers; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.minestom.server.MinecraftServer; @@ -73,6 +75,9 @@ public class Team implements PacketGroupingAudience { private final Set playerMembers = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); private boolean isPlayerMembersUpToDate; + // Adventure + private final Pointers pointers; + /** * Default constructor to creates a team. * @@ -91,6 +96,11 @@ public class Team implements PacketGroupingAudience { this.suffix = Component.empty(); this.members = new CopyOnWriteArraySet<>(); + + this.pointers = Pointers.builder() + .withDynamic(Identity.NAME, this::getTeamName) + .withDynamic(Identity.DISPLAY_NAME, this::getTeamDisplayName) + .build(); } /** @@ -587,4 +597,9 @@ public class Team implements PacketGroupingAudience { return this.playerMembers; } + + @Override + public @NotNull Pointers pointers() { + return this.pointers; + } } diff --git a/src/main/java/net/minestom/server/sound/SoundCategory.java b/src/main/java/net/minestom/server/sound/SoundCategory.java index 4b650a2ee..bd189fba8 100644 --- a/src/main/java/net/minestom/server/sound/SoundCategory.java +++ b/src/main/java/net/minestom/server/sound/SoundCategory.java @@ -1,14 +1,13 @@ package net.minestom.server.sound; +import net.kyori.adventure.sound.Sound; import org.jetbrains.annotations.NotNull; -import static net.kyori.adventure.sound.Sound.*; - /** - * @deprecated Use {@link Source} + * @deprecated Use {@link Sound.Source} */ @Deprecated -public enum SoundCategory { +public enum SoundCategory implements Sound.Source.Provider { MASTER, MUSIC, RECORDS, @@ -24,8 +23,15 @@ public enum SoundCategory { * Gets the Adventure source representing this sound category. * * @return the source + * @deprecated Use {@link #soundSource()} */ - public @NotNull Source asSource() { - return Source.values()[this.ordinal()]; + @Deprecated + public @NotNull Sound.Source asSource() { + return this.soundSource(); + } + + @Override + public @NotNull Sound.Source soundSource() { + return Sound.Source.values()[this.ordinal()]; } } diff --git a/src/main/java/net/minestom/server/thread/ThreadProvider.java b/src/main/java/net/minestom/server/thread/ThreadProvider.java index ba937c085..c864ee001 100644 --- a/src/main/java/net/minestom/server/thread/ThreadProvider.java +++ b/src/main/java/net/minestom/server/thread/ThreadProvider.java @@ -133,15 +133,17 @@ public abstract class ThreadProvider { if (!ChunkUtils.isLoaded(chunk)) return; chunk.tick(time); - chunkEntry.entities.forEach(entity -> { - final boolean hasQueue = lock.hasQueuedThreads(); - if (hasQueue) { - lock.unlock(); - // #acquire callbacks should be called here - lock.lock(); + final var entities = chunkEntry.entities; + if (!entities.isEmpty()) { + for (Entity entity : entities) { + if (lock.hasQueuedThreads()) { + lock.unlock(); + // #acquire callbacks should be called here + lock.lock(); + } + entity.tick(time); } - entity.tick(time); - }); + } }); Acquirable.refreshEntries(Collections.emptySet()); lock.unlock(); diff --git a/src/main/java/net/minestom/server/utils/ComponentUtils.java b/src/main/java/net/minestom/server/utils/ComponentUtils.java new file mode 100644 index 000000000..07b4e365e --- /dev/null +++ b/src/main/java/net/minestom/server/utils/ComponentUtils.java @@ -0,0 +1,41 @@ +package net.minestom.server.utils; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.translation.GlobalTranslator; +import net.minestom.server.adventure.MinestomAdventure; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +/** + * {@link Component} utilities. + */ +public final class ComponentUtils { + /** + * Checks if a component can be translated server-side. This is done by running the + * component through the translator and seeing if the translated component is equal + * to the non translated component. + * + * @param component the component + * @return {@code true} if the component can be translated server-side, {@code false} otherwise + */ + public static boolean isTranslatable(@NotNull Component component) { + return !component.equals(GlobalTranslator.render(component, MinestomAdventure.getDefaultLocale())); + } + + /** + * Checks if any of a series of components are translatable server-side. + * + * @param components the components + * @return {@code true} if any of the components can be translated server-side, {@code false} otherwise + */ + public static boolean areAnyTranslatable(@NotNull Collection components) { + for (Component component : components) { + if (isTranslatable(component)) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/net/minestom/server/utils/NBTUtils.java b/src/main/java/net/minestom/server/utils/NBTUtils.java index 09d736ac0..daa5d9336 100644 --- a/src/main/java/net/minestom/server/utils/NBTUtils.java +++ b/src/main/java/net/minestom/server/utils/NBTUtils.java @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.util.Codec; import net.minestom.server.MinecraftServer; +import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.attribute.Attribute; import net.minestom.server.attribute.AttributeOperation; import net.minestom.server.instance.block.Block; @@ -34,9 +35,11 @@ public final class NBTUtils { /** * An Adventure codec to convert between NBT and SNBT. + * + * @deprecated Use {@link MinestomAdventure#NBT_CODEC} */ - public static final Codec SNBT_CODEC - = Codec.of(encoded -> new SNBTParser(new StringReader(encoded)).parse(), NBT::toSNBT); + @Deprecated(forRemoval = true) + public static final Codec SNBT_CODEC = MinestomAdventure.NBT_CODEC; private NBTUtils() { @@ -54,7 +57,7 @@ public final class NBTUtils { return null; } - return BinaryTagHolder.encode(tag, SNBT_CODEC); + return BinaryTagHolder.encode(tag, MinestomAdventure.NBT_CODEC); } /** diff --git a/src/main/java/net/minestom/server/utils/NamespaceID.java b/src/main/java/net/minestom/server/utils/NamespaceID.java index 8cad56e8f..a1d3a21d8 100644 --- a/src/main/java/net/minestom/server/utils/NamespaceID.java +++ b/src/main/java/net/minestom/server/utils/NamespaceID.java @@ -103,11 +103,10 @@ public class NamespaceID implements CharSequence, Key { @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - NamespaceID that = (NamespaceID) o; - return Objects.equals(domain, that.domain) && - Objects.equals(path, that.path); + if(this == o) return true; + if(!(o instanceof Key)) return false; + final Key that = (Key) o; + return Objects.equals(this.domain, that.namespace()) && Objects.equals(this.path, that.value()); } @Override diff --git a/src/main/java/net/minestom/server/utils/PacketUtils.java b/src/main/java/net/minestom/server/utils/PacketUtils.java index 5819650d5..ddf5eb29c 100644 --- a/src/main/java/net/minestom/server/utils/PacketUtils.java +++ b/src/main/java/net/minestom/server/utils/PacketUtils.java @@ -7,6 +7,7 @@ import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.ForwardingAudience; import net.minestom.server.MinecraftServer; import net.minestom.server.adventure.AdventureSerializer; +import net.minestom.server.adventure.MinestomAdventure; import net.minestom.server.adventure.audience.PacketGroupingAudience; import net.minestom.server.entity.Player; import net.minestom.server.listener.manager.PacketListenerManager; @@ -84,8 +85,8 @@ public final class PacketUtils { // work out if the packet needs to be sent individually due to server-side translating boolean needsTranslating = false; - if (AdventureSerializer.AUTOMATIC_COMPONENT_TRANSLATION && packet instanceof ComponentHoldingServerPacket) { - needsTranslating = AdventureSerializer.areAnyTranslatable(((ComponentHoldingServerPacket) packet).components()); + if (MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && packet instanceof ComponentHoldingServerPacket) { + needsTranslating = ComponentUtils.areAnyTranslatable(((ComponentHoldingServerPacket) packet).components()); } if (MinecraftServer.hasGroupedPacket() && !needsTranslating) { diff --git a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java index f411fc612..0a50e9c63 100644 --- a/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java +++ b/src/main/java/net/minestom/server/utils/binary/BinaryWriter.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minestom.server.MinecraftServer; import net.minestom.server.adventure.AdventureSerializer; import net.minestom.server.chat.JsonMessage; @@ -71,7 +72,7 @@ public class BinaryWriter extends OutputStream { * @param component the component */ public void writeComponent(@NotNull Component component) { - this.writeSizedString(AdventureSerializer.serialize(component)); + this.writeSizedString(GsonComponentSerializer.gson().serialize(component)); } /** diff --git a/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.gson.GsonComponentSerializer$Provider b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.gson.GsonComponentSerializer$Provider new file mode 100644 index 000000000..fca9d2e88 --- /dev/null +++ b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.gson.GsonComponentSerializer$Provider @@ -0,0 +1 @@ +net.minestom.server.adventure.provider.MinestomGsonComponentSerializerProvider \ No newline at end of file diff --git a/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer$Provider b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer$Provider new file mode 100644 index 000000000..b819ffe3a --- /dev/null +++ b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer$Provider @@ -0,0 +1 @@ +net.minestom.server.adventure.provider.MinestomLegacyComponentSerializerProvider \ No newline at end of file diff --git a/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer$Provider b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer$Provider new file mode 100644 index 000000000..c2235e783 --- /dev/null +++ b/src/main/resources/META-INF/services/net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer$Provider @@ -0,0 +1 @@ +net.minestom.server.adventure.provider.MinestomPlainTextComponentSerializerProvider \ No newline at end of file diff --git a/src/test/java/demo/commands/ReloadExtensionCommand.java b/src/test/java/demo/commands/ReloadExtensionCommand.java index dfadd78b3..cf710b16d 100644 --- a/src/test/java/demo/commands/ReloadExtensionCommand.java +++ b/src/test/java/demo/commands/ReloadExtensionCommand.java @@ -10,8 +10,6 @@ import net.minestom.server.command.builder.arguments.ArgumentType; import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.extensions.Extension; import net.minestom.server.extensions.ExtensionManager; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -78,10 +76,4 @@ public class ReloadExtensionCommand extends Command { private void gameModeCallback(CommandSender sender, ArgumentSyntaxException argumentSyntaxException) { sender.sendMessage(Component.text("'" + argumentSyntaxException.getInput() + "' is not a valid extension name!")); } - - @Nullable - @Override - public String[] onDynamicWrite(@NotNull CommandSender sender, @NotNull String text) { - return extensionsName; - } } diff --git a/src/test/java/demo/commands/ShootCommand.java b/src/test/java/demo/commands/ShootCommand.java index 3968a5e16..3d8cbd17b 100644 --- a/src/test/java/demo/commands/ShootCommand.java +++ b/src/test/java/demo/commands/ShootCommand.java @@ -10,7 +10,7 @@ import net.minestom.server.command.builder.exception.ArgumentSyntaxException; import net.minestom.server.entity.EntityType; import net.minestom.server.entity.Player; import net.minestom.server.entity.metadata.arrow.ArrowMeta; -import net.minestom.server.entity.type.projectile.EntityProjectile; +import net.minestom.server.entity.EntityProjectile; import java.util.concurrent.ThreadLocalRandom;