1
0
mirror of https://github.com/Zrips/Jobs.git synced 2024-11-29 05:55:27 +01:00

Option to disable explorer database saving

This commit is contained in:
Zrips 2023-09-25 16:36:00 +03:00
parent cbff3e6138
commit 75ca0929df
4 changed files with 117 additions and 108 deletions

View File

@ -365,13 +365,13 @@ public final class Jobs extends JavaPlugin {
*/
public static ScheduleManager getScheduleManager() {
if (scheduleManager == null)
scheduleManager = new ScheduleManager(getInstance());
scheduleManager = new ScheduleManager(getInstance());
return scheduleManager;
}
public static NameTranslatorManager getNameTranslatorManager() {
if (nameTranslatorManager == null)
nameTranslatorManager = new NameTranslatorManager();
if (nameTranslatorManager == null)
nameTranslatorManager = new NameTranslatorManager();
return nameTranslatorManager;
}
@ -383,7 +383,7 @@ public final class Jobs extends JavaPlugin {
public static JobsCommands getCommandManager() {
if (cManager == null)
cManager = new JobsCommands(getInstance());
cManager = new JobsCommands(getInstance());
return cManager;
}
@ -410,8 +410,8 @@ public final class Jobs extends JavaPlugin {
* @return the sign manager
*/
public static SignUtil getSignUtil() {
if (signManager == null)
signManager = new SignUtil(getInstance());
if (signManager == null)
signManager = new SignUtil(getInstance());
return signManager;
}
@ -586,7 +586,8 @@ public final class Jobs extends JavaPlugin {
getPlayerManager().clearMaps();
getPlayerManager().clearCache();
dao.saveExplore();
if (Jobs.getGeneralConfigManager().ExploreSaveIntoDatabase)
dao.saveExplore();
// Do we really need to convert Block protection?
// Jobs.getJobsDAO().saveBlockProtection();
} catch (SQLException e) {
@ -890,9 +891,8 @@ public final class Jobs extends JavaPlugin {
CMIMessages.consoleMessage(prefix);
HandlerList.unregisterAll(this);
if (dao != null) {
if (dao != null && Jobs.getGeneralConfigManager().ExploreSaveIntoDatabase)
dao.saveExplore();
}
blockOwnerShipsMaterial.values().forEach(BlockOwnerShip::save);
ToggleBarHandling.save();

View File

@ -26,140 +26,140 @@ public class ExploreManager {
private int playerAmount = 1;
public int getPlayerAmount() {
return playerAmount;
return playerAmount;
}
public void setPlayerAmount(int amount) {
if (playerAmount < amount)
playerAmount = amount;
if (playerAmount < amount)
playerAmount = amount;
}
public boolean isExploreEnabled() {
return exploreEnabled;
return exploreEnabled;
}
public void setExploreEnabled() {
if (!exploreEnabled) {
exploreEnabled = true;
}
exploreEnabled = true;
}
public void load() {
if (!exploreEnabled)
return;
if (!exploreEnabled)
return;
CMIMessages.consoleMessage("&eLoading explorer data");
Long time = System.currentTimeMillis();
Jobs.getJobsDAO().loadExplore();
int size = getSize();
CMIMessages.consoleMessage("&eLoaded explorer data" + (size != 0 ? " (&6" + size + "&e)" : " ") + " in " + (System.currentTimeMillis() - time) + " ms");
if (Jobs.getGeneralConfigManager().ExploreSaveIntoDatabase) {
CMIMessages.consoleMessage("&eLoading explorer data");
Long time = System.currentTimeMillis();
Jobs.getJobsDAO().loadExplore();
int size = getSize();
CMIMessages.consoleMessage("&eLoaded explorer data" + (size != 0 ? " (&6" + size + "&e)" : " ") + " in " + (System.currentTimeMillis() - time) + " ms");
}
}
public Map<String, Map<String, ExploreRegion>> getWorlds() {
return worlds;
return worlds;
}
public int getSize() {
int i = 0;
for (Map<String, ExploreRegion> one : worlds.values()) {
for (Entry<String, ExploreRegion> chunks : one.entrySet()) {
i += chunks.getValue().getChunks().size();
}
}
return i;
int i = 0;
for (Map<String, ExploreRegion> one : worlds.values()) {
for (Entry<String, ExploreRegion> chunks : one.entrySet()) {
i += chunks.getValue().getChunks().size();
}
}
return i;
}
public ExploreRespond chunkRespond(Player player, Chunk chunk) {
return chunkRespond(Jobs.getPlayerManager().getJobsPlayer(player).getUserId(), chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
return chunkRespond(Jobs.getPlayerManager().getJobsPlayer(player).getUserId(), chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
}
public ExploreRespond chunkRespond(int playerId, Chunk chunk) {
return chunkRespond(playerId, chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
return chunkRespond(playerId, chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
}
public ExploreRespond chunkRespond(int playerId, String world, int x, int z) {
Map<String, ExploreRegion> eRegions = worlds.getOrDefault(world, new HashMap<String, ExploreRegion>());
Map<String, ExploreRegion> eRegions = worlds.getOrDefault(world, new HashMap<String, ExploreRegion>());
int RegionX = (int) Math.floor(x / 32D);
int RegionZ = (int) Math.floor(z / 32D);
int RegionX = (int) Math.floor(x / 32D);
int RegionZ = (int) Math.floor(z / 32D);
ExploreRegion region = eRegions.get(RegionX + ":" + RegionZ);
if (region == null) {
region = new ExploreRegion(RegionX, RegionZ);
}
ExploreRegion region = eRegions.get(RegionX + ":" + RegionZ);
if (region == null) {
region = new ExploreRegion(RegionX, RegionZ);
}
int chunkRelativeX = (RegionX * 32) - x;
int chunkRelativeZ = (RegionZ * 32) - z;
int chunkRelativeX = (RegionX * 32) - x;
int chunkRelativeZ = (RegionZ * 32) - z;
ExploreChunk chunk = region.getChunk(chunkRelativeX, chunkRelativeZ);
if (chunk == null) {
chunk = new ExploreChunk();
region.addChunk(chunkRelativeX, chunkRelativeZ, chunk);
}
ExploreChunk chunk = region.getChunk(chunkRelativeX, chunkRelativeZ);
if (chunk == null) {
chunk = new ExploreChunk();
region.addChunk(chunkRelativeX, chunkRelativeZ, chunk);
}
eRegions.put(RegionX + ":" + RegionZ, region);
eRegions.put(RegionX + ":" + RegionZ, region);
worlds.put(world, eRegions);
worlds.put(world, eRegions);
return chunk.addPlayer(playerId);
return chunk.addPlayer(playerId);
}
public void load(ResultSet res) {
try {
String worldName = res.getString(ExploreDataTableFields.worldname.getCollumn());
try {
String worldName = res.getString(ExploreDataTableFields.worldname.getCollumn());
JobsWorld jobsWorld = Util.getJobsWorld(worldName);
if (jobsWorld == null)
jobsWorld = Util.getJobsWorld(res.getInt(ExploreDataTableFields.worldid.getCollumn()));
JobsWorld jobsWorld = Util.getJobsWorld(worldName);
if (jobsWorld == null)
jobsWorld = Util.getJobsWorld(res.getInt(ExploreDataTableFields.worldid.getCollumn()));
if (jobsWorld == null)
return;
if (jobsWorld == null)
return;
int x = res.getInt(ExploreDataTableFields.chunkX.getCollumn());
int z = res.getInt(ExploreDataTableFields.chunkZ.getCollumn());
String names = res.getString(ExploreDataTableFields.playerNames.getCollumn());
int id = res.getInt("id");
int x = res.getInt(ExploreDataTableFields.chunkX.getCollumn());
int z = res.getInt(ExploreDataTableFields.chunkZ.getCollumn());
String names = res.getString(ExploreDataTableFields.playerNames.getCollumn());
int id = res.getInt("id");
Map<String, ExploreRegion> eRegions = worlds.getOrDefault(jobsWorld.getName(), new HashMap<String, ExploreRegion>());
Map<String, ExploreRegion> eRegions = worlds.getOrDefault(jobsWorld.getName(), new HashMap<String, ExploreRegion>());
int RegionX = (int) Math.floor(x / 32D);
int RegionZ = (int) Math.floor(z / 32D);
int RegionX = (int) Math.floor(x / 32D);
int RegionZ = (int) Math.floor(z / 32D);
int chunkRelativeX = RegionX * 32 - x;
int chunkRelativeZ = RegionZ * 32 - z;
int chunkRelativeX = RegionX * 32 - x;
int chunkRelativeZ = RegionZ * 32 - z;
ExploreRegion region = eRegions.get(RegionX + ":" + RegionZ);
if (region == null) {
region = new ExploreRegion(RegionX, RegionZ);
}
ExploreChunk chunk = region.getChunk(chunkRelativeX, chunkRelativeZ);
if (chunk == null) {
chunk = new ExploreChunk();
region.addChunk(chunkRelativeX, chunkRelativeZ, chunk);
}
chunk.deserializeNames(names);
chunk.setDbId(id);
ExploreRegion region = eRegions.get(RegionX + ":" + RegionZ);
if (region == null) {
region = new ExploreRegion(RegionX, RegionZ);
}
ExploreChunk chunk = region.getChunk(chunkRelativeX, chunkRelativeZ);
if (chunk == null) {
chunk = new ExploreChunk();
region.addChunk(chunkRelativeX, chunkRelativeZ, chunk);
}
chunk.deserializeNames(names);
chunk.setDbId(id);
eRegions.put(RegionX + ":" + RegionZ, region);
worlds.put(jobsWorld.getName(), eRegions);
eRegions.put(RegionX + ":" + RegionZ, region);
worlds.put(jobsWorld.getName(), eRegions);
} catch (SQLException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void resetRegion(String worldname) {
CMIMessages.consoleMessage("&eReseting explorer data. World: " + worldname);
CMIMessages.consoleMessage("&eReseting explorer data. World: " + worldname);
Map<String, Map<String, ExploreRegion>> worlds = getWorlds();
worlds.put(worldname, new HashMap<String, ExploreRegion>());
Map<String, Map<String, ExploreRegion>> worlds = getWorlds();
worlds.put(worldname, new HashMap<String, ExploreRegion>());
boolean r = Jobs.getJobsDAO().deleteExploredWorld(worldname);
if (!r) {
CMIMessages.consoleMessage("&eFailed in DAO.");
return;
}
boolean r = Jobs.getJobsDAO().deleteExploredWorld(worldname);
if (!r) {
CMIMessages.consoleMessage("&eFailed in DAO.");
return;
}
CMIMessages.consoleMessage("&eCompleted to reset explorer data.");
CMIMessages.consoleMessage("&eCompleted to reset explorer data.");
}
}

View File

@ -107,7 +107,7 @@ public class GeneralConfigManager {
DisableJoiningJobThroughGui, FireworkLevelupUse, UseRandom, UsePerPermissionForLeaving,
EnableConfirmation, jobsInfoOpensBrowse, MonsterDamageUse, useMaxPaymentCurve, blockOwnershipTakeOver,
hideJobsInfoWithoutPermission, UseTaxes, TransferToServerAccount, TakeFromPlayersPayment, AutoJobJoinUse, AllowDelevel, RomanNumbers,
BossBarEnabled = false, BossBarShowOnEachAction = false, BossBarsMessageByDefault = false, ExploreCompact, DBCleaningJobsUse, DBCleaningUsersUse,
BossBarEnabled = false, BossBarShowOnEachAction = false, BossBarsMessageByDefault = false, ExploreCompact, ExploreSaveIntoDatabase = false, DBCleaningJobsUse, DBCleaningUsersUse,
DisabledWorldsUse, UseAsWhiteListWorldList, MythicMobsEnabled,
LoggingUse, payForCombiningItems, BlastFurnacesReassign = false, SmokerReassign = false, payForStackedEntities, payForAbove = false,
payForEachVTradeItem, allowEnchantingBoostedItems, bossBarAsync = false, preventShopItemEnchanting;
@ -427,6 +427,11 @@ public class GeneralConfigManager {
"By setting this to true when there is max amount of players explored a chunk then it will be marked as fully explored and exact players who explored it will not be saved to save some memory");
ExploreCompact = c.get("Optimizations.Explore.Compact", true);
c.addComment("Optimizations.Explore.SaveIntoDatabase",
"While enabled explored chunk data will be saved into database and will persist over server restarts",
"While disabled expored chunk data resets on every server startup which will freeup memory and speedup server startups and stop in some cases");
ExploreSaveIntoDatabase = c.get("Optimizations.Explore.SaveIntoDatabase", false);
c.addComment("Logging.Use", "With this set to true all players jobs actions will be logged to database for easy to see statistics",
"This is still in development and in future it will expand");
LoggingUse = c.get("Logging.Use", false);

View File

@ -2558,6 +2558,8 @@ public abstract class JobsDAO {
PreparedStatement prest2 = null;
try {
CMIMessages.consoleMessage("&e[Jobs] Preparing explorer data save.");
prest2 = conn.prepareStatement("INSERT INTO `" + DBTables.ExploreDataTable.getTableName() + "` (`" + ExploreDataTableFields.worldid.getCollumn()
+ "`, `" + ExploreDataTableFields.chunkX.getCollumn()
+ "`, `" + ExploreDataTableFields.chunkZ.getCollumn()
@ -2570,25 +2572,27 @@ public abstract class JobsDAO {
Map<String, Map<String, ExploreRegion>> temp = new HashMap<>(Jobs.getExploreManager().getWorlds());
for (Entry<String, Map<String, ExploreRegion>> worlds : temp.entrySet()) {
JobsWorld jobsWorld = Util.getJobsWorld(worlds.getKey());
int id = jobsWorld == null ? 0 : jobsWorld.getId();
if (id == 0)
continue;
for (Entry<String, ExploreRegion> region : worlds.getValue().entrySet()) {
JobsWorld jobsWorld = Util.getJobsWorld(worlds.getKey());
for (Entry<Short, ExploreChunk> oneChunk : region.getValue().getChunks().entrySet()) {
ExploreChunk chunk = oneChunk.getValue();
if (chunk.getDbId() != -1)
continue;
int id = jobsWorld == null ? 0 : jobsWorld.getId();
if (id != 0)
for (Entry<Short, ExploreChunk> oneChunk : region.getValue().getChunks().entrySet()) {
ExploreChunk chunk = oneChunk.getValue();
if (chunk.getDbId() != -1)
continue;
prest2.setInt(1, id);
prest2.setInt(2, region.getValue().getChunkGlobalX(oneChunk.getKey()));
prest2.setInt(3, region.getValue().getChunkGlobalZ(oneChunk.getKey()));
prest2.setString(4, chunk.serializeNames());
prest2.setString(5, jobsWorld != null ? jobsWorld.getName() : "");
prest2.addBatch();
prest2.setInt(1, id);
prest2.setInt(2, region.getValue().getChunkGlobalX(oneChunk.getKey()));
prest2.setInt(3, region.getValue().getChunkGlobalZ(oneChunk.getKey()));
prest2.setString(4, chunk.serializeNames());
prest2.setString(5, jobsWorld != null ? jobsWorld.getName() : "");
prest2.addBatch();
i++;
}
i++;
}
}
}
prest2.executeBatch();