diff --git a/src/main/java/com/massivecraft/factions/event/FPlayerRoleChangeEvent.java b/src/main/java/com/massivecraft/factions/event/FPlayerRoleChangeEvent.java new file mode 100644 index 00000000..fdbec66a --- /dev/null +++ b/src/main/java/com/massivecraft/factions/event/FPlayerRoleChangeEvent.java @@ -0,0 +1,50 @@ +package com.massivecraft.factions.event; + +import com.massivecraft.factions.FPlayer; +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.struct.Role; +import org.bukkit.event.Cancellable; + +/** + * Represents {@link Role} change of a factions player + * @see FPlayer#getRole() + */ +public class FPlayerRoleChangeEvent extends FactionPlayerEvent implements Cancellable { + + private boolean cancelled; + private final Role from; + private Role to; + + public FPlayerRoleChangeEvent(Faction faction, FPlayer fPlayer, Role from, Role to) { + super(faction, fPlayer); + this.from = from; + this.to = to; + } + + public FPlayerRoleChangeEvent(Faction faction, FPlayer fPlayer, Role to) { + this(faction, fPlayer, fPlayer.getRole(), to); + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + + public Role getFrom() { + return from; + } + + public Role getTo() { + return to; + } + + public void setTo(Role to) { + this.to = to; + } + +} diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java index 9e026bc7..d2d1544b 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java @@ -242,7 +242,15 @@ public abstract class MemoryFPlayer implements FPlayer { } public void setRole(Role role) { - this.role = role; + if (this.role == role) + return; + + FPlayerRoleChangeEvent event = new FPlayerRoleChangeEvent(getFaction(), this, role); + Bukkit.getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + this.role = event.getTo(); + } } public double getPowerBoost() {