diff --git a/src/main/java/net/Indyuce/mmocore/api/player/social/FriendRequest.java b/src/main/java/net/Indyuce/mmocore/api/player/social/FriendRequest.java index d63ed98e..93ad5430 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/social/FriendRequest.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/social/FriendRequest.java @@ -6,32 +6,23 @@ import net.Indyuce.mmocore.api.player.PlayerData; import org.bukkit.Sound; public class FriendRequest extends Request { - private final PlayerData target; + public FriendRequest(PlayerData creator, PlayerData target) { + super(creator, target); + } - public FriendRequest(PlayerData creator, PlayerData target) { - super(creator); + @Override + public void whenDenied() { + getTarget().getPlayer().playSound(getTarget().getPlayer().getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1); + } - this.target = target; - } - - public PlayerData getTarget() { - return target; - } - - public void deny() { - MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); - if(!target.isOnline()) return; - target.getPlayer().playSound(target.getPlayer().getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1); - } - - public void accept() { - getCreator().setLastActivity(PlayerActivity.FRIEND_REQUEST, 0); - getCreator().addFriend(target.getUniqueId()); - target.addFriend(getCreator().getUniqueId()); - if(target.isOnline() && getCreator().isOnline()) { - MMOCore.plugin.configManager.getSimpleMessage("now-friends", "player", target.getPlayer().getName()).send(getCreator().getPlayer()); - MMOCore.plugin.configManager.getSimpleMessage("now-friends", "player", getCreator().getPlayer().getName()).send(target.getPlayer()); - } - MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); - } + @Override + public void whenAccepted() { + getCreator().setLastActivity(PlayerActivity.FRIEND_REQUEST, 0); + getCreator().addFriend(getTarget().getUniqueId()); + getTarget().addFriend(getCreator().getUniqueId()); + if (getCreator().isOnline()) { + MMOCore.plugin.configManager.getSimpleMessage("now-friends", "player", getTarget().getPlayer().getName()).send(getCreator().getPlayer()); + MMOCore.plugin.configManager.getSimpleMessage("now-friends", "player", getCreator().getPlayer().getName()).send(getTarget().getPlayer()); + } + } } \ No newline at end of file diff --git a/src/main/java/net/Indyuce/mmocore/api/player/social/Request.java b/src/main/java/net/Indyuce/mmocore/api/player/social/Request.java index 54cd1bd7..50d4e0ee 100644 --- a/src/main/java/net/Indyuce/mmocore/api/player/social/Request.java +++ b/src/main/java/net/Indyuce/mmocore/api/player/social/Request.java @@ -1,31 +1,55 @@ package net.Indyuce.mmocore.api.player.social; +import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.player.PlayerData; +import org.apache.commons.lang.Validate; + import java.util.UUID; -import net.Indyuce.mmocore.api.player.PlayerData; - public abstract class Request { - private final UUID uuid = UUID.randomUUID(); - private final long date = System.currentTimeMillis(); - private final PlayerData creator; + private final UUID uuid = UUID.randomUUID(); + private final long date = System.currentTimeMillis(); + private final PlayerData creator, target; - public Request(PlayerData creator) { - this.creator = creator; - } + /** + * Any request time out is by default 2 minutes. + */ + private static final long TIME_OUT = 1000 * 60 * 2; - public PlayerData getCreator() { - return creator; - } + public Request(PlayerData creator, PlayerData target) { + this.creator = creator; + this.target = target; + } - public UUID getUniqueId() { - return uuid; - } + public PlayerData getCreator() { + return creator; + } - public boolean isTimedOut() { - return date + 1000 * 60 * 2 < System.currentTimeMillis(); - } + public PlayerData getTarget() { + return target; + } - public abstract void accept(); + public UUID getUniqueId() { + return uuid; + } - public abstract void deny(); + public boolean isTimedOut() { + return date + TIME_OUT < System.currentTimeMillis(); + } + + public void accept() { + Validate.isTrue(target.isOnline(), "Target must be online"); + whenAccepted(); + MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); + } + + public abstract void whenAccepted(); + + public void deny() { + Validate.isTrue(target.isOnline(), "Target must be online"); + whenDenied(); + MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); + } + + public abstract void whenDenied(); } diff --git a/src/main/java/net/Indyuce/mmocore/guild/provided/GuildInvite.java b/src/main/java/net/Indyuce/mmocore/guild/provided/GuildInvite.java index 3db014dc..7e908639 100644 --- a/src/main/java/net/Indyuce/mmocore/guild/provided/GuildInvite.java +++ b/src/main/java/net/Indyuce/mmocore/guild/provided/GuildInvite.java @@ -1,50 +1,44 @@ package net.Indyuce.mmocore.guild.provided; -import org.bukkit.Bukkit; - import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.social.Request; import net.Indyuce.mmocore.manager.InventoryManager; +import org.bukkit.Bukkit; public class GuildInvite extends Request { - private final PlayerData target; - private final Guild guild; + private final Guild guild; - public GuildInvite(Guild guild, PlayerData creator, PlayerData target) { - super(creator); + public GuildInvite(Guild guild, PlayerData creator, PlayerData target) { + super(creator, target); - this.guild = guild; - this.target = target; - } + this.guild = guild; + } - public Guild getGuild() { - return guild; - } + public Guild getGuild() { + return guild; + } - public PlayerData getPlayer() { - return target; - } + @Override + public void whenDenied() { + // Nothing + } - public void deny() { - MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); - } + @Override + public void whenAccepted() { + guild.removeLastInvite(getCreator().getPlayer()); + guild.getMembers().forEach(member -> { + if (Bukkit.getPlayer(member) != null) { + MMOCore.plugin.configManager.getSimpleMessage("guild-joined-other", "player", + getTarget().getPlayer().getName()).send(Bukkit.getPlayer(member)); - public void accept() { - guild.removeLastInvite(getCreator().getPlayer()); - guild.getMembers().forEach(member -> { - if(Bukkit.getPlayer(member) != null) { - MMOCore.plugin.configManager.getSimpleMessage("guild-joined-other", "player", - target.getPlayer().getName()).send(Bukkit.getPlayer(member)); + MMOCore.plugin.configManager.getSimpleMessage("guild-joined", "owner", + Bukkit.getPlayer(guild.getOwner()).getName()).send(getTarget().getPlayer()); + } + } + ); - MMOCore.plugin.configManager.getSimpleMessage("guild-joined", "owner", - Bukkit.getPlayer(guild.getOwner()).getName()).send(target.getPlayer()); - }} - - ); - - guild.addMember(target.getUniqueId()); - InventoryManager.GUILD_VIEW.newInventory(target).open(); - MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); - } + guild.addMember(getTarget().getUniqueId()); + InventoryManager.GUILD_VIEW.newInventory(getTarget()).open(); + } } \ No newline at end of file diff --git a/src/main/java/net/Indyuce/mmocore/manager/social/RequestManager.java b/src/main/java/net/Indyuce/mmocore/manager/social/RequestManager.java index 915ba02f..aa882b0e 100644 --- a/src/main/java/net/Indyuce/mmocore/manager/social/RequestManager.java +++ b/src/main/java/net/Indyuce/mmocore/manager/social/RequestManager.java @@ -1,47 +1,41 @@ package net.Indyuce.mmocore.manager.social; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.UUID; - -import org.bukkit.Bukkit; - import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.social.Request; +import org.bukkit.Bukkit; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.UUID; public class RequestManager { - private final Set requests = new HashSet<>(); + private final Map requests = new HashMap<>(); - /* - * flush friend requests every 5 minutes so there is no memory overleak - */ - public RequestManager() { - Bukkit.getScheduler().runTaskTimer(MMOCore.plugin, this::flushRequests, 60 * 20, 60 * 20 * 5); - } + /** + * Flushes friend requests every 5 minutes so there is no memory overleak + */ + public RequestManager() { + Bukkit.getScheduler().runTaskTimer(MMOCore.plugin, this::flushRequests, 60 * 20, 60 * 20 * 5); + } - public Request getRequest(UUID uuid) { - for (Request request : requests) - if (request.getUniqueId().equals(uuid)) - return request; - return null; - } + public Request getRequest(UUID uuid) { + return requests.get(uuid); + } - public void registerRequest(Request request) { - requests.add(request); - } + public void registerRequest(Request request) { + requests.put(request.getUniqueId(), request); + } - public void unregisterRequest(UUID uuid) { - for (Iterator iterator = requests.iterator(); iterator.hasNext();) { - Request next = iterator.next(); - if (next.getUniqueId().equals(uuid)) { - iterator.remove(); - break; - } - } - } + public void unregisterRequest(UUID uuid) { + requests.remove(uuid); + } - public void flushRequests() { - requests.removeIf(Request::isTimedOut); - } + private void flushRequests() { + for (Iterator iterator = requests.values().iterator(); iterator.hasNext(); ) { + Request next = iterator.next(); + if (next.isTimedOut()) + iterator.remove(); + } + } } diff --git a/src/main/java/net/Indyuce/mmocore/party/provided/Party.java b/src/main/java/net/Indyuce/mmocore/party/provided/Party.java index 1550d17c..659906f1 100644 --- a/src/main/java/net/Indyuce/mmocore/party/provided/Party.java +++ b/src/main/java/net/Indyuce/mmocore/party/provided/Party.java @@ -145,9 +145,8 @@ public class Party implements AbstractParty { public void sendInvite(PlayerData inviter, PlayerData target) { invites.put(target.getUniqueId(), System.currentTimeMillis()); Request request = new PartyInvite(this, inviter, target); - if (inviter.isOnline() && target.isOnline()) - new ConfigMessage("party-invite").addPlaceholders("player", inviter.getPlayer().getName(), "uuid", request.getUniqueId().toString()) - .sendAsJSon(target.getPlayer()); + new ConfigMessage("party-invite").addPlaceholders("player", inviter.getPlayer().getName(), "uuid", request.getUniqueId().toString()) + .sendAsJSon(target.getPlayer()); MMOCore.plugin.requestManager.registerRequest(request); } diff --git a/src/main/java/net/Indyuce/mmocore/party/provided/PartyInvite.java b/src/main/java/net/Indyuce/mmocore/party/provided/PartyInvite.java index 41e89dd6..40d13a4c 100644 --- a/src/main/java/net/Indyuce/mmocore/party/provided/PartyInvite.java +++ b/src/main/java/net/Indyuce/mmocore/party/provided/PartyInvite.java @@ -6,43 +6,38 @@ import net.Indyuce.mmocore.api.player.social.Request; import net.Indyuce.mmocore.manager.InventoryManager; public class PartyInvite extends Request { - private final PlayerData target; - private final Party party; + private final Party party; - public PartyInvite(Party party, PlayerData creator, PlayerData target) { - super(creator); + public PartyInvite(Party party, PlayerData creator, PlayerData target) { + super(creator, target); - this.party = party; - this.target = target; - } + this.party = party; + } - public Party getParty() { - return party; - } + public Party getParty() { + return party; + } - public PlayerData getPlayer() { - return target; - } + @Override + public void whenDenied() { + // Nothing + } - public void deny() { - MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); - } - - public void accept() { - if(party.getMembers().size() >= Math.max(2, MMOCore.plugin.getConfig().getInt("party.max-players", 8))) { - MMOCore.plugin.configManager.getSimpleMessage("party-is-full").send(target.getPlayer()); - return; - } - if(getCreator().isOnline()) - party.removeLastInvite(getCreator().getPlayer()); - party.getMembers().forEach(member -> { - if(member.isOnline() && target.isOnline()) - MMOCore.plugin.configManager.getSimpleMessage("party-joined-other", "player", target.getPlayer().getName()).send(member.getPlayer()); - }); - if(party.getOwner().isOnline() && target.isOnline()) - MMOCore.plugin.configManager.getSimpleMessage("party-joined", "owner", party.getOwner().getPlayer().getName()).send(target.getPlayer()); - party.addMember(target); - InventoryManager.PARTY_VIEW.newInventory(target).open(); - MMOCore.plugin.requestManager.unregisterRequest(getUniqueId()); - } + @Override + public void whenAccepted() { + if (party.getMembers().size() >= Math.max(2, MMOCore.plugin.getConfig().getInt("party.max-players", 8))) { + MMOCore.plugin.configManager.getSimpleMessage("party-is-full").send(getTarget().getPlayer()); + return; + } + if (getCreator().isOnline()) + party.removeLastInvite(getCreator().getPlayer()); + party.getMembers().forEach(member -> { + if (member.isOnline()) + MMOCore.plugin.configManager.getSimpleMessage("party-joined-other", "player", getTarget().getPlayer().getName()).send(member.getPlayer()); + }); + if (party.getOwner().isOnline()) + MMOCore.plugin.configManager.getSimpleMessage("party-joined", "owner", party.getOwner().getPlayer().getName()).send(getTarget().getPlayer()); + party.addMember(getTarget()); + InventoryManager.PARTY_VIEW.newInventory(getTarget()).open(); + } } \ No newline at end of file