Skip to content

Commit

Permalink
Optimized persistence data containers creation for players and islands
Browse files Browse the repository at this point in the history
  • Loading branch information
OmerBenGera committed Jul 2, 2022
1 parent 4f63d81 commit 6367e3d
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 15 deletions.
Expand Up @@ -32,7 +32,7 @@
import com.bgsoftware.superiorskyblock.island.algorithm.DefaultIslandCalculationAlgorithm;
import com.bgsoftware.superiorskyblock.island.algorithm.DefaultIslandEntitiesTrackerAlgorithm;
import com.bgsoftware.superiorskyblock.island.bank.SIslandBank;
import com.bgsoftware.superiorskyblock.island.persistence.PersistentDataContainerImpl;
import com.bgsoftware.superiorskyblock.core.persistence.PersistentDataContainerImpl;
import com.bgsoftware.superiorskyblock.player.SSuperiorPlayer;
import com.bgsoftware.superiorskyblock.player.algorithm.DefaultPlayerTeleportAlgorithm;
import com.google.common.base.Preconditions;
Expand Down
@@ -1,4 +1,4 @@
package com.bgsoftware.superiorskyblock.island.persistence;
package com.bgsoftware.superiorskyblock.core.persistence;

import com.bgsoftware.superiorskyblock.api.persistence.PersistentDataContainer;
import com.bgsoftware.superiorskyblock.api.persistence.PersistentDataType;
Expand Down
@@ -1,4 +1,4 @@
package com.bgsoftware.superiorskyblock.island.persistence;
package com.bgsoftware.superiorskyblock.core.persistence;

import com.bgsoftware.superiorskyblock.api.persistence.PersistentDataType;
import com.bgsoftware.superiorskyblock.api.persistence.PersistentDataTypeContext;
Expand Down
@@ -1,4 +1,4 @@
package com.bgsoftware.superiorskyblock.island.persistence;
package com.bgsoftware.superiorskyblock.core.persistence;

import com.bgsoftware.superiorskyblock.api.persistence.PersistentDataContainer;
import com.bgsoftware.superiorskyblock.api.persistence.PersistentDataType;
Expand All @@ -18,7 +18,6 @@

