set partner name

This commit is contained in:
Lennart ten Wolde 2016-02-28 15:48:53 +01:00
parent 44c46f3fdc
commit bbd17485f4
6 changed files with 63 additions and 10 deletions

View file

@ -2,5 +2,5 @@
"name": "Marriage v2.0.4",
"type": "release",
"gameVersion": "1.8.8",
"downloadURL": "http://ci.lenis0012.com/job/Marriage/30/artifact/target/Marriage-Spigot-2.0.4.jar"
"downloadURL": "http://ci.lenis0012.com/job/Marriage/31/artifact/target/Marriage-Spigot-2.0.4.jar"
}

View file

@ -6,6 +6,8 @@ import org.bukkit.Bukkit;
import com.lenis0012.bukkit.marriage2.MPlayer;
import com.lenis0012.bukkit.marriage2.Marriage;
import com.lenis0012.bukkit.marriage2.config.Message;
import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue;
public class CommandDivorce extends Command {
@ -26,6 +28,14 @@ public class CommandDivorce extends Command {
if(!payFee()) return;
mPlayer.divorce();
// Clear metadata
player.removeMetadata("marriedTo", marriage.getPlugin());
Player target = Bukkit.getPlayer(partner.getUniqueId());
if(target != null) {
target.removeMetadata("marriedTo", marriage.getPlugin());
}
broadcast(Message.DIVORCED, player.getName(), Bukkit.getOfflinePlayer(partner.getUniqueId()).getName());
}
}

View file

@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import com.lenis0012.bukkit.marriage2.MPlayer;
import com.lenis0012.bukkit.marriage2.Marriage;
import com.lenis0012.bukkit.marriage2.config.Message;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.UUID;
@ -97,6 +98,8 @@ public class CommandMarry extends Command {
}
marriage.marry(mTarget, mPlayer);
player.setMetadata("marriedTo", new FixedMetadataValue(marriage.getPlugin(), target.getName()));
target.setMetadata("marriedTo", new FixedMetadataValue(marriage.getPlugin(), player.getName()));
broadcast(Message.MARRIED, player.getName(), target.getName());
} else if(!mTarget.isMarriageRequested(player.getUniqueId())) {
if(!hasFee()) {

View file

@ -8,6 +8,8 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Supplier;
@ -29,6 +31,12 @@ import com.lenis0012.bukkit.marriage2.misc.ListQuery;
import org.bukkit.entity.Player;
public class DataManager {
private static final ExecutorService executorService = Executors.newCachedThreadPool();
public static ExecutorService getExecutorService() {
return executorService;
}
// 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 MarriageCore core;

View file

@ -5,7 +5,10 @@ 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.DataManager;
import com.lenis0012.bukkit.marriage2.internal.data.MarriagePlayer;
import com.lenis0012.bukkit.marriage2.misc.ListQuery;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -16,8 +19,11 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import com.lenis0012.bukkit.marriage2.internal.MarriageCore;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
@ -40,24 +46,50 @@ public class DatabaseListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) {
final UUID userId = event.getPlayer().getUniqueId();
MarriagePlayer player = cache.getIfPresent(userId);
if(player != null) {
core.setMPlayer(userId, cache.getIfPresent(userId));
final Player player = event.getPlayer();
final UUID userId = player.getUniqueId();
MarriagePlayer mplayer = cache.getIfPresent(userId);
if(mplayer != null) {
loadPartnerName(mplayer, player);
core.setMPlayer(userId, mplayer);
return;
}
// Something went wrong (unusually long login?)
core.getLogger().log(Level.WARNING, "Player " + event.getPlayer().getName() + " was not in cache");
core.getLogger().log(Level.INFO, "If this message shows often, report to dev");
player = core.getDataManager().loadPlayer(userId);
player.setLastName(event.getPlayer().getName());
core.setMPlayer(userId, player);
mplayer = core.getDataManager().loadPlayer(userId);
mplayer.setLastName(player.getName());
loadPartnerName(mplayer, player);
core.setMPlayer(userId, mplayer);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
core.unloadPlayer(player.getUniqueId());
if(player.hasMetadata("marriedTo")) {
player.removeMetadata("marriedTo", core.getPlugin());
}
}
private void loadPartnerName(final MPlayer mplayer, final Player player) {
if(!mplayer.isMarried()) return;
DataManager.getExecutorService().execute(new Runnable() {
@Override
public void run() {
final String partner = ListQuery.getName(core.getDataManager(), player.getUniqueId());
if(partner == null) {
return;
}
Bukkit.getScheduler().runTask(core.getPlugin(), new Runnable() {
@Override
public void run() {
player.setMetadata("marriedTo", new FixedMetadataValue(core.getPlugin(), partner));
}
});
}
});
}
}

View file

@ -66,7 +66,7 @@ public class ListQuery {
return marriages;
}
private static String getName(DataManager db, UUID userId) {
public static String getName(DataManager db, UUID userId) {
// local uuid cache
OfflinePlayer op = Bukkit.getOfflinePlayer(userId);
if(op != null && op.getName() != null) {
@ -83,7 +83,7 @@ public class ListQuery {
return nameFromMojang(userId);
}
private static String nameFromMojang(UUID uuid) {
public static String nameFromMojang(UUID uuid) {
try {
URL url = new URL(" https://api.mojang.com/user/profiles/" + uuid.toString().replace("-", "") + "/names");
URLConnection connection = url.openConnection();