mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-13 10:51:44 +01:00
chore: cleanup networkbuffer additions
This commit is contained in:
parent
f2665be443
commit
abf80e597e
@ -1,5 +1,6 @@
|
||||
package net.minestom.demo;
|
||||
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.advancements.FrameType;
|
||||
@ -40,6 +41,7 @@ import net.minestom.server.monitoring.BenchmarkManager;
|
||||
import net.minestom.server.monitoring.TickMonitor;
|
||||
import net.minestom.server.potion.CustomPotionEffect;
|
||||
import net.minestom.server.potion.PotionEffect;
|
||||
import net.minestom.server.sound.SoundEvent;
|
||||
import net.minestom.server.utils.MathUtils;
|
||||
import net.minestom.server.utils.time.TimeUnit;
|
||||
|
||||
@ -141,6 +143,8 @@ public class PlayerInit {
|
||||
Material.IRON_SWORD
|
||||
);
|
||||
NotificationCenter.send(notification, event.getPlayer());
|
||||
|
||||
player.playSound(Sound.sound(SoundEvent.ENTITY_EXPERIENCE_ORB_PICKUP, Sound.Source.PLAYER, 0.5f, 1f));
|
||||
}
|
||||
})
|
||||
.addListener(PlayerPacketOutEvent.class, event -> {
|
||||
|
@ -41,7 +41,7 @@ public enum DyeColor implements RGBLike {
|
||||
|
||||
BLACK(new Color(0x1d1d21), new Color(0x0), new Color(0x1e1b1b), 29);
|
||||
|
||||
public static final NetworkBuffer.Type<DyeColor> NETWORK_TYPE = NetworkBuffer.fromEnum(DyeColor.class);
|
||||
public static final NetworkBuffer.Type<DyeColor> NETWORK_TYPE = NetworkBuffer.Enum(DyeColor.class);
|
||||
|
||||
public static final BinaryTagSerializer<DyeColor> NBT_TYPE = BinaryTagSerializer.fromEnumStringable(DyeColor.class);
|
||||
|
||||
|
@ -55,7 +55,7 @@ public enum RecipeType implements StaticProtocolObject {
|
||||
|
||||
DECORATED_POT(NamespaceID.from("minecraft:crafting_decorated_pot"));
|
||||
|
||||
public static final NetworkBuffer.Type<RecipeType> NETWORK_TYPE = NetworkBuffer.fromEnum(RecipeType.class);
|
||||
public static final NetworkBuffer.Type<RecipeType> NETWORK_TYPE = NetworkBuffer.Enum(RecipeType.class);
|
||||
|
||||
private final NamespaceID namespace;
|
||||
|
||||
|
@ -148,7 +148,7 @@ public final class Metadata {
|
||||
}
|
||||
|
||||
public static Entry<CatMeta.Variant> CatVariant(@NotNull CatMeta.Variant value) {
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_CAT_VARIANT, value, NetworkBuffer.CAT_VARIANT);
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_CAT_VARIANT, value, CatMeta.Variant.NETWORK_TYPE);
|
||||
}
|
||||
|
||||
public static Entry<DynamicRegistry.Key<WolfMeta.Variant>> WolfVariant(@NotNull DynamicRegistry.Key<WolfMeta.Variant> value) {
|
||||
@ -158,19 +158,19 @@ public final class Metadata {
|
||||
// WOLF VARIANT
|
||||
|
||||
public static Entry<FrogMeta.Variant> FrogVariant(@NotNull FrogMeta.Variant value) {
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_FROG_VARIANT, value, NetworkBuffer.FROG_VARIANT);
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_FROG_VARIANT, value, FrogMeta.Variant.NETWORK_TYPE);
|
||||
}
|
||||
|
||||
public static Entry<PaintingMeta.Variant> PaintingVariant(@NotNull PaintingMeta.Variant value) {
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_PAINTING_VARIANT, value, NetworkBuffer.PAINTING_VARIANT);
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_PAINTING_VARIANT, value, PaintingMeta.Variant.NETWORK_TYPE);
|
||||
}
|
||||
|
||||
public static Entry<SnifferMeta.State> SnifferState(@NotNull SnifferMeta.State value) {
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_SNIFFER_STATE, value, NetworkBuffer.SNIFFER_STATE);
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_SNIFFER_STATE, value, SnifferMeta.State.NETWORK_TYPE);
|
||||
}
|
||||
|
||||
public static Entry<ArmadilloMeta.State> ArmadilloState(@NotNull ArmadilloMeta.State value) {
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_ARMADILLO_STATE, value, NetworkBuffer.ARMADILLO_STATE);
|
||||
return new MetadataImpl.EntryImpl<>(TYPE_ARMADILLO_STATE, value, ArmadilloMeta.State.NETWORK_TYPE);
|
||||
}
|
||||
|
||||
public static Entry<Point> Vector3(@NotNull Point value) {
|
||||
|
@ -2,6 +2,7 @@ package net.minestom.server.entity.metadata.animal;
|
||||
|
||||
import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArmadilloMeta extends AnimalMeta {
|
||||
@ -27,6 +28,6 @@ public class ArmadilloMeta extends AnimalMeta {
|
||||
SCARED,
|
||||
UNROLLING;
|
||||
|
||||
private static final State[] VALUES = values();
|
||||
public static final NetworkBuffer.Type<State> NETWORK_TYPE = NetworkBuffer.Enum(State.class);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package net.minestom.server.entity.metadata.animal;
|
||||
|
||||
import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@ -36,6 +37,6 @@ public class FrogMeta extends AnimalMeta {
|
||||
WARM,
|
||||
COLD;
|
||||
|
||||
private final static FrogMeta.Variant[] VALUES = values();
|
||||
public static final NetworkBuffer.Type<Variant> NETWORK_TYPE = NetworkBuffer.Enum(Variant.class);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package net.minestom.server.entity.metadata.animal;
|
||||
|
||||
import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class SnifferMeta extends AnimalMeta {
|
||||
@ -38,6 +39,6 @@ public class SnifferMeta extends AnimalMeta {
|
||||
DIGGING,
|
||||
RISING;
|
||||
|
||||
private static final State[] VALUES = values();
|
||||
public static final NetworkBuffer.Type<State> NETWORK_TYPE = NetworkBuffer.Enum(State.class);
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package net.minestom.server.entity.metadata.animal.tameable;
|
||||
import net.minestom.server.color.DyeColor;
|
||||
import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class CatMeta extends TameableAnimalMeta {
|
||||
@ -61,7 +62,7 @@ public class CatMeta extends TameableAnimalMeta {
|
||||
JELLIE,
|
||||
ALL_BLACK;
|
||||
|
||||
private static final Variant[] VALUES = values();
|
||||
public static final NetworkBuffer.Type<Variant> NETWORK_TYPE = NetworkBuffer.Enum(Variant.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ public class WolfMeta extends TameableAnimalMeta {
|
||||
}
|
||||
|
||||
public sealed interface Variant extends ProtocolObject, WolfVariants permits VariantImpl {
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<Variant>> NETWORK_TYPE = NetworkBuffer.registryKey(Registries::wolfVariant);
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<Variant>> NETWORK_TYPE = NetworkBuffer.RegistryKey(Registries::wolfVariant);
|
||||
@NotNull BinaryTagSerializer<DynamicRegistry.Key<Variant>> NBT_TYPE = BinaryTagSerializer.registryKey(Registries::wolfVariant);
|
||||
|
||||
static @NotNull Variant create(
|
||||
|
@ -4,6 +4,7 @@ import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.Metadata;
|
||||
import net.minestom.server.entity.metadata.EntityMeta;
|
||||
import net.minestom.server.entity.metadata.ObjectDataProvider;
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import net.minestom.server.registry.StaticProtocolObject;
|
||||
import net.minestom.server.utils.NamespaceID;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
@ -105,6 +106,8 @@ public class PaintingMeta extends EntityMeta implements ObjectDataProvider {
|
||||
FIRE(32, 32),
|
||||
DONKEY_KONG(64, 48);
|
||||
|
||||
public static final NetworkBuffer.Type<Variant> NETWORK_TYPE = NetworkBuffer.Enum(Variant.class);
|
||||
|
||||
private static final Variant[] VALUES = values();
|
||||
|
||||
public static @Nullable Variant fromId(int id) {
|
||||
|
@ -13,7 +13,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public sealed interface BannerPattern extends ProtocolObject, BannerPatterns permits BannerPatternImpl {
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<BannerPattern>> NETWORK_TYPE = NetworkBuffer.registryKey(Registries::bannerPattern);
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<BannerPattern>> NETWORK_TYPE = NetworkBuffer.RegistryKey(Registries::bannerPattern);
|
||||
@NotNull BinaryTagSerializer<DynamicRegistry.Key<BannerPattern>> NBT_TYPE = BinaryTagSerializer.registryKey(Registries::bannerPattern);
|
||||
|
||||
static @NotNull BannerPattern create(
|
||||
|
@ -48,7 +48,7 @@ import java.util.Collection;
|
||||
|
||||
public sealed interface Material extends StaticProtocolObject, Materials permits MaterialImpl {
|
||||
|
||||
NetworkBuffer.Type<Material> NETWORK_TYPE = NetworkBuffer.lazy(() -> MaterialImpl.NETWORK_TYPE);
|
||||
NetworkBuffer.Type<Material> NETWORK_TYPE = MaterialImpl.NETWORK_TYPE;
|
||||
BinaryTagSerializer<Material> NBT_TYPE = BinaryTagSerializer.lazy(() -> MaterialImpl.NBT_TYPE);
|
||||
|
||||
/**
|
||||
|
@ -18,7 +18,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public sealed interface TrimMaterial extends ProtocolObject permits TrimMaterialImpl {
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<TrimMaterial>> NETWORK_TYPE = NetworkBuffer.registryKey(Registries::trimMaterial);
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<TrimMaterial>> NETWORK_TYPE = NetworkBuffer.RegistryKey(Registries::trimMaterial);
|
||||
@NotNull BinaryTagSerializer<DynamicRegistry.Key<TrimMaterial>> NBT_TYPE = BinaryTagSerializer.registryKey(Registries::trimMaterial);
|
||||
|
||||
static @NotNull TrimMaterial create(
|
||||
|
@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public sealed interface TrimPattern extends ProtocolObject permits TrimPatternImpl {
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<TrimPattern>> NETWORK_TYPE = NetworkBuffer.registryKey(Registries::trimPattern);
|
||||
@NotNull NetworkBuffer.Type<DynamicRegistry.Key<TrimPattern>> NETWORK_TYPE = NetworkBuffer.RegistryKey(Registries::trimPattern);
|
||||
@NotNull BinaryTagSerializer<DynamicRegistry.Key<TrimPattern>> NBT_TYPE = BinaryTagSerializer.registryKey(Registries::trimPattern);
|
||||
|
||||
static @NotNull TrimPattern create(
|
||||
|
@ -11,6 +11,6 @@ public enum ItemRarity {
|
||||
|
||||
private static final ItemRarity[] VALUES = values();
|
||||
|
||||
public static final NetworkBuffer.Type<ItemRarity> NETWORK_TYPE = NetworkBuffer.fromEnum(ItemRarity.class);
|
||||
public static final NetworkBuffer.Type<ItemRarity> NETWORK_TYPE = NetworkBuffer.Enum(ItemRarity.class);
|
||||
public static final BinaryTagSerializer<ItemRarity> NBT_TYPE = BinaryTagSerializer.fromEnumStringable(ItemRarity.class);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package net.minestom.server.item.component;
|
||||
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public enum MapPostProcessing {
|
||||
LOCK,
|
||||
@ -9,12 +10,12 @@ public enum MapPostProcessing {
|
||||
|
||||
public static final NetworkBuffer.Type<MapPostProcessing> NETWORK_TYPE = new NetworkBuffer.Type<>() {
|
||||
@Override
|
||||
public void write(NetworkBuffer buffer, MapPostProcessing value) {
|
||||
public void write(@NotNull NetworkBuffer buffer, MapPostProcessing value) {
|
||||
buffer.write(NetworkBuffer.VAR_INT, value.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public MapPostProcessing read(NetworkBuffer buffer) {
|
||||
public MapPostProcessing read(@NotNull NetworkBuffer buffer) {
|
||||
return VALUES[buffer.read(NetworkBuffer.VAR_INT)];
|
||||
}
|
||||
};
|
||||
|
@ -5,11 +5,6 @@ import net.kyori.adventure.text.Component;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.coordinate.Point;
|
||||
import net.minestom.server.entity.Entity;
|
||||
import net.minestom.server.entity.metadata.animal.ArmadilloMeta;
|
||||
import net.minestom.server.entity.metadata.animal.FrogMeta;
|
||||
import net.minestom.server.entity.metadata.animal.SnifferMeta;
|
||||
import net.minestom.server.entity.metadata.animal.tameable.CatMeta;
|
||||
import net.minestom.server.entity.metadata.other.PaintingMeta;
|
||||
import net.minestom.server.network.packet.server.play.data.WorldPos;
|
||||
import net.minestom.server.particle.Particle;
|
||||
import net.minestom.server.registry.DynamicRegistry;
|
||||
@ -58,6 +53,10 @@ public final class NetworkBuffer {
|
||||
public static final Type<int[]> VAR_INT_ARRAY = new NetworkBufferTypeImpl.VarIntArrayType();
|
||||
public static final Type<long[]> VAR_LONG_ARRAY = new NetworkBufferTypeImpl.VarLongArrayType();
|
||||
|
||||
public static <T extends ProtocolObject> @NotNull Type<DynamicRegistry.Key<T>> RegistryKey(@NotNull Function<Registries, DynamicRegistry<T>> selector) {
|
||||
return new NetworkBufferTypeImpl.RegistryTypeType<>(selector);
|
||||
}
|
||||
|
||||
// METADATA
|
||||
public static final Type<Integer> BLOCK_STATE = new NetworkBufferTypeImpl.BlockStateType();
|
||||
public static final Type<int[]> VILLAGER_DATA = new NetworkBufferTypeImpl.VillagerDataType();
|
||||
@ -67,64 +66,28 @@ public final class NetworkBuffer {
|
||||
public static final Type<float[]> QUATERNION = new NetworkBufferTypeImpl.QuaternionType();
|
||||
public static final Type<Particle> PARTICLE = new NetworkBufferTypeImpl.ParticleType();
|
||||
|
||||
public static final Type<Component> OPT_CHAT = NetworkBufferTypeImpl.fromOptional(COMPONENT);
|
||||
public static final Type<Point> OPT_BLOCK_POSITION = NetworkBufferTypeImpl.fromOptional(BLOCK_POSITION);
|
||||
public static final Type<UUID> OPT_UUID = NetworkBufferTypeImpl.fromOptional(UUID);
|
||||
public static final Type<@Nullable Component> OPT_CHAT = Optional(COMPONENT);
|
||||
public static final Type<@Nullable Point> OPT_BLOCK_POSITION = Optional(BLOCK_POSITION);
|
||||
public static final Type<@Nullable UUID> OPT_UUID = Optional(UUID);
|
||||
|
||||
public static final Type<Direction> DIRECTION = NetworkBufferTypeImpl.fromEnum(Direction.class);
|
||||
public static final Type<Entity.Pose> POSE = NetworkBufferTypeImpl.fromEnum(Entity.Pose.class);
|
||||
public static final Type<Direction> DIRECTION = new NetworkBufferTypeImpl.EnumType<>(Direction.class);
|
||||
public static final Type<Entity.Pose> POSE = new NetworkBufferTypeImpl.EnumType<>(Entity.Pose.class);
|
||||
|
||||
public static final Type<CatMeta.Variant> CAT_VARIANT = NetworkBufferTypeImpl.fromEnum(CatMeta.Variant.class);
|
||||
public static final Type<FrogMeta.Variant> FROG_VARIANT = NetworkBufferTypeImpl.fromEnum(FrogMeta.Variant.class);
|
||||
public static final Type<PaintingMeta.Variant> PAINTING_VARIANT = NetworkBufferTypeImpl.fromEnum(PaintingMeta.Variant.class);
|
||||
public static final Type<SnifferMeta.State> SNIFFER_STATE = NetworkBufferTypeImpl.fromEnum(SnifferMeta.State.class);
|
||||
public static final Type<ArmadilloMeta.State> ARMADILLO_STATE = NetworkBufferTypeImpl.fromEnum(ArmadilloMeta.State.class);
|
||||
// Combinators
|
||||
|
||||
public static <T extends ProtocolObject> Type<DynamicRegistry.Key<T>> registryKey(@NotNull Function<Registries, DynamicRegistry<T>> selector) {
|
||||
return new NetworkBuffer.Type<>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, DynamicRegistry.Key<T> value) {
|
||||
Check.stateCondition(buffer.registries == null, "Buffer does not have registries");
|
||||
final DynamicRegistry<T> registry = selector.apply(buffer.registries);
|
||||
final int id = registry.getId(value);
|
||||
Check.argCondition(id == -1, "Key is not registered: {0} > {1}", registry, value);
|
||||
buffer.write(VAR_INT, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicRegistry.Key<T> read(@NotNull NetworkBuffer buffer) {
|
||||
Check.stateCondition(buffer.registries == null, "Buffer does not have registries");
|
||||
DynamicRegistry<T> registry = selector.apply(buffer.registries);
|
||||
final int id = buffer.read(VAR_INT);
|
||||
final DynamicRegistry.Key<T> key = registry.getKey(id);
|
||||
Check.argCondition(key == null, "No such ID in registry: {0} > {1}", registry, id);
|
||||
return key;
|
||||
}
|
||||
};
|
||||
public static <T> @NotNull Type<@Nullable T> Optional(@NotNull Type<T> type) {
|
||||
return new NetworkBufferTypeImpl.OptionalType<>(type);
|
||||
}
|
||||
|
||||
public static <E extends Enum<E>> Type<E> fromEnum(@NotNull Class<E> enumClass) {
|
||||
return NetworkBufferTypeImpl.fromEnum(enumClass);
|
||||
public static <E extends Enum<E>> @NotNull Type<E> Enum(@NotNull Class<E> enumClass) {
|
||||
return new NetworkBufferTypeImpl.EnumType<>(enumClass);
|
||||
}
|
||||
|
||||
public static <T> Type<T> lazy(@NotNull Supplier<Type<T>> supplier) {
|
||||
return new NetworkBuffer.Type<>() {
|
||||
private Type<T> type;
|
||||
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, T value) {
|
||||
if (type == null) type = supplier.get();
|
||||
type.write(buffer, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public T read(@NotNull NetworkBuffer buffer) {
|
||||
if (type == null) type = supplier.get();
|
||||
return null;
|
||||
}
|
||||
};
|
||||
public static <T> @NotNull Type<T> Lazy(@NotNull Supplier<NetworkBuffer.@NotNull Type<T>> supplier) {
|
||||
return new NetworkBufferTypeImpl.LazyType<>(supplier);
|
||||
}
|
||||
|
||||
|
||||
ByteBuffer nioBuffer;
|
||||
final boolean resizable;
|
||||
int writeIndex;
|
||||
@ -348,31 +311,11 @@ public final class NetworkBuffer {
|
||||
T read(@NotNull NetworkBuffer buffer);
|
||||
|
||||
default <S> @NotNull Type<S> map(@NotNull Function<T, S> to, @NotNull Function<S, T> from) {
|
||||
return new Type<S>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, S value) {
|
||||
Type.this.write(buffer, from.apply(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public S read(@NotNull NetworkBuffer buffer) {
|
||||
return to.apply(Type.this.read(buffer));
|
||||
}
|
||||
};
|
||||
return new NetworkBufferTypeImpl.MappedType<>(this, to, from);
|
||||
}
|
||||
|
||||
default @NotNull Type<List<T>> list(int maxSize) {
|
||||
return new NetworkBuffer.Type<>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, List<T> value) {
|
||||
buffer.writeCollection(Type.this, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> read(@NotNull NetworkBuffer buffer) {
|
||||
return buffer.readCollection(Type.this, maxSize);
|
||||
}
|
||||
};
|
||||
return new NetworkBufferTypeImpl.ListType<>(this, maxSize);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,15 +9,22 @@ import net.minestom.server.coordinate.Vec;
|
||||
import net.minestom.server.network.packet.server.play.data.WorldPos;
|
||||
import net.minestom.server.particle.Particle;
|
||||
import net.minestom.server.particle.data.ParticleData;
|
||||
import net.minestom.server.registry.DynamicRegistry;
|
||||
import net.minestom.server.registry.ProtocolObject;
|
||||
import net.minestom.server.registry.Registries;
|
||||
import net.minestom.server.utils.Unit;
|
||||
import net.minestom.server.utils.nbt.BinaryTagReader;
|
||||
import net.minestom.server.utils.nbt.BinaryTagWriter;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import static net.minestom.server.network.NetworkBuffer.*;
|
||||
|
||||
@ -580,31 +587,95 @@ interface NetworkBufferTypeImpl<T> extends NetworkBuffer.Type<T> {
|
||||
}
|
||||
}
|
||||
|
||||
static <T extends Enum<?>> NetworkBufferTypeImpl<T> fromEnum(Class<T> enumClass) {
|
||||
return new NetworkBufferTypeImpl<>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, T value) {
|
||||
buffer.writeEnum(enumClass, value);
|
||||
}
|
||||
// Combinators
|
||||
|
||||
@Override
|
||||
public T read(@NotNull NetworkBuffer buffer) {
|
||||
return buffer.readEnum(enumClass);
|
||||
}
|
||||
};
|
||||
record EnumType<E extends Enum<?>>(@NotNull Class<E> enumClass) implements NetworkBufferTypeImpl<E> {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, E value) {
|
||||
buffer.writeEnum(enumClass, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public E read(@NotNull NetworkBuffer buffer) {
|
||||
return buffer.readEnum(enumClass);
|
||||
}
|
||||
}
|
||||
|
||||
static <T> NetworkBufferTypeImpl<T> fromOptional(Type<T> optionalType) {
|
||||
return new NetworkBufferTypeImpl<>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, T value) {
|
||||
buffer.writeOptional(optionalType, value);
|
||||
}
|
||||
record OptionalType<T>(@NotNull Type<T> parent) implements NetworkBufferTypeImpl<@Nullable T> {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, T value) {
|
||||
buffer.writeOptional(parent, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public T read(@NotNull NetworkBuffer buffer) {
|
||||
return buffer.readOptional(optionalType);
|
||||
}
|
||||
};
|
||||
@Override
|
||||
public T read(@NotNull NetworkBuffer buffer) {
|
||||
return buffer.readOptional(parent);
|
||||
}
|
||||
}
|
||||
|
||||
final class LazyType<T> implements NetworkBufferTypeImpl<T> {
|
||||
private final @NotNull Supplier<NetworkBuffer.@NotNull Type<T>> supplier;
|
||||
private Type<T> type;
|
||||
|
||||
public LazyType(@NotNull Supplier<NetworkBuffer.@NotNull Type<T>> supplier) {
|
||||
this.supplier = supplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, T value) {
|
||||
if (type == null) type = supplier.get();
|
||||
type.write(buffer, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public T read(@NotNull NetworkBuffer buffer) {
|
||||
if (type == null) type = supplier.get();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
record MappedType<T, S>(@NotNull Type<T> parent, @NotNull Function<T, S> to, @NotNull Function<S, T> from) implements NetworkBufferTypeImpl<S> {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, S value) {
|
||||
parent.write(buffer, from.apply(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public S read(@NotNull NetworkBuffer buffer) {
|
||||
return to.apply(parent.read(buffer));
|
||||
}
|
||||
}
|
||||
|
||||
record ListType<T>(@NotNull Type<T> parent, int maxSize) implements NetworkBufferTypeImpl<List<T>> {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, List<T> value) {
|
||||
buffer.writeCollection(parent, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> read(@NotNull NetworkBuffer buffer) {
|
||||
return buffer.readCollection(parent, maxSize);
|
||||
}
|
||||
}
|
||||
|
||||
record RegistryTypeType<T extends ProtocolObject>(@NotNull Function<Registries, DynamicRegistry<T>> selector) implements NetworkBufferTypeImpl<DynamicRegistry.Key<T>> {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, DynamicRegistry.Key<T> value) {
|
||||
Check.stateCondition(buffer.registries == null, "Buffer does not have registries");
|
||||
final DynamicRegistry<T> registry = selector.apply(buffer.registries);
|
||||
final int id = registry.getId(value);
|
||||
Check.argCondition(id == -1, "Key is not registered: {0} > {1}", registry, value);
|
||||
buffer.write(VAR_INT, id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicRegistry.Key<T> read(@NotNull NetworkBuffer buffer) {
|
||||
Check.stateCondition(buffer.registries == null, "Buffer does not have registries");
|
||||
DynamicRegistry<T> registry = selector.apply(buffer.registries);
|
||||
final int id = buffer.read(VAR_INT);
|
||||
final DynamicRegistry.Key<T> key = registry.getKey(id);
|
||||
Check.argCondition(key == null, "No such ID in registry: {0} > {1}", registry, id);
|
||||
return key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package net.minestom.server.sound;
|
||||
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import net.minestom.server.registry.Registry;
|
||||
import net.minestom.server.registry.StaticProtocolObject;
|
||||
import net.minestom.server.utils.NamespaceID;
|
||||
@ -12,29 +11,6 @@ record BuiltinSoundEvent(NamespaceID namespace, int id) implements StaticProtoco
|
||||
private static final Registry.Container<BuiltinSoundEvent> CONTAINER = Registry.createStaticContainer(Registry.Resource.SOUNDS,
|
||||
(namespace, properties) -> new BuiltinSoundEvent(NamespaceID.from(namespace), properties.getInt("id")));
|
||||
|
||||
public static final NetworkBuffer.Type<SoundEvent> NETWORK_TYPE = new NetworkBuffer.Type<>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, SoundEvent value) {
|
||||
switch (value) {
|
||||
case BuiltinSoundEvent soundEvent -> buffer.write(NetworkBuffer.VAR_INT, soundEvent.id + 1);
|
||||
case CustomSoundEvent soundEvent -> {
|
||||
buffer.write(NetworkBuffer.VAR_INT, 0); // Custom sound
|
||||
buffer.write(NetworkBuffer.STRING, soundEvent.name());
|
||||
buffer.writeOptional(NetworkBuffer.FLOAT, soundEvent.range());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent read(@NotNull NetworkBuffer buffer) {
|
||||
int id = buffer.read(NetworkBuffer.VAR_INT) - 1;
|
||||
if (id != -1) return getId(id);
|
||||
|
||||
NamespaceID namespace = NamespaceID.from(buffer.read(NetworkBuffer.STRING));
|
||||
return new CustomSoundEvent(namespace, buffer.readOptional(NetworkBuffer.FLOAT));
|
||||
}
|
||||
};
|
||||
|
||||
static SoundEvent get(@NotNull String namespace) {
|
||||
return CONTAINER.get(namespace);
|
||||
}
|
||||
|
@ -15,8 +15,32 @@ import java.util.Collection;
|
||||
*/
|
||||
public sealed interface SoundEvent extends ProtocolObject, Sound.Type, SoundEvents permits BuiltinSoundEvent, CustomSoundEvent {
|
||||
|
||||
@NotNull NetworkBuffer.Type<SoundEvent> NETWORK_TYPE = NetworkBuffer.lazy(() -> BuiltinSoundEvent.NETWORK_TYPE); //todo what is the init issue here??
|
||||
@NotNull NetworkBuffer.Type<SoundEvent> NETWORK_TYPE = new NetworkBuffer.Type<>() {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer buffer, SoundEvent value) {
|
||||
switch (value) {
|
||||
case BuiltinSoundEvent soundEvent -> buffer.write(NetworkBuffer.VAR_INT, soundEvent.id() + 1);
|
||||
case CustomSoundEvent soundEvent -> {
|
||||
buffer.write(NetworkBuffer.VAR_INT, 0); // Custom sound
|
||||
buffer.write(NetworkBuffer.STRING, soundEvent.name());
|
||||
buffer.writeOptional(NetworkBuffer.FLOAT, soundEvent.range());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent read(@NotNull NetworkBuffer buffer) {
|
||||
int id = buffer.read(NetworkBuffer.VAR_INT) - 1;
|
||||
if (id != -1) return BuiltinSoundEvent.getId(id);
|
||||
|
||||
NamespaceID namespace = NamespaceID.from(buffer.read(NetworkBuffer.STRING));
|
||||
return new CustomSoundEvent(namespace, buffer.readOptional(NetworkBuffer.FLOAT));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get all the builtin sound events. Resource pack sounds will never be returned from this method.
|
||||
*/
|
||||
static @NotNull Collection<? extends SoundEvent> values() {
|
||||
return BuiltinSoundEvent.values();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user