1
0
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:
2024-06-28 18:21:24 +03:00
parent 2f674abb01
commit 18b0d6bd8e
5 changed files with 39 additions and 6 deletions

View File

@@ -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) {

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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 {