From 6b75423f9cb5be9991321d1bf54dd99c35d62036 Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 23 Jun 2023 23:12:24 +0200 Subject: [PATCH] add skin descriptor factory to the api --- .../java/lol/pyr/znpcsplus/api/NpcApi.java | 2 + .../api/skin/SkinDescriptorFactory.java | 8 ++++ .../java/lol/pyr/znpcsplus/ZNpcsPlus.java | 2 +- .../java/lol/pyr/znpcsplus/ZNpcsPlusApi.java | 12 +++++- .../skin/SkinDescriptorFactoryImpl.java | 38 +++++++++++++++++++ 5 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptorFactory.java create mode 100644 plugin/src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptorFactoryImpl.java diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/NpcApi.java b/api/src/main/java/lol/pyr/znpcsplus/api/NpcApi.java index 5e9ad4b..fe98d71 100644 --- a/api/src/main/java/lol/pyr/znpcsplus/api/NpcApi.java +++ b/api/src/main/java/lol/pyr/znpcsplus/api/NpcApi.java @@ -3,9 +3,11 @@ package lol.pyr.znpcsplus.api; import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry; import lol.pyr.znpcsplus.api.npc.NpcRegistry; import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry; +import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory; public interface NpcApi { NpcRegistry getNpcRegistry(); NpcTypeRegistry getNpcTypeRegistry(); EntityPropertyRegistry getPropertyRegistry(); + SkinDescriptorFactory getSkinDescriptorFactory(); } diff --git a/api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptorFactory.java b/api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptorFactory.java new file mode 100644 index 0000000..ba67e88 --- /dev/null +++ b/api/src/main/java/lol/pyr/znpcsplus/api/skin/SkinDescriptorFactory.java @@ -0,0 +1,8 @@ +package lol.pyr.znpcsplus.api.skin; + +public interface SkinDescriptorFactory { + SkinDescriptor createMirrorDescriptor(); + SkinDescriptor createRefreshingDescriptor(String playerName); + SkinDescriptor createStaticDescriptor(String playerName); + SkinDescriptor createStaticDescriptor(String texture, String signature); +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index bf552f5..68ad3de 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -175,7 +175,7 @@ public class ZNpcsPlus extends JavaPlugin { shutdownTasks.add(adventure::close); if (configManager.getConfig().autoSaveEnabled()) shutdownTasks.add(npcRegistry::save); - NpcApiProvider.register(this, new ZNpcsPlusApi(npcRegistry, typeRegistry, propertyRegistry)); + NpcApiProvider.register(this, new ZNpcsPlusApi(npcRegistry, typeRegistry, propertyRegistry, skinCache)); enabled = true; log(ChatColor.WHITE + " * Loading complete! (" + (System.currentTimeMillis() - before) + "ms)"); log(""); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusApi.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusApi.java index c8d43be..f6a77ce 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusApi.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlusApi.java @@ -4,19 +4,24 @@ import lol.pyr.znpcsplus.api.NpcApi; import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry; import lol.pyr.znpcsplus.api.npc.NpcRegistry; import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry; +import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.npc.NpcRegistryImpl; import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; +import lol.pyr.znpcsplus.skin.SkinDescriptorFactoryImpl; +import lol.pyr.znpcsplus.skin.cache.SkinCache; public class ZNpcsPlusApi implements NpcApi { private final NpcRegistryImpl npcRegistry; private final NpcTypeRegistryImpl typeRegistry; private final EntityPropertyRegistryImpl propertyRegistry; + private final SkinDescriptorFactoryImpl skinDescriptorFactory; - public ZNpcsPlusApi(NpcRegistryImpl npcRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry) { + public ZNpcsPlusApi(NpcRegistryImpl npcRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, SkinCache skinCache) { this.npcRegistry = npcRegistry; this.typeRegistry = typeRegistry; this.propertyRegistry = propertyRegistry; + this.skinDescriptorFactory = new SkinDescriptorFactoryImpl(skinCache); } @Override @@ -33,4 +38,9 @@ public class ZNpcsPlusApi implements NpcApi { public EntityPropertyRegistry getPropertyRegistry() { return propertyRegistry; } + + @Override + public SkinDescriptorFactory getSkinDescriptorFactory() { + return skinDescriptorFactory; + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptorFactoryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptorFactoryImpl.java new file mode 100644 index 0000000..00209cd --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/skin/SkinDescriptorFactoryImpl.java @@ -0,0 +1,38 @@ +package lol.pyr.znpcsplus.skin; + +import lol.pyr.znpcsplus.api.skin.SkinDescriptor; +import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory; +import lol.pyr.znpcsplus.skin.cache.SkinCache; +import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor; +import lol.pyr.znpcsplus.skin.descriptor.MirrorDescriptor; +import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor; + +public class SkinDescriptorFactoryImpl implements SkinDescriptorFactory { + private final SkinCache skinCache; + private final MirrorDescriptor mirrorDescriptor; + + public SkinDescriptorFactoryImpl(SkinCache skinCache) { + this.skinCache = skinCache; + mirrorDescriptor = new MirrorDescriptor(skinCache); + } + + @Override + public SkinDescriptor createMirrorDescriptor() { + return mirrorDescriptor; + } + + @Override + public SkinDescriptor createRefreshingDescriptor(String playerName) { + return new FetchingDescriptor(skinCache, playerName); + } + + @Override + public SkinDescriptor createStaticDescriptor(String playerName) { + return PrefetchedDescriptor.forPlayer(skinCache, playerName).join(); + } + + @Override + public SkinDescriptor createStaticDescriptor(String texture, String signature) { + return new PrefetchedDescriptor(new Skin(texture, signature)); + } +}