public class PersistentDataContainerImpl<E> implements PersistentDataContainer {


private final E holder;
private final Consumer<E> saveFunction;

Expand Down
Expand Up @@ -133,8 +133,9 @@ public class SIsland implements Island {
private final IslandCalculationAlgorithm calculationAlgorithm = plugin.getFactory().createIslandCalculationAlgorithm(this);
private final IslandBlocksTrackerAlgorithm blocksTracker = plugin.getFactory().createIslandBlocksTrackerAlgorithm(this);
private final IslandEntitiesTrackerAlgorithm entitiesTracker = plugin.getFactory().createIslandEntitiesTrackerAlgorithm(this);
private final PersistentDataContainer persistentDataContainer = plugin.getFactory().createPersistentDataContainer(this);
private final Synchronized<BukkitTask> bankInterestTask = Synchronized.of(null);
@Nullable
private PersistentDataContainer persistentDataContainer;

/*
* Island Flags
Expand Down Expand Up @@ -3293,6 +3294,8 @@ public DatabaseBridge getDatabaseBridge() {

@Override
public PersistentDataContainer getPersistentDataContainer() {
if (persistentDataContainer == null)
persistentDataContainer = plugin.getFactory().createPersistentDataContainer(this);
return persistentDataContainer;
}

Expand Down Expand Up @@ -3566,6 +3569,7 @@ private void loadFromCachedInfo(CachedIslandInfo cachedIslandInfo) {
this.bankLimit.set(cachedIslandInfo.bankLimit);

this.islandBank.setBalance(cachedIslandInfo.balance);

this.lastInterest = cachedIslandInfo.lastInterestTime;

cachedIslandInfo.cachedWarpInfoList.forEach(cachedWarpInfo -> {
Expand Down Expand Up @@ -3597,9 +3601,11 @@ private void loadFromCachedInfo(CachedIslandInfo cachedIslandInfo) {
}
});

cachedIslandInfo.bankTransactions.forEach(islandBank::loadTransaction);
if (!cachedIslandInfo.bankTransactions.isEmpty())
cachedIslandInfo.bankTransactions.forEach(this.islandBank::loadTransaction);

if (cachedIslandInfo.persistentData.length > 0)
this.persistentDataContainer.load(cachedIslandInfo.persistentData);
getPersistentDataContainer().load(cachedIslandInfo.persistentData);
}

private void startBankInterest() {
Expand Down
Expand Up @@ -32,7 +32,7 @@
import com.bgsoftware.superiorskyblock.island.algorithm.SpawnIslandBlocksTrackerAlgorithm;
import com.bgsoftware.superiorskyblock.island.algorithm.SpawnIslandCalculationAlgorithm;
import com.bgsoftware.superiorskyblock.island.algorithm.SpawnIslandEntitiesTrackerAlgorithm;
import com.bgsoftware.superiorskyblock.island.persistence.EmptyPersistentDataContainer;
import com.bgsoftware.superiorskyblock.core.persistence.EmptyPersistentDataContainer;
import com.bgsoftware.superiorskyblock.island.privilege.IslandPrivileges;
import com.bgsoftware.superiorskyblock.island.privilege.PlayerPrivilegeNode;
import com.bgsoftware.superiorskyblock.island.privilege.PrivilegeNodeAbstract;
Expand Down
Expand Up @@ -20,11 +20,11 @@
import com.bgsoftware.superiorskyblock.core.database.bridge.PlayersDatabaseBridge;
import com.bgsoftware.superiorskyblock.core.database.cache.CachedPlayerInfo;
import com.bgsoftware.superiorskyblock.core.database.cache.DatabaseCache;
import com.bgsoftware.superiorskyblock.core.debug.PluginDebugger;
import com.bgsoftware.superiorskyblock.core.formatting.Formatters;
import com.bgsoftware.superiorskyblock.island.flag.IslandFlags;
import com.bgsoftware.superiorskyblock.island.role.SPlayerRole;
import com.bgsoftware.superiorskyblock.mission.MissionData;
import com.bgsoftware.superiorskyblock.core.formatting.Formatters;
import com.bgsoftware.superiorskyblock.core.debug.PluginDebugger;
import com.google.common.base.Preconditions;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
Expand All @@ -37,7 +37,6 @@

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
Expand All @@ -53,7 +52,8 @@ public class SSuperiorPlayer implements SuperiorPlayer {

private final DatabaseBridge databaseBridge = plugin.getFactory().createDatabaseBridge(this);
private final PlayerTeleportAlgorithm playerTeleportAlgorithm = plugin.getFactory().createPlayerTeleportAlgorithm(this);
private final PersistentDataContainer persistentDataContainer = plugin.getFactory().createPersistentDataContainer(this);
@Nullable
private PersistentDataContainer persistentDataContainer; // Lazy loading

private final Map<Mission<?>, Integer> completedMissions = new ConcurrentHashMap<>();
private final UUID uuid;
Expand Down Expand Up @@ -708,6 +708,8 @@ public DatabaseBridge getDatabaseBridge() {

@Override
public PersistentDataContainer getPersistentDataContainer() {
if (persistentDataContainer == null)
persistentDataContainer = plugin.getFactory().createPersistentDataContainer(this);
return persistentDataContainer;
}

Expand Down Expand Up @@ -798,7 +800,7 @@ private void loadFromCachedInfo(CachedPlayerInfo cachedPlayerInfo) {
this.worldBorderEnabled = cachedPlayerInfo.worldBorderEnabled;
this.completedMissions.putAll(cachedPlayerInfo.completedMissions);
if (cachedPlayerInfo.persistentData.length > 0)
this.persistentDataContainer.load(cachedPlayerInfo.persistentData);
getPersistentDataContainer().load(cachedPlayerInfo.persistentData);
}

}
Expand Up @@ -12,7 +12,7 @@
import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer;
import com.bgsoftware.superiorskyblock.core.database.bridge.EmptyDatabaseBridge;
import com.bgsoftware.superiorskyblock.island.role.SPlayerRole;
import com.bgsoftware.superiorskyblock.island.persistence.EmptyPersistentDataContainer;
import com.bgsoftware.superiorskyblock.core.persistence.EmptyPersistentDataContainer;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
Expand Down

0 comments on commit 6367e3d

Please sign in to comment.