Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
a9f560ba5e
Commit
3984098883
@ -395,6 +395,7 @@ SCRIPT_MENU_GUI_ITEM_ADD_LORE = §7Klicke mit einem Buch zum hinzufügen
|
||||
|
||||
SCRIPT_MENU_GUI_DUPLICATE_COMMAND = §cCommand '{0}' bereits definiert
|
||||
SCRIPT_MENU_GUI_UNKNOWN_EVENT = §cEvent '{0}' ist nicht definierbar
|
||||
SCRIPT_MENU_GUI_UNKNOWN_GUI = §cGui Item '{0}' ist nicht definierbar
|
||||
SCRIPT_MENU_GUI_LIMIT = §cScript-Buch Limit erreicht
|
||||
|
||||
## ScriptCommand
|
||||
|
@ -32,6 +32,7 @@ import org.bukkit.inventory.meta.BookMeta;
|
||||
import yapion.hierarchy.types.YAPIONArray;
|
||||
import yapion.hierarchy.types.YAPIONMap;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -251,4 +252,69 @@ public class CustomScript {
|
||||
return swItem;
|
||||
}
|
||||
}
|
||||
|
||||
public interface CustomGUIItem extends Script {
|
||||
Material material();
|
||||
String name();
|
||||
List<String> lore();
|
||||
boolean execute(Player p, Map<String, Value> variables);
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public static class MenuCustomGUIItem implements CustomGUIItem, MenuScript {
|
||||
public final Material material;
|
||||
public final String name;
|
||||
public final List<String> pages;
|
||||
|
||||
@Override
|
||||
public Material material() {
|
||||
return material;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> lore() {
|
||||
if (!pages.isEmpty()) {
|
||||
String[] lines = pages.get(0).split("\n");
|
||||
List<String> lore = new ArrayList<>();
|
||||
if (lines.length > 1) {
|
||||
for (int i = 1; i < lines.length; i++) {
|
||||
if (lines[i].isEmpty()) continue;
|
||||
if (lines[i].startsWith("#")) {
|
||||
lore.add(lines[i].substring(1));
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return lore;
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(Player p, Map<String, Value> variables) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toYAPION(YAPIONMap yapionMap) {
|
||||
YAPIONArray yapionArray = new YAPIONArray();
|
||||
pages.forEach(yapionArray::add);
|
||||
yapionMap.put(material.name() + " " + name, yapionArray);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SWItem toItem(Player p) {
|
||||
SWItem swItem = new SWItem(Material.WRITABLE_BOOK, BauSystem.MESSAGE.parse("SCRIPT_COMMAND_ITEM_NAME", p, material.name() + " " + name));
|
||||
BookMeta bookMeta = (BookMeta) swItem.getItemMeta();
|
||||
bookMeta.setPages(pages.toArray(new String[0]));
|
||||
swItem.setItemMeta(bookMeta);
|
||||
return swItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -129,6 +129,13 @@ public class CustomScriptListener implements Listener {
|
||||
List<String> pages = ((YAPIONArray) value).stream().map(YAPIONValue.class::cast).map(YAPIONValue::get).map(String.class::cast).collect(Collectors.toList());
|
||||
playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new CustomScript.MenuEvent(pages, event));
|
||||
});
|
||||
|
||||
yapionObject.getYAPIONMapOrSetDefault("guis", new YAPIONMap()).forEach((key, value) -> {
|
||||
String[] gui = ((YAPIONValue<String>) key).get().split(" ");
|
||||
List<String> pages = ((YAPIONArray) value).stream().map(YAPIONValue.class::cast).map(YAPIONValue::get).map(String.class::cast).collect(Collectors.toList());
|
||||
Material material = Material.getMaterial(gui[0]);
|
||||
playerMap.computeIfAbsent(p, player -> new ArrayList<>()).add(new CustomScript.MenuCustomGUIItem(material, String.join(" ", Arrays.copyOfRange(gui, 1, gui.length)), pages));
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -150,6 +157,11 @@ public class CustomScriptListener implements Listener {
|
||||
playerMap.get(p).stream().filter(CustomScript.MenuEvent.class::isInstance).map(CustomScript.MenuEvent.class::cast).forEach(menuCommand -> {
|
||||
menuCommand.toYAPION(eventsMap);
|
||||
});
|
||||
YAPIONMap guisMap = new YAPIONMap();
|
||||
yapionObject.add("guis", guisMap);
|
||||
playerMap.get(p).stream().filter(CustomScript.MenuCustomGUIItem.class::isInstance).map(CustomScript.MenuCustomGUIItem.class::cast).forEach(menuCommand -> {
|
||||
menuCommand.toYAPION(guisMap);
|
||||
});
|
||||
return yapionObject;
|
||||
}
|
||||
|
||||
@ -182,7 +194,9 @@ public class CustomScriptListener implements Listener {
|
||||
playerMap.getOrDefault(p, new ArrayList<>()).stream().filter(CustomScript.MenuScript.class::isInstance).map(CustomScript.MenuScript.class::cast).forEach(menuItem -> {
|
||||
SWItem swItem = menuItem.toItem(p);
|
||||
ItemStack itemStack = swItem.getItemStack();
|
||||
if (menuItem instanceof CustomScript.MenuEvent) {
|
||||
if (menuItem instanceof CustomScript.MenuCustomGUIItem) {
|
||||
itemStack.setType(Material.CHAIN_COMMAND_BLOCK);
|
||||
} else if (menuItem instanceof CustomScript.MenuEvent) {
|
||||
itemStack.setType(Material.REPEATING_COMMAND_BLOCK);
|
||||
} else {
|
||||
itemStack.setType(Material.COMMAND_BLOCK);
|
||||
@ -243,6 +257,27 @@ public class CustomScriptListener implements Listener {
|
||||
return;
|
||||
}
|
||||
scriptBookLimit(p, menuEvent);
|
||||
} else if (s.startsWith("#!GUI ")) {
|
||||
String[] strings = s.substring(5).split(" ");
|
||||
if (strings.length != 2) {
|
||||
BauSystem.MESSAGE.sendPrefixless("SCRIPT_MENU_GUI_UNKNOWN_GUI", p, s.substring(5));
|
||||
return;
|
||||
}
|
||||
Material material = null;
|
||||
try {
|
||||
material = Material.valueOf(strings[0]);
|
||||
if (!material.isItem()) {
|
||||
material = null;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
if (material == null) {
|
||||
BauSystem.MESSAGE.sendPrefixless("SCRIPT_MENU_GUI_UNKNOWN_GUI", p, s.substring(5));
|
||||
return;
|
||||
}
|
||||
String name = String.join(" ", Arrays.copyOfRange(strings, 1, strings.length));
|
||||
CustomScript.MenuCustomGUIItem menuCustomGUIItem = new CustomScript.MenuCustomGUIItem(material, name, bookMeta.getPages());
|
||||
scriptBookLimit(p, menuCustomGUIItem);
|
||||
}
|
||||
}));
|
||||
menuCommandSWListInv.open();
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren