Compare commits

...

2 commits

16 changed files with 112 additions and 65 deletions

Binary file not shown.

View file

@ -31,5 +31,10 @@
<option name="name" value="maven" />
<option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" />
</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>
</project>

View file

@ -5,7 +5,7 @@ plugins {
}
group = 'me.theclashfruit'
version = '1.0.0+1.19.4-beta'
version = '1.0.0+1.19.4-alpha'
static def getBuildTimestamp() {
return new Date().time
@ -24,6 +24,9 @@ repositories {
maven {
url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
}
maven {
url = 'https://repo.codemc.org/repository/maven-public/'
}
}
dependencies {
@ -31,6 +34,7 @@ dependencies {
compileOnly 'me.clip:placeholderapi:2.11.3'
implementation 'com.github.zafarkhaja:java-semver:0.9.0'
implementation 'de.tr7zw:item-nbt-api-plugin:2.11.3'
}
shadowJar {
@ -39,6 +43,8 @@ shadowJar {
archiveBaseName.set(project.name)
archiveClassifier.set('')
archiveVersion.set(project.version)
relocate 'de.tr7zw', 'me.theclashfruit.tr7zw'
}
buildConfig {

View file

@ -34,33 +34,7 @@ public class MenuListener implements Listener {
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
events.forEach(menuEvent -> {
switch (menuEvent.get("action").toString().toLowerCase()) {
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."
);
}
}
GuiUtil.guiActionHandler(menuConfig, event, menuEvent.get("action").toString().toLowerCase(), menuEvent.get("data").toString(), cosmeticsConfig.getString("title"), "main", player);
});
}
});
@ -80,38 +54,7 @@ public class MenuListener implements Listener {
List<Map<?, ?>> events = (List<Map<?, ?>>) item.get("events");
events.forEach(menuEvent -> {
switch (menuEvent.get("action").toString().toLowerCase()) {
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."
);
}
}
GuiUtil.guiActionHandler(cosmeticsConfig, event, menuEvent.get("action").toString().toLowerCase(), menuEvent.get("data").toString(), cosmeticsConfig.getString("title"), "main", player);
});
}
});

View file

@ -4,6 +4,8 @@ import me.theclashfruit.hubbit.Hubbit;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
@ -17,5 +19,23 @@ public class ConfigLoader {
public @org.jetbrains.annotations.NotNull YamlConfiguration getCosmeticsMenuFileConfig() {
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,16 +1,21 @@
package me.theclashfruit.hubbit.utils;
import de.tr7zw.nbtapi.NBTItem;
import me.theclashfruit.hubbit.Hubbit;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@ -21,7 +26,19 @@ import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
public class GuiUtil {
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");
@ -68,10 +85,15 @@ public class GuiUtil {
getPlugin(Hubbit.class).getLogger().log(java.util.logging.Level.INFO, item.get("slot").toString());
if(Objects.equals(item.get("slot").toString(), "fill")) {
AtomicInteger i = new AtomicInteger(0);
AtomicInteger i = new AtomicInteger(10);
while(i.get() < inventorySize) {
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();
}
@ -99,8 +121,59 @@ public class GuiUtil {
String guiPageId,
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;
}
public static ItemStack getCosmeticMaterial(String type, int position, List<YamlConfiguration> cosmeticList) throws ParseException {
List<YamlConfiguration> processedList = new ArrayList<>();
switch (type.toLowerCase()) {
case "cosmetic_pet" -> {
cosmeticList.forEach(cosmetic -> {
if(Objects.requireNonNull(cosmetic.getString("type")).equalsIgnoreCase("pet")) {
processedList.add(cosmetic);
}
});
ItemStack cosmeticItem = new ItemStack(Material.valueOf(processedList.get(position).getString("menu.material")));
NBTItem cosmeticNBT = new NBTItem(cosmeticItem);
cosmeticNBT.setObject("", new JSONParser().parse(processedList.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:
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:
entity: 'PIG'