diff --git a/src/main/java/ovh/sad/animalrp/AnimalRP.java b/src/main/java/ovh/sad/animalrp/AnimalRP.java index 2659bc9..d216945 100644 --- a/src/main/java/ovh/sad/animalrp/AnimalRP.java +++ b/src/main/java/ovh/sad/animalrp/AnimalRP.java @@ -13,6 +13,7 @@ import ovh.sad.animalrp.commands.InteractionCommand; import ovh.sad.animalrp.commands.NoChatCommand; import ovh.sad.animalrp.commands.TfCommand; import ovh.sad.animalrp.util.Emote; +import ovh.sad.animalrp.util.HashmapStore; import ovh.sad.animalrp.util.Mood; import eu.pb4.placeholders.api.PlaceholderContext; import eu.pb4.placeholders.api.PlaceholderHandler; @@ -45,6 +46,13 @@ public class AnimalRP implements ModInitializer { animals.put("dog", new Dog()); animals.put("fox", new Fox()); animals.put("bee", new Bee()); + + HashmapStore.get("users.json").forEach((k,v) -> { + users.put(UUID.fromString(k), animals.get(v)); + }); + HashmapStore.get("nochat.json").forEach((k,v) -> { + noChat.put(UUID.fromString(k), Boolean.valueOf(v)); + }); emotes = new Emote(); Placeholders.register(Identifier.of("animalrp", "animalcolor"), new PlaceholderHandler() { diff --git a/src/main/java/ovh/sad/animalrp/animals/Animal.java b/src/main/java/ovh/sad/animalrp/animals/Animal.java index 7ee5cfc..b796ba4 100644 --- a/src/main/java/ovh/sad/animalrp/animals/Animal.java +++ b/src/main/java/ovh/sad/animalrp/animals/Animal.java @@ -14,6 +14,10 @@ public abstract class Animal { public HashMap moodSounds = new HashMap(); public ArrayList superfoods = new ArrayList(); + public String toString() { + return this.name; + } + Animal(String name, String catchphrase, String color) { this.name = name; this.catchphrase = catchphrase; diff --git a/src/main/java/ovh/sad/animalrp/commands/NoChatCommand.java b/src/main/java/ovh/sad/animalrp/commands/NoChatCommand.java index fc1050d..5f74283 100644 --- a/src/main/java/ovh/sad/animalrp/commands/NoChatCommand.java +++ b/src/main/java/ovh/sad/animalrp/commands/NoChatCommand.java @@ -9,6 +9,7 @@ import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.Text; import ovh.sad.animalrp.AnimalRP; +import ovh.sad.animalrp.util.HashmapStore; public class NoChatCommand { public void Command(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess, @@ -25,6 +26,7 @@ public class NoChatCommand { context.getSource().sendFeedback(() -> Text.literal("AnimalRP's chat modifications are now disabled for you.").withColor(16711680), false); AnimalRP.noChat.put(userUuid, true); } + HashmapStore.save("nochat.json", AnimalRP.noChat); return 0; })); diff --git a/src/main/java/ovh/sad/animalrp/commands/TfCommand.java b/src/main/java/ovh/sad/animalrp/commands/TfCommand.java index 3a6222e..981b7f0 100644 --- a/src/main/java/ovh/sad/animalrp/commands/TfCommand.java +++ b/src/main/java/ovh/sad/animalrp/commands/TfCommand.java @@ -14,6 +14,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import ovh.sad.animalrp.AnimalRP; import ovh.sad.animalrp.animals.Animal; +import ovh.sad.animalrp.util.HashmapStore; public class TfCommand { public void Command(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess, @@ -54,6 +55,7 @@ public class TfCommand { Integer.parseInt(animal.color.substring(1), 16))), false); + HashmapStore.save("users.json", AnimalRP.users); return 1; }))); } diff --git a/src/main/java/ovh/sad/animalrp/util/Emote.java b/src/main/java/ovh/sad/animalrp/util/Emote.java index 1b109bd..2c227be 100644 --- a/src/main/java/ovh/sad/animalrp/util/Emote.java +++ b/src/main/java/ovh/sad/animalrp/util/Emote.java @@ -149,7 +149,6 @@ public class Emote { public void playEmote(UUID uuid, ServerPlayerEntity entity, Emotes emote) { this.players.put(uuid, new PlayerEmote(entity, emote)); - } public void stopEmote(UUID uuid) { diff --git a/src/main/java/ovh/sad/animalrp/util/HashmapStore.java b/src/main/java/ovh/sad/animalrp/util/HashmapStore.java new file mode 100644 index 0000000..725134f --- /dev/null +++ b/src/main/java/ovh/sad/animalrp/util/HashmapStore.java @@ -0,0 +1,65 @@ +package ovh.sad.animalrp.util; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; + +import com.google.gson.Gson; +import com.google.gson.JsonIOException; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; + +import net.fabricmc.loader.api.FabricLoader; +import ovh.sad.animalrp.AnimalRP; + +public class HashmapStore { + static public Gson gson = new Gson(); + static public Path folder = FabricLoader.getInstance().getConfigDir().resolve(AnimalRP.MOD_ID).toAbsolutePath(); + + @SuppressWarnings("unchecked") + static public HashMap get(String name) { + Path filePath = folder.resolve(name); + if (!Files.exists(filePath)) { + return new HashMap(); + } + try { + return gson.fromJson(new FileReader(filePath.toString()), HashMap.class); + } catch (JsonSyntaxException | JsonIOException | FileNotFoundException e) { + e.printStackTrace(); + return new HashMap(); + } + + } + + @SuppressWarnings("unchecked") + static public void save(String name, @SuppressWarnings("rawtypes") HashMap hashmap) { + if (!Files.exists(folder)) { + try { + Files.createDirectory(folder); + } catch (IOException e) { + e.printStackTrace(); + } + } + Path filePath = folder.resolve(name); + if (!Files.exists(filePath)) + try { + Files.createFile(filePath); + } catch (IOException e) { + e.printStackTrace(); + } + + JsonObject jsobj = new JsonObject(); + hashmap.forEach((a, b) -> { + jsobj.addProperty(a.toString(), b.toString()); + }); + + try { + Files.write(filePath, gson.toJson(jsobj).getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + } +}