Add events for adding/removing friends

- Cancellable event for adding friends: AddFriendEvent (region, friend and who is trying to add it available)
- Cancellable event for removing friends: DeleteFriendEvent (region, friend and who is trying to delete it available)
- Closes #54
This commit is contained in:
Thijs Wiefferink 2016-06-20 17:03:12 +02:00
parent 52bf88f4a5
commit e21c0aafde
6 changed files with 163 additions and 17 deletions

View File

@ -89,9 +89,10 @@ public class AddfriendCommand extends CommandAreaShop {
plugin.message(sender, "addfriend-self", friend.getName(), region);
return;
}
region.addFriend(friend.getUniqueId());
region.update();
plugin.message(sender, "addfriend-successOther", friend.getName(), region);
if(region.addFriend(friend.getUniqueId(), sender)) {
region.update();
plugin.message(sender, "addfriend-successOther", friend.getName(), region);
}
} else {
if(sender.hasPermission("areashop.addfriend") && sender instanceof Player) {
if(region.isOwner((Player)sender)) {
@ -108,9 +109,11 @@ public class AddfriendCommand extends CommandAreaShop {
plugin.message(sender, "addfriend-self", friend.getName(), region);
return;
}
region.addFriend(friend.getUniqueId());
region.update();
plugin.message(sender, "addfriend-success", friend.getName(), region);
if(region.addFriend(friend.getUniqueId(), sender)) {
region.update();
plugin.message(sender, "addfriend-success", friend.getName(), region);
}
} else {
plugin.message(sender, "addfriend-noPermissionOther", region);
}

View File

@ -96,9 +96,10 @@ public class DelfriendCommand extends CommandAreaShop {
plugin.message(sender, "delfriend-notAdded", friend.getName(), region);
return;
}
region.deleteFriend(friend.getUniqueId());
region.update();
plugin.message(sender, "delfriend-successOther", friend.getName(), region);
if(region.deleteFriend(friend.getUniqueId(), sender)) {
region.update();
plugin.message(sender, "delfriend-successOther", friend.getName(), region);
}
} else {
if(sender.hasPermission("areashop.delfriend") && sender instanceof Player) {
if(region.isOwner((Player)sender)) {
@ -107,9 +108,10 @@ public class DelfriendCommand extends CommandAreaShop {
plugin.message(sender, "delfriend-notAdded", friend.getName(), region);
return;
}
region.deleteFriend(friend.getUniqueId());
region.update();
plugin.message(sender, "delfriend-success", friend.getName(), region);
if(region.deleteFriend(friend.getUniqueId(), sender)) {
region.update();
plugin.message(sender, "delfriend-success", friend.getName(), region);
}
} else {
plugin.message(sender, "delfriend-noPermissionOther", region);
}

View File

@ -0,0 +1,52 @@
package me.wiefferink.areashop.events.askandnotify;
import me.wiefferink.areashop.events.CancellableAreaShopEvent;
import me.wiefferink.areashop.regions.GeneralRegion;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
/**
* Broadcasted when a friend is being added to a region
*/
public class AddFriendEvent extends CancellableAreaShopEvent {
private GeneralRegion region;
private OfflinePlayer friend;
private CommandSender by;
/**
* Constructor
* @param region The region the friend is getting added to
* @param friend The friend that is about to be added
* @param by The CommandSender that is adding the friend, or null if none
*/
public AddFriendEvent(GeneralRegion region, OfflinePlayer friend, CommandSender by) {
this.region = region;
this.friend = friend;
this.by = by;
}
/**
* Get the region where the friend is getting added to
* @return the region
*/
public GeneralRegion getRegion() {
return region;
}
/**
* Get the OfflinePlayer that is getting added as friend
* @return The friend that is getting added
*/
public OfflinePlayer getFriend() {
return friend;
}
/**
* Get the CommandSender that is adding the friend
* @return null if none, a CommandSender if done by someone (likely Player or ConsoleCommandSender)
*/
public CommandSender getBy() {
return by;
}
}

View File

@ -0,0 +1,52 @@
package me.wiefferink.areashop.events.askandnotify;
import me.wiefferink.areashop.events.CancellableAreaShopEvent;
import me.wiefferink.areashop.regions.GeneralRegion;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
/**
* Broadcasted when a friend is being added to a region
*/
public class DeleteFriendEvent extends CancellableAreaShopEvent {
private GeneralRegion region;
private OfflinePlayer friend;
private CommandSender by;
/**
* Constructor
* @param region The region the friend is getting added to
* @param friend The friend that is about to be added
* @param by The CommandSender that is adding the friend, or null if none
*/
public DeleteFriendEvent(GeneralRegion region, OfflinePlayer friend, CommandSender by) {
this.region = region;
this.friend = friend;
this.by = by;
}
/**
* Get the region where the friend is getting added to
* @return the region
*/
public GeneralRegion getRegion() {
return region;
}
/**
* Get the OfflinePlayer that is getting added as friend
* @return The friend that is getting added
*/
public OfflinePlayer getFriend() {
return friend;
}
/**
* Get the CommandSender that is adding the friend
* @return null if none, a CommandSender if done by someone (likely Player or ConsoleCommandSender)
*/
public CommandSender getBy() {
return by;
}
}

View File

@ -3,6 +3,8 @@ package me.wiefferink.areashop.features;
import me.wiefferink.areashop.AreaShop;
import me.wiefferink.areashop.Utils;
import me.wiefferink.areashop.events.ask.*;
import me.wiefferink.areashop.events.askandnotify.AddFriendEvent;
import me.wiefferink.areashop.events.askandnotify.DeleteFriendEvent;
import me.wiefferink.areashop.events.notify.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -77,4 +79,14 @@ public class DebugFeature extends Feature implements Listener {
public void removedRegion(RemovedRegionEvent event) {
AreaShop.debug("RemovedRegionEvent: "+event.getRegion().getName());
}
@EventHandler
public void addedFriend(AddFriendEvent event) {
AreaShop.debug("AddFriendEvent: region "+event.getRegion().getName()+", "+event.getFriend().getName()+" by "+(event.getBy() == null ? "<nobody>" : event.getBy().getName()));
}
@EventHandler
public void deleteFriend(DeleteFriendEvent event) {
AreaShop.debug("DeleteFriendEvent: region "+event.getRegion().getName()+", "+event.getFriend().getName()+" by "+(event.getBy() == null ? "<nobody>" : event.getBy().getName()));
}
}

View File

@ -6,6 +6,8 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import me.wiefferink.areashop.AreaShop;
import me.wiefferink.areashop.Utils;
import me.wiefferink.areashop.events.NotifyAreaShopEvent;
import me.wiefferink.areashop.events.askandnotify.AddFriendEvent;
import me.wiefferink.areashop.events.askandnotify.DeleteFriendEvent;
import me.wiefferink.areashop.events.notify.RegionUpdateEvent;
import me.wiefferink.areashop.interfaces.GeneralRegionInterface;
import me.wiefferink.areashop.managers.FileManager;
@ -612,24 +614,46 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
*/
public boolean restrictedToWorld() {
return getBooleanSetting("general.restrictedToWorld") || restrictedToRegion();
}
}
/**
* Add a friend to the region
* @param player The UUID of the player to add
* @param by The CommandSender that is adding the friend, or null
* @return true if the friend has been added, false if adding a friend was cancelled by another plugin
*/
public void addFriend(UUID player) {
public boolean addFriend(UUID player, CommandSender by) {
// Fire and check event
AddFriendEvent event = new AddFriendEvent(this, Bukkit.getOfflinePlayer(player), by);
Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled()) {
plugin.message(by, "general-cancelled", event.getReason(), this);
return false;
}
Set<String> friends = new HashSet<>(config.getStringList("general.friends"));
friends.add(player.toString());
List<String> list = new ArrayList<>(friends);
setSetting("general.friends", list);
return true;
}
/**
* Delete a friend from the region
* @param player The UUID of the player to delete
* @param by The CommandSender that is adding the friend, or null
* @return true if the friend has been added, false if adding a friend was cancelled by another plugin
*/
public void deleteFriend(UUID player) {
public boolean deleteFriend(UUID player, CommandSender by) {
// Fire and check event
DeleteFriendEvent event = new DeleteFriendEvent(this, Bukkit.getOfflinePlayer(player), by);
Bukkit.getPluginManager().callEvent(event);
if(event.isCancelled()) {
plugin.message(by, "general-cancelled", event.getReason(), this);
return false;
}
Set<String> friends = new HashSet<>(config.getStringList("general.friends"));
friends.remove(player.toString());
List<String> list = new ArrayList<>(friends);
@ -638,6 +662,7 @@ public abstract class GeneralRegion implements GeneralRegionInterface, Comparabl
} else {
setSetting("general.friends", list);
}
return true;
}
/**