add skin descriptor factory to the api

This commit is contained in:
Pyrbu 2023-06-23 23:12:24 +02:00
parent d91d86ca88
commit 6b75423f9c
5 changed files with 60 additions and 2 deletions

@ -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();
}

@ -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);
}

@ -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("");

@ -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;
}
}

@ -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));
}
}