fn: Add interface for skin generation queues

This commit is contained in:
Oliver
2025-04-17 21:22:32 +02:00
parent 723c3de3c4
commit 552a301602
6 changed files with 31 additions and 9 deletions

View File

@@ -35,6 +35,8 @@ import de.oliver.fancynpcs.skins.SkinManagerImpl;
import de.oliver.fancynpcs.skins.SkinUtils; import de.oliver.fancynpcs.skins.SkinUtils;
import de.oliver.fancynpcs.skins.cache.SkinCacheFile; import de.oliver.fancynpcs.skins.cache.SkinCacheFile;
import de.oliver.fancynpcs.skins.cache.SkinCacheMemory; import de.oliver.fancynpcs.skins.cache.SkinCacheMemory;
import de.oliver.fancynpcs.skins.mineskin.MineSkinQueue;
import de.oliver.fancynpcs.skins.mojang.MojangQueue;
import de.oliver.fancynpcs.tests.PlaceholderApiEnv; import de.oliver.fancynpcs.tests.PlaceholderApiEnv;
import de.oliver.fancynpcs.tracker.TurnToPlayerTracker; import de.oliver.fancynpcs.tracker.TurnToPlayerTracker;
import de.oliver.fancynpcs.tracker.VisibilityTracker; import de.oliver.fancynpcs.tracker.VisibilityTracker;
@@ -209,7 +211,7 @@ public class FancyNpcs extends JavaPlugin implements FancyNpcsPlugin {
actionManager.registerAction(new NeedPermissionAction()); actionManager.registerAction(new NeedPermissionAction());
actionManager.registerAction(new PlaySoundAction()); actionManager.registerAction(new PlaySoundAction());
skinManager = new SkinManagerImpl(new SkinCacheFile(), new SkinCacheMemory()); skinManager = new SkinManagerImpl(new SkinCacheFile(), new SkinCacheMemory(), MojangQueue.get(), MineSkinQueue.get());
OldSkinCacheMigrator.migrate(); OldSkinCacheMigrator.migrate();
textConfig = new TextConfig("#E33239", "#AD1D23", "#81E366", "#E3CA66", "#E36666", ""); textConfig = new TextConfig("#E33239", "#AD1D23", "#81E366", "#E3CA66", "#E36666", "");

View File

@@ -0,0 +1,12 @@
package de.oliver.fancynpcs.skins;
import java.util.concurrent.ScheduledFuture;
public interface SkinGenerationQueue<R> {
void run();
void add(R request);
ScheduledFuture<?> getScheduler();
}

View File

@@ -37,10 +37,14 @@ public class SkinManagerImpl implements SkinManager, Listener {
private final SkinCache fileCache; private final SkinCache fileCache;
private final SkinCache memCache; private final SkinCache memCache;
private final SkinGenerationQueue<MojangQueue.SkinRequest> mojangQueue;
private final SkinGenerationQueue<MineSkinQueue.SkinRequest> mineSkinQueue;
public SkinManagerImpl(SkinCache fileCache, SkinCache memCache) { public SkinManagerImpl(SkinCache fileCache, SkinCache memCache, SkinGenerationQueue<MojangQueue.SkinRequest> mojangQueue, SkinGenerationQueue<MineSkinQueue.SkinRequest> mineSkinQueue) {
this.fileCache = fileCache; this.fileCache = fileCache;
this.memCache = memCache; this.memCache = memCache;
this.mojangQueue = mojangQueue;
this.mineSkinQueue = mineSkinQueue;
File skinsDir = new File(SKINS_DIRECTORY); File skinsDir = new File(SKINS_DIRECTORY);
if (!skinsDir.exists()) { if (!skinsDir.exists()) {
@@ -82,11 +86,11 @@ public class SkinManagerImpl implements SkinManager, Listener {
return cached; return cached;
} }
MojangQueue.get().add(new MojangQueue.SkinRequest(uuid.toString(), variant)); mojangQueue.add(new MojangQueue.SkinRequest(uuid.toString(), variant));
// GenerateRequest genReq = GenerateRequest.user(uuid); // GenerateRequest genReq = GenerateRequest.user(uuid);
// genReq.variant(Variant.valueOf(variant.name())); // genReq.variant(Variant.valueOf(variant.name()));
// MineSkinQueue.get().add(new MineSkinQueue.SkinRequest(uuid.toString(), genReq)); // mineSkinQueue.add(new MineSkinQueue.SkinRequest(uuid.toString(), genReq));
return new SkinData(uuid.toString(), variant); return new SkinData(uuid.toString(), variant);
} }
@@ -120,7 +124,7 @@ public class SkinManagerImpl implements SkinManager, Listener {
throw new SkinLoadException(SkinLoadException.Reason.INVALID_URL, "(URL = '" + url + "')"); throw new SkinLoadException(SkinLoadException.Reason.INVALID_URL, "(URL = '" + url + "')");
} }
genReq.variant(Variant.valueOf(variant.name())); genReq.variant(Variant.valueOf(variant.name()));
MineSkinQueue.get().add(new MineSkinQueue.SkinRequest(url, genReq)); mineSkinQueue.add(new MineSkinQueue.SkinRequest(url, genReq));
return new SkinData(url, variant); return new SkinData(url, variant);
} }
@@ -138,7 +142,7 @@ public class SkinManagerImpl implements SkinManager, Listener {
GenerateRequest genReq = GenerateRequest.upload(file); GenerateRequest genReq = GenerateRequest.upload(file);
genReq.variant(Variant.valueOf(variant.name())); genReq.variant(Variant.valueOf(variant.name()));
MineSkinQueue.get().add(new MineSkinQueue.SkinRequest(filePath, genReq)); mineSkinQueue.add(new MineSkinQueue.SkinRequest(filePath, genReq));
return new SkinData(filePath, variant); return new SkinData(filePath, variant);
} }

