feat: some changes and improvements to menus

This commit is contained in:
TheClashFruit 2023-06-20 13:33:17 +02:00
parent 92ac5a6048
commit 103d277c7e
Signed by: TheClashFruit
GPG key ID: CF4A319B9A73290C
14 changed files with 103 additions and 65 deletions

Binary file not shown.

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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'