diff --git a/Marriage.iml b/Marriage.iml index 17aab36..eedd26b 100644 --- a/Marriage.iml +++ b/Marriage.iml @@ -11,6 +11,15 @@ + + + + + + + + + diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index 1d59bc8..9e52c04 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -70,6 +70,13 @@ 1.7.10-R0.1-SNAPSHOT provided + + org.spigotmc + spigot + 1.8-R0.1-SNAPSHOT + system + D:\Programming\bukkit\Marriage/lib/spigot.jar + junit junit diff --git a/lib/spigot.jar b/lib/spigot.jar new file mode 100644 index 0000000..8b7f8dc Binary files /dev/null and b/lib/spigot.jar differ diff --git a/pom.xml b/pom.xml index b01d73a..1a8d3f9 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,13 @@ 1.7.10-R0.1-SNAPSHOT provided + + org.spigotmc + spigot + 1.8-R0.1-SNAPSHOT + system + ${project.basedir}/lib/spigot.jar + com.google.guava guava diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/commands/Command.java b/src/main/java/com/lenis0012/bukkit/marriage2/commands/Command.java index 653835a..00d12a7 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/commands/Command.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/commands/Command.java @@ -108,7 +108,7 @@ public abstract class Command { protected void broadcast(String message, Object... args) { message = ChatColor.translateAlternateColorCodes('&', String.format(message, args)); - sender.sendMessage(message); + Bukkit.broadcastMessage(message); } public String getPermission() { diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHelp.java b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHelp.java index 2b4cb0b..230e467 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHelp.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHelp.java @@ -17,14 +17,14 @@ public class CommandHelp extends Command { MarriageCommandExecutor commandExecutor = ((MarriageBase) marriage).getCommandExecutor(); reply("Author: &alenis0012"); reply("Version: &a" + marriage.getPlugin().getDescription().getVersion()); - reply("&2&m----------&2< &a&lMarriage Command Help &2>&2&m----------"); // Play around with the amount of dashes later + reply("&2&m---------&2< &a&lMarriage Command Help &2>&2&m---------"); // Play around with the amount of dashes later for(Command command : commandExecutor.getSubCommands()) { if(command.isHidden()) { continue; } String alias = command instanceof CommandMarry ? "" : command.getAliases()[0] + " "; - reply("&a/marry" + alias + " " + command.getUsage() + " &f- &7" + command.getDescription()); + reply("&a/marry " + alias + command.getUsage() + " &f- &7" + command.getDescription()); } reply("&2&m--------------------------------------------"); // Play around with the amount of dashes later diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandMarry.java b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandMarry.java index ce1844c..13d180a 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandMarry.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandMarry.java @@ -30,10 +30,27 @@ public class CommandMarry extends Command { if(Settings.ENABLE_PRIEST.value()) { Player player1 = getArgAsPlayer(-1); Player player2 = getArgAsPlayer(0); + if(player1 == null) { + reply(Message.PLAYER_NOT_FOUND, getArg(-1)); + return; + } if(player2 == null) { + reply(Message.PLAYER_NOT_FOUND, getArg(0)); + return; + } MPlayer mp1 = marriage.getMPlayer(player1.getUniqueId()); MPlayer mp2 = marriage.getMPlayer(player2.getUniqueId()); + if(mp1.isMarried() || mp2.isMarried()) { + reply(Message.ALREADY_MARRIED); + return; + } MPlayer mp = marriage.getMPlayer(player.getUniqueId()); + if(!mp.isPriest()) { + reply(Message.NOT_A_PRIEST); + return; + } + marriage.marry(mp1, mp2); + broadcast(Message.MARRIED, player1.getName(), player2.getName()); } else { Player target = getArgAsPlayer(-1); if (target != null) { diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandSeen.java b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandSeen.java index de618f9..ffe9fe4 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandSeen.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandSeen.java @@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit; public class CommandSeen extends Command { public CommandSeen(Marriage marriage) { super(marriage, "seen"); - setDescription("Check when your partner last logged in to the server."); + setDescription("Check when your partner last logged in."); } @Override diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java b/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java index eeb50ac..8d0b891 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java @@ -30,7 +30,8 @@ public enum Message { TELEPORTED("&aYou have been teleported to your partners location!"), TELEPORTED_2("&aYour partner has just teleported to you!"), ONLINE_SINCE("&aYour partner has been &2ONLINE &afor %s!"), - OFFLINE_SINCE("&aYour partner has been &cOFFLINE &afor %ss!"); + OFFLINE_SINCE("&aYour partner has been &cOFFLINE &afor %ss!"), + NOT_A_PRIEST("&cYou are not permitted to marry 2 players!"); private final String defaultMessage; private String message; diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java index 742050f..05473dc 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java @@ -88,6 +88,7 @@ public class MarriageCore extends MarriageBase { MarriageData mdata = new MarriageData(player1.getUniqueId(), player2.getUniqueId()); ((MarriagePlayer) player1).addMarriage(mdata); ((MarriagePlayer) player2).addMarriage(mdata); + dataManager.savePlayer((MarriagePlayer) player1); return mdata; } @@ -95,6 +96,15 @@ public class MarriageCore extends MarriageBase { public ListQuery getMarriageList(int scale, int page) { return dataManager.listMarriages(scale, page); } + + public void removeMarriage(final MData mdata) { + new Thread() { + @Override + public void run() { + dataManager.deleteMarriage(mdata.getPlayer1Id(), mdata.getPllayer2Id()); + } + }.start(); + } /** * Unload player from the memory diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataConverter.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataConverter.java index 9739431..2375ddf 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataConverter.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataConverter.java @@ -1,8 +1,6 @@ package com.lenis0012.bukkit.marriage2.internal.data; -import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.lenis0012.bukkit.marriage2.Gender; import com.lenis0012.bukkit.marriage2.MData; import com.lenis0012.bukkit.marriage2.MPlayer; import com.lenis0012.bukkit.marriage2.internal.MarriageCore; @@ -15,7 +13,6 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.util.ArrayList; -import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.logging.Level; @@ -57,11 +54,11 @@ public class DataConverter { } } - int percent = (completed + 1) / totalFiles; - if(percent >= lastPercent + 5) { - lastPercent += 5; - reportStatus(percent); - } +// int percent = (int) (((completed + 1) / (double) totalFiles) * 100.0); +// if(percent >= lastPercent + 5) { +// lastPercent += 5; +// reportStatus(percent); +// } } // Insert data into new DB... @@ -98,9 +95,6 @@ public class DataConverter { } catch(Exception e) { core.getLogger().log(Level.WARNING, "Failed to convert data for player!", e); } - - int percent = ++completed / totalFiles; - reportStatus(percent); } // Save changes @@ -126,5 +120,6 @@ public class DataConverter { bar.append('_'); } bar.append("] (").append(percent).append("%)"); + core.getLogger().log(Level.INFO, bar.toString()); } } diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataManager.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataManager.java index 321096b..4359ece 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataManager.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/DataManager.java @@ -30,6 +30,9 @@ public class DataManager { public DataManager(MarriageCore core, FileConfiguration config) { this.core = core; String driver = "org.sqlite.JDBC"; + String idLine = "id INTEGER PRIMARY KEY AUTOINCREMENT,"; + String endLine = ");"; + if(config.getBoolean("MySQL.enabled")) { String user = config.getString("MySQL.user", "root"); String pswd = config.getString("MySQL.password", ""); @@ -37,6 +40,8 @@ public class DataManager { String database = config.getString("MySQL.database", "myserver"); this.prefix = config.getString("MySQL.prefix", "marriage_"); this.url = String.format("jdbc:mysql://%s/%s?user=%s&password=%s", host, database, user, pswd); + idLine = "id INT NOT NULL AUTO_INCREMENT,"; + endLine = ",PRIMARY KEY(id));"; } else { this.url = String.format("jdbc:sqlite:%s", new File(core.getPlugin().getDataFolder(), "database.db")); this.prefix = ""; @@ -58,17 +63,17 @@ public class DataManager { + "priest BIT," + "lastlogin BIGINT);", prefix)); statement.executeUpdate(String.format("CREATE TABLE IF NOT EXISTS %sdata (" - + "id INT NOT NULL AUTO_INCREMENT," - + "player1 VARCHAR(128) NOT NULL," - + "player2 VARCHAR(128) NOT NULL," - + "home_world VARCHAR(128) NOT NULL," - + "home_x DOUBLE," - + "home_y DOUBLE," - + "home_z DOUBLE," - + "home_yaw FLOAT," - + "home_pitch FLOAT," - + "pvp_enabled BIT," - + "PRIMARY KEY(id));", prefix)); + + idLine + + "player1 VARCHAR(128) NOT NULL," + + "player2 VARCHAR(128) NOT NULL," + + "home_world VARCHAR(128) NOT NULL," + + "home_x DOUBLE," + + "home_y DOUBLE," + + "home_z DOUBLE," + + "home_yaw FLOAT," + + "home_pitch FLOAT," + + "pvp_enabled BIT" + + endLine, prefix)); } catch (SQLException e) { core.getLogger().log(Level.WARNING, "Failed to load player data", e); } finally { @@ -87,7 +92,7 @@ public class DataManager { Connection connection = newConnection(); try { PreparedStatement ps = connection.prepareStatement(String.format( - "SELECT * FROM %splayers WHERE unique_user_id=?;", prefix)); + "SELECT * FROM %splayers WHERE unique_user_id=?;", prefix)); ps.setString(1, uuid.toString()); player = new MarriagePlayer(uuid, ps.executeQuery()); loadMarriages(connection, player, false); @@ -126,30 +131,31 @@ public class DataManager { // Not in database yet ps = connection.prepareStatement(String.format( "INSERT INTO %splayers (unique_user_id,gender,priest,lastlogin) VALUES(?,?,?,?);", prefix)); - ps.setString(1, player.getUniqueId().toString()); - ps.setString(2, player.getGender().toString()); - ps.setBoolean(3, player.isPriest()); - ps.setLong(4, System.currentTimeMillis()); + player.save(ps); ps.executeUpdate(); } // Save marriages if(player.getMarriage() != null) { MarriageData mdata = (MarriageData) player.getMarriage(); - if(mdata.getId() >= 0 || mdata.isSaved()) { - // Update existing entry - ps = connection.prepareStatement(String.format( - "UPDATE %sdata 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 %sdata (player1,player2,home_world,home_x,home_y,home_z,home_yaw,home_pitch,pvp_enabled) VALUES(?,?,?,?,?,?,?,?,?);", prefix)); - mdata.save(ps); - ps.executeUpdate(); - } + ps = connection.prepareStatement(String.format("SELECT * FROM %sdata 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 %sdata 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 %sdata (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); @@ -166,7 +172,7 @@ public class DataManager { private void loadMarriages(Connection connection, MarriagePlayer player, boolean alt) throws SQLException { PreparedStatement ps = connection.prepareStatement(String.format( - "SELECT * FROM %sdata WHERE %s=?;", prefix, alt ? "player2" : "player1", prefix)); + "SELECT * FROM %sdata WHERE %s=?;", prefix, alt ? "player2" : "player1", prefix)); ps.setString(1, player.getUniqueId().toString()); ResultSet result = ps.executeQuery(); while(result.next()) { @@ -185,6 +191,26 @@ public class DataManager { loadMarriages(connection, player, true); } } + + public void deleteMarriage(UUID player1, UUID player2) { + Connection connection = newConnection(); + try { + PreparedStatement ps = connection.prepareStatement(String.format("DELETE FROM %sdata WHERE player1=? AND player2=?;", prefix)); + ps.setString(1, player1.toString()); + ps.setString(2, player2.toString()); + ps.executeUpdate(); + } catch (SQLException e) { + core.getLogger().log(Level.WARNING, "Failed to load player data", e); + } finally { + if(connection != null) { + try { + connection.close(); + } catch (SQLException e) { + ; + } + } + } + } public ListQuery listMarriages(int scale, int page) { Connection connection = newConnection(); diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriageData.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriageData.java index 4299ae6..7574b05 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriageData.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriageData.java @@ -103,7 +103,8 @@ public class MarriageData implements MData { @Override public UUID getOtherPlayer(UUID me) { - return me == player1 ? player2 : player1; + System.out.println(player1.toString() + " - " + player2.toString() + " > " + me.toString()); + return me.toString().equalsIgnoreCase(player1.toString()) ? player2 : player1; } public boolean isSaved() { diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriagePlayer.java b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriagePlayer.java index 8b84a59..276766b 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriagePlayer.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/data/MarriagePlayer.java @@ -12,6 +12,7 @@ import com.lenis0012.bukkit.marriage2.Gender; import com.lenis0012.bukkit.marriage2.MData; import com.lenis0012.bukkit.marriage2.MPlayer; import com.lenis0012.bukkit.marriage2.Marriage; +import com.lenis0012.bukkit.marriage2.internal.MarriageCore; import com.lenis0012.bukkit.marriage2.internal.MarriagePlugin; public class MarriagePlayer implements MPlayer { @@ -103,6 +104,11 @@ public class MarriagePlayer implements MPlayer { @Override public void divorce() { + if(marriage == null) { + return; + } + + ((MarriageCore) MarriagePlugin.getInstance()).removeMarriage(marriage); MarriagePlayer partner = (MarriagePlayer) getPartner(); partner.marriage = null; this.marriage = null; diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java new file mode 100644 index 0000000..808c1e9 --- /dev/null +++ b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java @@ -0,0 +1,26 @@ +package com.lenis0012.bukkit.marriage2.listeners; + +import com.lenis0012.bukkit.marriage2.MPlayer; +import com.lenis0012.bukkit.marriage2.internal.MarriageCore; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +public class ChatListener implements Listener { + private final MarriageCore core; + + public ChatListener(MarriageCore core) { + this.core = core; + } + + @EventHandler + public void onPlayerChat(AsyncPlayerChatEvent event) { + final Player player = event.getPlayer(); + MPlayer mp = core.getMPlayer(player.getUniqueId()); + if(mp.isMarried()) { + event.setFormat(ChatColor.DARK_RED + ChatColor.BOLD.toString() + "<3 " + ChatColor.RESET.toString() + event.getFormat()); + } + } +} diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/listeners/KissListener.java b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/KissListener.java new file mode 100644 index 0000000..8997611 --- /dev/null +++ b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/KissListener.java @@ -0,0 +1,68 @@ +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.google.common.collect.Lists; +import com.lenis0012.bukkit.marriage2.MData; +import com.lenis0012.bukkit.marriage2.MPlayer; +import com.lenis0012.bukkit.marriage2.internal.MarriageCore; +import net.minecraft.server.v1_8_R3.EnumParticle; +import net.minecraft.server.v1_8_R3.PacketPlayOutWorldParticles; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEntityEvent; + +import java.util.List; + +public class KissListener implements Listener { + private final List cooldown = Lists.newArrayList(); + private final MarriageCore core; + + public KissListener(MarriageCore core) { + this.core = core; + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEntityEvent event) { + final Player player = event.getPlayer(); + Entity e = event.getRightClicked(); + if(e instanceof Player) { + final Player clicked = (Player) e; + if(player.isSneaking() && clicked.isSneaking()) { + MPlayer mp = core.getMPlayer(player.getUniqueId()); + if(mp.isMarried()) { + MData data = mp.getMarriage(); + if(clicked.getUniqueId().toString().equalsIgnoreCase(data.getOtherPlayer(player.getUniqueId()).toString())) { + if(!cooldown.contains(player.getName()) && !cooldown.contains(clicked.getName())) { + cooldown.add(player.getName()); + cooldown.add(clicked.getName()); + Location l1 = player.getEyeLocation(); + Location l2 = clicked.getEyeLocation(); + Location l = l1.clone().add((l2.getX() - l1.getX()) / 2, (l2.getY() - l1.getY()) / 2, (l2.getZ() - l1.getZ()) / 2); + + PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(EnumParticle.HEART, false, (float) l.getX(), (float) l.getY(), (float) l.getZ(), 0.3F, 0.3F, 0.3F, 1F, 7); + for(Player p : player.getWorld().getPlayers()) { + ((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet); + } + + Bukkit.getScheduler().runTaskLater(core.getPlugin(), new Runnable() { + @Override + public void run() { + cooldown.remove(player.getName()); + cooldown.remove(clicked.getName()); + } + }, 40L); + } + } + } + } + } + } +}