extract entity pose into an api class so people dont have to add packetevents to their dependencies
This commit is contained in:
parent
2c708e2754
commit
8093e709dd
8 changed files with 63 additions and 35 deletions
24
api/src/main/java/lol/pyr/znpcsplus/util/NpcPose.java
Normal file
24
api/src/main/java/lol/pyr/znpcsplus/util/NpcPose.java
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
package lol.pyr.znpcsplus.util;
|
||||||
|
|
||||||
|
// TODO: Seperate this out into multiple classes and multiple properties depending on the npc type
|
||||||
|
// TODO: For example USING_TONGUE is only for the frog type but its usable everywhere
|
||||||
|
|
||||||
|
// TODO #2: Add some backwards compatibility to some of these, like for example CROUCHING can be done
|
||||||
|
// TODO #2: on older versions using the general Entity number 0 bitmask
|
||||||
|
public enum NpcPose {
|
||||||
|
STANDING,
|
||||||
|
FALL_FLYING,
|
||||||
|
SLEEPING,
|
||||||
|
SWIMMING,
|
||||||
|
SPIN_ATTACK,
|
||||||
|
CROUCHING,
|
||||||
|
LONG_JUMPING,
|
||||||
|
DYING,
|
||||||
|
CROAKING,
|
||||||
|
USING_TONGUE,
|
||||||
|
SITTING,
|
||||||
|
ROARING,
|
||||||
|
SNIFFING,
|
||||||
|
EMERGING,
|
||||||
|
DIGGING
|
||||||
|
}
|
|
@ -4,7 +4,6 @@ import com.github.retrooper.packetevents.PacketEvents;
|
||||||
import com.github.retrooper.packetevents.PacketEventsAPI;
|
import com.github.retrooper.packetevents.PacketEventsAPI;
|
||||||
import com.github.retrooper.packetevents.event.PacketListenerPriority;
|
import com.github.retrooper.packetevents.event.PacketListenerPriority;
|
||||||
import com.github.retrooper.packetevents.manager.server.ServerVersion;
|
import com.github.retrooper.packetevents.manager.server.ServerVersion;
|
||||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
|
||||||
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
|
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
|
||||||
import lol.pyr.director.adventure.command.CommandContext;
|
import lol.pyr.director.adventure.command.CommandContext;
|
||||||
import lol.pyr.director.adventure.command.CommandManager;
|
import lol.pyr.director.adventure.command.CommandManager;
|
||||||
|
@ -233,7 +232,7 @@ public class ZNpcsPlus extends JavaPlugin {
|
||||||
manager.registerParser(Boolean.class, new BooleanParser(incorrectUsageMessage));
|
manager.registerParser(Boolean.class, new BooleanParser(incorrectUsageMessage));
|
||||||
manager.registerParser(NamedTextColor.class, new NamedTextColorParser(incorrectUsageMessage));
|
manager.registerParser(NamedTextColor.class, new NamedTextColorParser(incorrectUsageMessage));
|
||||||
manager.registerParser(InteractionType.class, new InteractionTypeParser(incorrectUsageMessage));
|
manager.registerParser(InteractionType.class, new InteractionTypeParser(incorrectUsageMessage));
|
||||||
manager.registerParser(EntityPose.class, new EntityPoseParser(incorrectUsageMessage));
|
manager.registerParser(NpcPose.class, new NpcPoseParser(incorrectUsageMessage));
|
||||||
|
|
||||||
manager.registerCommand("npc", new MultiCommand(loadHelpMessage("root"))
|
manager.registerCommand("npc", new MultiCommand(loadHelpMessage("root"))
|
||||||
.addSubcommand("create", new CreateCommand(npcRegistry, typeRegistry))
|
.addSubcommand("create", new CreateCommand(npcRegistry, typeRegistry))
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package lol.pyr.znpcsplus.commands;
|
package lol.pyr.znpcsplus.commands;
|
||||||
|
|
||||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
|
||||||
import com.github.retrooper.packetevents.protocol.item.ItemStack;
|
import com.github.retrooper.packetevents.protocol.item.ItemStack;
|
||||||
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
|
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
|
||||||
import lol.pyr.director.adventure.command.CommandContext;
|
import lol.pyr.director.adventure.command.CommandContext;
|
||||||
|
@ -11,6 +10,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcImpl;
|
import lol.pyr.znpcsplus.npc.NpcImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||||
|
import lol.pyr.znpcsplus.util.NpcPose;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ public class PropertyCommand implements CommandHandler {
|
||||||
Class<?> type = property.getType();
|
Class<?> type = property.getType();
|
||||||
if (type == Boolean.class) return context.suggestLiteral("true", "false");
|
if (type == Boolean.class) return context.suggestLiteral("true", "false");
|
||||||
if (type == NamedTextColor.class) return context.suggestCollection(NamedTextColor.NAMES.keys());
|
if (type == NamedTextColor.class) return context.suggestCollection(NamedTextColor.NAMES.keys());
|
||||||
if (type == EntityPose.class) return context.suggestEnum(EntityPose.values());
|
if (type == NpcPose.class) return context.suggestEnum(NpcPose.values());
|
||||||
}
|
}
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
package lol.pyr.znpcsplus.entity;
|
package lol.pyr.znpcsplus.entity;
|
||||||
|
|
||||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
|
||||||
import com.github.retrooper.packetevents.protocol.item.ItemStack;
|
import com.github.retrooper.packetevents.protocol.item.ItemStack;
|
||||||
import lol.pyr.znpcsplus.api.entity.EntityProperty;
|
import lol.pyr.znpcsplus.api.entity.EntityProperty;
|
||||||
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
|
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
|
||||||
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
||||||
import lol.pyr.znpcsplus.entity.serializers.*;
|
import lol.pyr.znpcsplus.entity.serializers.*;
|
||||||
import lol.pyr.znpcsplus.skin.cache.SkinCache;
|
import lol.pyr.znpcsplus.skin.cache.SkinCache;
|
||||||
|
import lol.pyr.znpcsplus.util.NpcPose;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
registerSerializer(new NamedTextColorPropertySerializer());
|
registerSerializer(new NamedTextColorPropertySerializer());
|
||||||
registerSerializer(new SkinDescriptorSerializer(skinCache));
|
registerSerializer(new SkinDescriptorSerializer(skinCache));
|
||||||
registerSerializer(new ItemStackPropertySerializer());
|
registerSerializer(new ItemStackPropertySerializer());
|
||||||
registerSerializer(new EntityPosePropertySerializer());
|
registerSerializer(new NpcPosePropertySerializer());
|
||||||
|
|
||||||
registerType("glow", NamedTextColor.class);
|
registerType("glow", NamedTextColor.class);
|
||||||
registerType("fire", false);
|
registerType("fire", false);
|
||||||
|
@ -37,6 +37,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
registerType("name", Component.class);
|
registerType("name", Component.class);
|
||||||
registerType("look", false);
|
registerType("look", false);
|
||||||
|
|
||||||
|
// TODO: make all of these bukkit itemstack classes so api users wont have to add packetevents as a dependency
|
||||||
registerType("helmet", ItemStack.class);
|
registerType("helmet", ItemStack.class);
|
||||||
registerType("chestplate", ItemStack.class);
|
registerType("chestplate", ItemStack.class);
|
||||||
registerType("leggings", ItemStack.class);
|
registerType("leggings", ItemStack.class);
|
||||||
|
@ -49,7 +50,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
||||||
registerType("potion_ambient", false); // TODO
|
registerType("potion_ambient", false); // TODO
|
||||||
registerType("shaking", false);
|
registerType("shaking", false);
|
||||||
registerType("baby", false); // TODO
|
registerType("baby", false); // TODO
|
||||||
registerType("pose", EntityPose.STANDING, EntityPose.class); // TODO
|
registerType("pose", NpcPose.STANDING);
|
||||||
|
|
||||||
// Player
|
// Player
|
||||||
registerType("skin_cape", true);
|
registerType("skin_cape", true);
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
package lol.pyr.znpcsplus.entity.serializers;
|
|
||||||
|
|
||||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
|
||||||
import lol.pyr.znpcsplus.entity.PropertySerializer;
|
|
||||||
|
|
||||||
public class EntityPosePropertySerializer implements PropertySerializer<EntityPose> {
|
|
||||||
@Override
|
|
||||||
public String serialize(EntityPose property) {
|
|
||||||
return property.name();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EntityPose deserialize(String property) {
|
|
||||||
return EntityPose.valueOf(property.toUpperCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<EntityPose> getTypeClass() {
|
|
||||||
return EntityPose.class;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
package lol.pyr.znpcsplus.entity.serializers;
|
||||||
|
|
||||||
|
import lol.pyr.znpcsplus.entity.PropertySerializer;
|
||||||
|
import lol.pyr.znpcsplus.util.NpcPose;
|
||||||
|
|
||||||
|
public class NpcPosePropertySerializer implements PropertySerializer<NpcPose> {
|
||||||
|
@Override
|
||||||
|
public String serialize(NpcPose property) {
|
||||||
|
return property.name();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NpcPose deserialize(String property) {
|
||||||
|
return NpcPose.valueOf(property.toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<NpcPose> getTypeClass() {
|
||||||
|
return NpcPose.class;
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ import lol.pyr.znpcsplus.entity.PacketEntity;
|
||||||
import lol.pyr.znpcsplus.metadata.MetadataFactory;
|
import lol.pyr.znpcsplus.metadata.MetadataFactory;
|
||||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||||
import lol.pyr.znpcsplus.util.NpcLocation;
|
import lol.pyr.znpcsplus.util.NpcLocation;
|
||||||
|
import lol.pyr.znpcsplus.util.NpcPose;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
@ -34,7 +35,11 @@ public class V1_14PacketFactory extends V1_10PacketFactory {
|
||||||
@Override
|
@Override
|
||||||
public Map<Integer, EntityData> generateMetadata(Player player, PacketEntity entity, PropertyHolder properties) {
|
public Map<Integer, EntityData> generateMetadata(Player player, PacketEntity entity, PropertyHolder properties) {
|
||||||
Map<Integer, EntityData> data = super.generateMetadata(player, entity, properties);
|
Map<Integer, EntityData> data = super.generateMetadata(player, entity, properties);
|
||||||
add(data, metadataFactory.pose(properties.getProperty(propertyRegistry.getByName("pose", EntityPose.class))));
|
add(data, metadataFactory.pose(adaptNpcPose(properties.getProperty(propertyRegistry.getByName("pose", NpcPose.class)))));
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected EntityPose adaptNpcPose(NpcPose pose) {
|
||||||
|
return EntityPose.valueOf(pose.name());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,22 @@
|
||||||
package lol.pyr.znpcsplus.parsers;
|
package lol.pyr.znpcsplus.parsers;
|
||||||
|
|
||||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
|
||||||
import lol.pyr.director.adventure.command.CommandContext;
|
import lol.pyr.director.adventure.command.CommandContext;
|
||||||
import lol.pyr.director.adventure.parse.ParserType;
|
import lol.pyr.director.adventure.parse.ParserType;
|
||||||
import lol.pyr.director.common.command.CommandExecutionException;
|
import lol.pyr.director.common.command.CommandExecutionException;
|
||||||
import lol.pyr.director.common.message.Message;
|
import lol.pyr.director.common.message.Message;
|
||||||
|
import lol.pyr.znpcsplus.util.NpcPose;
|
||||||
|
|
||||||
import java.util.Deque;
|
import java.util.Deque;
|
||||||
|
|
||||||
public class EntityPoseParser extends ParserType<EntityPose> {
|
public class NpcPoseParser extends ParserType<NpcPose> {
|
||||||
|
public NpcPoseParser(Message<CommandContext> message) {
|
||||||
public EntityPoseParser(Message<CommandContext> message) {
|
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EntityPose parse(Deque<String> deque) throws CommandExecutionException {
|
public NpcPose parse(Deque<String> deque) throws CommandExecutionException {
|
||||||
try {
|
try {
|
||||||
return EntityPose.valueOf(deque.pop().toUpperCase());
|
return NpcPose.valueOf(deque.pop().toUpperCase());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw new CommandExecutionException();
|
throw new CommandExecutionException();
|
||||||
}
|
}
|
Loading…
Reference in a new issue