Enabled loading/saving points data

This commit is contained in:
Teriuihi 2023-09-24 22:53:30 +02:00
parent 6046fdb15a
commit 7960cece04
3 changed files with 48 additions and 17 deletions

View File

@ -9,7 +9,9 @@ import com.alttd.fishingevent.fish_generator.WaterFishGenerator;
import com.alttd.fishingevent.gui.GUIListener; import com.alttd.fishingevent.gui.GUIListener;
import com.alttd.fishingevent.listeners.CatchFish; import com.alttd.fishingevent.listeners.CatchFish;
import com.alttd.fishingevent.npc.NPCManager; import com.alttd.fishingevent.npc.NPCManager;
import com.alttd.fishingevent.points.LoadTask;
import com.alttd.fishingevent.points.PointsManagement; import com.alttd.fishingevent.points.PointsManagement;
import com.alttd.fishingevent.points.SaveTask;
import com.alttd.fishingevent.util.Logger; import com.alttd.fishingevent.util.Logger;
import dev.sergiferry.playernpc.api.NPCLib; import dev.sergiferry.playernpc.api.NPCLib;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -17,6 +19,8 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.concurrent.TimeUnit;
public final class FishingEvent extends JavaPlugin { public final class FishingEvent extends JavaPlugin {
private Logger logger; private Logger logger;
@ -31,6 +35,11 @@ public final class FishingEvent extends JavaPlugin {
} }
registerEvents(getServer().getPluginManager()); 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) //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(); reloadFishConfigs();
registerCommands(); registerCommands();
NPCManager.spawnNPCs(this, logger); NPCManager.spawnNPCs(this, logger);

View File

@ -1,28 +1,48 @@
package com.alttd.fishingevent.points; package com.alttd.fishingevent.points;
import com.alttd.fishingevent.FishingEvent; 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 PointsManagement pointsManagement;
private final FishingEvent fishingEvent; 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.pointsManagement = pointsManagement;
this.fishingEvent = fishingEvent; this.fishingEvent = fishingEvent;
this.logger = logger;
} }
@Override public boolean loadOldPointsData() {
public void run() { File file = new File(fishingEvent.getDataFolder(), "map.bin");
// File file = new File(fishingEvent.getDataFolder(), "map.bin"); if (!file.exists())
// Object2IntOpenHashMap<UUID> loadedMap; return false;
// try { Object2IntOpenHashMap<UUID> loadedMap;
// //noinspection unchecked try {
// loadedMap = (Object2IntOpenHashMap<UUID>) BinIO.loadObject(file); Object o = BinIO.loadObject(file);
// } catch (IOException | ClassNotFoundException e) { if (!(o instanceof Object2IntOpenHashMap<?> object2IntOpenHashMap)) {
// e.printStackTrace(); logger.warning("Points file had invalid data");
// return; return false;
// } }
// pointsManagement.setMap(loadedMap); loadedMap = castToObject2IntOpenHashMap(object2IntOpenHashMap);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
logger.warning("Points file had invalid data");
return false;
}
pointsManagement.setMap(loadedMap);
return true;
}
private <T> Object2IntOpenHashMap<T> castToObject2IntOpenHashMap(Object2IntOpenHashMap<?> object2IntOpenHashMap) {
return (Object2IntOpenHashMap<T>) object2IntOpenHashMap;
} }
} }

View File

@ -1,6 +1,7 @@
package com.alttd.fishingevent.points; package com.alttd.fishingevent.points;
import com.alttd.fishingevent.FishingEvent; import com.alttd.fishingevent.FishingEvent;
import com.alttd.fishingevent.util.Logger;
import it.unimi.dsi.fastutil.io.BinIO; import it.unimi.dsi.fastutil.io.BinIO;
import java.io.File; import java.io.File;
@ -10,10 +11,11 @@ public class SaveTask implements Runnable {
private final PointsManagement pointsManagement; private final PointsManagement pointsManagement;
private final FishingEvent fishingEvent; private final FishingEvent fishingEvent;
private final Logger logger;
public SaveTask(PointsManagement pointsManagement, FishingEvent fishingEvent) { public SaveTask(PointsManagement pointsManagement, FishingEvent fishingEvent, Logger logger) {
this.pointsManagement = pointsManagement; this.pointsManagement = pointsManagement;
this.fishingEvent = fishingEvent; this.fishingEvent = fishingEvent;
this.logger = logger;
} }
@Override @Override
@ -21,7 +23,7 @@ public class SaveTask implements Runnable {
File file = new File(fishingEvent.getDataFolder(), "map.bin"); File file = new File(fishingEvent.getDataFolder(), "map.bin");
try { try {
BinIO.storeObject(pointsManagement.getPointsMap(), file); BinIO.storeObject(pointsManagement.getPointsMap(), file);
System.out.println("Object2IntOpenHashMap saved to map.bin"); logger.info("Object2IntOpenHashMap saved to map.bin");
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }