convert the color class to an enum & move it to the api package

This commit is contained in:
Pyrbu 2023-10-31 19:00:29 +01:00
parent ca1416e761
commit 2264ff3d71
16 changed files with 88 additions and 175 deletions

@ -0,0 +1,20 @@
package lol.pyr.znpcsplus.util;
public enum NamedColor {
BLACK,
DARK_BLUE,
DARK_GREEN,
DARK_AQUA,
DARK_RED,
DARK_PURPLE,
GOLD,
GRAY,
DARK_GRAY,
BLUE,
GREEN,
AQUA,
RED,
LIGHT_PURPLE,
YELLOW,
WHITE
}

@ -246,8 +246,7 @@ public class ZNpcsPlus {
manager.registerParser(Double.class, new DoubleParser(incorrectUsageMessage));
manager.registerParser(Float.class, new FloatParser(incorrectUsageMessage));
manager.registerParser(Boolean.class, new BooleanParser(incorrectUsageMessage));
manager.registerParser(NamedTextColor.class, new NamedTextColorParser(incorrectUsageMessage));
manager.registerParser(GlowColor.class, new GlowColorParser(incorrectUsageMessage));
manager.registerParser(NamedColor.class, new NamedColorParser(incorrectUsageMessage));
manager.registerParser(InteractionType.class, new InteractionTypeParser(incorrectUsageMessage));
manager.registerParser(Color.class, new ColorParser(incorrectUsageMessage));
manager.registerParser(Vector3f.class, new Vector3fParser(incorrectUsageMessage));

@ -57,11 +57,7 @@ public class PropertySetCommand implements CommandHandler {
valueName = bukkitStack.toString();
}
}
else if (type == NamedTextColor.class && context.argSize() < 1 && npc.getProperty(property) != null) {
value = null;
valueName = "NONE";
}
else if (type == GlowColor.class && context.argSize() < 1 && npc.getProperty(property) != null) {
else if (type == NamedColor.class && context.argSize() < 1 && npc.getProperty(property) != null) {
value = null;
valueName = "NONE";
}
@ -155,8 +151,7 @@ public class PropertySetCommand implements CommandHandler {
if (type == Vector3f.class && context.argSize() <= 5) return context.suggestLiteral("0", "0.0");
if (context.argSize() == 3) {
if (type == Boolean.class) return context.suggestLiteral("true", "false");
if (type == NamedTextColor.class) return context.suggestCollection(NamedTextColor.NAMES.keys());
if (type == GlowColor.class) return context.suggestCollection(GlowColor.NAMES.keys());
if (type == NamedColor.class) return context.suggestEnum(NamedColor.values());
if (type == Color.class) return context.suggestLiteral("0x0F00FF", "#FFFFFF");
if (type == BlockState.class) return context.suggestLiteral("hand", "looking_at", "block");
if (type == SpellType.class) return PacketEvents.getAPI().getServerManager().getVersion().isOlderThan(ServerVersion.V_1_13) ?

@ -49,7 +49,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
public EntityPropertyRegistryImpl(MojangSkinCache skinCache, ConfigManager configManager) {
registerSerializer(new ComponentPropertySerializer());
registerSerializer(new GlowColorPropertySerializer());
registerSerializer(new NamedColorPropertySerializer());
registerSerializer(new SkinDescriptorSerializer(skinCache));
registerSerializer(new ItemStackPropertySerializer());
registerSerializer(new ColorPropertySerializer());
@ -273,7 +273,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
else if (ver.isNewerThanOrEquals(ServerVersion.V_1_9)) guardianIndex = 11;
else guardianIndex = 16;
register(new BitsetProperty("is_elder", guardianIndex, 0x04, false, legacyBooleans));
register(new BitsetProperty("is_retracting_spikes", guardianIndex++, 0x02, false, legacyBooleans));
register(new BitsetProperty("is_retracting_spikes", guardianIndex, 0x02, false, legacyBooleans));
linkProperties("is_elder", "is_retracting_spikes");
// TODO: add guardian beam target
} else {

@ -5,22 +5,22 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.packets.PacketFactory;
import lol.pyr.znpcsplus.util.GlowColor;
import lol.pyr.znpcsplus.util.NamedColor;
import org.bukkit.entity.Player;
import java.util.Map;
public class GlowProperty extends EntityPropertyImpl<GlowColor> {
public class GlowProperty extends EntityPropertyImpl<NamedColor> {
private final PacketFactory packetFactory;
public GlowProperty(PacketFactory packetFactory) {
super("glow", null, GlowColor.class);
super("glow", null, NamedColor.class);
this.packetFactory = packetFactory;
}
@Override
public void apply(Player player, PacketEntity entity, boolean isSpawned, Map<Integer, EntityData> properties) {
GlowColor value = entity.getProperty(this);
NamedColor value = entity.getProperty(this);
EntityData oldData = properties.get(0);
byte oldValue = oldData == null ? 0 : (byte) oldData.getValue();
properties.put(0, newEntityData(0, EntityDataTypes.BYTE, (byte) (oldValue | (value == null ? 0 : 0x40))));

@ -1,24 +0,0 @@
package lol.pyr.znpcsplus.entity.serializers;
import lol.pyr.znpcsplus.entity.PropertySerializer;
import lol.pyr.znpcsplus.util.GlowColor;
import net.kyori.adventure.text.format.NamedTextColor;
public class GlowColorPropertySerializer implements PropertySerializer<GlowColor> {
@Override
public String serialize(GlowColor property) {
return String.valueOf(property.value());
}
@Override
public GlowColor deserialize(String property) {
NamedTextColor namedTextColor = NamedTextColor.namedColor(Integer.parseInt(property));
if (namedTextColor == null) return null;
return GlowColor.valueOf(namedTextColor.toString().toUpperCase());
}
@Override
public Class<GlowColor> getTypeClass() {
return GlowColor.class;
}
}

@ -0,0 +1,25 @@
package lol.pyr.znpcsplus.entity.serializers;
import lol.pyr.znpcsplus.entity.PropertySerializer;
import lol.pyr.znpcsplus.util.NamedColor;
public class NamedColorPropertySerializer implements PropertySerializer<NamedColor> {
@Override
public String serialize(NamedColor property) {
return property.name();
}
@Override
public NamedColor deserialize(String property) {
try {
return NamedColor.valueOf(property.toUpperCase());
} catch (IllegalArgumentException exception) {
return NamedColor.WHITE;
}
}
@Override
public Class<NamedColor> getTypeClass() {
return NamedColor.class;
}
}

@ -1,22 +0,0 @@
package lol.pyr.znpcsplus.entity.serializers;
import lol.pyr.znpcsplus.entity.PropertySerializer;
import net.kyori.adventure.text.format.NamedTextColor;
@Deprecated
public class NamedTextColorPropertySerializer implements PropertySerializer<NamedTextColor> {
@Override
public String serialize(NamedTextColor property) {
return String.valueOf(property.value());
}
@Override
public NamedTextColor deserialize(String property) {
return NamedTextColor.namedColor(Integer.parseInt(property));
}
@Override
public Class<NamedTextColor> getTypeClass() {
return NamedTextColor.class;
}
}

@ -4,8 +4,7 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import com.github.retrooper.packetevents.protocol.player.Equipment;
import lol.pyr.znpcsplus.api.entity.PropertyHolder;
import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.util.GlowColor;
import net.kyori.adventure.text.format.NamedTextColor;
import lol.pyr.znpcsplus.util.NamedColor;
import org.bukkit.entity.Player;
import java.util.List;
@ -18,7 +17,7 @@ public interface PacketFactory {
void teleportEntity(Player player, PacketEntity entity);
CompletableFuture<Void> addTabPlayer(Player player, PacketEntity entity, PropertyHolder properties);
void removeTabPlayer(Player player, PacketEntity entity);
void createTeam(Player player, PacketEntity entity, GlowColor glowColor);
void createTeam(Player player, PacketEntity entity, NamedColor namedColor);
void removeTeam(Player player, PacketEntity entity);
void sendAllMetadata(Player player, PacketEntity entity, PropertyHolder properties);
void sendEquipment(Player player, PacketEntity entity, Equipment equipment);

@ -8,9 +8,8 @@ import lol.pyr.znpcsplus.config.ConfigManager;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
import lol.pyr.znpcsplus.util.GlowColor;
import lol.pyr.znpcsplus.util.NamedColor;
import lol.pyr.znpcsplus.util.NpcLocation;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
@ -28,6 +27,6 @@ public class V1_17PacketFactory extends V1_8PacketFactory {
sendPacket(player, new WrapperPlayServerSpawnEntity(entity.getEntityId(), Optional.of(entity.getUuid()), entity.getType(),
npcLocationToVector(location), location.getPitch(), location.getYaw(), location.getYaw(), 0, Optional.of(new Vector3d())));
sendAllMetadata(player, entity, properties);
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", GlowColor.class)));
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", NamedColor.class)));
}
}

@ -9,9 +9,8 @@ import lol.pyr.znpcsplus.config.ConfigManager;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
import lol.pyr.znpcsplus.util.GlowColor;
import lol.pyr.znpcsplus.util.NamedColor;
import lol.pyr.znpcsplus.util.NpcLocation;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
@ -29,7 +28,7 @@ public class V1_20_2PacketFactory extends V1_19_2PacketFactory {
@Override
public void spawnPlayer(Player player, PacketEntity entity, PropertyHolder properties) {
addTabPlayer(player, entity, properties).thenAccept(ignored -> {
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", GlowColor.class)));
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", NamedColor.class)));
NpcLocation location = entity.getLocation();
sendPacket(player, new WrapperPlayServerSpawnEntity(entity.getEntityId(), Optional.of(entity.getUuid()), entity.getType(),
npcLocationToVector(location), location.getPitch(), location.getYaw(), location.getYaw(), 0, Optional.of(new Vector3d())));

@ -20,7 +20,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
import lol.pyr.znpcsplus.skin.BaseSkinDescriptor;
import lol.pyr.znpcsplus.util.GlowColor;
import lol.pyr.znpcsplus.util.NamedColor;
import lol.pyr.znpcsplus.util.NpcLocation;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
@ -49,7 +49,7 @@ public class V1_8PacketFactory implements PacketFactory {
@Override
public void spawnPlayer(Player player, PacketEntity entity, PropertyHolder properties) {
addTabPlayer(player, entity, properties).thenAccept(ignored -> {
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", GlowColor.class)));
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", NamedColor.class)));
NpcLocation location = entity.getLocation();
sendPacket(player, new WrapperPlayServerSpawnPlayer(entity.getEntityId(),
entity.getUuid(), npcLocationToVector(location), location.getYaw(), location.getPitch(), Collections.emptyList()));
@ -70,7 +70,7 @@ public class V1_8PacketFactory implements PacketFactory {
new WrapperPlayServerSpawnEntity(entity.getEntityId(), Optional.of(entity.getUuid()), entity.getType(), npcLocationToVector(location),
location.getPitch(), location.getYaw(), location.getYaw(), 0, Optional.empty()));
sendAllMetadata(player, entity, properties);
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", GlowColor.class)));
createTeam(player, entity, properties.getProperty(propertyRegistry.getByName("glow", NamedColor.class)));
}
protected Vector3d npcLocationToVector(NpcLocation location) {
@ -112,12 +112,12 @@ public class V1_8PacketFactory implements PacketFactory {
}
@Override
public void createTeam(Player player, PacketEntity entity, GlowColor glowColor) {
public void createTeam(Player player, PacketEntity entity, NamedColor namedColor) {
sendPacket(player, new WrapperPlayServerTeams("npc_team_" + entity.getEntityId(), WrapperPlayServerTeams.TeamMode.CREATE, new WrapperPlayServerTeams.ScoreBoardTeamInfo(
Component.empty(), Component.empty(), Component.empty(),
WrapperPlayServerTeams.NameTagVisibility.NEVER,
WrapperPlayServerTeams.CollisionRule.NEVER,
glowColor == null ? NamedTextColor.WHITE : glowColor.toNamedTextColor(),
namedColor == null ? NamedTextColor.WHITE : NamedTextColor.NAMES.value(namedColor.name().toLowerCase()),
WrapperPlayServerTeams.OptionData.NONE
)));
sendPacket(player, new WrapperPlayServerTeams("npc_team_" + entity.getEntityId(), WrapperPlayServerTeams.TeamMode.ADD_ENTITIES, (WrapperPlayServerTeams.ScoreBoardTeamInfo) null,

@ -1,21 +0,0 @@
package lol.pyr.znpcsplus.parsers;
import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.parse.ParserType;
import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.director.common.message.Message;
import lol.pyr.znpcsplus.util.GlowColor;
import java.util.Deque;
public class GlowColorParser extends ParserType<GlowColor> {
public GlowColorParser(Message<CommandContext> message) {
super(message);
}
@Override
public GlowColor parse(Deque<String> deque) throws CommandExecutionException {
GlowColor color = GlowColor.NAMES.value(deque.pop());
if (color == null) throw new CommandExecutionException();
return color;
}
}

@ -0,0 +1,23 @@
package lol.pyr.znpcsplus.parsers;
import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.parse.ParserType;
import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.director.common.message.Message;
import lol.pyr.znpcsplus.util.NamedColor;
import java.util.Deque;
public class NamedColorParser extends ParserType<NamedColor> {
public NamedColorParser(Message<CommandContext> message) {
super(message);
}
@Override
public NamedColor parse(Deque<String> deque) throws CommandExecutionException {
try {
return NamedColor.valueOf(deque.pop());
} catch (IllegalArgumentException exception) {
throw new CommandExecutionException();
}
}
}

@ -1,23 +0,0 @@
package lol.pyr.znpcsplus.parsers;
import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.parse.ParserType;
import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.director.common.message.Message;
import net.kyori.adventure.text.format.NamedTextColor;
import java.util.Deque;
@Deprecated
public class NamedTextColorParser extends ParserType<NamedTextColor> {
public NamedTextColorParser(Message<CommandContext> message) {
super(message);
}
@Override
public NamedTextColor parse(Deque<String> deque) throws CommandExecutionException {
NamedTextColor color = NamedTextColor.NAMES.value(deque.pop());
if (color == null) throw new CommandExecutionException();
return color;
}
}

@ -1,56 +0,0 @@
package lol.pyr.znpcsplus.util;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.util.Index;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public enum GlowColor {
BLACK("black", NamedTextColor.BLACK.value()),
DARK_BLUE("dark_blue", NamedTextColor.DARK_BLUE.value()),
DARK_GREEN("dark_green",NamedTextColor.DARK_GREEN.value()),
DARK_AQUA("dark_aqua", NamedTextColor.AQUA.value()),
DARK_RED("dark_red", NamedTextColor.RED.value()),
DARK_PURPLE("dark_purple", NamedTextColor.DARK_PURPLE.value()),
GOLD("gold", NamedTextColor.GOLD.value()),
GRAY("gray", NamedTextColor.GRAY.value()),
DARK_GRAY("dark_gray", NamedTextColor.DARK_GRAY.value()),
BLUE("blue", NamedTextColor.BLUE.value()),
GREEN("green", NamedTextColor.GREEN.value()),
AQUA("aqua", NamedTextColor.AQUA.value()),
RED("red", NamedTextColor.RED.value()),
LIGHT_PURPLE("light_purple", NamedTextColor.LIGHT_PURPLE.value()),
YELLOW("yellow", NamedTextColor.YELLOW.value()),
WHITE("white", NamedTextColor.WHITE.value());
private static final List<GlowColor> VALUES = Collections.unmodifiableList(Arrays.asList(BLACK, DARK_BLUE, DARK_GREEN, DARK_AQUA, DARK_RED, DARK_PURPLE, GOLD, GRAY, DARK_GRAY, BLUE, GREEN, AQUA, RED, LIGHT_PURPLE, YELLOW, WHITE));
/**
* An index of name to color.
*
* @since 4.0.0
*/
public static final Index<String, GlowColor> NAMES = Index.create(constant -> constant.name, VALUES);
private final String name;
private final int value;
private GlowColor(final String name, final int value) {
this.name = name;
this.value = value;
}
public NamedTextColor toNamedTextColor() {
return NamedTextColor.namedColor(this.value);
}
public int value() {
return this.value;
}
@Override
public @NotNull String toString() {
return this.name;
}
}