Merge pull request #2896 from owlnull/v3.0

Add skins support via SkinsRestorer plugin
This commit is contained in:
mikeprimm 2020-05-16 16:18:17 -05:00 committed by GitHub
commit f151cdc84f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 121 additions and 15 deletions

View file

@ -30,7 +30,6 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@ -104,6 +103,7 @@ public class DynmapCore implements DynmapCommonAPI {
public ComponentManager componentManager = new ComponentManager();
public DynmapListenerManager listenerManager = new DynmapListenerManager(this);
public PlayerFaces playerfacemgr;
public SkinUrlProvider skinUrlProvider;
public Events events = new Events();
public String deftemplatesuffix = "";
private DynmapMapCommands dmapcmds = new DynmapMapCommands();
@ -155,6 +155,10 @@ public class DynmapCore implements DynmapCommonAPI {
/* Constructor for core */
public DynmapCore() {
}
public void setSkinUrlProvider(SkinUrlProvider skinUrlProvider) {
this.skinUrlProvider = skinUrlProvider;
}
/* Cleanup method */
public void cleanup() {

View file

@ -106,12 +106,16 @@ public class PlayerFaces {
}
private class LoadPlayerImages implements Runnable {
private SkinUrlProvider mSkinUrlProvider;
public final String playername;
public final String playerskinurl;
public LoadPlayerImages(String playername, String playerskinurl, UUID playeruuid) {
public LoadPlayerImages(String playername, String playerskinurl, UUID playeruuid, SkinUrlProvider skinUrlProvider) {
this.playername = playername;
this.playerskinurl = playerskinurl;
mSkinUrlProvider = skinUrlProvider;
}
public void run() {
boolean has_8x8 = storage.hasPlayerFaceImage(playername, FaceType.FACE_8X8);
boolean has_16x16 = storage.hasPlayerFaceImage(playername, FaceType.FACE_16X16);
@ -123,16 +127,20 @@ public class PlayerFaces {
BufferedImage img = null;
try {
if(fetchskins && (refreshskins || missing_any)) {
URL url = null;
if (skinurl.equals("") == false) {
url = new URL(skinurl.replace("%player%", URLEncoder.encode(playername, "UTF-8")));
}
else if (playerskinurl != null) {
url = new URL(playerskinurl);
}
if (url != null) {
img = ImageIO.read(url); /* Load skin for player */
}
URL url = null;
if (mSkinUrlProvider == null) {
if (!skinurl.equals("")) {
url = new URL(skinurl.replace("%player%", URLEncoder.encode(playername, "UTF-8")));
} else if (playerskinurl != null) {
url = new URL(playerskinurl);
}
} else {
url = mSkinUrlProvider.getSkinUrl(playername);
}
if (url != null)
img = ImageIO.read(url); /* Load skin for player */
}
} catch (IOException iox) {
Debug.debug("Error loading skin for '" + playername + "' - " + iox);
@ -292,7 +300,7 @@ public class PlayerFaces {
core.listenerManager.addListener(EventType.PLAYER_JOIN, new PlayerEventListener() {
@Override
public void playerEvent(DynmapPlayer p) {
Runnable job = new LoadPlayerImages(p.getName(), p.getSkinURL(), p.getUUID());
Runnable job = new LoadPlayerImages(p.getName(), p.getSkinURL(), p.getUUID(), core.skinUrlProvider);
if(fetchskins)
MapManager.scheduleDelayedJob(job, 0);
else

View file

@ -0,0 +1,7 @@
package org.dynmap;
import java.net.URL;
public interface SkinUrlProvider {
URL getSkinUrl(String playerName);
}