feat: some changes and improvements to menus
This commit is contained in:
parent
92ac5a6048
commit
103d277c7e
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -31,5 +31,10 @@
|
||||||
<option name="name" value="maven" />
|
<option name="name" value="maven" />
|
||||||
<option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" />
|
<option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="maven2" />
|
||||||
|
<option name="name" value="maven2" />
|
||||||
|
<option name="url" value="https://repo.codemc.org/repository/maven-public/" />
|
||||||
|
</remote-repository>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -5,7 +5,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
group = 'me.theclashfruit'
|
group = 'me.theclashfruit'
|
||||||
version = '1.0.0+1.19.4-beta'
|
version = '1.0.0+1.19.4-alpha'
|
||||||
|
|
||||||
static def getBuildTimestamp() {
|
static def getBuildTimestamp() {
|
||||||
return new Date().time
|
return new Date().time
|
||||||
|
@ -24,6 +24,9 @@ repositories {
|
||||||
maven {
|
maven {
|
||||||
url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
|
url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
|
||||||
}
|
}
|
||||||
|
maven {
|
||||||
|
url = 'https://repo.codemc.org/repository/maven-public/'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -31,6 +34,7 @@ dependencies {
|
||||||
compileOnly 'me.clip:placeholderapi:2.11.3'
|
compileOnly 'me.clip:placeholderapi:2.11.3'
|
||||||
|
|
||||||
implementation 'com.github.zafarkhaja:java-semver:0.9.0'
|
implementation 'com.github.zafarkhaja:java-semver:0.9.0'
|
||||||
|
implementation 'de.tr7zw:item-nbt-api-plugin:2.11.3'
|
||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
@ -39,6 +43,8 @@ shadowJar {
|
||||||
archiveBaseName.set(project.name)
|
archiveBaseName.set(project.name)
|
||||||
archiveClassifier.set('')
|
archiveClassifier.set('')
|
||||||
archiveVersion.set(project.version)
|
archiveVersion.set(project.version)
|
||||||
|
|
||||||
|
relocate 'de.tr7zw', 'me.theclashfruit.tr7zw'
|
||||||
}
|
}
|
||||||
|
|
||||||
buildConfig {
|
buildConfig {
|
||||||
|
|
|
@ -34,33 +34,7 @@ public class MenuListener implements Listener {
|
||||||
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
|
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
|
||||||
|
|
||||||
events.forEach(menuEvent -> {
|
events.forEach(menuEvent -> {
|
||||||
switch (menuEvent.get("action").toString().toLowerCase()) {
|
GuiUtil.guiActionHandler(menuConfig, event, menuEvent.get("action").toString().toLowerCase(), menuEvent.get("data").toString(), cosmeticsConfig.getString("title"), "main", player);
|
||||||
case "send_message" -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.sendMessage(MiniMessage.miniMessage().deserialize(menuEvent.get("data").toString()));
|
|
||||||
}
|
|
||||||
case "join_server" -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.performCommand("server " + menuEvent.get("data").toString());
|
|
||||||
}
|
|
||||||
case "execute_command" -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.performCommand(menuEvent.get("data").toString());
|
|
||||||
}
|
|
||||||
case "do_nothing" -> {}
|
|
||||||
default -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.sendRichMessage(
|
|
||||||
"<red>An error occurred while executing the action of the item." +
|
|
||||||
"<newline>" +
|
|
||||||
"<red>Please contact an administrator."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -80,38 +54,7 @@ public class MenuListener implements Listener {
|
||||||
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
|
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
|
||||||
|
|
||||||
events.forEach(menuEvent -> {
|
events.forEach(menuEvent -> {
|
||||||
switch (menuEvent.get("action").toString().toLowerCase()) {
|
GuiUtil.guiActionHandler(cosmeticsConfig, event, menuEvent.get("action").toString().toLowerCase(), menuEvent.get("data").toString(), cosmeticsConfig.getString("title"), "main", player);
|
||||||
case "send_message" -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.sendMessage(MiniMessage.miniMessage().deserialize(menuEvent.get("data").toString()));
|
|
||||||
}
|
|
||||||
case "join_server" -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.performCommand("server " + menuEvent.get("data").toString());
|
|
||||||
}
|
|
||||||
case "execute_command" -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.performCommand(menuEvent.get("data").toString());
|
|
||||||
}
|
|
||||||
case "open_page" -> {
|
|
||||||
Inventory menuGui = GuiUtil.createGui(cosmeticsConfig, player, menuEvent.get("data").toString());
|
|
||||||
|
|
||||||
player.openInventory(menuGui);
|
|
||||||
}
|
|
||||||
case "do_nothing" -> {}
|
|
||||||
default -> {
|
|
||||||
player.closeInventory();
|
|
||||||
|
|
||||||
player.sendRichMessage(
|
|
||||||
"<red>An error occurred while executing the action of the item." +
|
|
||||||
"<newline>" +
|
|
||||||
"<red>Please contact an administrator."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,6 +4,8 @@ import me.theclashfruit.hubbit.Hubbit;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||||
|
|
||||||
|
@ -17,5 +19,23 @@ public class ConfigLoader {
|
||||||
public @org.jetbrains.annotations.NotNull YamlConfiguration getCosmeticsMenuFileConfig() {
|
public @org.jetbrains.annotations.NotNull YamlConfiguration getCosmeticsMenuFileConfig() {
|
||||||
return cosmeticMenuConfig;
|
return cosmeticMenuConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @org.jetbrains.annotations.NotNull List<YamlConfiguration> getAllCosmetics() {
|
||||||
|
String[] fileList = new File(getPlugin(Hubbit.class).getDataFolder() + "/cosmetics").list();
|
||||||
|
|
||||||
|
List<YamlConfiguration> finalConfigList = new ArrayList<>();
|
||||||
|
|
||||||
|
assert fileList != null;
|
||||||
|
|
||||||
|
for(String fileName : fileList) {
|
||||||
|
if(fileName.endsWith(".yml")) {
|
||||||
|
YamlConfiguration cosmeticConfig = YamlConfiguration.loadConfiguration(new File(getPlugin(Hubbit.class).getDataFolder() + "/cosmetics/" + fileName));
|
||||||
|
|
||||||
|
finalConfigList.add(cosmeticConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalConfigList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
package me.theclashfruit.hubbit.utils;
|
package me.theclashfruit.hubbit.utils;
|
||||||
|
|
||||||
|
import de.tr7zw.nbtapi.NBTItem;
|
||||||
import me.theclashfruit.hubbit.Hubbit;
|
import me.theclashfruit.hubbit.Hubbit;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -21,7 +25,19 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
|
||||||
|
|
||||||
public class GuiUtil {
|
public class GuiUtil {
|
||||||
public static Inventory createGui(FileConfiguration guiConfig, Player guiHolder, String pageId) {
|
public static Inventory createGui(FileConfiguration guiConfig, Player guiHolder, String pageId) {
|
||||||
Inventory inventoryGui = new MenuInventoryHolder(getPlugin(Hubbit.class), guiConfig.getInt("size"), MessageFormatter.formatMessage(guiConfig.getString("title"), guiHolder)).getInventory();;
|
AtomicReference<String> pageTitle = new AtomicReference<>("");
|
||||||
|
|
||||||
|
if(!Objects.equals(pageId, "main")) {
|
||||||
|
guiConfig.getMapList("pages").forEach(page -> {
|
||||||
|
if(Objects.equals(page.get("id").toString(), pageId)) {
|
||||||
|
pageTitle.set(page.get("title").toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
pageTitle.set(guiConfig.getString("title"));
|
||||||
|
}
|
||||||
|
|
||||||
|
Inventory inventoryGui = new MenuInventoryHolder(getPlugin(Hubbit.class), guiConfig.getInt("size"), MessageFormatter.formatMessage(pageTitle.get(), guiHolder)).getInventory();;
|
||||||
|
|
||||||
int inventorySize = guiConfig.getInt("size");
|
int inventorySize = guiConfig.getInt("size");
|
||||||
|
|
||||||
|
@ -68,10 +84,15 @@ public class GuiUtil {
|
||||||
getPlugin(Hubbit.class).getLogger().log(java.util.logging.Level.INFO, item.get("slot").toString());
|
getPlugin(Hubbit.class).getLogger().log(java.util.logging.Level.INFO, item.get("slot").toString());
|
||||||
|
|
||||||
if(Objects.equals(item.get("slot").toString(), "fill")) {
|
if(Objects.equals(item.get("slot").toString(), "fill")) {
|
||||||
AtomicInteger i = new AtomicInteger(0);
|
AtomicInteger i = new AtomicInteger(10);
|
||||||
|
|
||||||
while(i.get() < inventorySize) {
|
while(i.get() < inventorySize) {
|
||||||
if(inventoryGui.getItem(i.get()) == null) {
|
if(inventoryGui.getItem(i.get()) == null) {
|
||||||
inventoryGui.setItem(i.get(), itemStack);
|
try {
|
||||||
|
inventoryGui.setItem(i.get(), getCosmeticMaterial(item.get("material").toString(), 0, ConfigLoaderSingleton.getInstance().getAllCosmetics()));
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
i.getAndIncrement();
|
i.getAndIncrement();
|
||||||
}
|
}
|
||||||
|
@ -99,8 +120,51 @@ public class GuiUtil {
|
||||||
String guiPageId,
|
String guiPageId,
|
||||||
Player guiHolder
|
Player guiHolder
|
||||||
) {
|
) {
|
||||||
// TODO: Make a better gui action handler
|
switch (guiAction) {
|
||||||
|
case "send_message" -> {
|
||||||
|
guiHolder.closeInventory();
|
||||||
|
|
||||||
|
guiHolder.sendMessage(MessageFormatter.formatMessage(guiActionData, guiHolder));
|
||||||
|
}
|
||||||
|
case "join_server" -> {
|
||||||
|
guiHolder.closeInventory();
|
||||||
|
|
||||||
|
getPlugin(Hubbit.class).getServer().dispatchCommand(getPlugin(Hubbit.class).getServer().getConsoleSender(), "server " + guiHolder.name() + " " + guiActionData);
|
||||||
|
}
|
||||||
|
case "open_page" -> {
|
||||||
|
Inventory menuGui = GuiUtil.createGui(guiConfig, guiHolder, guiActionData);
|
||||||
|
|
||||||
|
guiHolder.openInventory(menuGui);
|
||||||
|
}
|
||||||
|
case "do_nothing" -> {}
|
||||||
|
default -> {
|
||||||
|
guiHolder.closeInventory();
|
||||||
|
|
||||||
|
guiHolder.sendRichMessage(
|
||||||
|
"<red>An error occurred while executing the action of the item." +
|
||||||
|
"<newline>" +
|
||||||
|
"<red>Please contact an administrator."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ItemStack getCosmeticMaterial(String type, int position, List<YamlConfiguration> cosmeticList) throws ParseException {
|
||||||
|
switch (type.toLowerCase()) {
|
||||||
|
case "cosmetic_pet" -> {
|
||||||
|
ItemStack cosmeticItem = new ItemStack(Material.valueOf(cosmeticList.get(position).getString("menu.material")));
|
||||||
|
NBTItem cosmeticNBT = new NBTItem(cosmeticItem);
|
||||||
|
|
||||||
|
cosmeticNBT.setObject("", new JSONParser().parse(cosmeticList.get(position).getString("menu.data")));
|
||||||
|
cosmeticNBT.applyNBT(cosmeticItem);
|
||||||
|
|
||||||
|
return cosmeticItem;
|
||||||
|
}
|
||||||
|
default -> {
|
||||||
|
return new ItemStack(Material.STONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ type: 'PET'
|
||||||
|
|
||||||
menu:
|
menu:
|
||||||
material: 'PLAYER_HEAD'
|
material: 'PLAYER_HEAD'
|
||||||
data: '{display:{Name:"{\"text\":\"Pig\"}"},SkullOwner:{Id:[I;1614010431,-1536998011,-1935885226,-1845021842],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmVlODUxNDg5MmYzZDc4YTMyZTg0NTZmY2JiOGM2MDgxZTIxYjI0NmQ4MmYzOThiZDk2OWZlYzE5ZDNjMjdiMyJ9fX0="}]}}}'
|
data: '{"display":{"Name":"{\"text\":\"Pig\"}"},"SkullOwner":{"Id":[I;1614010431,-1536998011,-1935885226,-1845021842],"Properties":{"textures":[{"Value":"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmVlODUxNDg5MmYzZDc4YTMyZTg0NTZmY2JiOGM2MDgxZTIxYjI0NmQ4MmYzOThiZDk2OWZlYzE5ZDNjMjdiMyJ9fX0="}]}}}'
|
||||||
|
|
||||||
pet:
|
pet:
|
||||||
entity: 'PIG'
|
entity: 'PIG'
|
||||||
|
|
Loading…
Reference in a new issue