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);
+ }
+ }
+ }
+ }
+ }
+ }
+}