|
|
|
@ -32,10 +32,109 @@ import org.bukkit.event.inventory.ClickType;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
class GUI {
|
|
|
|
|
private GUI(){}
|
|
|
|
|
public class GUI {
|
|
|
|
|
|
|
|
|
|
static void changeType(Player p, Schematic schem){
|
|
|
|
|
public static void open(Player player) {
|
|
|
|
|
list(player, SchematicNode.getSchematicsAccessibleByUser(SteamwarUser.get(player.getUniqueId()).getId(), null), false, "/");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void list(Player player, List<SchematicNode> schems, boolean publics, String path) {
|
|
|
|
|
List<SWListInv.SWListEntry<SchematicNode>> schemList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for(SchematicNode schem : schems) {
|
|
|
|
|
Material m;
|
|
|
|
|
if (schem.getItem().isEmpty())
|
|
|
|
|
m = SWItem.getMaterial("CAULDRON_ITEM");
|
|
|
|
|
else
|
|
|
|
|
m = SWItem.getMaterial(schem.getItem());
|
|
|
|
|
|
|
|
|
|
SWItem item = new SWItem(m, "§e" + schem.getName(), Collections.singletonList(schem.isDir()?"§9Ordner":"§7" + schem.getSchemtype().name()), schem.isDir()?false:!schem.getSchemtype().writeable(), click -> {});
|
|
|
|
|
if(!schem.isDir()) {
|
|
|
|
|
if(schem.getRank() > 0)
|
|
|
|
|
item.setLore(Lists.newArrayList("§7" + schem.getSchemtype().name(), "§8Rang " + schem.getRank()));
|
|
|
|
|
}
|
|
|
|
|
schemList.add(new SWListInv.SWListEntry<>(item, schem));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SWListInv<SchematicNode> inv = new SWListInv<>(player, "§eSchematicliste §8- §r" + path, false, schemList, (clickType, schem) -> info(player, schem));
|
|
|
|
|
if(publics)
|
|
|
|
|
inv.setItem(48, Material.BUCKET, "§7Eigene Schematics", clickType -> open(player));
|
|
|
|
|
else
|
|
|
|
|
inv.setItem(48, Material.GLASS, "§7Public Schematics", clickType -> list(player, SchematicNode.getSchematicsAccessibleByUser(0, null), true, "/"));
|
|
|
|
|
inv.setItem(50, Material.NAME_TAG, "§7Suche", clickType -> search(player, publics));
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void info(Player player, SchematicNode node) {
|
|
|
|
|
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
|
|
|
|
if(node.isDir()) {
|
|
|
|
|
list(player, SchematicNode.getSchematicNodeInNode(node), node.getOwner() == 0, node.generateBreadcrumbs(user));
|
|
|
|
|
} else {
|
|
|
|
|
SWInventory inv = new SWInventory(player, 9, node.generateBreadcrumbs(user));
|
|
|
|
|
inv.setItem(0, SWItem.getMaterial("WOOD_AXE"), "§eLaden", click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
SchematicSystem.SCHEMATIC_COMMAND.loadSchem(player, node);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if(node.getOwner() == user.getId()){
|
|
|
|
|
if(node.getSchemtype().writeable()){
|
|
|
|
|
List<CheckedSchematic> checkedSchematics = CheckedSchematic.getLastDeclined(player.getUniqueId());
|
|
|
|
|
ListIterator<CheckedSchematic> i = checkedSchematics.listIterator(checkedSchematics.size());
|
|
|
|
|
while(i.hasPrevious()) {
|
|
|
|
|
CheckedSchematic checkedSchematic = i.previous();
|
|
|
|
|
if(checkedSchematic.getNode() == node.getId()) {
|
|
|
|
|
inv.setItem(1, SWItem.getDye(10), (byte) 10, "§eStatus " + node.getSchemtype().name(), Collections.singletonList("§7" + checkedSchematic.getDeclineReason()), false, click -> {});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Material mat = SWItem.getMaterial("CAULDRON_ITEM");
|
|
|
|
|
if(node.getItem() != null && !node.getItem().equals(""))
|
|
|
|
|
mat = SWItem.getMaterial(node.getItem());
|
|
|
|
|
|
|
|
|
|
inv.setItem(2, mat, "§e" + mat.name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
changeItem(player, node);
|
|
|
|
|
});
|
|
|
|
|
inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
changeType(player, node);
|
|
|
|
|
});
|
|
|
|
|
inv.setItem(5, SWItem.getMaterial("MAGENTA_GLAZED_TERRACOTTA"), "§eDownload", click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
SchematicSystem.SCHEMATIC_COMMAND.download(player, node);
|
|
|
|
|
});
|
|
|
|
|
SWItem skull = SWItem.getPlayerSkull("MHF_STEVE");
|
|
|
|
|
skull.setCallback(click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
delmembers(player, node);
|
|
|
|
|
});
|
|
|
|
|
skull.setName("§eMitglieder");
|
|
|
|
|
inv.setItem(6, skull);
|
|
|
|
|
inv.setItem(8, SWItem.getDye(1), (byte) 1, "§cLöschen", click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
delete(player, node);
|
|
|
|
|
});
|
|
|
|
|
}else{
|
|
|
|
|
inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + node.getSchemtype().name(), click -> {});
|
|
|
|
|
|
|
|
|
|
SteamwarUser owneruser = SteamwarUser.get(node.getOwner());
|
|
|
|
|
SWItem skull = SWItem.getPlayerSkull(owneruser.getUserName());
|
|
|
|
|
skull.setName("§7von §e" + owneruser.getUserName());
|
|
|
|
|
inv.setItem(6, skull);
|
|
|
|
|
|
|
|
|
|
inv.setItem(8, SWItem.getDye(1), (byte) 1, "§cZugriff entfernen", click -> {
|
|
|
|
|
player.closeInventory();
|
|
|
|
|
delete(player, node);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inv.setCallback(-999, click -> player.closeInventory());
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void changeType(Player p, SchematicNode schem){
|
|
|
|
|
List<SWListInv.SWListEntry<SchematicType>> types = new LinkedList<>();
|
|
|
|
|
for(SchematicType type : SchematicType.values()){
|
|
|
|
|
if(!type.isAssignable())
|
|
|
|
@ -49,24 +148,24 @@ class GUI {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SWListInv<SchematicType> inv = new SWListInv<>(p, "Typ ändern", types, (clickType, schematicType) -> {
|
|
|
|
|
SchematicCommand.changetype(p, schem, schematicType);
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
SchematicSystem.SCHEMATIC_COMMAND.changeType(p, schem, schematicType);
|
|
|
|
|
});
|
|
|
|
|
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void deleteOwn(Player p, Schematic schem){
|
|
|
|
|
SWInventory inv = new SWInventory(p, 9, schem.getSchemName() + " löschen");
|
|
|
|
|
private static void deleteOwn(Player p, SchematicNode schem){
|
|
|
|
|
SteamwarUser user = SteamwarUser.get(p.getUniqueId());
|
|
|
|
|
SWInventory inv = new SWInventory(p, 9, schem.generateBreadcrumbs(user) + " löschen");
|
|
|
|
|
inv.setItem(0, SWItem.getDye(1), (byte) 1, "§eLöschen", click -> {
|
|
|
|
|
schem.remove();
|
|
|
|
|
schem.delete();
|
|
|
|
|
|
|
|
|
|
List<CheckedSchematic> checkedSchematics = CheckedSchematic.getLastDeclined(p.getUniqueId());
|
|
|
|
|
List<CheckedSchematic> checkedSchematics = CheckedSchematic.getLastDeclined(schem);
|
|
|
|
|
for(CheckedSchematic checkedSchematic : checkedSchematics) {
|
|
|
|
|
if(checkedSchematic.getSchemOwner() == schem.getSchemOwner() &&
|
|
|
|
|
checkedSchematic.getSchemName().equals(schem.getSchemName()))
|
|
|
|
|
checkedSchematic.remove();
|
|
|
|
|
checkedSchematic.remove();
|
|
|
|
|
}
|
|
|
|
|
p.sendMessage(SchematicSystem.PREFIX + "Schematic §e" + schem.getSchemName() + " §7gelöscht");
|
|
|
|
|
p.sendMessage(SchematicSystem.PREFIX + "Schematic §e" + schem.generateBreadcrumbs(user) + " §7gelöscht");
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
});
|
|
|
|
|
inv.setItem(8, SWItem.getDye(14), (byte) 14, "§cAbbruch", click -> p.closeInventory());
|
|
|
|
@ -74,13 +173,14 @@ class GUI {
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void deleteMembership(Player p, Schematic schem){
|
|
|
|
|
SWInventory inv = new SWInventory(p, 9, schem.getSchemName() + " entfernen");
|
|
|
|
|
private static void deleteMembership(Player p, SchematicNode schem){
|
|
|
|
|
SteamwarUser user = SteamwarUser.get(p.getUniqueId());
|
|
|
|
|
SWInventory inv = new SWInventory(p, 9, schem.generateBreadcrumbs(user) + " entfernen");
|
|
|
|
|
inv.setItem(0, SWItem.getDye(1), (byte) 1, "§eZugriff entfernen", click -> {
|
|
|
|
|
SchematicMember member = SchematicMember.getSchemMemberFromDB(schem.getSchemName(), schem.getSchemOwner(), SteamwarUser.get(p.getUniqueId()).getId());
|
|
|
|
|
NodeMember member = NodeMember.getNodeMember(schem.getId(), user.getId());
|
|
|
|
|
if(member != null)
|
|
|
|
|
member.remove();
|
|
|
|
|
p.sendMessage(SchematicSystem.PREFIX + "Zugriff zu Schematic §e" + schem.getSchemName() + " §7entfernt");
|
|
|
|
|
member.delete();
|
|
|
|
|
p.sendMessage(SchematicSystem.PREFIX + "Zugriff zu Schematic §e" + schem.generateBreadcrumbs(user) + " §7entfernt");
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
});
|
|
|
|
|
inv.setItem(8, SWItem.getDye(14), (byte) 14, "§cAbbruch", click -> p.closeInventory());
|
|
|
|
@ -88,22 +188,22 @@ class GUI {
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void delete(Player p, Schematic schem){
|
|
|
|
|
if(SteamwarUser.get(p.getUniqueId()).getId() == schem.getSchemOwner())
|
|
|
|
|
static void delete(Player p, SchematicNode schem){
|
|
|
|
|
if(SteamwarUser.get(p.getUniqueId()).getId() == schem.getOwner())
|
|
|
|
|
deleteOwn(p, schem);
|
|
|
|
|
else
|
|
|
|
|
deleteMembership(p, schem);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void delmembers(Player p, Schematic schem){
|
|
|
|
|
List<SWListInv.SWListEntry<SchematicMember>> members = new LinkedList<>();
|
|
|
|
|
for(SchematicMember member : SchematicMember.getSchemMembers(schem.getSchemName(), schem.getSchemOwner())){
|
|
|
|
|
static void delmembers(Player p, SchematicNode schem){
|
|
|
|
|
List<SWListInv.SWListEntry<NodeMember>> members = new LinkedList<>();
|
|
|
|
|
for(NodeMember member : schem.getMembers()){
|
|
|
|
|
SteamwarUser user = SteamwarUser.get(member.getMember());
|
|
|
|
|
members.add(new SWListInv.SWListEntry<>(SWItem.getPlayerSkull(user.getUserName()), member));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SWListInv<SchematicMember> inv = new SWListInv<>(p, "Mitglieder entfernen", members, (clickType, member) -> {
|
|
|
|
|
member.remove();
|
|
|
|
|
SWListInv<NodeMember> inv = new SWListInv<>(p, "Mitglieder entfernen", members, (clickType, member) -> {
|
|
|
|
|
member.delete();
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
delmembers(p, schem);
|
|
|
|
|
});
|
|
|
|
@ -111,7 +211,7 @@ class GUI {
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void changeItem(Player p, Schematic schem){
|
|
|
|
|
private static void changeItem(Player p, SchematicNode schem){
|
|
|
|
|
List<SWListInv.SWListEntry<Material>> materials = new LinkedList<>();
|
|
|
|
|
for(Material material : Material.values()){
|
|
|
|
|
SWItem item = new SWItem(material, "§7" + material.name());
|
|
|
|
@ -128,108 +228,12 @@ class GUI {
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void info(Player p, Schematic schem){
|
|
|
|
|
SWInventory inv = new SWInventory(p, 9, schem.getSchemName());
|
|
|
|
|
if(schem.availible())
|
|
|
|
|
inv.setItem(0, SWItem.getMaterial("WOOD_AXE"), "§eLaden", click -> {
|
|
|
|
|
SchematicCommand.load(p, schem);
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if(schem.getSchemOwner() == SteamwarUser.get(p.getUniqueId()).getId()){
|
|
|
|
|
if(schem.getSchemType().writeable()){
|
|
|
|
|
List<CheckedSchematic> checkedSchematics = CheckedSchematic.getLastDeclined(p.getUniqueId());
|
|
|
|
|
ListIterator<CheckedSchematic> i = checkedSchematics.listIterator(checkedSchematics.size());
|
|
|
|
|
while(i.hasPrevious()) {
|
|
|
|
|
CheckedSchematic checkedSchematic = i.previous();
|
|
|
|
|
if(checkedSchematic.getSchemName().equals(schem.getSchemName()) &&
|
|
|
|
|
checkedSchematic.getSchemOwner() == schem.getSchemOwner()) {
|
|
|
|
|
inv.setItem(1, SWItem.getDye(10), (byte) 10, "§eStatus " + schem.getSchemType().name(), Collections.singletonList("§7" + checkedSchematic.getDeclineReason()), false, click -> {});
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Material mat = SWItem.getMaterial("CAULDRON_ITEM");
|
|
|
|
|
if(schem.getItem() != null && !schem.getItem().equals(""))
|
|
|
|
|
mat = SWItem.getMaterial(schem.getItem());
|
|
|
|
|
|
|
|
|
|
inv.setItem(2, mat, "§e" + mat.name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> {
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
changeItem(p, schem);
|
|
|
|
|
});
|
|
|
|
|
if(schem.availible())
|
|
|
|
|
inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + schem.getSchemType().name(), Arrays.asList("§7Zum Ändern", "§7anklicken"), false, click -> {
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
changeType(p, schem);
|
|
|
|
|
});
|
|
|
|
|
inv.setItem(5, SWItem.getMaterial("MAGENTA_GLAZED_TERRACOTTA"), "§eDownload", click -> {
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
SchematicCommand.download(p, schem);
|
|
|
|
|
});
|
|
|
|
|
SWItem skull = SWItem.getPlayerSkull("MHF_STEVE");
|
|
|
|
|
skull.setCallback(click -> {
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
delmembers(p, schem);
|
|
|
|
|
});
|
|
|
|
|
skull.setName("§eMitglieder");
|
|
|
|
|
inv.setItem(6, skull);
|
|
|
|
|
inv.setItem(8, SWItem.getDye(1), (byte) 1, "§cLöschen", click -> {
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
delete(p, schem);
|
|
|
|
|
});
|
|
|
|
|
}else{
|
|
|
|
|
inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), "§e" + schem.getSchemType().name(), click -> {});
|
|
|
|
|
|
|
|
|
|
SteamwarUser owneruser = SteamwarUser.get(schem.getSchemOwner());
|
|
|
|
|
SWItem skull = SWItem.getPlayerSkull(owneruser.getUserName());
|
|
|
|
|
skull.setName("§7von §e" + owneruser.getUserName());
|
|
|
|
|
inv.setItem(6, skull);
|
|
|
|
|
|
|
|
|
|
inv.setItem(8, SWItem.getDye(1), (byte) 1, "§cZugriff entfernen", click -> {
|
|
|
|
|
p.closeInventory();
|
|
|
|
|
delete(p, schem);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inv.setCallback(-999, click -> p.closeInventory());
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void list(Player p){
|
|
|
|
|
list(p, Schematic.getSchemsAccessibleByUser(SteamwarUser.get(p.getUniqueId()).getId()), false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void list(Player p, List<Schematic> schems, boolean publics){
|
|
|
|
|
List<SWListInv.SWListEntry<Schematic>> schemList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for(Schematic schem : schems) {
|
|
|
|
|
Material m;
|
|
|
|
|
if (schem.getItem().isEmpty())
|
|
|
|
|
m = SWItem.getMaterial("CAULDRON_ITEM");
|
|
|
|
|
else
|
|
|
|
|
m = SWItem.getMaterial(schem.getItem());
|
|
|
|
|
|
|
|
|
|
SWItem item = new SWItem(m, "§e" + schem.getSchemName(), Collections.singletonList("§7" + schem.getSchemType().name()), !schem.getSchemType().writeable(), click -> {});
|
|
|
|
|
if(schem.getRank() > 0)
|
|
|
|
|
item.setLore(Lists.newArrayList("§7" + schem.getSchemType().name(), "§8Rang " + schem.getRank()));
|
|
|
|
|
schemList.add(new SWListInv.SWListEntry<>(item, schem));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SWListInv<Schematic> inv = new SWListInv<>(p, "§eSchematicliste", false, schemList, (clickType, schem) -> info(p, schem));
|
|
|
|
|
if(publics)
|
|
|
|
|
inv.setItem(48, Material.BUCKET, "§7Eigene Schematics", clickType -> list(p));
|
|
|
|
|
else
|
|
|
|
|
inv.setItem(48, Material.GLASS, "§7Public Schematics", clickType -> list(p, Schematic.getSchemsAccessibleByUser(0), true));
|
|
|
|
|
inv.setItem(50, Material.NAME_TAG, "§7Suche", clickType -> search(p, schems));
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void search(Player p, List<Schematic> schems){
|
|
|
|
|
SWAnvilInv inv = new SWAnvilInv(p, "§7Schematicsuche");
|
|
|
|
|
inv.setCallback(term -> {
|
|
|
|
|
ArrayList<Schematic> schemCopy = new ArrayList<>(schems);
|
|
|
|
|
schemCopy.removeIf(schem -> !schem.getSchemName().toLowerCase().contains(term.toLowerCase()));
|
|
|
|
|
list(p, schemCopy, false);
|
|
|
|
|
private static void search(Player player, boolean publics) {
|
|
|
|
|
SWAnvilInv inv = new SWAnvilInv(player, "Schematics suchen");
|
|
|
|
|
inv.setItem(SWItem.getMaterial("CAULDRON_ITEM"));
|
|
|
|
|
inv.setCallback(s -> {
|
|
|
|
|
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
|
|
|
|
|
list(player, SchematicNode.filterSchems(publics?0:user.getId(), node -> node.getName().contains(s)), publics, "/");
|
|
|
|
|
});
|
|
|
|
|
inv.open();
|
|
|
|
|
}
|
|
|
|
|