Skip to content

Commit

Permalink
1.5.0-SNAPSHOT
Browse files Browse the repository at this point in the history
- Add /dungeons help (Tab complete is better)
- Use dungeon world in normal world if that world doesn't exist on Dungeons/Worlds folder
- Fix player can build
- Fix bug with Requirements Items
- Fix player doesn't have item but still can join
- Make other player teleport to other world before end dungeon
- PartySystem (part 1 - Command, Message, Base)
  • Loading branch information
VoChiDanh committed Aug 30, 2024
1 parent e2b4f7c commit 2ad6f74
Show file tree
Hide file tree
Showing 6 changed files with 272 additions and 7 deletions.
60 changes: 60 additions & 0 deletions src/main/java/net/danh/dungeons/Command/Dungeon_MainCMD.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
import net.danh.dungeons.Dungeon.StageManager;
import net.danh.dungeons.Dungeons;
import net.danh.dungeons.GUI.DungeonGUI.MainEditor;
import net.danh.dungeons.Party.PartyManager;
import net.danh.dungeons.Resources.Chat;
import net.danh.dungeons.Resources.Files;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

Expand All @@ -22,6 +25,35 @@ public Dungeon_MainCMD() {

@Override
public void execute(@NotNull CommandSender c, String[] args) {
if (c instanceof Player) {
Player p = (Player) c;
if (p.hasPermission("dungeons.party")) {
if (args.length == 2 || args.length >= 3) {
if (args[0].equalsIgnoreCase("party")) {
if (args.length == 2) {
if (args[1].equalsIgnoreCase("disband")) {
PartyManager.disbandParty(p);
}
} else if (args.length == 3) {
if (args[1].equalsIgnoreCase("create")) {
PartyManager.createParty(p, args[2]);
}
if (args[1].equalsIgnoreCase("invite")) {
Player invited = Bukkit.getPlayer(args[2]);
if (invited != null)
PartyManager.invite(p, invited);
}
}
if (args.length >= 3) {
if (args[1].equalsIgnoreCase("rename")) {
String name = String.join(" ", Arrays.asList(args).subList(2, args.length));
PartyManager.setDisplay(p, name);
}
}
}
}
}
}
if (c.hasPermission("dungeons.admin")) {
if (args.length == 1) {
if (args[0].equalsIgnoreCase("reload")) {
Expand All @@ -33,6 +65,7 @@ public void execute(@NotNull CommandSender c, String[] args) {
if (args.length == 1) {
if (args[0].equalsIgnoreCase("help")) {
Chat.sendMessage(c, Files.getMessage().getStringList("user.help"));
Chat.sendMessage(c, Files.getMessage().getStringList("party.help"));
if (c.hasPermission("dungeons.admin"))
Chat.sendMessage(c, Files.getMessage().getStringList("admin.help"));
} else if (args[0].equalsIgnoreCase("quit")) {
Expand Down Expand Up @@ -69,6 +102,9 @@ public List<String> TabComplete(CommandSender sender, @NotNull String @NotNull [
commands.add("reload");
commands.add("editor");
}
if (sender.hasPermission("dungeons.party")) {
commands.add("party");
}
commands.add("help");
commands.add("start");
commands.add("quit");
Expand All @@ -86,9 +122,33 @@ public List<String> TabComplete(CommandSender sender, @NotNull String @NotNull [
}
}
}
} else if (args[0].equalsIgnoreCase("party") && sender instanceof Player) {
commands.add("create");
commands.add("rename");
commands.add("invite");
commands.add("kick");
commands.add("disband");
}
StringUtil.copyPartialMatches(args[1], commands, completions);
}
if (args.length == 3) {
if (args[0].equalsIgnoreCase("party")
&& sender instanceof Player) {
if (args[1].equalsIgnoreCase("create"))
commands.add("PartyID");
if (args[1].equalsIgnoreCase("rename"))
commands.add("PartyName");
if (args[1].equalsIgnoreCase("invite"))
Bukkit.getOnlinePlayers().forEach(player -> commands.add(player.getName()));
if (args[1].equalsIgnoreCase("kick")) {
Player p = (Player) sender;
List<String> players = PartyManager.getMembersName(p);
if (!players.isEmpty())
commands.addAll(players);
}
}
StringUtil.copyPartialMatches(args[2], commands, completions);
}
Collections.sort(completions);
return completions;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public ListStringEditor(Player p, String dungeon, String path) {
Chat.sendMessage(clicker, "&b <amount> mean number");
Chat.sendMessage(clicker, "&b Example: MMOITEMS;MATERIAL;DUNGEON_TICKET;1");
Chat.sendMessage(clicker, "&b Example: VANILLA;DIAMOND;1");
Chat.sendMessage(clicker, "&b Example: ITEMEDIT;ITEM_ID;1");
Chat.sendMessage(clicker, "&b Example: ITEMEDIT;ITEM_ID;1");
} else if (path.equalsIgnoreCase("requirements.info_lore")) {
Chat.sendMessage(clicker, "&bCustom display for requirements info");
} else if (path.equalsIgnoreCase("requirements.item_lore")) {
Expand Down Expand Up @@ -120,7 +120,7 @@ public ListStringEditor(Player p, String dungeon, String path) {
Chat.sendMessage(clicker, "&b <amount> mean number");
Chat.sendMessage(clicker, "&b Example: MMOITEMS;MATERIAL;DUNGEON_TICKET;1");
Chat.sendMessage(clicker, "&b Example: VANILLA;DIAMOND;1");
Chat.sendMessage(clicker, "&b Example: ITEMEDIT;ITEM_ID;1");
Chat.sendMessage(clicker, "&b Example: ITEMEDIT;ITEM_ID;1");
} else if (path.equalsIgnoreCase("requirements.info_lore")) {
Chat.sendMessage(clicker, "&bCustom display for requirements info");
} else if (path.equalsIgnoreCase("requirements.item_lore")) {
Expand Down Expand Up @@ -164,7 +164,7 @@ public ListStringEditor(Player p, String dungeon, String path) {
Chat.sendMessage(clicker, "&b <amount> mean number");
Chat.sendMessage(clicker, "&b Example: MMOITEMS;MATERIAL;DUNGEON_TICKET;1");
Chat.sendMessage(clicker, "&b Example: VANILLA;DIAMOND;1");
Chat.sendMessage(clicker, "&b Example: ITEMEDIT;ITEM_ID;1");
Chat.sendMessage(clicker, "&b Example: ITEMEDIT;ITEM_ID;1");
} else if (path.equalsIgnoreCase("requirements.info_lore")) {
Chat.sendMessage(clicker, "&bCustom display for requirements info");
} else if (path.equalsIgnoreCase("requirements.item_lore")) {
Expand Down
177 changes: 177 additions & 0 deletions src/main/java/net/danh/dungeons/Party/PartyManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
package net.danh.dungeons.Party;

import net.danh.dungeons.Resources.Chat;
import net.danh.dungeons.Resources.Files;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.*;

public class PartyManager {

public static HashMap<String, String> partyManager = new HashMap<>();
public static HashMap<String, List<String>> partyMember = new HashMap<>();
public static HashMap<String, String> partyInformation = new HashMap<>();

public static void createParty(Player p, String id) {
if (!partyManager.containsValue(id)) {
partyManager.put(p.getName(), id);
partyInformation.put(id + PartyData.leader.getString(), p.getName());
partyInformation.put(id + PartyData.display.getString(), getPartyDisplay(id));
partyMember.put(id, Collections.singletonList(p.getName()));
Chat.sendMessage(p, Objects.requireNonNull(Files.getMessage().getString("party.create"))
.replace("<name>", getPartyDisplay(id)));
} else Chat.sendMessage(p, Objects.requireNonNull(Files.getMessage().getString("party.already_has_name"))
.replace("<name>", getPartyDisplay(id)));
}

public static void disbandParty(Player p) {
String id = getPartyID(p);
if (partyManager.containsValue(id) && partyManager.containsKey(p.getName())) {
if (partyInformation.get(id + PartyData.leader.getString()).contains(p.getName())) {
Chat.sendMessage(p, Objects.requireNonNull(Files.getMessage().getString("party.disband"))
.replace("<name>", getPartyDisplay(id)));
List<String> pInfo = new ArrayList<>(partyInformation.keySet());
for (String key : pInfo) {
if (key.contains(id))
partyInformation.remove(key);
}
List<String> pManager = new ArrayList<>(partyManager.keySet());
for (String key : pManager) {
if (partyManager.get(key).equalsIgnoreCase(id))
partyManager.remove(key, id);
}
partyMember.remove(id);
} else Chat.sendMessage(p, Files.getMessage().getString("party.not_leader"));
} else Chat.sendMessage(p, Files.getMessage().getString("party.not_in_party"));
}

@Contract(pure = true)
public static @NotNull List<Player> getMembers(Player p) {
List<Player> players = new ArrayList<>();
if (inParty(p)) {
if (isPartyLeader(p)) {
String party = getPartyID(p);
List<String> members = partyMember.get(party);
members.forEach(member -> {
Player player = Bukkit.getPlayer(member);
if (player != null) {
players.add(player);
}
});
}
}
return players;
}

@Contract(pure = true)
public static @NotNull List<String> getMembersName(Player p) {
List<String> players = new ArrayList<>();
if (inParty(p)) {
if (isPartyLeader(p)) {
String party = getPartyID(p);
List<String> members = partyMember.get(party);
players.addAll(members);
}
}
return players;
}

public static @NotNull String getPartyDisplay(String id) {
return partyInformation.containsKey(id + PartyData.display.getString())
? partyInformation.get(id + PartyData.display.getString()) : Objects.requireNonNull(Files.getConfig().getString("party.default_display"))
.replace("<name>", Chat.caseOnWords(id));
}

public static boolean inParty(@NotNull Player p) {
return partyManager.containsKey(p.getName());
}

public static boolean isPartyLeader(@NotNull Player p) {
return inParty(p)
&& partyInformation.containsKey(getPartyID(p) + PartyData.leader.getString())
&& partyInformation.get(getPartyID(p) + PartyData.leader.getString()).equalsIgnoreCase(p.getName());
}

@Contract(pure = true)
public static @Nullable String getPartyID(Player p) {
if (inParty(p)) {
return partyManager.get(p.getName());
}
return null;
}

public static void setDisplay(Player p, String display) {
if (inParty(p)) {
if (isPartyLeader(p)) {
String party = getPartyID(p);
String beforeDisplay = getPartyDisplay(party);
partyInformation.replace(party + PartyData.display.getString(), Chat.normalColorize(display));
Chat.sendMessage(p, Objects.requireNonNull(Files.getMessage().getString("party.rename"))
.replace("<name>", beforeDisplay)
.replace("<new_name>", getPartyDisplay(party)));
} else Chat.sendMessage(p, Files.getMessage().getString("party.not_leader"));
} else Chat.sendMessage(p, Files.getMessage().getString("party.not_in_party"));
}

public static void kick(Player p) {
if (inParty(p)) {
if (!isPartyLeader(p)) {
String party = getPartyID(p);
List<String> members = partyMember.get(party);
members.remove(p.getName());
partyMember.replace(party, members);
partyManager.remove(p.getName(), party);
Chat.sendMessage(p, Objects.requireNonNull(Files.getMessage().getString("party.kick"))
.replace("<name>", getPartyDisplay(party)));
} else Chat.sendMessage(p, Files.getMessage().getString("part.cant_kick_leader"));
} else Chat.sendMessage(p, Files.getMessage().getString("party.not_in_party"));
}

public static void invite(Player leader, Player invited) {
if (inParty(leader)) {
if (isPartyLeader(leader)) {
if (!inParty(invited)) {
if (!isPartyLeader(invited)) {
String party = getPartyID(leader);
List<String> members = partyMember.get(party);
members.forEach(member -> {
Player p = Bukkit.getPlayer(member);
if (p != null) {
Chat.sendMessage(p, Objects.requireNonNull(Files.getMessage().getString("party.party_join"))
.replace("<player>", invited.getName()));
}
});
members.add(invited.getName());
partyMember.replace(party, members);
partyManager.put(invited.getName(), party);
Chat.sendMessage(invited, Objects.requireNonNull(Files.getMessage().getString("party.player_join"))
.replace("<name>", getPartyDisplay(party)));
} else
Chat.sendMessage(leader, Objects.requireNonNull(Files.getMessage().getString("party.already_in_party"))
.replace("<name>", invited.getName()));
} else
Chat.sendMessage(leader, Objects.requireNonNull(Files.getMessage().getString("party.already_in_party"))
.replace("<name>", invited.getName()));
} else Chat.sendMessage(leader, Files.getMessage().getString("party.not_leader"));
} else Chat.sendMessage(leader, Files.getMessage().getString("party.not_in_party"));
}

public enum PartyData {

leader("_leader"),
display("_display");

PartyData(String id) {
}

@Contract(pure = true)
public @NotNull String getString() {
return name();
}
}

}
10 changes: 8 additions & 2 deletions src/main/java/net/danh/dungeons/Resources/Files.java
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,20 @@ public static void updateMessage() {
List<String> default_user_help = defaultConfig.getStringList("user.help");
List<String> current_admin_help = currentConfig.getStringList("admin.help");
List<String> current_user_help = currentConfig.getStringList("user.help");
if (default_admin_help.size() != current_admin_help.size()) {
List<String> default_party_help = defaultConfig.getStringList("party.help");
List<String> current_party_help = currentConfig.getStringList("party.help");
if (current_admin_help.isEmpty()) {
getConfig().set("admin.help", default_admin_help);
SimpleConfigurationManager.get().save("message.yml");
}
if (default_user_help.size() != current_user_help.size()) {
if (current_user_help.isEmpty()) {
getConfig().set("user.help", default_user_help);
SimpleConfigurationManager.get().save("message.yml");
}
if (current_party_help.isEmpty()) {
getConfig().set("party.help", default_party_help);
SimpleConfigurationManager.get().save("message.yml");
}
try {
ConfigUpdater.update(Dungeons.getDungeonCore(), "message.yml", configFile);
Dungeons.getDungeonCore().getLogger().log(Level.WARNING, "Your message have been updated successful");
Expand Down
5 changes: 4 additions & 1 deletion src/main/resources/config.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
version: 2
version: 3
check_update: true

settings:
debug: false
prefix: "&f[ &bDungeons&f ]"

party:
default_display: "&7[ &a<name> &7]"

dungeon:
black_list_command:
- tpa
Expand Down
21 changes: 20 additions & 1 deletion src/main/resources/message.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
version: 3
version: 4

admin:
reload_files: "&bReloaded Files!"
help:
- "&a/dungeons editor <dungeon-id>"
- "&a/dungeons reload"

party:
create: "&bParty <name>&b has been created"
disband: "&cParty <name>&c has been dissolved"
rename: "&eParty <name>&e was renamed to <new_name>"
kick: "&cYou was kicked from party <name>"
party_join: "&b<player>&b join your party"
player_join: "&bYou join party <name>"
already_has_name: "&cAlready has party name <name>"
not_in_party: "&cYou must be in party to do this command!"
not_leader: "&cYou are not leader to do this command!"
cant_kick_leader: "&cYou can not kick your leader"
already_in_party: "&cPlayer <name>&c already in another party"
help:
- "&a/dungeons party create <id> - Create Party with ID"
- "&a/dungeons party rename <name> - Rename Party Display"
- "&a/dungeons party invite <player> - Invite Player"
- "&a/dungeons party kick <player> - Kick Player"
- "&a/dungeons party disband - Kick Player"

dungeons:
stage:
reach_location: "&bReach location %x% %y% %z% - %distance% Blocks"
Expand Down

0 comments on commit 2ad6f74

Please sign in to comment.