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.event.PacketListenerPriority;
|
||||
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 lol.pyr.director.adventure.command.CommandContext;
|
||||
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(NamedTextColor.class, new NamedTextColorParser(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"))
|
||||
.addSubcommand("create", new CreateCommand(npcRegistry, typeRegistry))
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package lol.pyr.znpcsplus.commands;
|
||||
|
||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
||||
import com.github.retrooper.packetevents.protocol.item.ItemStack;
|
||||
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
|
||||
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.NpcImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.util.NpcPose;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
|
||||
|
@ -68,7 +68,7 @@ public class PropertyCommand implements CommandHandler {
|
|||
Class<?> type = property.getType();
|
||||
if (type == Boolean.class) return context.suggestLiteral("true", "false");
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package lol.pyr.znpcsplus.entity;
|
||||
|
||||
import com.github.retrooper.packetevents.protocol.entity.pose.EntityPose;
|
||||
import com.github.retrooper.packetevents.protocol.item.ItemStack;
|
||||
import lol.pyr.znpcsplus.api.entity.EntityProperty;
|
||||
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
|
||||
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
||||
import lol.pyr.znpcsplus.entity.serializers.*;
|
||||
import lol.pyr.znpcsplus.skin.cache.SkinCache;
|
||||
import lol.pyr.znpcsplus.util.NpcPose;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
|
||||
|
@ -27,7 +27,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerSerializer(new NamedTextColorPropertySerializer());
|
||||
registerSerializer(new SkinDescriptorSerializer(skinCache));
|
||||
registerSerializer(new ItemStackPropertySerializer());
|
||||
registerSerializer(new EntityPosePropertySerializer());
|
||||
registerSerializer(new NpcPosePropertySerializer());
|
||||
|
||||
registerType("glow", NamedTextColor.class);
|
||||
registerType("fire", false);
|
||||
|
@ -37,6 +37,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerType("name", Component.class);
|
||||
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("chestplate", ItemStack.class);
|
||||
registerType("leggings", ItemStack.class);
|
||||
|
@ -49,7 +50,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerType("potion_ambient", false); // TODO
|
||||
registerType("shaking", false);
|
||||
registerType("baby", false); // TODO
|
||||
registerType("pose", EntityPose.STANDING, EntityPose.class); // TODO
|
||||
registerType("pose", NpcPose.STANDING);
|
||||
|
||||
// Player
|
||||
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.scheduling.TaskScheduler;
|
||||
import lol.pyr.znpcsplus.util.NpcLocation;
|
||||
import lol.pyr.znpcsplus.util.NpcPose;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
|
@ -34,7 +35,11 @@ public class V1_14PacketFactory extends V1_10PacketFactory {
|
|||
@Override
|
||||
public Map<Integer, EntityData> generateMetadata(Player player, PacketEntity entity, PropertyHolder 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;
|
||||
}
|
||||
|
||||
protected EntityPose adaptNpcPose(NpcPose pose) {
|
||||
return EntityPose.valueOf(pose.name());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,22 @@
|
|||
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.parse.ParserType;
|
||||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.director.common.message.Message;
|
||||
import lol.pyr.znpcsplus.util.NpcPose;
|
||||
|
||||
import java.util.Deque;
|
||||
|
||||
public class EntityPoseParser extends ParserType<EntityPose> {
|
||||
|
||||
public EntityPoseParser(Message<CommandContext> message) {
|
||||
public class NpcPoseParser extends ParserType<NpcPose> {
|
||||
public NpcPoseParser(Message<CommandContext> message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityPose parse(Deque<String> deque) throws CommandExecutionException {
|
||||
public NpcPose parse(Deque<String> deque) throws CommandExecutionException {
|
||||
try {
|
||||
return EntityPose.valueOf(deque.pop().toUpperCase());
|
||||
return NpcPose.valueOf(deque.pop().toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new CommandExecutionException();
|
||||
}
|
Loading…
Reference in a new issue