View File

@@ -3,6 +3,7 @@ package de.oliver.fancynpcs.skins.mineskin;
import de.oliver.fancynpcs.FancyNpcs; import de.oliver.fancynpcs.FancyNpcs;
import de.oliver.fancynpcs.api.skins.SkinData; import de.oliver.fancynpcs.api.skins.SkinData;
import de.oliver.fancynpcs.api.skins.SkinGeneratedEvent; import de.oliver.fancynpcs.api.skins.SkinGeneratedEvent;
import de.oliver.fancynpcs.skins.SkinGenerationQueue;
import de.oliver.fancynpcs.skins.SkinManagerImpl; import de.oliver.fancynpcs.skins.SkinManagerImpl;
import org.mineskin.data.SkinInfo; import org.mineskin.data.SkinInfo;
import org.mineskin.data.Variant; import org.mineskin.data.Variant;
@@ -13,7 +14,7 @@ import java.util.Queue;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class MineSkinQueue { public class MineSkinQueue implements SkinGenerationQueue<MineSkinQueue.SkinRequest> {
private static MineSkinQueue INSTANCE; private static MineSkinQueue INSTANCE;
private final MineSkinAPI api; private final MineSkinAPI api;

View File

@@ -3,6 +3,7 @@ package de.oliver.fancynpcs.skins.mojang;
import de.oliver.fancynpcs.FancyNpcs; import de.oliver.fancynpcs.FancyNpcs;
import de.oliver.fancynpcs.api.skins.SkinData; import de.oliver.fancynpcs.api.skins.SkinData;
import de.oliver.fancynpcs.api.skins.SkinGeneratedEvent; import de.oliver.fancynpcs.api.skins.SkinGeneratedEvent;
import de.oliver.fancynpcs.skins.SkinGenerationQueue;
import de.oliver.fancynpcs.skins.SkinManagerImpl; import de.oliver.fancynpcs.skins.SkinManagerImpl;
import de.oliver.fancynpcs.skins.mineskin.RatelimitException; import de.oliver.fancynpcs.skins.mineskin.RatelimitException;
@@ -11,7 +12,7 @@ import java.util.Queue;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class MojangQueue { public class MojangQueue implements SkinGenerationQueue<MojangQueue.SkinRequest> {
private static MojangQueue INSTANCE; private static MojangQueue INSTANCE;

View File

@@ -4,6 +4,8 @@ import de.oliver.fancynpcs.FancyNpcs;
import de.oliver.fancynpcs.api.skins.SkinData; import de.oliver.fancynpcs.api.skins.SkinData;
import de.oliver.fancynpcs.skins.SkinManagerImpl; import de.oliver.fancynpcs.skins.SkinManagerImpl;
import de.oliver.fancynpcs.skins.cache.SkinCacheMemory; import de.oliver.fancynpcs.skins.cache.SkinCacheMemory;
import de.oliver.fancynpcs.skins.mineskin.MineSkinQueue;
import de.oliver.fancynpcs.skins.mojang.MojangQueue;
import de.oliver.plugintests.annotations.FPBeforeEach; import de.oliver.plugintests.annotations.FPBeforeEach;
import de.oliver.plugintests.annotations.FPTest; import de.oliver.plugintests.annotations.FPTest;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -19,7 +21,7 @@ public class SkinManagerTest {
@FPBeforeEach @FPBeforeEach
public void setUp(Player player) { public void setUp(Player player) {
skinFetcher = new SkinManagerImpl(new SkinCacheMemory(), new SkinCacheMemory()); skinFetcher = new SkinManagerImpl(new SkinCacheMemory(), new SkinCacheMemory(), MojangQueue.get(), MineSkinQueue.get());
} }
@FPTest(name = "Test fetch skin by UUID") @FPTest(name = "Test fetch skin by UUID")