mirror of
https://github.com/TotalFreedomMC/TF-Marriage.git
synced 2024-06-26 07:50:52 +00:00
Database tweaks
This commit is contained in:
parent
bdd9074d0f
commit
3486c8a13f
|
@ -45,7 +45,12 @@ public class CommandUpdate extends Command {
|
|||
return;
|
||||
}
|
||||
|
||||
ItemStack inHand = player.getItemInHand();
|
||||
player.setItemInHand(changelog);
|
||||
if(inHand != null) {
|
||||
player.getInventory().addItem(inHand);
|
||||
}
|
||||
|
||||
reply("&llenis> &bCheck my changelog out! (I put it in your hand)");
|
||||
player.updateInventory();
|
||||
}
|
||||
|
|
|
@ -84,13 +84,14 @@ public class MarriageCore extends MarriageBase {
|
|||
player = dataManager.loadPlayer(uuid);
|
||||
players.put(uuid, player);
|
||||
}
|
||||
|
||||
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MData marry(MPlayer player1, MPlayer player2) {
|
||||
MarriageData mdata = new MarriageData(player1.getUniqueId(), player2.getUniqueId());
|
||||
MarriageData mdata = new MarriageData(dataManager, player1.getUniqueId(), player2.getUniqueId());
|
||||
mdata.saveAsync();
|
||||
((MarriagePlayer) player1).addMarriage(mdata);
|
||||
((MarriagePlayer) player2).addMarriage(mdata);
|
||||
dataManager.savePlayer((MarriagePlayer) player1);
|
||||
|
@ -102,6 +103,10 @@ public class MarriageCore extends MarriageBase {
|
|||
return dataManager.listMarriages(scale, page);
|
||||
}
|
||||
|
||||
public void setMPlayer(UUID uuid, MarriagePlayer mp) {
|
||||
players.put(uuid, mp);
|
||||
}
|
||||
|
||||
public DataManager getDataManager() {
|
||||
return dataManager;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ import java.util.function.Consumer;
|
|||
import java.util.function.Supplier;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.lenis0012.bukkit.marriage2.MPlayer;
|
||||
import com.lenis0012.bukkit.marriage2.misc.LockedReference;
|
||||
|
@ -27,6 +29,8 @@ import com.lenis0012.bukkit.marriage2.misc.ListQuery;
|
|||
import org.bukkit.entity.Player;
|
||||
|
||||
public class DataManager {
|
||||
// Create a data cache to overlap with the pre join event cache
|
||||
private final Cache<UUID, MarriageData> marriageDataCache = CacheBuilder.newBuilder().expireAfterWrite(60L, TimeUnit.SECONDS).build();
|
||||
private final LockedReference<Connection> supplier;
|
||||
private final MarriageCore core;
|
||||
private final String prefix;
|
||||
|
@ -120,35 +124,39 @@ public class DataManager {
|
|||
player.save(ps);
|
||||
ps.executeUpdate();
|
||||
}
|
||||
|
||||
// Save marriages
|
||||
if(player.getMarriage() != null) {
|
||||
MarriageData mdata = (MarriageData) player.getMarriage();
|
||||
ps = connection.prepareStatement(String.format("SELECT * FROM %smarriages WHERE player1=? AND player2=?;", prefix));
|
||||
ps.setString(1, mdata.getPlayer1Id().toString());
|
||||
ps.setString(2, mdata.getPllayer2Id().toString());
|
||||
result = ps.executeQuery();
|
||||
if(result.next()) {
|
||||
// Update existing entry
|
||||
ps = connection.prepareStatement(String.format(
|
||||
"UPDATE %smarriages SET player1=?,player2=?,home_world=?,home_x=?,home_y=?,home_z=?,home_yaw=?,home_pitch=?,pvp_enabled=? WHERE id=?;", prefix));
|
||||
mdata.save(ps);
|
||||
ps.setInt(10, mdata.getId());
|
||||
ps.executeUpdate();
|
||||
} else {
|
||||
mdata.setSaved(true);
|
||||
ps = connection.prepareStatement(String.format(
|
||||
"INSERT INTO %smarriages (player1,player2,home_world,home_x,home_y,home_z,home_yaw,home_pitch,pvp_enabled) VALUES(?,?,?,?,?,?,?,?,?);", prefix));
|
||||
mdata.save(ps);
|
||||
ps.executeUpdate();
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
core.getLogger().log(Level.WARNING, "Failed to load player data", e);
|
||||
core.getLogger().log(Level.WARNING, "Failed to save player data", e);
|
||||
} finally {
|
||||
supplier.finish();
|
||||
}
|
||||
}
|
||||
|
||||
public void saveMarriage(MarriageData mdata) {
|
||||
Connection connection = supplier.access();
|
||||
try {
|
||||
PreparedStatement ps = connection.prepareStatement(String.format("SELECT * FROM %smarriages WHERE player1=? AND player2=?;", prefix));
|
||||
ps.setString(1, mdata.getPlayer1Id().toString());
|
||||
ps.setString(2, mdata.getPllayer2Id().toString());
|
||||
ResultSet result = ps.executeQuery();
|
||||
if(result.next()) {
|
||||
// Update existing entry
|
||||
ps = connection.prepareStatement(String.format(
|
||||
"UPDATE %smarriages SET player1=?,player2=?,home_world=?,home_x=?,home_y=?,home_z=?,home_yaw=?,home_pitch=?,pvp_enabled=? WHERE id=?;", prefix));
|
||||
mdata.save(ps);
|
||||
ps.setInt(10, mdata.getId());
|
||||
ps.executeUpdate();
|
||||
} else {
|
||||
ps = connection.prepareStatement(String.format(
|
||||
"INSERT INTO %smarriages (player1,player2,home_world,home_x,home_y,home_z,home_yaw,home_pitch,pvp_enabled) VALUES(?,?,?,?,?,?,?,?,?);", prefix));
|
||||
mdata.save(ps);
|
||||
ps.executeUpdate();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
core.getLogger().log(Level.WARNING, "Failed to save marriage data", e);
|
||||
} finally {
|
||||
supplier.finish();
|
||||
}
|
||||
}
|
||||
|
||||
private void loadMarriages(Connection connection, MarriagePlayer player, boolean alt) throws SQLException {
|
||||
PreparedStatement ps = connection.prepareStatement(String.format(
|
||||
|
@ -158,13 +166,17 @@ public class DataManager {
|
|||
while(result.next()) {
|
||||
UUID partnerId = UUID.fromString(result.getString(alt ? "player1" : "player2"));
|
||||
Player partner = Bukkit.getPlayer(partnerId);
|
||||
MarriageData data;
|
||||
if(partner != null && partner.isOnline()) {
|
||||
// Copy marriage data from partner to ensure a match.
|
||||
MPlayer mpartner = core.getMPlayer(partnerId);
|
||||
player.addMarriage((MarriageData) mpartner.getMarriage());
|
||||
} else {
|
||||
player.addMarriage(new MarriageData(result));
|
||||
}
|
||||
data = (MarriageData) core.getMPlayer(partnerId).getMarriage();
|
||||
} else if((data = marriageDataCache.getIfPresent(player.getUniqueId())) == null){
|
||||
data = new MarriageData(this, result);
|
||||
marriageDataCache.put(data.getPlayer1Id(), data);
|
||||
marriageDataCache.put(data.getPllayer2Id(), data);
|
||||
}
|
||||
|
||||
player.addMarriage(data);
|
||||
}
|
||||
|
||||
if(!alt) {
|
||||
|
@ -203,7 +215,7 @@ public class DataManager {
|
|||
|
||||
List<MData> list = Lists.newArrayList();
|
||||
while(result.next()) {
|
||||
list.add(new MarriageData(result));
|
||||
list.add(new MarriageData(this, result));
|
||||
}
|
||||
|
||||
return new ListQuery(pages, page, list);
|
||||
|
|
|
@ -5,12 +5,14 @@ import java.sql.ResultSet;
|
|||
import java.sql.SQLException;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.lenis0012.bukkit.marriage2.internal.MarriagePlugin;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
|
||||
import com.lenis0012.bukkit.marriage2.MData;
|
||||
|
||||
public class MarriageData implements MData {
|
||||
private final DataManager dataManager;
|
||||
private final UUID player1;
|
||||
private final UUID player2;
|
||||
private Location home;
|
||||
|
@ -18,12 +20,14 @@ public class MarriageData implements MData {
|
|||
private int id = -1;
|
||||
private boolean saved = false;
|
||||
|
||||
public MarriageData(UUID player1, UUID player2) {
|
||||
public MarriageData(DataManager dataManager, UUID player1, UUID player2) {
|
||||
this.dataManager = dataManager;
|
||||
this.player1 = player1;
|
||||
this.player2 = player2;
|
||||
}
|
||||
|
||||
public MarriageData(ResultSet data) throws SQLException {
|
||||
public MarriageData(DataManager dataManager, ResultSet data) throws SQLException {
|
||||
this.dataManager = dataManager;
|
||||
this.id = data.getInt("id");
|
||||
this.player1 = UUID.fromString(data.getString("player1"));
|
||||
this.player2 = UUID.fromString(data.getString("player2"));
|
||||
|
@ -84,6 +88,7 @@ public class MarriageData implements MData {
|
|||
@Override
|
||||
public void setHome(Location home) {
|
||||
this.home = home;
|
||||
saveAsync();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -99,6 +104,7 @@ public class MarriageData implements MData {
|
|||
@Override
|
||||
public void setPVPEnabled(boolean pvpEnabled) {
|
||||
this.pvpEnabled = pvpEnabled;
|
||||
saveAsync();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -107,11 +113,12 @@ public class MarriageData implements MData {
|
|||
return me.toString().equalsIgnoreCase(player1.toString()) ? player2 : player1;
|
||||
}
|
||||
|
||||
public boolean isSaved() {
|
||||
return saved;
|
||||
}
|
||||
|
||||
public void setSaved(boolean saved) {
|
||||
this.saved = saved;
|
||||
public void saveAsync() {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(MarriagePlugin.getInstance().getPlugin(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dataManager.saveMarriage(MarriageData.this);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -3,12 +3,9 @@ package com.lenis0012.bukkit.marriage2.internal.data;
|
|||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import com.lenis0012.bukkit.marriage2.Gender;
|
||||
import com.lenis0012.bukkit.marriage2.MData;
|
||||
import com.lenis0012.bukkit.marriage2.MPlayer;
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package com.lenis0012.bukkit.marriage2.listeners;
|
||||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.lenis0012.bukkit.marriage2.MPlayer;
|
||||
import com.lenis0012.bukkit.marriage2.internal.data.MarriagePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
|
@ -11,7 +17,11 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
|||
|
||||
import com.lenis0012.bukkit.marriage2.internal.MarriageCore;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class DatabaseListener implements Listener {
|
||||
private final Cache<UUID, MarriagePlayer> cache = CacheBuilder.newBuilder().expireAfterWrite(30L, TimeUnit.SECONDS).build();
|
||||
private final MarriageCore core;
|
||||
|
||||
public DatabaseListener(MarriageCore core) {
|
||||
|
@ -21,13 +31,14 @@ public class DatabaseListener implements Listener {
|
|||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerLogin(AsyncPlayerPreLoginEvent event) {
|
||||
if(event.getLoginResult() == Result.ALLOWED) {
|
||||
core.getMPlayer(event.getUniqueId());
|
||||
cache.put(event.getUniqueId(), core.getDataManager().loadPlayer(event.getUniqueId()));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
core.getMPlayer(event.getPlayer().getUniqueId());
|
||||
final UUID userId = event.getPlayer().getUniqueId();
|
||||
core.setMPlayer(userId, cache.getIfPresent(userId));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
|
@ -49,7 +49,7 @@ public class Updater {
|
|||
if(updateFile.exists()) {
|
||||
BConfig config = new BConfig(core, updateFile);
|
||||
this.apiKey = config.get("api-key", String.class);
|
||||
this.enabled = !config.getOrDefault("disable", false);
|
||||
// this.enabled = !config.getOrDefault("disable", false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue