mirror of
https://github.com/Suiranoil/SkinRestorer.git
synced 2026-01-16 04:42:12 +00:00
implement skin directory migration
This commit is contained in:
@@ -9,6 +9,7 @@ import net.lionarius.skinrestorer.skin.SkinStorage;
|
|||||||
import net.lionarius.skinrestorer.skin.provider.MineskinSkinProvider;
|
import net.lionarius.skinrestorer.skin.provider.MineskinSkinProvider;
|
||||||
import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider;
|
import net.lionarius.skinrestorer.skin.provider.MojangSkinProvider;
|
||||||
import net.lionarius.skinrestorer.skin.provider.SkinProvider;
|
import net.lionarius.skinrestorer.skin.provider.SkinProvider;
|
||||||
|
import net.lionarius.skinrestorer.util.FileUtils;
|
||||||
import net.lionarius.skinrestorer.util.PlayerUtils;
|
import net.lionarius.skinrestorer.util.PlayerUtils;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
@@ -26,7 +27,7 @@ public final class SkinRestorer {
|
|||||||
public static final String MOD_ID = "skinrestorer";
|
public static final String MOD_ID = "skinrestorer";
|
||||||
public static final Logger LOGGER = LoggerFactory.getLogger("SkinRestorer");
|
public static final Logger LOGGER = LoggerFactory.getLogger("SkinRestorer");
|
||||||
|
|
||||||
private static Map<String, SkinProvider> providers = new HashMap<>();
|
private static final Map<String, SkinProvider> providers = new HashMap<>();
|
||||||
private static SkinStorage skinStorage;
|
private static SkinStorage skinStorage;
|
||||||
private static Path configDir;
|
private static Path configDir;
|
||||||
|
|
||||||
@@ -54,8 +55,10 @@ public final class SkinRestorer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void onServerStarted(MinecraftServer server) {
|
public static void onServerStarted(MinecraftServer server) {
|
||||||
Path worldPath = server.getSavePath(WorldSavePath.ROOT).resolve(MOD_ID);
|
Path worldSkinDirectory = server.getSavePath(WorldSavePath.ROOT).resolve(MOD_ID);
|
||||||
SkinRestorer.skinStorage = new SkinStorage(new SkinIO(worldPath));
|
FileUtils.tryMigrateOldSkinDirectory(worldSkinDirectory);
|
||||||
|
|
||||||
|
SkinRestorer.skinStorage = new SkinStorage(new SkinIO(worldSkinDirectory));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CompletableFuture<Pair<Collection<ServerPlayerEntity>, Collection<GameProfile>>> setSkinAsync(MinecraftServer server, Collection<GameProfile> targets, Supplier<SkinResult> skinSupplier) {
|
public static CompletableFuture<Pair<Collection<ServerPlayerEntity>, Collection<GameProfile>>> setSkinAsync(MinecraftServer server, Collection<GameProfile> targets, Supplier<SkinResult> skinSupplier) {
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public abstract class ServerLoginNetworkHandlerMixin {
|
|||||||
public void waitForSkin(CallbackInfo ci) {
|
public void waitForSkin(CallbackInfo ci) {
|
||||||
if (skinrestorer_pendingSkin == null) {
|
if (skinrestorer_pendingSkin == null) {
|
||||||
skinrestorer_pendingSkin = CompletableFuture.supplyAsync(() -> {
|
skinrestorer_pendingSkin = CompletableFuture.supplyAsync(() -> {
|
||||||
|
assert profile != null;
|
||||||
SkinRestorer.LOGGER.debug("Fetching {}'s skin", profile.getName());
|
SkinRestorer.LOGGER.debug("Fetching {}'s skin", profile.getName());
|
||||||
|
|
||||||
if (!SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId())) { // when player joins for the first time fetch Mojang skin by his username
|
if (!SkinRestorer.getSkinStorage().hasSavedSkin(profile.getId())) { // when player joins for the first time fetch Mojang skin by his username
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class SkinIO {
|
public class SkinIO {
|
||||||
|
|
||||||
private static final String FILE_EXTENSION = ".json";
|
public static final String FILE_EXTENSION = ".json";
|
||||||
|
|
||||||
private final Path savePath;
|
private final Path savePath;
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,38 @@
|
|||||||
package net.lionarius.skinrestorer.util;
|
package net.lionarius.skinrestorer.util;
|
||||||
|
|
||||||
|
import net.lionarius.skinrestorer.SkinRestorer;
|
||||||
|
import net.lionarius.skinrestorer.skin.SkinIO;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.StandardCopyOption;
|
||||||
|
|
||||||
public class FileUtils {
|
public class FileUtils {
|
||||||
|
|
||||||
|
public static void tryMigrateOldSkinDirectory(Path newDirectory) {
|
||||||
|
try {
|
||||||
|
File newDirectoryFile = newDirectory.toFile();
|
||||||
|
if (!newDirectoryFile.exists())
|
||||||
|
newDirectoryFile.mkdirs();
|
||||||
|
|
||||||
|
File configDirectory = SkinRestorer.getConfigDir().toFile();
|
||||||
|
File[] files = configDirectory.listFiles(
|
||||||
|
(file, name) -> !name.startsWith(TranslationUtils.TRANSLATION_FILENAME) && name.endsWith(SkinIO.FILE_EXTENSION)
|
||||||
|
);
|
||||||
|
if (files == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (File file : files) {
|
||||||
|
if (file.isFile())
|
||||||
|
Files.move(file.toPath(), newDirectory.resolve(file.getName()), StandardCopyOption.REPLACE_EXISTING);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
SkinRestorer.LOGGER.error("Could not migrate skin directory", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static String readFile(File file) {
|
public static String readFile(File file) {
|
||||||
try (BufferedReader reader = new BufferedReader(new FileReader(file, StandardCharsets.UTF_8))) {
|
try (BufferedReader reader = new BufferedReader(new FileReader(file, StandardCharsets.UTF_8))) {
|
||||||
return StringUtils.readString(reader);
|
return StringUtils.readString(reader);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.lionarius.skinrestorer.util;
|
package net.lionarius.skinrestorer.util;
|
||||||
|
|
||||||
import net.lionarius.skinrestorer.SkinRestorer;
|
import net.lionarius.skinrestorer.SkinRestorer;
|
||||||
|
import net.lionarius.skinrestorer.skin.SkinIO;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@@ -14,10 +15,10 @@ public class TranslationUtils {
|
|||||||
public String skinActionOk = "Skin changed";
|
public String skinActionOk = "Skin changed";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Translation translation = new Translation();
|
public static final String TRANSLATION_FILENAME = "translation";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Path path = SkinRestorer.getConfigDir().resolve("translation.json");
|
Path path = SkinRestorer.getConfigDir().resolve(TRANSLATION_FILENAME + SkinIO.FILE_EXTENSION);
|
||||||
|
|
||||||
if (Files.exists(path)) {
|
if (Files.exists(path)) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user