From 66701c490f94af522777481ec7c17b507b9e61eb Mon Sep 17 00:00:00 2001 From: RonanCraft Date: Tue, 1 Mar 2022 16:10:04 -0500 Subject: [PATCH] party addons command register + parties rtp with leader --- BetterRTPAddons/pom.xml | 16 ++++- .../BetterRTPAddons/AddonsHandler.java | 6 +- .../addons/partyrtp/AddonParty.java | 6 +- .../addons/partyrtp/PartyData.java | 70 ++++++++++++++++++- .../addons/partyrtp/PartyHandler.java | 24 ++++++- .../addons/partyrtp/PartyMessages.java | 20 +++++- .../addons/partyrtp/cmds/PartyCommand.java | 1 + .../addons/portals/region/PortalsCache.java | 12 ++-- .../src/main/resources/lang/en.yml | 7 +- 9 files changed, 144 insertions(+), 18 deletions(-) diff --git a/BetterRTPAddons/pom.xml b/BetterRTPAddons/pom.xml index 01421c1..cd0b31c 100644 --- a/BetterRTPAddons/pom.xml +++ b/BetterRTPAddons/pom.xml @@ -78,14 +78,20 @@ org.spigotmc spigot-api - 1.16.2-R0.1-SNAPSHOT + 1.8.8-R0.1-SNAPSHOT + provided + + + org.spigotmc + spigot-api + 1.13.2-R0.1-SNAPSHOT provided org.spigotmc spigot - 1.16.2-R0.1-SNAPSHOT + 1.8.8-R0.1-SNAPSHOT provided @@ -109,5 +115,11 @@ 4.5.0 provided + + org.projectlombok + lombok + 1.18.22 + compile + \ No newline at end of file diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java index d268f39..dc05da3 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/AddonsHandler.java @@ -7,10 +7,12 @@ import me.SuperRonanCraft.BetterRTPAddons.addons.extraEffects.AddonExtraEffects; import me.SuperRonanCraft.BetterRTPAddons.addons.flashback.AddonFlashback; import me.SuperRonanCraft.BetterRTPAddons.addons.logger.AddonLogger; import me.SuperRonanCraft.BetterRTPAddons.addons.magicStick.AddonMagicStick; +import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.AddonParty; import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; public class AddonsHandler { @@ -44,7 +46,7 @@ public class AddonsHandler { MAGICSTICK(new AddonMagicStick()), //Handy teleport want EXTRAEFFECTS(new AddonExtraEffects()), //New cosmetica! COMMANDS(new AddonCommands()), //Commands on rtp events - PARTY_RTP(new me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.AddonParty()), + PARTY_RTP(new AddonParty()), //Adds parties! ; Addon addon; @@ -59,7 +61,7 @@ public class AddonsHandler { void load() { addon.load(); - //Main.getInstance().getLogger().log(Level.INFO, "Addon " + this.name() + " has been enabled!"); + BetterRTP.debug("Addon " + this.name() + " has been enabled!"); } void disable() { diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/AddonParty.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/AddonParty.java index dd2c84a..aebd9a8 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/AddonParty.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/AddonParty.java @@ -1,5 +1,6 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp; +import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTPAddons.Addon; import me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp.cmds.PartyCommand; @@ -14,7 +15,7 @@ public class AddonParty implements Addon { private static AddonParty instance; private final String name = "PartyRTP"; private final PartyCommand cmd = new PartyCommand(this); - public PortalsMessages msgs = new PortalsMessages(); + public PartyMessages msgs = new PartyMessages(); public List parties = new ArrayList<>(); @Override @@ -25,6 +26,7 @@ public class AddonParty implements Addon { @Override public void load() { instance = this; + BetterRTP.getInstance().getCmd().registerCommand(cmd, false); } @Override @@ -38,6 +40,6 @@ public class AddonParty implements Addon { @Override public RTPCommand getCmd() { - return null; + return cmd; } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java index 8c33e1f..3e016da 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyData.java @@ -1,20 +1,84 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp; +import io.papermc.lib.PaperLib; +import lombok.Getter; +import me.SuperRonanCraft.BetterRTP.BetterRTP; +import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; +import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportEvent; +import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent; +import org.bukkit.Location; import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; public class PartyData { - final Player leader; - List members = new ArrayList<>(); + @Getter private final Player leader; + private HashMap members = new HashMap<>(); public PartyData(Player leader) { this.leader = leader; } + public boolean add(Player p) { + if (!members.containsKey(p)) { + members.put(p, false); + return true; + } + return false; + } + + public boolean remove(Player p) { + return members.remove(p) != null; + } + public boolean contains(Player p) { - return leader.equals(p) || members.contains(p); + return leader.equals(p) || members.containsKey(p); + } + + public boolean isLeader(Player p) { + return this.leader.equals(p); + } + + public boolean allReady() { + return !members.containsValue(false); + } + + public void readyUp(Player p) { + if (members.containsKey(p)) + members.put(p, true); + } + + public void clear() { + members.replaceAll((p, v) -> false); + } + + public String getNotReady() { + List notReady = new ArrayList<>(); + members.forEach((p, ready) -> { + if (!ready) notReady.add(p); + }); + StringBuilder notReady_str = new StringBuilder("["); + notReady.forEach(p -> notReady_str.append(p.getName())); + notReady_str.append("]"); + return notReady_str.toString(); + } + + public void tpAll(RTP_TeleportPostEvent e) { + members.forEach((p, ready) -> { + Location loc = e.getLocation(); + //Async tp players + PaperLib.teleportAsync(p, loc, PlayerTeleportEvent.TeleportCause.PLUGIN).thenRun(() -> + BetterRTP.getInstance().getText().getSuccessBypass(p, + String.valueOf(loc.getBlockX()), + String.valueOf(loc.getBlockY()), + String.valueOf(loc.getBlockZ()), + loc.getWorld().getName(), + 1)); + }); } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java index 0084fe3..0e1601d 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyHandler.java @@ -1,6 +1,8 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_SettingUpEvent; +import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportEvent; +import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -9,6 +11,26 @@ public class PartyHandler implements Listener { //Dissallow players from teleporting unless all party members are ready @EventHandler public void onRTP(RTP_SettingUpEvent e) { - + PartyData party = HelperParty.getParty(e.getPlayer()); + if (party != null) { + if (party.isLeader(e.getPlayer())) { + if (!party.allReady()) { //NOT ALL READY + AddonParty.getInstance().msgs.getMembers_NotReady(e.getPlayer(), party.getNotReady()); + e.setCancelled(true); + } //else rtp! + } else { + AddonParty.getInstance().msgs.getOnlyLeader(e.getPlayer(), party.getLeader()); + e.setCancelled(true); + } + } } + + @EventHandler + public void onRTP_end(RTP_TeleportPostEvent e) { + PartyData party = HelperParty.getParty(e.getPlayer()); + if (party != null && party.isLeader(e.getPlayer())) { + party.tpAll(e); + } + } + } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java index bd1177f..7fcd0f5 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/PartyMessages.java @@ -3,16 +3,17 @@ package me.SuperRonanCraft.BetterRTPAddons.addons.partyrtp; import me.SuperRonanCraft.BetterRTPAddons.AddonsMessages; import org.bukkit.Location; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class PartyMessages implements AddonsMessages { private static final String preM = "Party."; - public void getWarning(CommandSender sendi) { - sms(sendi, getLang().getString(preM + "Warning")); + public void getOnlyLeader(CommandSender sendi, Player leader) { + sms(sendi, getLang().getString(preM + "OnlyLeader").replace("%name%", leader.getName())); } public String getHelp() { - return getLang().getString("Help.Portals"); + return getLang().getString("Help.Party"); } //Invite @@ -30,4 +31,17 @@ public class PartyMessages implements AddonsMessages { public void usageBase(CommandSender sendi, String label) { sms(sendi, getLang().getString(preM + "Usage.Base").replace("%command%", label)); } + + //Members + public void getMembers_NotReady(CommandSender sendi, String members) { + sms(sendi, getLang().getString(preM + "Members.NotReady").replace("%members%", members)); + } + + public void getMembers_Ready(CommandSender sendi) { + sms(sendi, getLang().getString(preM + "Members.Ready")); + } + //Teleporting + public void getTeleporting(CommandSender sendi) { + sms(sendi, getLang().getString(preM + "Teleport")); + } } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java index 955e870..1e26535 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/partyrtp/cmds/PartyCommand.java @@ -17,6 +17,7 @@ public class PartyCommand implements RTPCommand, RTPCommandHelpable { this.pl = pl; } + @Override public String getName() { return "party"; } diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java index 8ecc180..77d3927 100644 --- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java +++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/region/PortalsCache.java @@ -110,10 +110,14 @@ public class PortalsCache { packet.sendPacket(p); //} } else { - if (loc2) - p.sendBlockChange(portal.loc_2, Material.GLOWSTONE.createBlockData()); - else - p.sendBlockChange(portal.loc_1, Material.GLOWSTONE.createBlockData()); + try { + if (loc2) + p.sendBlockChange(portal.loc_2, Material.GLOWSTONE.createBlockData()); + else + p.sendBlockChange(portal.loc_1, Material.GLOWSTONE.createBlockData()); + } catch (Exception e) { + //Not 1.13+ (dont show block changes) + } } } diff --git a/BetterRTPAddons/src/main/resources/lang/en.yml b/BetterRTPAddons/src/main/resources/lang/en.yml index 6884841..a64ee74 100644 --- a/BetterRTPAddons/src/main/resources/lang/en.yml +++ b/BetterRTPAddons/src/main/resources/lang/en.yml @@ -30,16 +30,21 @@ MagicStick: Party: Invite: '&f%player_name% has been invited to an rtp party!' Invited: '&f%player_name% has invited you to join their rtp party!' + OnlyLeader: '&cOnly the leader &f%name% &ccan make an RTP request!' + Teleport: '&fYou''ve been rtp''d because of your party!' + Members: + Ready: '&eYou have readied up for the next party rtp!' + NotReady: '&cNot all members are ready! &7%members%' Addons: List: Prefix: '&e&m-----&6&l BetterRTP &7&lAddons &8| Addons Info &e&m-----' Enabled: ' &7- &e%addon% &7- &aEnabled' Disabled: ' &7- &e%addon% &7- &cDisabled' - Help: Portals: ' &7- &e/%command% portals [args...] &7- Setup an rtp portal' MagicStick: ' &7- &e/%command% magicstick give [player] &7- Give a magic stick to a player' + Party: ' &7- &e/%command% party [...] &7- View a list of party commands' Addons: ' &7- &e/%command% addons &7- View a list of addons commands' Base: Help: ' &7- &e/%command% addons help &7- View a list of available commands'