diff --git a/lib/PlotSquared.jar b/lib/PlotSquared.jar new file mode 100644 index 0000000..787036e Binary files /dev/null and b/lib/PlotSquared.jar differ diff --git a/lib/spigot.jar b/lib/spigot.jar deleted file mode 100644 index 5f01d4f..0000000 Binary files a/lib/spigot.jar and /dev/null differ diff --git a/pom.xml b/pom.xml index 21cb29c..2ce77ef 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.lenis0012.bukkit marriage2 - 2.0.11 + 2.0.12-SNAPSHOT jar Marriage http://dev.bukkit.org/server-mods/marriage-reloaded/ @@ -42,13 +42,13 @@ 1.9-R0.1-SNAPSHOT provided - - - - - - - + + com.plotsquared.bukkit + PlotSquared + 3.3.3 + system + ${project.basedir}/lib/PlotSquared.jar + com.lenis0012.bukkit lenisutils diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/Marriage.java b/src/main/java/com/lenis0012/bukkit/marriage2/Marriage.java index 7fa2538..c7f0ffc 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/Marriage.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/Marriage.java @@ -4,6 +4,7 @@ import com.lenis0012.bukkit.marriage2.commands.Command; import com.lenis0012.bukkit.marriage2.internal.Dependencies; import com.lenis0012.bukkit.marriage2.misc.BConfig; import com.lenis0012.bukkit.marriage2.misc.ListQuery; +import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.plugin.Plugin; @@ -38,13 +39,23 @@ public interface Marriage { ListQuery getMarriageList(int scale, int page); /** - * Marry 2 players with eachother. + * Marry 2 players with each other. * * @param player1 Player 1 * @param player2 Player 2 - * @return The marriage data + * @return The marriage data, null if cancelled via {@link com.lenis0012.bukkit.marriage2.events.PlayerMarryEvent PlayerMarryEvent} */ MData marry(MPlayer player1, MPlayer player2); + + /** + * Marry 2 players with each other. + * + * @param player1 Player 1 + * @param player2 Player 2 + * @param priest Priest that married the players + * @return Marriage data, null if cancelled via {@link com.lenis0012.bukkit.marriage2.events.PlayerMarryEvent PlayerMarryEvent} + */ + MData marry(MPlayer player1, MPlayer player2, MPlayer priest); /** * Register a {@link org.bukkit.event.Listener} to this plugin. diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/MarriageAPI.java b/src/main/java/com/lenis0012/bukkit/marriage2/MarriageAPI.java index 338f2e5..43a89f8 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/MarriageAPI.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/MarriageAPI.java @@ -6,6 +6,13 @@ import com.lenis0012.bukkit.marriage2.internal.MarriagePlugin; * Marriage API. * * Changelog: + * 1.02: + * + * * 1.01: * */ public class MarriageAPI { - private static final int API_VERSION = 101; + private static final int API_VERSION = 102; /** * Get the API main instance. diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHeal.java b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHeal.java new file mode 100644 index 0000000..bfc843d --- /dev/null +++ b/src/main/java/com/lenis0012/bukkit/marriage2/commands/CommandHeal.java @@ -0,0 +1,58 @@ +package com.lenis0012.bukkit.marriage2.commands; + +import com.lenis0012.bukkit.marriage2.MData; +import com.lenis0012.bukkit.marriage2.MPlayer; +import com.lenis0012.bukkit.marriage2.Marriage; +import com.lenis0012.bukkit.marriage2.config.Message; +import com.lenis0012.bukkit.marriage2.config.Settings; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class CommandHeal extends Command { + public CommandHeal(Marriage marriage) { + super(marriage, "heal"); + setExecutionFee(Settings.PRICE_HEAL); + setDescription(Message.COMMAND_HEAL.toString()); + } + + @Override + public void execute() { + MPlayer mPlayer = marriage.getMPlayer(player.getUniqueId()); + MData marriage = mPlayer.getMarriage(); + + // Check if marries + if(marriage == null) { + reply(Message.NOT_MARRIED); + return; + } + + // Verify partner online + Player partner = Bukkit.getPlayer(marriage.getOtherPlayer(player.getUniqueId())); + if(partner == null) { + reply(Message.PARTNER_NOT_ONLINE); + return; + } + + // Check health + if(player.getHealth() < 1.0) { + reply(Message.NO_HEALTH); + return; + } + + // Check health of partner + double give = Math.min(partner.getMaxHealth() - partner.getHealth(), player.getHealth() - 0.5); + if(give == 0.0) { + reply(Message.NO_HEALTH); + return; + } + + // Transfer health + player.setHealth(player.getHealth() - give); + partner.setHealth(partner.getHealth() + give); + + // Notify both parties + int hearts = (int) Math.round(give / 0.5); + reply(Message.HEALTH_GIVEN, hearts); + reply(partner, Message.HEALTH_TAKEN, hearts); + } +} 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 89ff59c..277fe91 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/config/Message.java @@ -44,6 +44,10 @@ public enum Message { CHAT_DISABLED("&aYou are no longer in marriage chat mode!"), CHAT_SPY_ENABLED("&aNow spying on marriage private chat!"), CHAT_SPY_DISABLED("&aNo longer spying on marriage chat!"), + NO_HEALTH("&cYou don't have enough health to share!"), + FULL_HEALTH("&cYour partner already has full health!"), + HEALTH_GIVEN("&aYou healed your partner by %s hearts!"), + HEALTH_TAKEN("&aYou were healed by your partner with %s hearts!"), // COMMANDS COMMAND_MARRY("Request a marriage with another player"), @@ -57,6 +61,7 @@ public enum Message { COMMAND_SEEN("Check when your partner last logged in"), COMMAND_SETHOME("Set a home for you a your partner"), COMMAND_TELEPORT("Teleport to your partner"), + COMMAND_HEAL("Send your health to your partner"), // WORDS STATUS("&aStatus: %s"), diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/config/Settings.java b/src/main/java/com/lenis0012/bukkit/marriage2/config/Settings.java index 4fb1cf2..38fbd18 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/config/Settings.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/config/Settings.java @@ -53,6 +53,9 @@ public class Settings { public static final ConfigOption KISSES_AMOUNT_MIN = new ConfigOption<>("kisses.amount-min", 5); public static final ConfigOption KISSES_AMOUNT_MAX = new ConfigOption<>("kisses.amount-max", 10); + @ConfigHeader("Automatically trust married players to each others plot.") + public static final ConfigOption PLOTSQUARED_AUTO_TRUST = new ConfigOption<>("support.plotsquared-auto-trust", true); + /** * Economy */ @@ -62,6 +65,7 @@ public class Settings { public static final ConfigOption PRICE_MARRY = new ConfigOption<>("economy.marriage-price", 100.0); public static final ConfigOption PRICE_TELEPORT = new ConfigOption<>("economy.teleport-price", 0.0); public static final ConfigOption PRICE_SETHOME = new ConfigOption<>("economy.sethome-price", 0.0); + public static final ConfigOption PRICE_HEAL = new ConfigOption<>("economy.heal-price", 0.0); public static final ConfigOption PRICE_DIVORCE = new ConfigOption<>("economy.divorce-price", 0.0); /** @@ -79,5 +83,5 @@ public class Settings { * Lists */ @ConfigHeader("List of commands that no one can use, for instance 'gift'.") - public static final ConfigOption> DISABLED_COMMANDS = new ConfigOption<>("disabled-commands", Arrays.asList("commandhere", "anothercommand")); + public static final ConfigOption> DISABLED_COMMANDS = new ConfigOption<>("disabled-commands", Arrays.asList("command1", "command2")); } \ No newline at end of file diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/events/PlayerDivorceEvent.java b/src/main/java/com/lenis0012/bukkit/marriage2/events/PlayerDivorceEvent.java new file mode 100644 index 0000000..fe58056 --- /dev/null +++ b/src/main/java/com/lenis0012/bukkit/marriage2/events/PlayerDivorceEvent.java @@ -0,0 +1,65 @@ +package com.lenis0012.bukkit.marriage2.events; + +import com.lenis0012.bukkit.marriage2.MData; +import com.lenis0012.bukkit.marriage2.MPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Player divorce event. + * + * Called when two players are about to divorce. + */ +public class PlayerDivorceEvent extends Event implements Cancellable { + private static final HandlerList handlerList = new HandlerList(); + + private MPlayer player; + private MData marriage; + + public PlayerDivorceEvent(MPlayer player, MData marriage) { + super(false); + this.player = player; + this.marriage = marriage; + } + + /** + * Get the player that initiated the divorce. + * + * @return Divorcing player + */ + public MPlayer getPlayer() { + return player; + } + + /** + * Get the marriage that is about to end. + * + * @return Marriage + */ + public MData getMarriage() { + return marriage; + } + + private boolean cancelled = false; + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @Override + public HandlerList getHandlers() { + return handlerList; + } + + public static HandlerList getHandlerList() { + return handlerList; + } +} diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/events/PlayerMarryEvent.java b/src/main/java/com/lenis0012/bukkit/marriage2/events/PlayerMarryEvent.java new file mode 100644 index 0000000..0956570 --- /dev/null +++ b/src/main/java/com/lenis0012/bukkit/marriage2/events/PlayerMarryEvent.java @@ -0,0 +1,83 @@ +package com.lenis0012.bukkit.marriage2.events; + +import com.lenis0012.bukkit.marriage2.MPlayer; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * MPlayerMarryEvent. + * + * Called when two players are about to get married. + */ +public class PlayerMarryEvent extends Event implements Cancellable { + private static final HandlerList handlerList = new HandlerList(); + + private MPlayer requesing; + private MPlayer requested; + private MPlayer priest; + private boolean cancelled = false; + + public PlayerMarryEvent(MPlayer requesing, MPlayer requested, MPlayer priest) { + super(false); + this.requesing = requesing; + this.requested = requested; + this.priest = priest; + } + + /** + * Get the player that requested to marry the other player. + * + * @return Requesting player + */ + public MPlayer getRequesing() { + return requesing; + } + + /** + * Get the player that was requested to be married. + * + * @return Requested player + */ + public MPlayer getRequested() { + return requested; + } + + /** + * Get priest that created/initiated the marriage. + * Note: null if {@link #isFromPriest() isFromPriest} false. + * + * @return True is performed by priest, false otherwise + */ + public MPlayer getPriest() { + return priest; + } + + /** + * Check whether or not this marriage was created by a priest. + * + * @return Created/initiated by a priest + */ + public boolean isFromPriest() { + return priest != null; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + @Override + public HandlerList getHandlers() { + return handlerList; + } + + public static HandlerList getHandlerList() { + return handlerList; + } +} 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 888057c..6b372bb 100644 --- a/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java +++ b/src/main/java/com/lenis0012/bukkit/marriage2/internal/MarriageCore.java @@ -6,11 +6,13 @@ import com.lenis0012.bukkit.marriage2.commands.Command; import com.lenis0012.bukkit.marriage2.config.Message; import com.lenis0012.bukkit.marriage2.config.Permissions; import com.lenis0012.bukkit.marriage2.config.Settings; +import com.lenis0012.bukkit.marriage2.events.PlayerMarryEvent; import com.lenis0012.bukkit.marriage2.internal.Register.Type; import com.lenis0012.bukkit.marriage2.internal.data.DataConverter; import com.lenis0012.bukkit.marriage2.internal.data.DataManager; import com.lenis0012.bukkit.marriage2.internal.data.MarriageData; import com.lenis0012.bukkit.marriage2.internal.data.MarriagePlayer; +import com.lenis0012.bukkit.marriage2.listeners.*; import com.lenis0012.bukkit.marriage2.misc.ListQuery; import com.lenis0012.pluginutils.modules.configuration.ConfigurationModule; import com.lenis0012.updater.api.ReleaseType; @@ -19,6 +21,7 @@ import com.lenis0012.updater.api.UpdaterFactory; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.Listener; +import org.bukkit.plugin.Plugin; import java.util.Collections; import java.util.HashMap; @@ -79,8 +82,14 @@ public class MarriageCore extends MarriageBase { @Register(name = "listeners", type = Register.Type.ENABLE) public void registerListeners() { - for(Listener listener : findObjects("com.lenis0012.bukkit.marriage2.listeners", Listener.class, this)) { - register(listener); + register(new ChatListener(this)); + register(new DatabaseListener(this)); + register(new KissListener(this)); + register(new UpdateListener(this)); + if(Settings.PLOTSQUARED_AUTO_TRUST.value() && Bukkit.getPluginManager().isPluginEnabled("PlotSquared")) { + Plugin plotSquared = Bukkit.getPluginManager().getPlugin("PlotSquared"); + getLogger().log(Level.INFO, "Hooking with PlotSquared v" + plotSquared.getDescription().getVersion()); + register(new PlotSquaredListener()); } } @@ -125,11 +134,21 @@ public class MarriageCore extends MarriageBase { @Override public MData marry(MPlayer player1, MPlayer player2) { + return marry(player1, player2, null); + } + + @Override + public MData marry(MPlayer player1, MPlayer player2, MPlayer priest) { + PlayerMarryEvent event = new PlayerMarryEvent(player1, player2, priest); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) { + return null; + } + MarriageData mdata = new MarriageData(dataManager, player1.getUniqueId(), player2.getUniqueId()); - mdata.saveAsync(); + mdata.saveAsync(); ((MarriagePlayer) player1).addMarriage(mdata); ((MarriagePlayer) player2).addMarriage(mdata); - dataManager.savePlayer((MarriagePlayer) player1); return mdata; } 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 b4a136b..a480f09 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 @@ -5,9 +5,11 @@ import com.lenis0012.bukkit.marriage2.MData; import com.lenis0012.bukkit.marriage2.MPlayer; import com.lenis0012.bukkit.marriage2.Marriage; import com.lenis0012.bukkit.marriage2.config.Settings; +import com.lenis0012.bukkit.marriage2.events.PlayerDivorceEvent; import com.lenis0012.bukkit.marriage2.internal.MarriageCore; import com.lenis0012.bukkit.marriage2.internal.MarriagePlugin; import com.lenis0012.bukkit.marriage2.misc.Cooldown; +import org.bukkit.Bukkit; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -121,6 +123,12 @@ public class MarriagePlayer implements MPlayer { return; } + PlayerDivorceEvent event = new PlayerDivorceEvent(this, marriage); + Bukkit.getPluginManager().callEvent(event); + if(event.isCancelled()) { + return; + } + ((MarriageCore) MarriagePlugin.getCore()).removeMarriage(marriage); MarriagePlayer partner = (MarriagePlayer) getPartner(); partner.marriage = null; diff --git a/src/main/java/com/lenis0012/bukkit/marriage2/listeners/PlotSquaredListener.java b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/PlotSquaredListener.java new file mode 100644 index 0000000..c80fd86 --- /dev/null +++ b/src/main/java/com/lenis0012/bukkit/marriage2/listeners/PlotSquaredListener.java @@ -0,0 +1,61 @@ +package com.lenis0012.bukkit.marriage2.listeners; + +import com.intellectualcrafters.plot.PS; +import com.intellectualcrafters.plot.object.Plot; +import com.lenis0012.bukkit.marriage2.MData; +import com.lenis0012.bukkit.marriage2.events.PlayerDivorceEvent; +import com.lenis0012.bukkit.marriage2.events.PlayerMarryEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +import java.util.UUID; + +public class PlotSquaredListener implements Listener { + private final PS plotSquared; + + public PlotSquaredListener() { + this.plotSquared = PS.get(); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerMarry(PlayerMarryEvent event) { + final UUID player = event.getRequesing().getUniqueId(); + final UUID partner = event.getRequested().getUniqueId(); + + for(Plot plot : plotSquared.getPlots(player)) { + if(plot.getTrusted().contains(partner)) { + continue; + } + plot.addTrusted(partner); + } + + for(Plot plot : plotSquared.getPlots(partner)) { + if(plot.getTrusted().contains(player)) { + continue; + } + plot.addTrusted(player); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerDivorce(PlayerDivorceEvent event) { + final MData marriage = event.getMarriage(); + final UUID player = marriage.getPlayer1Id(); + final UUID partner = marriage.getPllayer2Id(); + + for(Plot plot : plotSquared.getPlots(player)) { + if(!plot.getTrusted().contains(partner)) { + continue; + } + plot.removeTrusted(partner); + } + + for(Plot plot : plotSquared.getPlots(partner)) { + if(!plot.getTrusted().contains(player)) { + continue; + } + plot.removeTrusted(player); + } + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f88bda6..726233e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ main: com.lenis0012.bukkit.marriage2.internal.MarriagePlugin author: lenis0012 description: A plugin wich provides the function to start a relationship in minecraft. dev-url: http://dev.bukkit.org/bukkit-mods/marriage-reloaded/ -softdepend: [Vault] +softdepend: [Vault, PlotSquared] commands: marry: description: Marriage main command.