Add pvp command

This commit is contained in:
Lennart ten Wolde 2016-06-15 17:59:00 +02:00
parent 66e856bb87
commit 335d923a54
7 changed files with 119 additions and 2 deletions

View file

@ -0,0 +1,48 @@
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.Permissions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class CommandPVP extends Command {
public CommandPVP(Marriage marriage) {
super(marriage, "pvp");
setPermission(Permissions.PVP_TOGGLE);
setDescription(Message.COMMAND_PVP.toString());
setUsage(Message.ON_OFF.toString());
}
@Override
public void execute() {
MPlayer mPlayer = marriage.getMPlayer(player.getUniqueId());
MData marriage = mPlayer.getMarriage();
if(marriage == null) {
reply(Message.NOT_MARRIED);
return;
}
boolean value = value(marriage);
marriage.setPVPEnabled(value);
reply(value ? Message.PVP_ENABLED : Message.PVP_DISABLED);
Player partner = Bukkit.getPlayer(marriage.getOtherPlayer(player.getUniqueId()));
if(partner == null) {
return;
}
reply(partner, Message.PARTNER_PVP);
}
private boolean value(MData marriage) {
if(getArgLength() == 0) {
// Toggle
return !marriage.isPVPEnabled();
}
return getArg(0).equalsIgnoreCase("on");
}
}

View file

@ -48,6 +48,9 @@ public enum Message {
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!"),
PVP_ENABLED("&aYou have enabled pvp with your partner!"),
PVP_DISABLED("&aYou have disabled pvp with your partner!"),
PARTNER_PVP("&aYour partner has changed pvp rules."),
// COMMANDS
COMMAND_MARRY("Request a marriage with another player"),
@ -62,10 +65,12 @@ public enum Message {
COMMAND_SETHOME("Set a home for you a your partner"),
COMMAND_TELEPORT("Teleport to your partner"),
COMMAND_HEAL("Send your health to your partner"),
COMMAND_PVP("Enable/disable pvping with your partner"),
// WORDS
STATUS("&aStatus: %s"),
SINGLE("&fsingle");
SINGLE("&fsingle"),
ON_OFF("on/off");
private final String defaultMessage;
private String message;

View file

@ -33,6 +33,7 @@ public enum Permissions {
CHAT("marry.chat"),
SEEN("marry.seen"),
HEAL("marry.heal"),
PVP_TOGGLE("marry.pvptoggle"),
/**
* Non-commands
*/

View file

@ -31,13 +31,14 @@ public class Settings {
"Chat, set the format of private messages and in-chat status.",
"Supported tags for chat: {partner}, for pm: {name}, {message}, chat spy: {sender}, {receiver}, {message}",
"Icons are always available: {icon:heart}, {icon:male}, {icon:female}, {icon:genderless}",
"If you use a custom chat plugin, put {marriage_status} in the format and set force-status-format to false",
"If you use a custom chat plugin, put {marriage_status} in the format and set force-status-format & force-gender-format to false",
"To show genders in chat, put {marriage_gender} in chat plugin format"
})
public static final ConfigOption<String> PM_FORMAT = new ConfigOption<>("chat.pm-format", "&4{icon:heart}&c{name}&4{icon:heart} &7{message}");
public static final ConfigOption<String> CHAT_FORMAT = new ConfigOption<>("chat.status-format", "&4&l<3 &r");
public static final ConfigOption<String> CHATSPY_FORMAT = new ConfigOption<>("cat.spy-format", "&c[CHAT SPY] &7{sender} -> {receiver}&f: {message}");
public static final ConfigOption<Boolean> FORCE_FORMAT = new ConfigOption<>("chat.force-status-format", true);
public static final ConfigOption<Boolean> FORCE_GENDER_FORMAT = new ConfigOption<>("chat.force-gender-format", true);
public static final ConfigOption<String> PREFIX_MALE = new ConfigOption<>("chat.male-prefix", "&b{icon:male} &r");
public static final ConfigOption<String> PREFIX_FEMALE = new ConfigOption<>("chat.female-prefix", "&d{icon:female} &r");
public static final ConfigOption<String> PREFIX_GENDERLESS = new ConfigOption<>("chat.genderless-prefix", "");

View file

@ -81,6 +81,7 @@ public class MarriageCore extends MarriageBase {
@Register(name = "listeners", type = Register.Type.ENABLE)
public void registerListeners() {
register(new PlayerListener(this));
register(new ChatListener(this));
register(new DatabaseListener(this));
register(new KissListener(this));

View file

@ -74,6 +74,8 @@ public class ChatListener implements Listener {
if(Settings.FORCE_FORMAT.value()) {
format = "{marriage_status}" + event.getFormat(); // Enforce marriage format
} if(Settings.FORCE_GENDER_FORMAT.value()) {
format = "{marriage_gender}" + event.getFormat();
}
// Marriage status

View file

@ -0,0 +1,59 @@
package com.lenis0012.bukkit.marriage2.listeners;
import com.lenis0012.bukkit.marriage2.MPlayer;
import com.lenis0012.bukkit.marriage2.Marriage;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.projectiles.ProjectileSource;
public class PlayerListener implements Listener {
private final Marriage marriage;
public PlayerListener(Marriage marriage) {
this.marriage = marriage;
}
@EventHandler(priority = EventPriority.LOWEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
final Entity e0 = event.getEntity();
final Entity e1 = event.getDamager();
// Verify damaged entity is player
if(!(e0 instanceof Player)) {
return;
} if(!(e1 instanceof Player) && !(e1 instanceof Projectile)) {
return;
}
// Verify damager is player
final Player player = (Player) e0;
final Player damager;
if(e1 instanceof Player) {
damager = (Player) e1;
} else {
Projectile projectile = (Projectile) e1;
final ProjectileSource e3 = projectile.getShooter();
if(e3 == null || !(e3 instanceof Player)) {
return;
}
damager = (Player) e3;
}
// Verify marriage
MPlayer mplayer = marriage.getMPlayer(player.getUniqueId());
if(!mplayer.isMarried() || mplayer.getMarriage().getOtherPlayer(player.getUniqueId()) != damager.getUniqueId()) {
return;
}
// Verify pvp setting
if(mplayer.getMarriage().isPVPEnabled()) {
return;
}
event.setCancelled(true);
}
}