mirror of
https://github.com/FancyInnovations/FancyPlugins.git
synced 2025-12-06 07:43:36 +00:00
fn: Add general SkinGenerationRequest class
This commit is contained in:
@@ -2,11 +2,13 @@ package de.oliver.fancynpcs.skins;
|
||||
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
public interface SkinGenerationQueue<R> {
|
||||
public interface SkinGenerationQueue {
|
||||
|
||||
void run();
|
||||
|
||||
void add(R request);
|
||||
void add(SkinGenerationRequest request);
|
||||
|
||||
void clear();
|
||||
|
||||
ScheduledFuture<?> getScheduler();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package de.oliver.fancynpcs.skins;
|
||||
|
||||
import de.oliver.fancynpcs.api.skins.SkinData;
|
||||
import org.mineskin.request.GenerateRequest;
|
||||
|
||||
public class SkinGenerationRequest {
|
||||
|
||||
private final String id;
|
||||
private final SkinData.SkinVariant variant;
|
||||
private final GenerateRequest mineskinRequest;
|
||||
|
||||
public SkinGenerationRequest(String id, SkinData.SkinVariant variant, GenerateRequest mineskinRequest) {
|
||||
this.id = id;
|
||||
this.variant = variant;
|
||||
this.mineskinRequest = mineskinRequest;
|
||||
}
|
||||
|
||||
public SkinGenerationRequest(String id, SkinData.SkinVariant variant) {
|
||||
this.id = id;
|
||||
this.variant = variant;
|
||||
this.mineskinRequest = null;
|
||||
}
|
||||
|
||||
public String getID() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public SkinData.SkinVariant getVariant() {
|
||||
return variant;
|
||||
}
|
||||
|
||||
public GenerateRequest getMineskinRequest() {
|
||||
return mineskinRequest;
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,6 @@ import de.oliver.fancynpcs.api.skins.SkinLoadException;
|
||||
import de.oliver.fancynpcs.api.skins.SkinManager;
|
||||
import de.oliver.fancynpcs.skins.cache.SkinCache;
|
||||
import de.oliver.fancynpcs.skins.cache.SkinCacheData;
|
||||
import de.oliver.fancynpcs.skins.mineskin.MineSkinQueue;
|
||||
import de.oliver.fancynpcs.skins.mojang.MojangQueue;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.lushplugins.chatcolorhandler.ChatColorHandler;
|
||||
@@ -37,10 +35,10 @@ public class SkinManagerImpl implements SkinManager, Listener {
|
||||
|
||||
private final SkinCache fileCache;
|
||||
private final SkinCache memCache;
|
||||
private final SkinGenerationQueue<MojangQueue.SkinRequest> mojangQueue;
|
||||
private final SkinGenerationQueue<MineSkinQueue.SkinRequest> mineSkinQueue;
|
||||
private final SkinGenerationQueue mojangQueue;
|
||||
private final SkinGenerationQueue mineSkinQueue;
|
||||
|
||||
public SkinManagerImpl(SkinCache fileCache, SkinCache memCache, SkinGenerationQueue<MojangQueue.SkinRequest> mojangQueue, SkinGenerationQueue<MineSkinQueue.SkinRequest> mineSkinQueue) {
|
||||
public SkinManagerImpl(SkinCache fileCache, SkinCache memCache, SkinGenerationQueue mojangQueue, SkinGenerationQueue mineSkinQueue) {
|
||||
this.fileCache = fileCache;
|
||||
this.memCache = memCache;
|
||||
this.mojangQueue = mojangQueue;
|
||||
@@ -86,7 +84,7 @@ public class SkinManagerImpl implements SkinManager, Listener {
|
||||
return cached;
|
||||
}
|
||||
|
||||
mojangQueue.add(new MojangQueue.SkinRequest(uuid.toString(), variant));
|
||||
mojangQueue.add(new SkinGenerationRequest(uuid.toString(), variant));
|
||||
|
||||
// GenerateRequest genReq = GenerateRequest.user(uuid);
|
||||
// genReq.variant(Variant.valueOf(variant.name()));
|
||||
@@ -124,7 +122,7 @@ public class SkinManagerImpl implements SkinManager, Listener {
|
||||
throw new SkinLoadException(SkinLoadException.Reason.INVALID_URL, "(URL = '" + url + "')");
|
||||
}
|
||||
genReq.variant(Variant.valueOf(variant.name()));
|
||||
mineSkinQueue.add(new MineSkinQueue.SkinRequest(url, genReq));
|
||||
mineSkinQueue.add(new SkinGenerationRequest(url, variant, genReq));
|
||||
return new SkinData(url, variant);
|
||||
}
|
||||
|
||||
@@ -142,7 +140,7 @@ public class SkinManagerImpl implements SkinManager, Listener {
|
||||
|
||||
GenerateRequest genReq = GenerateRequest.upload(file);
|
||||
genReq.variant(Variant.valueOf(variant.name()));
|
||||
mineSkinQueue.add(new MineSkinQueue.SkinRequest(filePath, genReq));
|
||||
mineSkinQueue.add(new SkinGenerationRequest(filePath, variant, genReq));
|
||||
return new SkinData(filePath, variant);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,21 +4,21 @@ import de.oliver.fancynpcs.FancyNpcs;
|
||||
import de.oliver.fancynpcs.api.skins.SkinData;
|
||||
import de.oliver.fancynpcs.api.skins.SkinGeneratedEvent;
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationQueue;
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationRequest;
|
||||
import de.oliver.fancynpcs.skins.SkinManagerImpl;
|
||||
import org.mineskin.data.SkinInfo;
|
||||
import org.mineskin.data.Variant;
|
||||
import org.mineskin.request.GenerateRequest;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class MineSkinQueue implements SkinGenerationQueue<MineSkinQueue.SkinRequest> {
|
||||
public class MineSkinQueue implements SkinGenerationQueue {
|
||||
private static MineSkinQueue INSTANCE;
|
||||
|
||||
private final MineSkinAPI api;
|
||||
private final Queue<SkinRequest> queue;
|
||||
private final Queue<SkinGenerationRequest> queue;
|
||||
private ScheduledFuture<?> scheduler;
|
||||
|
||||
private long nextRequestTime = System.currentTimeMillis();
|
||||
@@ -38,6 +38,7 @@ public class MineSkinQueue implements SkinGenerationQueue<MineSkinQueue.SkinRequ
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
scheduler = SkinManagerImpl.EXECUTOR.scheduleWithFixedDelay(this::poll, 5, 1, TimeUnit.SECONDS);
|
||||
}
|
||||
@@ -52,26 +53,26 @@ public class MineSkinQueue implements SkinGenerationQueue<MineSkinQueue.SkinRequ
|
||||
return;
|
||||
}
|
||||
|
||||
SkinRequest req = this.queue.poll();
|
||||
SkinGenerationRequest req = this.queue.poll();
|
||||
if (req == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
FancyNpcs.getInstance().getFancyLogger().debug("Fetching skin from MineSkin: " + req.id());
|
||||
SkinInfo skin = this.api.generateSkin(req.request());
|
||||
FancyNpcs.getInstance().getFancyLogger().debug("Fetching skin from MineSkin: " + req.getID());
|
||||
SkinInfo skin = this.api.generateSkin(req.getMineskinRequest());
|
||||
if (skin == null) {
|
||||
this.nextRequestTime = System.currentTimeMillis();
|
||||
return;
|
||||
}
|
||||
|
||||
SkinData skinData = new SkinData(
|
||||
req.id(),
|
||||
req.getID(),
|
||||
skin.variant() == Variant.SLIM ? SkinData.SkinVariant.SLIM : SkinData.SkinVariant.AUTO,
|
||||
skin.texture().data().value(),
|
||||
skin.texture().data().signature()
|
||||
);
|
||||
new SkinGeneratedEvent(req.id(), skinData).callEvent();
|
||||
new SkinGeneratedEvent(req.getID(), skinData).callEvent();
|
||||
} catch (RatelimitException e) {
|
||||
this.nextRequestTime = e.getNextRequestTime();
|
||||
this.queue.add(req);
|
||||
@@ -82,10 +83,11 @@ public class MineSkinQueue implements SkinGenerationQueue<MineSkinQueue.SkinRequ
|
||||
this.nextRequestTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void add(SkinRequest req) {
|
||||
@Override
|
||||
public void add(SkinGenerationRequest req) {
|
||||
// check if request is already in queue
|
||||
for (SkinRequest r : this.queue) {
|
||||
if (r.id().equals(req.id())) {
|
||||
for (SkinGenerationRequest r : this.queue) {
|
||||
if (r.getID().equals(req.getID())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -93,14 +95,14 @@ public class MineSkinQueue implements SkinGenerationQueue<MineSkinQueue.SkinRequ
|
||||
this.queue.add(req);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.queue.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScheduledFuture<?> getScheduler() {
|
||||
return scheduler;
|
||||
}
|
||||
|
||||
public record SkinRequest(String id, GenerateRequest request) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import de.oliver.fancynpcs.FancyNpcs;
|
||||
import de.oliver.fancynpcs.api.skins.SkinData;
|
||||
import de.oliver.fancynpcs.api.skins.SkinGeneratedEvent;
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationQueue;
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationRequest;
|
||||
import de.oliver.fancynpcs.skins.SkinManagerImpl;
|
||||
import de.oliver.fancynpcs.skins.mineskin.RatelimitException;
|
||||
|
||||
@@ -12,11 +13,11 @@ import java.util.Queue;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class MojangQueue implements SkinGenerationQueue<MojangQueue.SkinRequest> {
|
||||
public class MojangQueue implements SkinGenerationQueue {
|
||||
|
||||
private static MojangQueue INSTANCE;
|
||||
|
||||
private final Queue<SkinRequest> queue;
|
||||
private final Queue<SkinGenerationRequest> queue;
|
||||
private final MojangAPI api;
|
||||
private ScheduledFuture<?> scheduler;
|
||||
private long nextRequestTime = System.currentTimeMillis();
|
||||
@@ -36,6 +37,7 @@ public class MojangQueue implements SkinGenerationQueue<MojangQueue.SkinRequest>
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
scheduler = SkinManagerImpl.EXECUTOR.scheduleWithFixedDelay(this::pollMany, 5, 1, TimeUnit.SECONDS);
|
||||
}
|
||||
@@ -56,15 +58,15 @@ public class MojangQueue implements SkinGenerationQueue<MojangQueue.SkinRequest>
|
||||
return;
|
||||
}
|
||||
|
||||
SkinRequest req = this.queue.poll();
|
||||
SkinGenerationRequest req = this.queue.poll();
|
||||
if (req == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
FancyNpcs.getInstance().getFancyLogger().debug("Fetching skin from Mojang: " + req.uuid());
|
||||
SkinData skinData = this.api.fetchSkin(req.uuid(), req.variant());
|
||||
new SkinGeneratedEvent(req.uuid(), skinData).callEvent();
|
||||
FancyNpcs.getInstance().getFancyLogger().debug("Fetching skin from Mojang: " + req.getID());
|
||||
SkinData skinData = this.api.fetchSkin(req.getID(), req.getVariant());
|
||||
new SkinGeneratedEvent(req.getID(), skinData).callEvent();
|
||||
} catch (RatelimitException e) {
|
||||
this.nextRequestTime = e.getNextRequestTime();
|
||||
this.queue.add(req);
|
||||
@@ -75,10 +77,11 @@ public class MojangQueue implements SkinGenerationQueue<MojangQueue.SkinRequest>
|
||||
this.nextRequestTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void add(SkinRequest req) {
|
||||
@Override
|
||||
public void add(SkinGenerationRequest req) {
|
||||
// check if request is already in queue
|
||||
for (SkinRequest r : this.queue) {
|
||||
if (r.uuid().equals(req.uuid())) {
|
||||
for (SkinGenerationRequest r : this.queue) {
|
||||
if (r.getID().equals(req.getID())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -86,15 +89,14 @@ public class MojangQueue implements SkinGenerationQueue<MojangQueue.SkinRequest>
|
||||
this.queue.add(req);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.queue.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScheduledFuture<?> getScheduler() {
|
||||
return scheduler;
|
||||
}
|
||||
|
||||
public record SkinRequest(String uuid, SkinData.SkinVariant variant) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user