mirror of https://github.com/Minestom/Minestom.git
67 lines
2.1 KiB
Java
67 lines
2.1 KiB
Java
package net.minestom.server.entity.damage;
|
|
|
|
import net.kyori.adventure.nbt.CompoundBinaryTag;
|
|
import net.minestom.server.network.packet.server.configuration.RegistryDataPacket;
|
|
import net.minestom.server.registry.Registry;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.Collection;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
record DamageTypeImpl(Registry.DamageTypeEntry registry, int id) implements DamageType {
|
|
private static final Registry.Container<DamageType> CONTAINER;
|
|
|
|
static {
|
|
AtomicInteger i = new AtomicInteger();
|
|
CONTAINER = Registry.createStaticContainer(Registry.Resource.DAMAGE_TYPES,
|
|
(namespace, properties) -> new DamageTypeImpl(Registry.damageType(namespace, properties), i.getAndIncrement()));
|
|
}
|
|
|
|
static DamageType get(@NotNull String namespace) {
|
|
return CONTAINER.get(namespace);
|
|
}
|
|
|
|
static DamageType getSafe(@NotNull String namespace) {
|
|
return CONTAINER.getSafe(namespace);
|
|
}
|
|
|
|
static DamageType getId(int id) {
|
|
return CONTAINER.getId(id);
|
|
}
|
|
|
|
|
|
@Override
|
|
public @NotNull RegistryDataPacket.Entry toRegistryEntry() {
|
|
return new RegistryDataPacket.Entry(name(), CompoundBinaryTag.builder()
|
|
.putFloat("exhaustion", registry.exhaustion())
|
|
.putString("message_id", registry.messageId())
|
|
.putString("scaling", registry.scaling())
|
|
.build());
|
|
}
|
|
|
|
static Collection<DamageType> values() {
|
|
return CONTAINER.values();
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return name();
|
|
}
|
|
|
|
@Override
|
|
public int id() {
|
|
return id;
|
|
}
|
|
|
|
private static RegistryDataPacket lazyRegistryDataPacket = null;
|
|
|
|
static @NotNull RegistryDataPacket registryDataPacket() {
|
|
if (lazyRegistryDataPacket != null) return lazyRegistryDataPacket;
|
|
return lazyRegistryDataPacket = new RegistryDataPacket(
|
|
"minecraft:damage_type",
|
|
values().stream()
|
|
.map(DamageType::toRegistryEntry)
|
|
.toList()
|
|
);
|
|
}
|
|
} |