Added skin descriptor fetching by UUID
This commit is contained in:
parent
ca8a1d6499
commit
0258450383
7 changed files with 60 additions and 10 deletions
|
@ -1,6 +1,7 @@
|
|||
package lol.pyr.znpcsplus.api.skin;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Factory for creating skin descriptors.
|
||||
|
@ -8,6 +9,7 @@ import java.net.URL;
|
|||
public interface SkinDescriptorFactory {
|
||||
SkinDescriptor createMirrorDescriptor();
|
||||
SkinDescriptor createRefreshingDescriptor(String playerName);
|
||||
SkinDescriptor createRefreshingDescriptor(UUID playerUUID);
|
||||
SkinDescriptor createStaticDescriptor(String playerName);
|
||||
SkinDescriptor createStaticDescriptor(String texture, String signature);
|
||||
SkinDescriptor createUrlDescriptor(String url, String variant);
|
||||
|
|
|
@ -11,7 +11,7 @@ import lol.pyr.znpcsplus.npc.NpcImpl;
|
|||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
|
||||
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.NameFetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.MirrorDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
@ -67,7 +67,7 @@ public class SkinCommand implements CommandHandler {
|
|||
} else if (type.equalsIgnoreCase("dynamic")) {
|
||||
context.ensureArgsNotEmpty();
|
||||
String name = context.dumpAllArgs();
|
||||
npc.setProperty(propertyRegistry.getByName("skin", SkinDescriptor.class), new FetchingDescriptor(skinCache, name));
|
||||
npc.setProperty(propertyRegistry.getByName("skin", SkinDescriptor.class), new NameFetchingDescriptor(skinCache, name));
|
||||
npc.respawn();
|
||||
context.halt(Component.text("The NPC's skin will now be resolved per-player from \"" + name + "\""));
|
||||
} else if (type.equalsIgnoreCase("url")) {
|
||||
|
|
|
@ -25,7 +25,7 @@ import lol.pyr.znpcsplus.packets.PacketFactory;
|
|||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||
import lol.pyr.znpcsplus.skin.SkinImpl;
|
||||
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.NameFetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.MirrorDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor;
|
||||
import lol.pyr.znpcsplus.util.BungeeConnector;
|
||||
|
@ -175,7 +175,7 @@ public class ZNpcImporter implements DataImporter {
|
|||
}
|
||||
|
||||
if (model.getSkinName() != null) {
|
||||
npc.setProperty(propertyRegistry.getByName("skin", SkinDescriptor.class), new FetchingDescriptor(skinCache, model.getSkinName()));
|
||||
npc.setProperty(propertyRegistry.getByName("skin", SkinDescriptor.class), new NameFetchingDescriptor(skinCache, model.getSkinName()));
|
||||
}
|
||||
else if (model.getSkin() != null && model.getSignature() != null) {
|
||||
npc.setProperty(propertyRegistry.getByName("skin", SkinDescriptor.class), new PrefetchedDescriptor(new SkinImpl(model.getSkin(), model.getSignature())));
|
||||
|
|
|
@ -3,7 +3,7 @@ package lol.pyr.znpcsplus.skin;
|
|||
import com.github.retrooper.packetevents.protocol.player.TextureProperty;
|
||||
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.NameFetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.MirrorDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -22,7 +22,7 @@ public interface BaseSkinDescriptor extends SkinDescriptor {
|
|||
static BaseSkinDescriptor deserialize(MojangSkinCache skinCache, String str) {
|
||||
String[] arr = str.split(";");
|
||||
if (arr[0].equalsIgnoreCase("mirror")) return new MirrorDescriptor(skinCache);
|
||||
else if (arr[0].equalsIgnoreCase("fetching")) return new FetchingDescriptor(skinCache, String.join(";", Arrays.copyOfRange(arr, 1, arr.length)));
|
||||
else if (arr[0].equalsIgnoreCase("fetching")) return new NameFetchingDescriptor(skinCache, String.join(";", Arrays.copyOfRange(arr, 1, arr.length)));
|
||||
else if (arr[0].equalsIgnoreCase("prefetched")) {
|
||||
List<TextureProperty> properties = new ArrayList<>();
|
||||
for (int i = 0; i < (arr.length - 1) / 3; i++) {
|
||||
|
|
|
@ -3,12 +3,14 @@ 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.MojangSkinCache;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.FetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.NameFetchingDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.MirrorDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.PrefetchedDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.descriptor.UUIDFetchingDescriptor;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.UUID;
|
||||
|
||||
public class SkinDescriptorFactoryImpl implements SkinDescriptorFactory {
|
||||
private final MojangSkinCache skinCache;
|
||||
|
@ -26,7 +28,12 @@ public class SkinDescriptorFactoryImpl implements SkinDescriptorFactory {
|
|||
|
||||
@Override
|
||||
public SkinDescriptor createRefreshingDescriptor(String playerName) {
|
||||
return new FetchingDescriptor(skinCache, playerName);
|
||||
return new NameFetchingDescriptor(skinCache, playerName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkinDescriptor createRefreshingDescriptor(UUID playerUUID) {
|
||||
return new UUIDFetchingDescriptor(skinCache, playerUUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,11 +9,11 @@ import org.bukkit.entity.Player;
|
|||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class FetchingDescriptor implements BaseSkinDescriptor, SkinDescriptor {
|
||||
public class NameFetchingDescriptor implements BaseSkinDescriptor, SkinDescriptor {
|
||||
private final MojangSkinCache skinCache;
|
||||
private final String name;
|
||||
|
||||
public FetchingDescriptor(MojangSkinCache skinCache, String name) {
|
||||
public NameFetchingDescriptor(MojangSkinCache skinCache, String name) {
|
||||
this.skinCache = skinCache;
|
||||
this.name = name;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
package lol.pyr.znpcsplus.skin.descriptor;
|
||||
|
||||
import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.BaseSkinDescriptor;
|
||||
import lol.pyr.znpcsplus.skin.SkinImpl;
|
||||
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class UUIDFetchingDescriptor implements BaseSkinDescriptor, SkinDescriptor {
|
||||
|
||||
private final MojangSkinCache skinCache;
|
||||
private final UUID uuid;
|
||||
|
||||
public UUIDFetchingDescriptor(MojangSkinCache skinCache, UUID uuid) {
|
||||
this.skinCache = skinCache;
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<SkinImpl> fetch(Player player) {
|
||||
return skinCache.fetchByUUID(uuid.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkinImpl fetchInstant(Player player) {
|
||||
return fetch(player).join();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsInstant(Player player) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serialize() {
|
||||
return "fetching;" + uuid.toString();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue