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

View File

@ -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<UUID> loadedMap;
// try {
// //noinspection unchecked
// loadedMap = (Object2IntOpenHashMap<UUID>) 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<UUID> 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 <T> Object2IntOpenHashMap<T> castToObject2IntOpenHashMap(Object2IntOpenHashMap<?> object2IntOpenHashMap) {
return (Object2IntOpenHashMap<T>) object2IntOpenHashMap;
}
}

View File

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