Compare commits
2 commits
1.0.0+1.19
...
main
Author | SHA1 | Date | |
---|---|---|---|
TheClashFruit | f731b368c5 | ||
TheClashFruit | 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.
Binary file not shown.
Binary file not shown.
|
@ -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>
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in a new issue