Added owner to WarpRemoveEvent

https://github.com/BentoBoxWorld/Warps/issues/91
This commit is contained in:
tastybento 2021-01-03 17:54:33 -08:00
parent 4817c2c913
commit c882ca3288
3 changed files with 59 additions and 25 deletions

View File

@ -10,6 +10,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.UUID; import java.util.UUID;
@ -128,6 +129,16 @@ public class WarpSignsManager {
return getWarpMap(location.getWorld()).entrySet().stream().filter(en -> en.getValue().equals(location)) return getWarpMap(location.getWorld()).entrySet().stream().filter(en -> en.getValue().equals(location))
.findFirst().map(en -> plugin.getPlayers().getName(en.getKey())).orElse(""); .findFirst().map(en -> plugin.getPlayers().getName(en.getKey())).orElse("");
} }
/**
* Get the optional UUID of the warp owner by location
* @param location to search
* @return Optional UUID of warp owner or empty if there is none
*/
public Optional<UUID> getWarpOwnerUUID(Location location) {
return getWarpMap(location.getWorld()).entrySet().stream().filter(en -> en.getValue().equals(location))
.findFirst().map(Map.Entry::getKey);
}
/** /**
* Get sorted list of warps with most recent players listed first * Get sorted list of warps with most recent players listed first

View File

@ -5,8 +5,8 @@ import java.util.UUID;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.eclipse.jdt.annotation.NonNull;
import world.bentobox.warps.Warp; import org.eclipse.jdt.annotation.Nullable;
/** /**
* This event is fired when a Warp is removed (when a warp sign is broken) * This event is fired when a Warp is removed (when a warp sign is broken)
@ -18,32 +18,48 @@ import world.bentobox.warps.Warp;
public class WarpRemoveEvent extends Event{ public class WarpRemoveEvent extends Event{
private static final HandlerList handlers = new HandlerList(); private static final HandlerList handlers = new HandlerList();
private Location warpLoc; private final Location warpLoc;
private UUID remover; private final UUID remover;
private final UUID owner;
/** /**
* @param plugin - BSkyBlock plugin objects * @param warpLoc - Warp location
* @param warpLoc * @param remover - UUID of remover
* @param remover * @param owner - UUID of warp owner - rarely, may be null
*/ */
public WarpRemoveEvent(Warp plugin, Location warpLoc, UUID remover){ public WarpRemoveEvent(@NonNull Location warpLoc, UUID remover, @Nullable UUID owner){
this.warpLoc = warpLoc; this.warpLoc = warpLoc;
this.remover = remover; this.remover = remover;
this.owner = owner;
} }
/** /**
* Get the location of the removed Warp * Get the location of the removed Warp
* @return removed warp's location * @return removed warp's location
*/ */
public Location getWarpLocation(){return this.warpLoc;} @NonNull
public Location getWarpLocation(){
return this.warpLoc;
}
/** /**
* Get who has removed the warp * Get who has removed the warp
* @return the warp's remover * @return the warp's remover
*/ */
public UUID getRemover(){return this.remover;} @NonNull
public UUID getRemover(){
return this.remover;
}
@Override /**
* @return the owner
*/
@Nullable
protected UUID getOwner() {
return owner;
}
@Override
public HandlerList getHandlers() { public HandlerList getHandlers() {
return handlers; return handlers;
} }

View File

@ -5,7 +5,11 @@ import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import org.bukkit.*; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Tag;
import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -14,9 +18,10 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.eclipse.jdt.annotation.Nullable;
import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.events.addon.AddonEvent; import world.bentobox.bentobox.api.events.addon.AddonEvent;
import world.bentobox.bentobox.api.events.team.TeamKickEvent; import world.bentobox.bentobox.api.events.team.TeamKickEvent;
@ -99,21 +104,21 @@ public class WarpSignsListener implements Listener {
boolean inWorld = addon.getPlugin().getIWM().inWorld(b.getWorld()); boolean inWorld = addon.getPlugin().getIWM().inWorld(b.getWorld());
// Signs only // Signs only
// FIXME: When we drop support for 1.13, switch to Tag.SIGNS // FIXME: When we drop support for 1.13, switch to Tag.SIGNS
if (!e.getBlock().getType().name().contains("SIGN") if (!b.getType().name().contains("SIGN")
|| (inWorld && !addon.inRegisteredWorld(b.getWorld())) || (inWorld && !addon.inRegisteredWorld(b.getWorld()))
|| (!inWorld && !addon.getSettings().isAllowInOtherWorlds()) ) { || (!inWorld && !addon.getSettings().isAllowInOtherWorlds())
|| !isWarpSign(b)) {
return; return;
} }
User user = User.getInstance(e.getPlayer()); User user = User.getInstance(e.getPlayer());
if (isWarpSign(b)) { UUID owner = addon.getWarpSignsManager().getWarpOwnerUUID(b.getLocation()).orElse(null);
if (isPlayersSign(e.getPlayer(), b, inWorld)) { if (isPlayersSign(e.getPlayer(), b, inWorld)) {
addon.getWarpSignsManager().removeWarp(b.getLocation()); addon.getWarpSignsManager().removeWarp(b.getLocation());
Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(addon, b.getLocation(), user.getUniqueId())); Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(b.getLocation(), user.getUniqueId(), owner));
} else { } else {
// Someone else's sign - not allowed // Someone else's sign - not allowed
user.sendMessage("warps.error.no-remove"); user.sendMessage("warps.error.no-remove");
e.setCancelled(true); e.setCancelled(true);
}
} }
} }
@ -175,7 +180,9 @@ public class WarpSignsListener implements Listener {
oldSign.update(true, false); oldSign.update(true, false);
user.sendMessage("warps.deactivate"); user.sendMessage("warps.deactivate");
addon.getWarpSignsManager().removeWarp(oldSignBlock.getWorld(), user.getUniqueId()); addon.getWarpSignsManager().removeWarp(oldSignBlock.getWorld(), user.getUniqueId());
Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(addon, oldSign.getLocation(), user.getUniqueId())); @Nullable
UUID owner = addon.getWarpSignsManager().getWarpOwnerUUID(oldSignLoc).orElse(null);
Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(oldSign.getLocation(), user.getUniqueId(), owner));
} }
} }
// Set up the new warp sign // Set up the new warp sign