From 7960cece0410c1344f849eab7ce592b0e1366912 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 24 Sep 2023 22:53:30 +0200 Subject: [PATCH] Enabled loading/saving points data --- .../com/alttd/fishingevent/FishingEvent.java | 9 ++++ .../alttd/fishingevent/points/LoadTask.java | 48 +++++++++++++------ .../alttd/fishingevent/points/SaveTask.java | 8 ++-- 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/alttd/fishingevent/FishingEvent.java b/src/main/java/com/alttd/fishingevent/FishingEvent.java index 85f6cd0..01581ff 100644 --- a/src/main/java/com/alttd/fishingevent/FishingEvent.java +++ b/src/main/java/com/alttd/fishingevent/FishingEvent.java @@ -9,7 +9,9 @@ import com.alttd.fishingevent.fish_generator.WaterFishGenerator; import com.alttd.fishingevent.gui.GUIListener; import com.alttd.fishingevent.listeners.CatchFish; import com.alttd.fishingevent.npc.NPCManager; +import com.alttd.fishingevent.points.LoadTask; import com.alttd.fishingevent.points.PointsManagement; +import com.alttd.fishingevent.points.SaveTask; import com.alttd.fishingevent.util.Logger; import dev.sergiferry.playernpc.api.NPCLib; import org.bukkit.Bukkit; @@ -17,6 +19,8 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; +import java.util.concurrent.TimeUnit; + public final class FishingEvent extends JavaPlugin { private Logger logger; @@ -31,6 +35,11 @@ public final class FishingEvent extends JavaPlugin { } registerEvents(getServer().getPluginManager()); //add a way to stop and start the fishing event and a way to stop all fishing (so 3 modes normal, active, disabled) + if (new LoadTask(PointsManagement.getInstance(), this, logger).loadOldPointsData()) + logger.info("Loaded old points data"); + Bukkit.getScheduler().runTaskTimerAsynchronously(this, new SaveTask(PointsManagement.getInstance(), this, logger), + TimeUnit.MINUTES.toSeconds(5) * 20, + TimeUnit.MINUTES.toSeconds(5) * 20); reloadFishConfigs(); registerCommands(); NPCManager.spawnNPCs(this, logger); diff --git a/src/main/java/com/alttd/fishingevent/points/LoadTask.java b/src/main/java/com/alttd/fishingevent/points/LoadTask.java index bd9466d..f41d835 100644 --- a/src/main/java/com/alttd/fishingevent/points/LoadTask.java +++ b/src/main/java/com/alttd/fishingevent/points/LoadTask.java @@ -1,28 +1,48 @@ package com.alttd.fishingevent.points; import com.alttd.fishingevent.FishingEvent; +import com.alttd.fishingevent.util.Logger; +import it.unimi.dsi.fastutil.io.BinIO; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -public class LoadTask implements Runnable { +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +public class LoadTask { private final PointsManagement pointsManagement; private final FishingEvent fishingEvent; + private final Logger logger; - public LoadTask(PointsManagement pointsManagement, FishingEvent fishingEvent) { + public LoadTask(PointsManagement pointsManagement, FishingEvent fishingEvent, Logger logger) { this.pointsManagement = pointsManagement; this.fishingEvent = fishingEvent; + this.logger = logger; } - @Override - public void run() { -// File file = new File(fishingEvent.getDataFolder(), "map.bin"); -// Object2IntOpenHashMap loadedMap; -// try { -// //noinspection unchecked -// loadedMap = (Object2IntOpenHashMap) BinIO.loadObject(file); -// } catch (IOException | ClassNotFoundException e) { -// e.printStackTrace(); -// return; -// } -// pointsManagement.setMap(loadedMap); + public boolean loadOldPointsData() { + File file = new File(fishingEvent.getDataFolder(), "map.bin"); + if (!file.exists()) + return false; + Object2IntOpenHashMap loadedMap; + try { + Object o = BinIO.loadObject(file); + if (!(o instanceof Object2IntOpenHashMap object2IntOpenHashMap)) { + logger.warning("Points file had invalid data"); + return false; + } + loadedMap = castToObject2IntOpenHashMap(object2IntOpenHashMap); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + logger.warning("Points file had invalid data"); + return false; + } + pointsManagement.setMap(loadedMap); + return true; + } + + private Object2IntOpenHashMap castToObject2IntOpenHashMap(Object2IntOpenHashMap object2IntOpenHashMap) { + return (Object2IntOpenHashMap) object2IntOpenHashMap; } } diff --git a/src/main/java/com/alttd/fishingevent/points/SaveTask.java b/src/main/java/com/alttd/fishingevent/points/SaveTask.java index 853451c..25dbf6e 100644 --- a/src/main/java/com/alttd/fishingevent/points/SaveTask.java +++ b/src/main/java/com/alttd/fishingevent/points/SaveTask.java @@ -1,6 +1,7 @@ package com.alttd.fishingevent.points; import com.alttd.fishingevent.FishingEvent; +import com.alttd.fishingevent.util.Logger; import it.unimi.dsi.fastutil.io.BinIO; import java.io.File; @@ -10,10 +11,11 @@ public class SaveTask implements Runnable { private final PointsManagement pointsManagement; private final FishingEvent fishingEvent; - - public SaveTask(PointsManagement pointsManagement, FishingEvent fishingEvent) { + private final Logger logger; + public SaveTask(PointsManagement pointsManagement, FishingEvent fishingEvent, Logger logger) { this.pointsManagement = pointsManagement; this.fishingEvent = fishingEvent; + this.logger = logger; } @Override @@ -21,7 +23,7 @@ public class SaveTask implements Runnable { File file = new File(fishingEvent.getDataFolder(), "map.bin"); try { BinIO.storeObject(pointsManagement.getPointsMap(), file); - System.out.println("Object2IntOpenHashMap saved to map.bin"); + logger.info("Object2IntOpenHashMap saved to map.bin"); } catch (IOException e) { e.printStackTrace(); }