party addons command register + parties rtp with leader

This commit is contained in:
RonanCraft 2022-03-01 16:10:04 -05:00
parent 23cca0311c
commit 66701c490f
9 changed files with 144 additions and 18 deletions

View File

@ -78,14 +78,20 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.2-R0.1-SNAPSHOT</version>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.13.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Spigot Stuff -->
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.16.2-R0.1-SNAPSHOT</version>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Paper Library for Async Chunk/Teleport -->
@ -109,5 +115,11 @@
<version>4.5.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -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() {

View File

@ -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<PartyData> 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;
}
}

View File

@ -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<Player> members = new ArrayList<>();
@Getter private final Player leader;
private HashMap<Player, Boolean> 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<Player> 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));
});
}
}

View File

@ -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);
}
}
}

View File

@ -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"));
}
}

View File

@ -17,6 +17,7 @@ public class PartyCommand implements RTPCommand, RTPCommandHelpable {
this.pl = pl;
}
@Override
public String getName() {
return "party";
}

View File

@ -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)
}
}
}

View File

@ -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 <loc1, loc2, create> [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'