From 0c345935e6b08a87751c5c7f75d1286e2253d4c3 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Thu, 27 Apr 2023 00:58:09 +0100 Subject: [PATCH] start with an api --- api/build.gradle | 34 ++++++ .../java/lol/pyr/znpcsplus/api/Hologram.java | 11 ++ .../lol/pyr/znpcsplus/api/NPCRegistry.java | 14 +++ .../lol/pyr/znpcsplus/api/PropertyHolder.java | 8 ++ .../main/java/lol/pyr/znpcsplus/api/ZApi.java | 11 ++ .../lol/pyr/znpcsplus/api/ZApiProvider.java | 25 ++++ .../znpcsplus/api/npc}/EntityProperty.java | 4 +- .../java/lol/pyr/znpcsplus/api/npc/NPC.java | 8 ++ .../lol/pyr/znpcsplus/api}/npc/NPCType.java | 38 ++++--- .../znpcsplus/api/skin/SkinDescriptor.java | 4 + .../lol/pyr/znpcsplus/util/ZLocation.java | 25 ++-- build.gradle | 107 ++---------------- plugin/build.gradle | 64 +++++++++++ .../znpcservers/UnexpectedCallException.java | 0 .../znpcservers/gui/ConversationGUI.java | 0 .../listeners/InventoryListener.java | 0 .../reflection/ReflectionBuilder.java | 0 .../reflection/ReflectionLazyLoader.java | 0 .../reflection/ReflectionPackage.java | 0 .../znpcservers/reflection/Reflections.java | 0 .../reflection/types/ClassReflection.java | 0 .../reflection/types/FieldReflection.java | 0 .../reflection/types/MethodReflection.java | 0 .../znpcservers/user/EventService.java | 0 .../znpcservers/utility/BungeeUtils.java | 0 .../znpcservers/utility/SchedulerUtils.java | 0 .../znetworkw/znpcservers/utility/Utils.java | 0 .../utility/inventory/ZInventory.java | 0 .../utility/inventory/ZInventoryCallback.java | 0 .../utility/inventory/ZInventoryHolder.java | 0 .../utility/inventory/ZInventoryItem.java | 0 .../utility/inventory/ZInventoryPage.java | 0 .../utility/itemstack/ItemStackBuilder.java | 0 .../itemstack/ItemStackSerializer.java | 0 .../main/java/lol/pyr/znpcsplus/ZNPCsApi.java | 20 ++++ .../java/lol/pyr/znpcsplus/ZNPCsPlus.java | 21 ++-- .../znpcsplus/config/ComponentSerializer.java | 0 .../lol/pyr/znpcsplus/config/Configs.java | 0 .../lol/pyr/znpcsplus/config/MainConfig.java | 0 .../pyr/znpcsplus/config/MessageConfig.java | 0 .../pyr/znpcsplus/entity/PacketEntity.java | 10 +- .../lol/pyr/znpcsplus/hologram/Hologram.java | 14 +-- .../pyr/znpcsplus/hologram/HologramLine.java | 16 +-- .../InteractionPacketListener.java | 2 +- .../pyr/znpcsplus/interaction/NPCAction.java | 0 .../interaction/NPCActionDeserializer.java | 0 .../znpcsplus/interaction/NPCActionType.java | 0 .../types/ConsoleCommandAction.java | 0 .../interaction/types/MessageAction.java | 0 .../types/PlayerCommandAction.java | 0 .../interaction/types/SwitchServerAction.java | 0 .../znpcsplus/metadata/MetadataFactory.java | 0 .../pyr/znpcsplus/metadata/V1_13Factory.java | 0 .../pyr/znpcsplus/metadata/V1_14Factory.java | 0 .../pyr/znpcsplus/metadata/V1_16Factory.java | 0 .../pyr/znpcsplus/metadata/V1_17Factory.java | 0 .../pyr/znpcsplus/metadata/V1_8Factory.java | 0 .../pyr/znpcsplus/metadata/V1_9Factory.java | 0 .../main/java/lol/pyr/znpcsplus/npc/NPC.java | 16 +-- .../lol/pyr/znpcsplus/npc/NPCRegistry.java | 46 ++++++++ .../pyr/znpcsplus/packets/PacketFactory.java | 2 +- .../pyr/znpcsplus/packets/V1_14Factory.java | 8 +- .../pyr/znpcsplus/packets/V1_19Factory.java | 2 +- .../pyr/znpcsplus/packets/V1_8Factory.java | 16 +-- .../pyr/znpcsplus/packets/V1_9Factory.java | 4 +- .../znpcsplus/skin/BaseSkinDescriptor.java | 2 +- .../java/lol/pyr/znpcsplus/skin/Skin.java | 0 .../pyr/znpcsplus/skin/cache/CachedId.java | 0 .../pyr/znpcsplus/skin/cache/SkinCache.java | 16 +-- .../skin/cache/SkinCacheCleanTask.java | 0 .../skin/descriptor/FetchingDescriptor.java | 5 +- .../skin/descriptor/MirrorDescriptor.java | 5 +- .../skin/descriptor/PrefetchedDescriptor.java | 5 +- .../znpcsplus/tasks/NPCVisibilityTask.java | 2 +- .../pyr/znpcsplus/updater/UpdateChecker.java | 0 .../updater/UpdateNotificationListener.java | 0 .../java/lol/pyr/znpcsplus/user/User.java | 0 .../lol/pyr/znpcsplus/user/UserListener.java | 0 .../lol/pyr/znpcsplus/util/LazyLoader.java | 0 .../lol/pyr/znpcsplus/util/StringUtils.java | 0 .../java/lol/pyr/znpcsplus/util/Viewable.java | 0 {src => plugin/src}/main/resources/plugin.yml | 0 settings.gradle | 3 +- .../pyr/znpcsplus/entity/PropertyHolder.java | 18 --- .../lol/pyr/znpcsplus/npc/NPCRegistry.java | 34 ------ 85 files changed, 369 insertions(+), 251 deletions(-) create mode 100644 api/build.gradle create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/Hologram.java create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/NPCRegistry.java create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/PropertyHolder.java create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/ZApi.java create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/ZApiProvider.java rename {src/main/java/lol/pyr/znpcsplus/entity => api/src/main/java/lol/pyr/znpcsplus/api/npc}/EntityProperty.java (94%) create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/npc/NPC.java rename {src/main/java/lol/pyr/znpcsplus => api/src/main/java/lol/pyr/znpcsplus/api}/npc/NPCType.java (75%) create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptor.java rename src/main/java/lol/pyr/znpcsplus/entity/PacketLocation.java => api/src/main/java/lol/pyr/znpcsplus/util/ZLocation.java (70%) create mode 100644 plugin/build.gradle rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/user/EventService.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/Utils.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java (100%) rename {src => plugin/src}/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java (100%) create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java (90%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/config/Configs.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/config/MainConfig.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/config/MessageConfig.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java (88%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/hologram/Hologram.java (85%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java (65%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java (94%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/npc/NPC.java (88%) create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java (98%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java (80%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java (97%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java (94%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java (95%) rename src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptor.java => plugin/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java (86%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/Skin.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java (87%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java (84%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java (77%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java (76%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java (90%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/user/User.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/user/UserListener.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/util/LazyLoader.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/util/StringUtils.java (100%) rename {src => plugin/src}/main/java/lol/pyr/znpcsplus/util/Viewable.java (100%) rename {src => plugin/src}/main/resources/plugin.yml (100%) delete mode 100644 src/main/java/lol/pyr/znpcsplus/entity/PropertyHolder.java delete mode 100644 src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java diff --git a/api/build.gradle b/api/build.gradle new file mode 100644 index 0000000..f8def1d --- /dev/null +++ b/api/build.gradle @@ -0,0 +1,34 @@ +plugins { + id "maven-publish" +} + +dependencies { + compileOnly "org.spigotmc:spigot-api:1.19.4-R0.1-SNAPSHOT" + compileOnly "net.kyori:adventure-platform-bukkit:4.3.0" + compileOnly "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT" +} + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + + pom { + name.set("znpcsplus") + description.set("A fork of the ZNPCs plugin") + url.set("https://github.com/Pyrbu/ZNPCsPlus") + } + } + } + repositories { + maven { + if (properties.containsKey("DIST_USERNAME") && properties.containsKey("DIST_PASSWORD")) { + credentials { + username properties.get("DIST_USERNAME") + password properties.get("DIST_PASSWORD") + } + } + url = uri("https://repo.pyr.lol/releases/") + } + } +} \ No newline at end of file diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/Hologram.java b/api/src/main/java/lol/pyr/znpcsplus/api/Hologram.java new file mode 100644 index 0000000..5fb289c --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/Hologram.java @@ -0,0 +1,11 @@ +package lol.pyr.znpcsplus.api; + +import net.kyori.adventure.text.Component; + +public interface Hologram { + void addLine(Component line); + Component getLine(int index); + void removeLine(int index); + void clearLines(); + void insertLine(int index, Component line); +} diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/NPCRegistry.java b/api/src/main/java/lol/pyr/znpcsplus/api/NPCRegistry.java new file mode 100644 index 0000000..490f96f --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/NPCRegistry.java @@ -0,0 +1,14 @@ +package lol.pyr.znpcsplus.api; + +import lol.pyr.znpcsplus.api.npc.NPC; + +import java.util.Collection; + +public interface NPCRegistry { + NPC get(String id); + Collection all(); + NPC getByEntityId(int id); + Collection getRegisteredIds(); + void register(String id, NPC npc); + void unregister(String id); +} \ No newline at end of file diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/PropertyHolder.java b/api/src/main/java/lol/pyr/znpcsplus/api/PropertyHolder.java new file mode 100644 index 0000000..4273c5e --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/PropertyHolder.java @@ -0,0 +1,8 @@ +package lol.pyr.znpcsplus.api; + +import lol.pyr.znpcsplus.api.npc.EntityProperty; + +public interface PropertyHolder { + T getProperty(EntityProperty key); + boolean hasProperty(EntityProperty key); +} diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/ZApi.java b/api/src/main/java/lol/pyr/znpcsplus/api/ZApi.java new file mode 100644 index 0000000..760702c --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/ZApi.java @@ -0,0 +1,11 @@ +package lol.pyr.znpcsplus.api; + +import lol.pyr.znpcsplus.api.npc.NPC; +import lol.pyr.znpcsplus.api.npc.NPCType; +import lol.pyr.znpcsplus.util.ZLocation; +import org.bukkit.World; + +public interface ZApi { + NPCRegistry getNPCRegistry(); + NPC createNPC(World world, NPCType type, ZLocation location); +} diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/ZApiProvider.java b/api/src/main/java/lol/pyr/znpcsplus/api/ZApiProvider.java new file mode 100644 index 0000000..c8a7198 --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/ZApiProvider.java @@ -0,0 +1,25 @@ +package lol.pyr.znpcsplus.api; + +public class ZApiProvider { + private static ZApi plugin = null; + + private ZApiProvider() { + throw new UnsupportedOperationException(); + } + + public static ZApi get() { + if (plugin == null) throw new IllegalStateException( + "ZNPCsPlus plugin isn't enabled yet!\n" + + "Please add it to your plugin.yml as a depend or softdepend." + ); + return plugin; + } + + public static void register(ZApi plugin) { + ZApiProvider.plugin = plugin; + } + + public static void unregister() { + ZApiProvider.plugin = null; + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/entity/EntityProperty.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/EntityProperty.java similarity index 94% rename from src/main/java/lol/pyr/znpcsplus/entity/EntityProperty.java rename to api/src/main/java/lol/pyr/znpcsplus/api/npc/EntityProperty.java index 31f2776..2d68be5 100644 --- a/src/main/java/lol/pyr/znpcsplus/entity/EntityProperty.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/EntityProperty.java @@ -1,6 +1,6 @@ -package lol.pyr.znpcsplus.entity; +package lol.pyr.znpcsplus.api.npc; -import lol.pyr.znpcsplus.skin.SkinDescriptor; +import lol.pyr.znpcsplus.api.skin.SkinDescriptor; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/npc/NPC.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/NPC.java new file mode 100644 index 0000000..b357405 --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/NPC.java @@ -0,0 +1,8 @@ +package lol.pyr.znpcsplus.api.npc; + +import lol.pyr.znpcsplus.api.Hologram; +import lol.pyr.znpcsplus.api.PropertyHolder; + +public interface NPC extends PropertyHolder { + Hologram getHologram(); +} diff --git a/src/main/java/lol/pyr/znpcsplus/npc/NPCType.java b/api/src/main/java/lol/pyr/znpcsplus/api/npc/NPCType.java similarity index 75% rename from src/main/java/lol/pyr/znpcsplus/npc/NPCType.java rename to api/src/main/java/lol/pyr/znpcsplus/api/npc/NPCType.java index 0ca1b2c..f3f45b1 100644 --- a/src/main/java/lol/pyr/znpcsplus/npc/NPCType.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/npc/NPCType.java @@ -1,10 +1,9 @@ -package lol.pyr.znpcsplus.npc; +package lol.pyr.znpcsplus.api.npc; import com.github.retrooper.packetevents.PacketEvents; import com.github.retrooper.packetevents.manager.server.ServerVersion; import com.github.retrooper.packetevents.protocol.entity.type.EntityType; import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; -import lol.pyr.znpcsplus.entity.EntityProperty; import java.util.*; @@ -47,26 +46,31 @@ public class NPCType { return allowedProperties; } - private static void register(Builder builder) { - register(builder.build()); + private static NPCType define(Builder builder) { + return define(builder.build()); } - private static void register(NPCType type) { + private static NPCType define(NPCType type) { BY_NAME.put(type.getName(), type); - + return type; } - static { - register(new Builder("player", EntityTypes.PLAYER) - .addProperties(EntityProperty.SKIN, EntityProperty.SKIN_LAYERS) - .setHologramOffset(-0.45D)); - register(new Builder("creeper", EntityTypes.CREEPER) - .setHologramOffset(-0.6D)); - register(new Builder("zombie", EntityTypes.ZOMBIE) - .setHologramOffset(-0.3D)); - register(new Builder("skeleton", EntityTypes.SKELETON) - .setHologramOffset(-0.3D)); - } + public static final NPCType PLAYER = define( + new Builder("player", EntityTypes.PLAYER) + .addProperties(EntityProperty.SKIN, EntityProperty.SKIN_LAYERS) + .setHologramOffset(-0.45D)); + + public static final NPCType CREEPER = define( + new Builder("creeper", EntityTypes.CREEPER) + .setHologramOffset(-0.6D)); + + public static final NPCType ZOMBIE = define( + new Builder("zombie", EntityTypes.ZOMBIE) + .setHologramOffset(-0.3D)); + + public static final NPCType SKELETON = define( + new Builder("skeleton", EntityTypes.SKELETON) + .setHologramOffset(-0.3D)); private static final class Builder { private final String name; diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptor.java b/api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptor.java new file mode 100644 index 0000000..9d849fe --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptor.java @@ -0,0 +1,4 @@ +package lol.pyr.znpcsplus.api.skin; + +public interface SkinDescriptor { +} diff --git a/src/main/java/lol/pyr/znpcsplus/entity/PacketLocation.java b/api/src/main/java/lol/pyr/znpcsplus/util/ZLocation.java similarity index 70% rename from src/main/java/lol/pyr/znpcsplus/entity/PacketLocation.java rename to api/src/main/java/lol/pyr/znpcsplus/util/ZLocation.java index bbc6b17..ecc16c7 100644 --- a/src/main/java/lol/pyr/znpcsplus/entity/PacketLocation.java +++ b/api/src/main/java/lol/pyr/znpcsplus/util/ZLocation.java @@ -1,19 +1,18 @@ -package lol.pyr.znpcsplus.entity; +package lol.pyr.znpcsplus.util; import com.github.retrooper.packetevents.util.Vector3d; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.util.NumberConversions; -import org.bukkit.util.Vector; -public class PacketLocation { +public class ZLocation { private final double x; private final double y; private final double z; private final float yaw; private final float pitch; - public PacketLocation(double x, double y, double z, float yaw, float pitch) { + public ZLocation(double x, double y, double z, float yaw, float pitch) { this.x = x; this.y = y; this.z = z; @@ -21,7 +20,7 @@ public class PacketLocation { this.pitch = pitch; } - public PacketLocation(Location location) { + public ZLocation(Location location) { this(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch()); } @@ -49,12 +48,8 @@ public class PacketLocation { return new Location(world, this.x, this.y, this.z, this.yaw, this.pitch); } - public PacketLocation withY(double y) { - return new PacketLocation(x, y, z, yaw, pitch); - } - - public Vector toVector() { - return new Vector(x, y, z); + public ZLocation withY(double y) { + return new ZLocation(x, y, z, yaw, pitch); } public Vector3d toVector3d() { @@ -64,16 +59,16 @@ public class PacketLocation { private static final double _2PI = 2 * Math.PI; public Location lookingAt(Location loc) { - return lookingAt(new PacketLocation(loc)).toBukkitLocation(loc.getWorld()); + return lookingAt(new ZLocation(loc)).toBukkitLocation(loc.getWorld()); } - public PacketLocation lookingAt(PacketLocation loc) { + public ZLocation lookingAt(ZLocation loc) { final double x = loc.getX() - this.x; final double z = loc.getZ() - this.z; final double y = loc.getY() - this.y; if (x == 0 && z == 0) { - return new PacketLocation(this.x, this.y, this.z, this.yaw, y > 0 ? -90 : 90); + return new ZLocation(this.x, this.y, this.z, this.yaw, y > 0 ? -90 : 90); } double x2 = NumberConversions.square(x); @@ -84,6 +79,6 @@ public class PacketLocation { float yaw = (float) Math.toDegrees((theta + _2PI) % _2PI); float pitch = (float) Math.toDegrees(Math.atan(-y / xz)); - return new PacketLocation(this.x, this.y, this.z, yaw, pitch); + return new ZLocation(this.x, this.y, this.z, yaw, pitch); } } diff --git a/build.gradle b/build.gradle index b40a852..7cf1348 100644 --- a/build.gradle +++ b/build.gradle @@ -1,103 +1,20 @@ -plugins { - id "java" - id "maven-publish" - id "com.github.johnrengelman.shadow" version "8.1.1" - id "xyz.jpenilla.run-paper" version "2.0.1" -} +subprojects { + apply plugin: "java" -repositories { - mavenCentral() - maven { - url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" + group "lol.pyr" + version "1.0.5" + + compileJava { + options.release.set(16) } - maven { - url "https://repo.papermc.io/repository/maven-public/" - } - maven { - url "https://repo.extendedclip.com/content/repositories/placeholderapi/" - } - maven { - url "https://repo.codemc.io/repository/maven-snapshots/" - } - maven { - url "https://jitpack.io/" - } -} -dependencies { - compileOnly "org.spigotmc:spigot-api:1.19.4-R0.1-SNAPSHOT" - compileOnly "me.clip:placeholderapi:2.11.1" - - compileOnly "com.mojang:authlib:3.4.40" - compileOnly "com.mojang:datafixerupper:6.0.8" - - implementation "commons-io:commons-io:2.11.0" - implementation "com.google.code.gson:gson:2.10.1" - implementation "org.bstats:bstats-bukkit:3.0.2" - implementation "com.github.robertlit:SpigotResourcesAPI:2.0" - implementation "net.kyori:adventure-platform-bukkit:4.3.0" - implementation "net.kyori:adventure-text-minimessage:4.13.1" - implementation "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT" - implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" -} - -group "lol.pyr" -version "1.0.5" - -compileJava { - options.release.set(17) -} - -shadowJar { - archiveClassifier.set "" - relocate "org.bstats", "lol.pyr.znpcsplus.lib.bstats" - relocate "org.apache.commons", "lol.pyr.znpcsplus.lib.commons" - relocate "me.robertlit.spigotresources", "lol.pyr.znpcsplus.lib.spigotresources" - relocate "net.kyori", "lol.pyr.znpcsplus.lib.kyori" - relocate "org.checkerframework", "lol.pyr.znpcsplus.lib.checkerframework" - relocate "javax.annotation", "lol.pyr.znpcsplus.lib.javaxannotation" - relocate "com.google", "lol.pyr.znpcsplus.lib.google" - - relocate "com.github.retrooper.packetevents", "lol.pyr.znpcsplus.lib.packetevents.api" - relocate "io.github.retrooper.packetevents", "lol.pyr.znpcsplus.lib.packetevents.impl" - - relocate "org.yaml.snakeyaml", "lol.pyr.znpcsplus.lib.snakeyaml" - relocate "space.arim.dazzleconf", "lol.pyr.znpcsplus.lib.dazzleconf" - minimize() -} - -processResources { - expand("version": version) -} - -runServer { - minecraftVersion "1.19.4" -} - -tasks.assemble.dependsOn shadowJar -tasks.compileJava.dependsOn clean - -publishing { - publications { - mavenJava(MavenPublication) { - from components.java - - pom { - name.set("znpcsplus") - description.set("A fork of the ZNPCs plugin") - url.set("https://github.com/Pyrbu/ZNPCsPlus") - } - } - } repositories { + mavenCentral() maven { - if (properties.containsKey("DIST_USERNAME") && properties.containsKey("DIST_PASSWORD")) { - credentials { - username properties.get("DIST_USERNAME") - password properties.get("DIST_PASSWORD") - } - } - url = uri("https://repo.pyr.lol/releases/") + url "https://hub.spigotmc.org/nexus/content/repositories/snapshots/" + } + maven { + url "https://repo.codemc.io/repository/maven-snapshots/" } } } \ No newline at end of file diff --git a/plugin/build.gradle b/plugin/build.gradle new file mode 100644 index 0000000..6cc6396 --- /dev/null +++ b/plugin/build.gradle @@ -0,0 +1,64 @@ +plugins { + id "com.github.johnrengelman.shadow" version "8.1.1" + id "xyz.jpenilla.run-paper" version "2.0.1" +} + +repositories { + maven { + url "https://repo.extendedclip.com/content/repositories/placeholderapi/" + } + maven { + url "https://jitpack.io/" + } + maven { + url "https://repo.papermc.io/repository/maven-public/" + } +} + +dependencies { + compileOnly "org.spigotmc:spigot-api:1.19.4-R0.1-SNAPSHOT" + compileOnly "me.clip:placeholderapi:2.11.1" + + compileOnly "com.mojang:authlib:3.4.40" + compileOnly "com.mojang:datafixerupper:4.0.26" + + implementation "commons-io:commons-io:2.11.0" + implementation "com.google.code.gson:gson:2.10.1" + implementation "org.bstats:bstats-bukkit:3.0.2" + implementation "com.github.robertlit:SpigotResourcesAPI:2.0" + implementation "net.kyori:adventure-platform-bukkit:4.3.0" + implementation "net.kyori:adventure-text-minimessage:4.13.1" + implementation "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT" + implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" + + implementation project(":api") +} + +shadowJar { + archiveClassifier.set "" + relocate "org.bstats", "lol.pyr.znpcsplus.lib.bstats" + relocate "org.apache.commons", "lol.pyr.znpcsplus.lib.commons" + relocate "me.robertlit.spigotresources", "lol.pyr.znpcsplus.lib.spigotresources" + relocate "net.kyori", "lol.pyr.znpcsplus.lib.kyori" + relocate "org.checkerframework", "lol.pyr.znpcsplus.lib.checkerframework" + relocate "javax.annotation", "lol.pyr.znpcsplus.lib.javaxannotation" + relocate "com.google", "lol.pyr.znpcsplus.lib.google" + + relocate "com.github.retrooper.packetevents", "lol.pyr.znpcsplus.lib.packetevents.api" + relocate "io.github.retrooper.packetevents", "lol.pyr.znpcsplus.lib.packetevents.impl" + + relocate "org.yaml.snakeyaml", "lol.pyr.znpcsplus.lib.snakeyaml" + relocate "space.arim.dazzleconf", "lol.pyr.znpcsplus.lib.dazzleconf" + minimize() +} + +processResources { + expand("version": version) +} + +runServer { + minecraftVersion "1.19.4" +} + +tasks.assemble.dependsOn shadowJar +tasks.compileJava.dependsOn clean \ No newline at end of file diff --git a/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/UnexpectedCallException.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/gui/ConversationGUI.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/listeners/InventoryListener.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionBuilder.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionLazyLoader.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/ReflectionPackage.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/Reflections.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/ClassReflection.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/FieldReflection.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/reflection/types/MethodReflection.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/user/EventService.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/user/EventService.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/BungeeUtils.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/SchedulerUtils.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/Utils.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventory.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryCallback.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryHolder.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryItem.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/inventory/ZInventoryPage.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackBuilder.java diff --git a/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java b/plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java similarity index 100% rename from src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java rename to plugin/src/main/java/io/github/znetworkw/znpcservers/utility/itemstack/ItemStackSerializer.java diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java new file mode 100644 index 0000000..74becbf --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsApi.java @@ -0,0 +1,20 @@ +package lol.pyr.znpcsplus; + +import lol.pyr.znpcsplus.api.ZApi; +import lol.pyr.znpcsplus.api.NPCRegistry; +import lol.pyr.znpcsplus.api.npc.NPC; +import lol.pyr.znpcsplus.api.npc.NPCType; +import lol.pyr.znpcsplus.util.ZLocation; +import org.bukkit.World; + +public class ZNPCsApi implements ZApi { + @Override + public NPCRegistry getNPCRegistry() { + return lol.pyr.znpcsplus.npc.NPCRegistry.get(); + } + + @Override + public NPC createNPC(World world, NPCType type, ZLocation location) { + return new lol.pyr.znpcsplus.npc.NPC(world, type, location); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java similarity index 90% rename from src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java rename to plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java index 92a58b0..a499d57 100644 --- a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java @@ -7,15 +7,15 @@ import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder import io.github.znetworkw.znpcservers.listeners.InventoryListener; import io.github.znetworkw.znpcservers.utility.BungeeUtils; import io.github.znetworkw.znpcservers.utility.SchedulerUtils; +import lol.pyr.znpcsplus.api.ZApiProvider; +import lol.pyr.znpcsplus.api.npc.EntityProperty; +import lol.pyr.znpcsplus.api.npc.NPCType; import lol.pyr.znpcsplus.config.Configs; -import lol.pyr.znpcsplus.entity.EntityProperty; -import lol.pyr.znpcsplus.entity.PacketLocation; import lol.pyr.znpcsplus.interaction.InteractionPacketListener; import lol.pyr.znpcsplus.interaction.types.ConsoleCommandAction; import lol.pyr.znpcsplus.interaction.types.MessageAction; import lol.pyr.znpcsplus.npc.NPC; import lol.pyr.znpcsplus.npc.NPCRegistry; -import lol.pyr.znpcsplus.npc.NPCType; import lol.pyr.znpcsplus.skin.cache.SkinCache; import lol.pyr.znpcsplus.skin.cache.SkinCacheCleanTask; import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor; @@ -26,6 +26,7 @@ import lol.pyr.znpcsplus.updater.UpdateChecker; import lol.pyr.znpcsplus.updater.UpdateNotificationListener; import lol.pyr.znpcsplus.user.User; import lol.pyr.znpcsplus.user.UserListener; +import lol.pyr.znpcsplus.util.ZLocation; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -126,6 +127,7 @@ public class ZNPCsPlus extends JavaPlugin { new UserListener(this); if (Configs.config().checkForUpdates()) new UpdateNotificationListener(this, new UpdateChecker(this)); + ZApiProvider.register(new ZNPCsApi()); enabled = true; log(ChatColor.WHITE + " * Loading complete! (" + (System.currentTimeMillis() - before) + "ms)"); log(""); @@ -137,7 +139,7 @@ public class ZNPCsPlus extends JavaPlugin { World world = Bukkit.getWorld("world"); if (world == null) world = Bukkit.getWorlds().get(0); for (NPCType type : NPCType.values()) { - NPC npc = new NPC(world, type, new PacketLocation(x * 3, 200, z * 3, 0, 0)); + NPC npc = new NPC(world, type, new ZLocation(x * 3, 200, z * 3, 0, 0)); if (type.getType() == EntityTypes.PLAYER) { SkinCache.fetchByName("Notch").thenAccept(skin -> npc.setProperty(EntityProperty.SKIN, new PrefetchedDescriptor(skin))); npc.setProperty(EntityProperty.INVISIBLE, true); @@ -145,27 +147,28 @@ public class ZNPCsPlus extends JavaPlugin { npc.setProperty(EntityProperty.GLOW, NamedTextColor.RED); // npc.setProperty(EntityProperty.FIRE, true); npc.getHologram().addLine(Component.text("Hello, World!")); - NPCRegistry.register("debug_npc" + (z * wrap + x), npc); + NPCRegistry.get().register("debug_npc" + (z * wrap + x), npc); if (x++ > wrap) { x = 0; z++; } } - NPC npc = new NPC(world, NPCType.byName("player"), new PacketLocation(x * 3, 200, z * 3, 0, 0)); + NPC npc = new NPC(world, NPCType.byName("player"), new ZLocation(x * 3, 200, z * 3, 0, 0)); npc.setProperty(EntityProperty.SKIN, new FetchingDescriptor("jeb_")); npc.addAction(new MessageAction(1000L, "Hi, I'm jeb!")); - NPCRegistry.register("debug_npc" + (z * wrap + x), npc); + NPCRegistry.get().register("debug_npc" + (z * wrap + x), npc); x++; - npc = new NPC(world, NPCType.byName("player"), new PacketLocation(x * 3, 200, z * 3, 0, 0)); + npc = new NPC(world, NPCType.byName("player"), new ZLocation(x * 3, 200, z * 3, 0, 0)); npc.setProperty(EntityProperty.SKIN, new MirrorDescriptor()); npc.addAction(new ConsoleCommandAction(1000L, "kick {player}")); - NPCRegistry.register("debug_npc" + (z * wrap + x), npc); + NPCRegistry.get().register("debug_npc" + (z * wrap + x), npc); } } @Override public void onDisable() { if (!enabled) return; + ZApiProvider.unregister(); Bukkit.getOnlinePlayers().forEach(User::remove); ADVENTURE.close(); ADVENTURE = null; diff --git a/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java b/plugin/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java rename to plugin/src/main/java/lol/pyr/znpcsplus/config/ComponentSerializer.java diff --git a/src/main/java/lol/pyr/znpcsplus/config/Configs.java b/plugin/src/main/java/lol/pyr/znpcsplus/config/Configs.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/config/Configs.java rename to plugin/src/main/java/lol/pyr/znpcsplus/config/Configs.java diff --git a/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java b/plugin/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/config/MainConfig.java rename to plugin/src/main/java/lol/pyr/znpcsplus/config/MainConfig.java diff --git a/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java b/plugin/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java rename to plugin/src/main/java/lol/pyr/znpcsplus/config/MessageConfig.java diff --git a/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java similarity index 88% rename from src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java rename to plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java index e98ed6b..5f4c13c 100644 --- a/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/PacketEntity.java @@ -4,7 +4,9 @@ import com.github.retrooper.packetevents.protocol.entity.type.EntityType; import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; import io.github.znetworkw.znpcservers.reflection.Reflections; import io.github.znetworkw.znpcservers.utility.Utils; +import lol.pyr.znpcsplus.api.PropertyHolder; import lol.pyr.znpcsplus.packets.PacketFactory; +import lol.pyr.znpcsplus.util.ZLocation; import org.bukkit.entity.Player; import java.util.Collection; @@ -16,9 +18,9 @@ public class PacketEntity { private final UUID uuid; private final EntityType type; - private PacketLocation location; + private ZLocation location; - public PacketEntity(PropertyHolder properties, EntityType type, PacketLocation location) { + public PacketEntity(PropertyHolder properties, EntityType type, ZLocation location) { this.properties = properties; this.entityId = reserveEntityID(); this.uuid = UUID.randomUUID(); @@ -30,7 +32,7 @@ public class PacketEntity { return entityId; } - public PacketLocation getLocation() { + public ZLocation getLocation() { return location; } @@ -42,7 +44,7 @@ public class PacketEntity { return type; } - public void setLocation(PacketLocation location, Collection viewers) { + public void setLocation(ZLocation location, Collection viewers) { this.location = location; for (Player viewer : viewers) PacketFactory.get().teleportEntity(viewer, this); } diff --git a/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java b/plugin/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java similarity index 85% rename from src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java rename to plugin/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java index e1e250b..2ca2e07 100644 --- a/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/hologram/Hologram.java @@ -1,7 +1,7 @@ package lol.pyr.znpcsplus.hologram; import lol.pyr.znpcsplus.config.Configs; -import lol.pyr.znpcsplus.entity.PacketLocation; +import lol.pyr.znpcsplus.util.ZLocation; import lol.pyr.znpcsplus.util.Viewable; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; @@ -10,11 +10,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -public class Hologram extends Viewable { - private PacketLocation location; +public class Hologram extends Viewable implements lol.pyr.znpcsplus.api.Hologram { + private ZLocation location; private final List lines = new ArrayList<>(); - public Hologram(PacketLocation location) { + public Hologram(ZLocation location) { this.location = location; } @@ -25,8 +25,8 @@ public class Hologram extends Viewable { for (Player viewer : getViewers()) newLine.show(viewer.getPlayer()); } - public HologramLine getLine(int index) { - return lines.get(index); + public Component getLine(int index) { + return lines.get(index).getText(); } public void removeLine(int index) { @@ -57,7 +57,7 @@ public class Hologram extends Viewable { for (HologramLine line : lines) line.hide(player); } - public void setLocation(PacketLocation location) { + public void setLocation(ZLocation location) { this.location = location; relocateLines(); } diff --git a/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java b/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java similarity index 65% rename from src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java rename to plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java index b98d94e..875ae8a 100644 --- a/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/hologram/HologramLine.java @@ -1,10 +1,10 @@ package lol.pyr.znpcsplus.hologram; import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; -import lol.pyr.znpcsplus.entity.EntityProperty; +import lol.pyr.znpcsplus.api.PropertyHolder; +import lol.pyr.znpcsplus.api.npc.EntityProperty; import lol.pyr.znpcsplus.entity.PacketEntity; -import lol.pyr.znpcsplus.entity.PacketLocation; -import lol.pyr.znpcsplus.entity.PropertyHolder; +import lol.pyr.znpcsplus.util.ZLocation; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; @@ -14,7 +14,7 @@ public class HologramLine implements PropertyHolder { private Component text; private final PacketEntity armorStand; - public HologramLine(PacketLocation location, Component text) { + public HologramLine(ZLocation location, Component text) { this.text = text; armorStand = new PacketEntity(this, EntityTypes.ARMOR_STAND, location); } @@ -35,20 +35,20 @@ public class HologramLine implements PropertyHolder { armorStand.despawn(player); } - public void setLocation(PacketLocation location, Collection viewers) { + public void setLocation(ZLocation location, Collection viewers) { armorStand.setLocation(location, viewers); } @SuppressWarnings("unchecked") @Override public T getProperty(EntityProperty key) { - if (key == EntityProperty.INVISIBLE) return (T) Boolean.TRUE; - if (key == EntityProperty.NAME) return (T) text; + if (key == lol.pyr.znpcsplus.api.npc.EntityProperty.INVISIBLE) return (T) Boolean.TRUE; + if (key == lol.pyr.znpcsplus.api.npc.EntityProperty.NAME) return (T) text; return key.getDefaultValue(); } @Override public boolean hasProperty(EntityProperty key) { - return key == EntityProperty.NAME || key == EntityProperty.INVISIBLE; + return key == lol.pyr.znpcsplus.api.npc.EntityProperty.NAME || key == lol.pyr.znpcsplus.api.npc.EntityProperty.INVISIBLE; } } diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java similarity index 94% rename from src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java index 502efe2..b17e2dd 100644 --- a/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/InteractionPacketListener.java @@ -20,7 +20,7 @@ public class InteractionPacketListener implements PacketListener { User user = User.get(player); if (!user.canInteract()) return; - NPC npc = NPCRegistry.getByEntityId(packet.getEntityId()); + NPC npc = NPCRegistry.get().getByEntityId(packet.getEntityId()); if (npc == null) return; ZNPCsPlus.SCHEDULER.runNextTick(() -> { diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCAction.java diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionDeserializer.java diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/NPCActionType.java diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/ConsoleCommandAction.java diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/MessageAction.java diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/PlayerCommandAction.java diff --git a/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java b/plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java rename to plugin/src/main/java/lol/pyr/znpcsplus/interaction/types/SwitchServerAction.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_13Factory.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14Factory.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_16Factory.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17Factory.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8Factory.java diff --git a/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9Factory.java diff --git a/src/main/java/lol/pyr/znpcsplus/npc/NPC.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPC.java similarity index 88% rename from src/main/java/lol/pyr/znpcsplus/npc/NPC.java rename to plugin/src/main/java/lol/pyr/znpcsplus/npc/NPC.java index 4f4d038..fd086f9 100644 --- a/src/main/java/lol/pyr/znpcsplus/npc/NPC.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPC.java @@ -1,32 +1,32 @@ package lol.pyr.znpcsplus.npc; -import lol.pyr.znpcsplus.entity.EntityProperty; +import lol.pyr.znpcsplus.api.npc.EntityProperty; +import lol.pyr.znpcsplus.api.npc.NPCType; import lol.pyr.znpcsplus.entity.PacketEntity; -import lol.pyr.znpcsplus.entity.PacketLocation; -import lol.pyr.znpcsplus.entity.PropertyHolder; import lol.pyr.znpcsplus.hologram.Hologram; import lol.pyr.znpcsplus.interaction.NPCAction; import lol.pyr.znpcsplus.util.Viewable; +import lol.pyr.znpcsplus.util.ZLocation; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; import java.util.*; -public class NPC extends Viewable implements PropertyHolder { +public class NPC extends Viewable implements lol.pyr.znpcsplus.api.npc.NPC { protected static final Set _ALL_NPCS = new HashSet<>(); private final Set viewers = new HashSet<>(); private final String worldName; private PacketEntity entity; - private PacketLocation location; + private ZLocation location; private NPCType type; private final Hologram hologram; private final Map, Object> propertyMap = new HashMap<>(); private final Set actions = new HashSet<>(); - public NPC(World world, NPCType type, PacketLocation location) { + public NPC(World world, NPCType type, ZLocation location) { this.worldName = world.getName(); this.type = type; this.location = location; @@ -50,11 +50,11 @@ public class NPC extends Viewable implements PropertyHolder { return entity; } - public PacketLocation getLocation() { + public ZLocation getLocation() { return location; } - public void setLocation(PacketLocation location) { + public void setLocation(ZLocation location) { this.location = location; entity.setLocation(location, viewers); hologram.setLocation(location.withY(location.getY() + type.getHologramOffset())); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java new file mode 100644 index 0000000..2cb069f --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java @@ -0,0 +1,46 @@ +package lol.pyr.znpcsplus.npc; + +import lol.pyr.znpcsplus.api.npc.NPC; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class NPCRegistry implements lol.pyr.znpcsplus.api.NPCRegistry { + private final static NPCRegistry registry = new NPCRegistry(); + + public static NPCRegistry get() { + return registry; + } + + private final Map npcMap = new HashMap<>(); + + private NPCRegistry() { + if (registry != null) throw new UnsupportedOperationException("This class can only be instanciated once!"); + } + + public NPC get(String id) { + return npcMap.get(id); + } + + public Collection all() { + return Collections.unmodifiableSet(lol.pyr.znpcsplus.npc.NPC._ALL_NPCS); + } + + public lol.pyr.znpcsplus.npc.NPC getByEntityId(int id) { + return all().stream().filter(npc -> npc.getEntity().getEntityId() == id).findFirst().orElse(null); + } + + public Collection getRegisteredIds() { + return Collections.unmodifiableSet(npcMap.keySet()); + } + + public void register(String id, NPC npc) { + npcMap.put(id, npc); + } + + public void unregister(String id) { + npcMap.remove(id); + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java similarity index 98% rename from src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java index 58eb9e5..865ffab 100644 --- a/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java @@ -5,7 +5,7 @@ import com.github.retrooper.packetevents.manager.server.ServerVersion; import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import lol.pyr.znpcsplus.ZNPCsPlus; import lol.pyr.znpcsplus.entity.PacketEntity; -import lol.pyr.znpcsplus.entity.PropertyHolder; +import lol.pyr.znpcsplus.api.PropertyHolder; import lol.pyr.znpcsplus.util.LazyLoader; import org.bukkit.entity.Player; diff --git a/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java similarity index 80% rename from src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java index fdbad60..310b15c 100644 --- a/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_14Factory.java @@ -2,9 +2,9 @@ package lol.pyr.znpcsplus.packets; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity; import lol.pyr.znpcsplus.entity.PacketEntity; -import lol.pyr.znpcsplus.entity.PacketLocation; -import lol.pyr.znpcsplus.entity.EntityProperty; -import lol.pyr.znpcsplus.entity.PropertyHolder; +import lol.pyr.znpcsplus.util.ZLocation; +import lol.pyr.znpcsplus.api.npc.EntityProperty; +import lol.pyr.znpcsplus.api.PropertyHolder; import org.bukkit.entity.Player; import java.util.Optional; @@ -12,7 +12,7 @@ import java.util.Optional; public class V1_14Factory extends V1_9Factory { @Override public void spawnEntity(Player player, PacketEntity entity, PropertyHolder properties) { - PacketLocation location = entity.getLocation(); + ZLocation location = entity.getLocation(); sendPacket(player, new WrapperPlayServerSpawnEntity(entity.getEntityId(), Optional.of(entity.getUuid()), entity.getType(), location.toVector3d(), location.getPitch(), location.getYaw(), location.getYaw(), 0, Optional.empty())); if (properties.hasProperty(EntityProperty.GLOW)) createTeam(player, entity, properties); diff --git a/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java similarity index 97% rename from src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java index 9d6522c..88be188 100644 --- a/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_19Factory.java @@ -6,7 +6,7 @@ import com.github.retrooper.packetevents.protocol.player.UserProfile; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoRemove; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoUpdate; import lol.pyr.znpcsplus.entity.PacketEntity; -import lol.pyr.znpcsplus.entity.PropertyHolder; +import lol.pyr.znpcsplus.api.PropertyHolder; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; diff --git a/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java similarity index 94% rename from src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java index 122fd88..1a9cb34 100644 --- a/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8Factory.java @@ -11,12 +11,12 @@ import com.github.retrooper.packetevents.util.Vector3d; import com.github.retrooper.packetevents.wrapper.PacketWrapper; import com.github.retrooper.packetevents.wrapper.play.server.*; import lol.pyr.znpcsplus.ZNPCsPlus; +import lol.pyr.znpcsplus.api.PropertyHolder; +import lol.pyr.znpcsplus.api.npc.EntityProperty; import lol.pyr.znpcsplus.entity.PacketEntity; -import lol.pyr.znpcsplus.entity.PacketLocation; import lol.pyr.znpcsplus.metadata.MetadataFactory; -import lol.pyr.znpcsplus.entity.EntityProperty; -import lol.pyr.znpcsplus.entity.PropertyHolder; -import lol.pyr.znpcsplus.skin.SkinDescriptor; +import lol.pyr.znpcsplus.skin.BaseSkinDescriptor; +import lol.pyr.znpcsplus.util.ZLocation; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; @@ -31,7 +31,7 @@ public class V1_8Factory implements PacketFactory { public void spawnPlayer(Player player, PacketEntity entity, PropertyHolder properties) { addTabPlayer(player, entity, properties).thenAccept(ignored -> { createTeam(player, entity, properties); - PacketLocation location = entity.getLocation(); + ZLocation location = entity.getLocation(); sendPacket(player, new WrapperPlayServerSpawnPlayer(entity.getEntityId(), entity.getUuid(), location.toVector3d(), location.getYaw(), location.getPitch(), List.of())); sendAllMetadata(player, entity, properties); @@ -41,7 +41,7 @@ public class V1_8Factory implements PacketFactory { @Override public void spawnEntity(Player player, PacketEntity entity, PropertyHolder properties) { - PacketLocation location = entity.getLocation(); + ZLocation location = entity.getLocation(); EntityType type = entity.getType(); ClientVersion clientVersion = PacketEvents.getAPI().getServerManager().getVersion().toClientVersion(); sendPacket(player, type.getLegacyId(clientVersion) == -1 ? @@ -60,7 +60,7 @@ public class V1_8Factory implements PacketFactory { @Override public void teleportEntity(Player player, PacketEntity entity) { - PacketLocation location = entity.getLocation(); + ZLocation location = entity.getLocation(); sendPacket(player, new WrapperPlayServerEntityTeleport(entity.getEntityId(), location.toVector3d(), location.getYaw(), location.getPitch(), true)); } @@ -127,7 +127,7 @@ public class V1_8Factory implements PacketFactory { protected CompletableFuture skinned(Player player, PropertyHolder properties, UserProfile profile) { if (!properties.hasProperty(EntityProperty.SKIN)) return CompletableFuture.completedFuture(profile); - SkinDescriptor descriptor = properties.getProperty(EntityProperty.SKIN); + BaseSkinDescriptor descriptor = (BaseSkinDescriptor) properties.getProperty(EntityProperty.SKIN); if (descriptor.supportsInstant(player)) { descriptor.fetchInstant(player).apply(profile); return CompletableFuture.completedFuture(profile); diff --git a/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java similarity index 95% rename from src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java rename to plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java index 009d66c..e680e61 100644 --- a/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_9Factory.java @@ -4,8 +4,8 @@ import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; import lol.pyr.znpcsplus.entity.PacketEntity; import lol.pyr.znpcsplus.metadata.MetadataFactory; -import lol.pyr.znpcsplus.entity.EntityProperty; -import lol.pyr.znpcsplus.entity.PropertyHolder; +import lol.pyr.znpcsplus.api.npc.EntityProperty; +import lol.pyr.znpcsplus.api.PropertyHolder; import org.bukkit.entity.Player; import java.util.ArrayList; diff --git a/src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptor.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java similarity index 86% rename from src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptor.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java index 0c5ad23..3749d35 100644 --- a/src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptor.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/skin/BaseSkinDescriptor.java @@ -4,7 +4,7 @@ import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -public interface SkinDescriptor { +public interface BaseSkinDescriptor { CompletableFuture fetch(Player player); Skin fetchInstant(Player player); boolean supportsInstant(Player player); diff --git a/src/main/java/lol/pyr/znpcsplus/skin/Skin.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/Skin.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/skin/Skin.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/Skin.java diff --git a/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/CachedId.java diff --git a/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java similarity index 87% rename from src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java index ff2afec..a04bc39 100644 --- a/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCache.java @@ -22,11 +22,11 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; public class SkinCache { - private final static Map cache = new ConcurrentHashMap<>(); + private final static Map cache = new ConcurrentHashMap<>(); private final static Map idCache = new ConcurrentHashMap<>(); public static void cleanCache() { - for (Map.Entry entry : cache.entrySet()) if (entry.getValue().isExpired()) cache.remove(entry.getKey()); + for (Map.Entry entry : cache.entrySet()) if (entry.getValue().isExpired()) cache.remove(entry.getKey()); for (Map.Entry entry : idCache.entrySet()) if (entry.getValue().isExpired()) cache.remove(entry.getKey()); } @@ -68,16 +68,16 @@ public class SkinCache { if (!idCache.containsKey(name)) return false; CachedId id = idCache.get(name); if (id.isExpired() || !cache.containsKey(id.getId())) return false; - Skin skin = cache.get(id.getId()); + lol.pyr.znpcsplus.skin.Skin skin = cache.get(id.getId()); return !skin.isExpired(); } - public static Skin getFullyCachedByName(String s) { + public static lol.pyr.znpcsplus.skin.Skin getFullyCachedByName(String s) { String name = s.toLowerCase(); if (!idCache.containsKey(name)) return null; CachedId id = idCache.get(name); if (id.isExpired() || !cache.containsKey(id.getId())) return null; - Skin skin = cache.get(id.getId()); + lol.pyr.znpcsplus.skin.Skin skin = cache.get(id.getId()); if (skin.isExpired()) return null; return skin; } @@ -87,7 +87,7 @@ public class SkinCache { if (player != null && player.isOnline()) return CompletableFuture.completedFuture(getFromPlayer(player)); if (cache.containsKey(uuid)) { - Skin skin = cache.get(uuid); + lol.pyr.znpcsplus.skin.Skin skin = cache.get(uuid); if (!skin.isExpired()) return CompletableFuture.completedFuture(skin); } @@ -98,7 +98,7 @@ public class SkinCache { connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); try (Reader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)) { - Skin skin = new Skin(JsonParser.parseReader(reader).getAsJsonObject()); + lol.pyr.znpcsplus.skin.Skin skin = new lol.pyr.znpcsplus.skin.Skin(JsonParser.parseReader(reader).getAsJsonObject()); cache.put(uuid, skin); return skin; } @@ -115,7 +115,7 @@ public class SkinCache { try { Object playerHandle = Reflections.GET_HANDLE_PLAYER_METHOD.get().invoke(player); GameProfile gameProfile = (GameProfile) Reflections.GET_PROFILE_METHOD.get().invoke(playerHandle, new Object[0]); - return new Skin(gameProfile.getProperties()); + return new lol.pyr.znpcsplus.skin.Skin(gameProfile.getProperties()); } catch (IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); } diff --git a/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/cache/SkinCacheCleanTask.java diff --git a/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java similarity index 84% rename from src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java index 7c024cc..6a01aa7 100644 --- a/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/FetchingDescriptor.java @@ -1,15 +1,16 @@ package lol.pyr.znpcsplus.skin.descriptor; import lol.pyr.znpcsplus.ZNPCsPlus; +import lol.pyr.znpcsplus.api.skin.SkinDescriptor; +import lol.pyr.znpcsplus.skin.BaseSkinDescriptor; import lol.pyr.znpcsplus.skin.Skin; -import lol.pyr.znpcsplus.skin.SkinDescriptor; import lol.pyr.znpcsplus.skin.cache.SkinCache; import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -public class FetchingDescriptor implements SkinDescriptor { +public class FetchingDescriptor implements BaseSkinDescriptor, SkinDescriptor { private final String name; public FetchingDescriptor(String name) { diff --git a/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java similarity index 77% rename from src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java index d2d124d..81379a7 100644 --- a/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/MirrorDescriptor.java @@ -1,13 +1,14 @@ package lol.pyr.znpcsplus.skin.descriptor; +import lol.pyr.znpcsplus.api.skin.SkinDescriptor; +import lol.pyr.znpcsplus.skin.BaseSkinDescriptor; import lol.pyr.znpcsplus.skin.Skin; -import lol.pyr.znpcsplus.skin.SkinDescriptor; import lol.pyr.znpcsplus.skin.cache.SkinCache; import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -public class MirrorDescriptor implements SkinDescriptor { +public class MirrorDescriptor implements BaseSkinDescriptor, SkinDescriptor { public MirrorDescriptor() {} diff --git a/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java similarity index 76% rename from src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java rename to plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java index c08d2e6..b388051 100644 --- a/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/skin/descriptor/PrefetchedDescriptor.java @@ -1,12 +1,13 @@ package lol.pyr.znpcsplus.skin.descriptor; +import lol.pyr.znpcsplus.api.skin.SkinDescriptor; +import lol.pyr.znpcsplus.skin.BaseSkinDescriptor; import lol.pyr.znpcsplus.skin.Skin; -import lol.pyr.znpcsplus.skin.SkinDescriptor; import org.bukkit.entity.Player; import java.util.concurrent.CompletableFuture; -public class PrefetchedDescriptor implements SkinDescriptor { +public class PrefetchedDescriptor implements BaseSkinDescriptor, SkinDescriptor { private final Skin skin; public PrefetchedDescriptor(Skin skin) { diff --git a/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java similarity index 90% rename from src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java rename to plugin/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java index 6a9f105..5b2a669 100644 --- a/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NPCVisibilityTask.java @@ -16,7 +16,7 @@ public class NPCVisibilityTask extends BukkitRunnable { public void run() { double distSq = NumberConversions.square(Configs.config().viewDistance()); - for (NPC npc : NPCRegistry.all()) for (Player player : Bukkit.getOnlinePlayers()) { + for (NPC npc : NPCRegistry.get().all()) for (Player player : Bukkit.getOnlinePlayers()) { boolean inRange = (player.getWorld() == npc.getWorld() && player.getLocation().distanceSquared(npc.getLocation().toBukkitLocation(npc.getWorld())) <= distSq); if (!inRange && npc.isShown(player)) npc.hide(player); if (inRange && !npc.isShown(player)) npc.show(player); diff --git a/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java b/plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java rename to plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java diff --git a/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java b/plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java rename to plugin/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java diff --git a/src/main/java/lol/pyr/znpcsplus/user/User.java b/plugin/src/main/java/lol/pyr/znpcsplus/user/User.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/user/User.java rename to plugin/src/main/java/lol/pyr/znpcsplus/user/User.java diff --git a/src/main/java/lol/pyr/znpcsplus/user/UserListener.java b/plugin/src/main/java/lol/pyr/znpcsplus/user/UserListener.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/user/UserListener.java rename to plugin/src/main/java/lol/pyr/znpcsplus/user/UserListener.java diff --git a/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java rename to plugin/src/main/java/lol/pyr/znpcsplus/util/LazyLoader.java diff --git a/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/util/StringUtils.java rename to plugin/src/main/java/lol/pyr/znpcsplus/util/StringUtils.java diff --git a/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java similarity index 100% rename from src/main/java/lol/pyr/znpcsplus/util/Viewable.java rename to plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java diff --git a/src/main/resources/plugin.yml b/plugin/src/main/resources/plugin.yml similarity index 100% rename from src/main/resources/plugin.yml rename to plugin/src/main/resources/plugin.yml diff --git a/settings.gradle b/settings.gradle index 82ab976..13c6ed6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ -rootProject.name = 'ZNPCsPlus' +rootProject.name = "ZNPCsPlus" +include "api", "plugin" \ No newline at end of file diff --git a/src/main/java/lol/pyr/znpcsplus/entity/PropertyHolder.java b/src/main/java/lol/pyr/znpcsplus/entity/PropertyHolder.java deleted file mode 100644 index a776fcb..0000000 --- a/src/main/java/lol/pyr/znpcsplus/entity/PropertyHolder.java +++ /dev/null @@ -1,18 +0,0 @@ -package lol.pyr.znpcsplus.entity; - -public interface PropertyHolder { - T getProperty(EntityProperty key); - boolean hasProperty(EntityProperty key); - - PropertyHolder EMPTY = new PropertyHolder() { - @Override - public T getProperty(EntityProperty key) { - return null; - } - - @Override - public boolean hasProperty(EntityProperty key) { - return false; - } - }; -} diff --git a/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java b/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java deleted file mode 100644 index 54b3639..0000000 --- a/src/main/java/lol/pyr/znpcsplus/npc/NPCRegistry.java +++ /dev/null @@ -1,34 +0,0 @@ -package lol.pyr.znpcsplus.npc; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -public class NPCRegistry { - private static final Map npcMap = new HashMap<>(); - - public static NPC get(String id) { - return npcMap.get(id); - } - - public static Collection all() { - return Collections.unmodifiableSet(NPC._ALL_NPCS); - } - - public static NPC getByEntityId(int id) { - return all().stream().filter(npc -> npc.getEntity().getEntityId() == id).findFirst().orElse(null); - } - - public static Collection ids() { - return Collections.unmodifiableSet(npcMap.keySet()); - } - - public static void register(String id, NPC npc) { - npcMap.put(id, npc); - } - - public static void unregister(String id) { - npcMap.remove(id); - } -}