mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-19 15:09:24 +00:00
editor
This commit is contained in:
@@ -133,6 +133,8 @@ public interface ItemManager {
|
||||
@Nullable
|
||||
BuildableItem getBuildableItem(String namespace, String value);
|
||||
|
||||
ItemStack getItemStackAppearance(Player player, String material);
|
||||
|
||||
/**
|
||||
* Register an item library.
|
||||
*
|
||||
|
||||
@@ -2,7 +2,7 @@ package net.momirealms.customfishing.command.sub;
|
||||
|
||||
import dev.jorel.commandapi.CommandAPICommand;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
import net.momirealms.customfishing.gui.SelectFileGUI;
|
||||
import net.momirealms.customfishing.gui.page.file.FileSelector;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@@ -13,7 +13,7 @@ public class GUIEditorCommand {
|
||||
public CommandAPICommand getEditorCommand() {
|
||||
return new CommandAPICommand("edit")
|
||||
.executesPlayer((player, arg) -> {
|
||||
new SelectFileGUI(player, new File(CustomFishingPlugin.get().getDataFolder(), "contents"));
|
||||
new FileSelector(player, new File(CustomFishingPlugin.get().getDataFolder(), "contents"));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,10 @@ public class ItemsAdderEntityImpl implements EntityLibrary {
|
||||
CustomEntity customEntity = CustomEntity.spawn(
|
||||
id,
|
||||
location,
|
||||
(Boolean) propertyMap.get("frustumCulling"),
|
||||
(Boolean) propertyMap.get("noBase"),
|
||||
(Boolean) propertyMap.get("noHitbox")
|
||||
(Boolean) propertyMap.getOrDefault("frustumCulling", true),
|
||||
(Boolean) propertyMap.getOrDefault("noBase", false),
|
||||
(Boolean) propertyMap.getOrDefault("noHitbox", false)
|
||||
);
|
||||
return customEntity.getEntity();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package net.momirealms.customfishing.gui;
|
||||
|
||||
public interface Icon {
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.momirealms.customfishing.gui;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
public interface ItemPage extends YamlPage {
|
||||
|
||||
ConfigurationSection getSection();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package net.momirealms.customfishing.gui;
|
||||
|
||||
import net.momirealms.customfishing.gui.icon.BackToPageItem;
|
||||
import xyz.xenondevs.invui.item.Item;
|
||||
|
||||
public interface ParentPage {
|
||||
|
||||
void reOpen();
|
||||
|
||||
default Item getBackItem() {
|
||||
return new BackToPageItem(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package net.momirealms.customfishing.gui;
|
||||
|
||||
public interface YamlPage extends ParentPage {
|
||||
|
||||
void save();
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
@@ -13,7 +14,7 @@ public class BackGroundItem extends AbstractItem implements Icon {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE);
|
||||
return new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).setDisplayName("");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,7 +2,8 @@ package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.SelectFileGUI;
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import net.momirealms.customfishing.gui.page.file.FileSelector;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
@@ -15,7 +16,7 @@ import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public class BackToFolderItem extends AbstractItem implements Icon {
|
||||
public class BackToFolderItem extends AbstractItem implements Icon {
|
||||
|
||||
private final File file;
|
||||
|
||||
@@ -41,6 +42,6 @@ public class BackToFolderItem extends AbstractItem implements Icon {
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (file != null && file.getPath().startsWith("plugins\\CustomFishing\\contents"))
|
||||
new SelectFileGUI(player, file);
|
||||
new FileSelector(player, file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.ParentPage;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
|
||||
public class BackToPageItem extends AbstractItem {
|
||||
|
||||
private final ParentPage parentPage;
|
||||
|
||||
public BackToPageItem(ParentPage parentPage) {
|
||||
this.parentPage = parentPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF8C00>Back to parent page"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
parentPage.reOpen();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
public interface Icon {
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import org.bukkit.Material;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import org.bukkit.Material;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import org.bukkit.Material;
|
||||
import xyz.xenondevs.invui.gui.ScrollGui;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.momirealms.customfishing.gui.icon;
|
||||
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import org.bukkit.Material;
|
||||
import xyz.xenondevs.invui.gui.ScrollGui;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package net.momirealms.customfishing.gui.icon.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.page.property.CustomModelDataEditor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
|
||||
public class CMDItem extends AbstractItem {
|
||||
|
||||
private final ItemPage itemPage;
|
||||
|
||||
public CMDItem(ItemPage itemPage) {
|
||||
this.itemPage = itemPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
ItemBuilder itemBuilder = new ItemBuilder(Material.GLOW_INK_SAC)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FFC0CB>● Custom Model Data"
|
||||
)));
|
||||
|
||||
if (itemPage.getSection().contains("custom-model-data")) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<gray>Current value: <white>" + itemPage.getSection().getInt("custom-model-data")
|
||||
)))
|
||||
.addLoreLines("");
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to reset"
|
||||
)));
|
||||
} else {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to set"
|
||||
)));
|
||||
}
|
||||
|
||||
return itemBuilder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
new CustomModelDataEditor(player, itemPage, itemPage.getSection().getString("material", ""), itemPage.getSection());
|
||||
} else if (clickType.isRightClick()) {
|
||||
itemPage.getSection().set("custom-model-data", null);
|
||||
itemPage.save();
|
||||
itemPage.reOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package net.momirealms.customfishing.gui.icon.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.page.property.DisplayNameEditor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
|
||||
public class DisplayNameItem extends AbstractItem {
|
||||
|
||||
private final ItemPage itemPage;
|
||||
|
||||
public DisplayNameItem(ItemPage itemPage) {
|
||||
this.itemPage = itemPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
ItemBuilder itemBuilder = new ItemBuilder(Material.NAME_TAG)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FAFAD2>● Display Name"
|
||||
)));
|
||||
|
||||
if (itemPage.getSection().contains("display.name")) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<gray>Current value: </gray>" + itemPage.getSection().getString("display.name")
|
||||
)))
|
||||
.addLoreLines("");
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to reset"
|
||||
)));
|
||||
} else {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to set"
|
||||
)));
|
||||
}
|
||||
|
||||
return itemBuilder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
new DisplayNameEditor(player, itemPage, itemPage.getSection());
|
||||
} else if (clickType.isRightClick()) {
|
||||
itemPage.getSection().set("display.name", null);
|
||||
itemPage.save();
|
||||
itemPage.reOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package net.momirealms.customfishing.gui.icon.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.page.property.LoreEditor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
|
||||
public class LoreItem extends AbstractItem {
|
||||
|
||||
private final ItemPage itemPage;
|
||||
|
||||
public LoreItem(ItemPage itemPage) {
|
||||
this.itemPage = itemPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
ItemBuilder itemBuilder = new ItemBuilder(Material.BIRCH_SIGN)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FA8072>● Lore"
|
||||
)));
|
||||
|
||||
if (itemPage.getSection().contains("display.lore")) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<gray>Current value: </gray>"
|
||||
)));
|
||||
for (String lore : itemPage.getSection().getStringList("display.lore")) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
" <gray>-</gray> " + lore
|
||||
)));
|
||||
}
|
||||
itemBuilder.addLoreLines("");
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to reset"
|
||||
)));
|
||||
} else {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to set"
|
||||
)));
|
||||
}
|
||||
|
||||
return itemBuilder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
new LoreEditor(player, itemPage, itemPage.getSection());
|
||||
} else if (clickType.isRightClick()) {
|
||||
itemPage.getSection().set("display.lore", null);
|
||||
itemPage.save();
|
||||
itemPage.reOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,13 @@
|
||||
package net.momirealms.customfishing.gui;
|
||||
package net.momirealms.customfishing.gui.page.file;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.icon.*;
|
||||
import net.momirealms.customfishing.gui.Icon;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import net.momirealms.customfishing.gui.icon.BackToFolderItem;
|
||||
import net.momirealms.customfishing.gui.icon.ScrollDownItem;
|
||||
import net.momirealms.customfishing.gui.icon.ScrollUpItem;
|
||||
import net.momirealms.customfishing.gui.page.item.ItemSelector;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
@@ -23,9 +28,9 @@ import java.io.File;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.Deque;
|
||||
|
||||
public class SelectFileGUI {
|
||||
public class FileSelector {
|
||||
|
||||
public SelectFileGUI(Player player, File folder) {
|
||||
public FileSelector(Player player, File folder) {
|
||||
File[] files = folder.listFiles();
|
||||
Deque<Item> items = new ArrayDeque<>();
|
||||
if (files != null) {
|
||||
@@ -94,7 +99,7 @@ public class SelectFileGUI {
|
||||
String type = split[3];
|
||||
switch (type) {
|
||||
case "item" -> {
|
||||
new ItemEditor(player, file);
|
||||
new ItemSelector(player, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,7 +122,7 @@ public class SelectFileGUI {
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
new SelectFileGUI(player, file);
|
||||
new FileSelector(player, file);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package net.momirealms.customfishing.gui.page.item;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
import net.momirealms.customfishing.gui.ItemPage;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import net.momirealms.customfishing.gui.icon.BackToPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.PreviousPageItem;
|
||||
import net.momirealms.customfishing.gui.icon.property.CMDItem;
|
||||
import net.momirealms.customfishing.gui.icon.property.DisplayNameItem;
|
||||
import net.momirealms.customfishing.gui.icon.property.LoreItem;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.gui.Gui;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.gui.structure.Markers;
|
||||
import xyz.xenondevs.invui.item.Item;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
import xyz.xenondevs.invui.item.impl.SimpleItem;
|
||||
import xyz.xenondevs.invui.window.AnvilWindow;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ItemEditor implements ItemPage {
|
||||
|
||||
private final Player player;
|
||||
private final ItemSelector itemSelector;
|
||||
private final ConfigurationSection section;
|
||||
private final String key;
|
||||
|
||||
public ItemEditor(Player player, String key, ItemSelector itemSelector, ConfigurationSection section) {
|
||||
this.player = player;
|
||||
this.section = section;
|
||||
this.itemSelector = itemSelector;
|
||||
this.key = key;
|
||||
this.reOpen();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reOpen() {
|
||||
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"# a #"
|
||||
)
|
||||
.addIngredient('a', new RefreshExample())
|
||||
.addIngredient('#', border)
|
||||
.build();
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # a # c # b # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.addIngredient('a', new PreviousPageItem())
|
||||
.addIngredient('b', new NextPageItem())
|
||||
.addIngredient('c', new BackToPageItem(itemSelector))
|
||||
.setContent(getItemList())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Editing " + key)
|
||||
))
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save() {
|
||||
itemSelector.save();
|
||||
}
|
||||
|
||||
public class RefreshExample extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(CustomFishingPlugin.get().getItemManager().getItemBuilder(section, "item", key).build(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
notifyWindows();
|
||||
}
|
||||
}
|
||||
|
||||
public List<Item> getItemList() {
|
||||
ArrayList<Item> items = new ArrayList<>();
|
||||
items.add(new DisplayNameItem(this));
|
||||
items.add(new LoreItem(this));
|
||||
items.add(new CMDItem(this));
|
||||
return items;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigurationSection getSection() {
|
||||
return section;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package net.momirealms.customfishing.gui;
|
||||
package net.momirealms.customfishing.gui.page.item;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
import net.momirealms.customfishing.api.util.LogUtils;
|
||||
import net.momirealms.customfishing.gui.YamlPage;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import net.momirealms.customfishing.gui.icon.BackToFolderItem;
|
||||
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
||||
@@ -33,29 +34,35 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
public class ItemEditor {
|
||||
public class ItemSelector implements YamlPage {
|
||||
|
||||
private static final String SEARCH = "Search";
|
||||
public static final String SEARCH = "Search";
|
||||
private final Player player;
|
||||
private final YamlConfiguration yaml;
|
||||
private String prefix;
|
||||
private final File file;
|
||||
private long coolDown;
|
||||
|
||||
public ItemEditor(Player player, File file) {
|
||||
public ItemSelector(Player player, File file) {
|
||||
this.yaml = YamlConfiguration.loadConfiguration(file);
|
||||
this.player = player;
|
||||
this.file = file;
|
||||
this.prefix = SEARCH;
|
||||
this.reOpenWithFilter();
|
||||
this.reOpenWithFilter(SEARCH);
|
||||
}
|
||||
|
||||
public void reOpenWithFilter() {
|
||||
@Override
|
||||
public void reOpen() {
|
||||
reOpenWithFilter(prefix);
|
||||
}
|
||||
|
||||
public void reOpenWithFilter(String filter) {
|
||||
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"a # #"
|
||||
)
|
||||
.addIngredient('a', new SimpleItem(new ItemBuilder(Material.NAME_TAG).setDisplayName(prefix)))
|
||||
.addIngredient('a', new SimpleItem(new ItemBuilder(Material.NAME_TAG).setDisplayName(filter)))
|
||||
.addIngredient('#', border)
|
||||
.build();
|
||||
|
||||
@@ -74,16 +81,18 @@ public class ItemEditor {
|
||||
.setContent(getItemList())
|
||||
.build();
|
||||
|
||||
var temp = prefix;
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Select item to edit")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
if (s.equals(temp)) return;
|
||||
long current = System.currentTimeMillis();
|
||||
if (current - coolDown < 100) return;
|
||||
if (s.equals(filter)) return;
|
||||
prefix = s;
|
||||
reOpenWithFilter();
|
||||
coolDown = current;
|
||||
reOpenWithFilter(s);
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
@@ -126,6 +135,7 @@ public class ItemEditor {
|
||||
yaml.set(key, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save() {
|
||||
try {
|
||||
yaml.save(file);
|
||||
@@ -138,33 +148,34 @@ public class ItemEditor {
|
||||
|
||||
private final String key;
|
||||
private final ItemBuilder itemBuilder;
|
||||
private final ItemEditor itemEditor;
|
||||
private final ItemSelector itemSelector;
|
||||
|
||||
public ItemInList(String key, ItemBuilder itemBuilder, ItemEditor itemEditor) {
|
||||
public ItemInList(String key, ItemBuilder itemBuilder, ItemSelector itemSelector) {
|
||||
this.key = key;
|
||||
this.itemBuilder = itemBuilder;
|
||||
this.itemEditor = itemEditor;
|
||||
this.itemBuilder = itemBuilder.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
key
|
||||
))).addLoreLines("")
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to delete"
|
||||
)));
|
||||
this.itemSelector = itemSelector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return itemBuilder.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
key
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<green>Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>Right click to delete"
|
||||
)));
|
||||
return itemBuilder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType.isLeftClick()) {
|
||||
|
||||
new ItemEditor(player, key, itemSelector, itemSelector.yaml.getConfigurationSection(key));
|
||||
} else if (clickType.isRightClick()) {
|
||||
this.itemEditor.removeKey(key);
|
||||
this.itemEditor.save();
|
||||
this.itemEditor.reOpenWithFilter();
|
||||
this.itemSelector.removeKey(key);
|
||||
this.itemSelector.save();
|
||||
this.itemSelector.reOpenWithFilter(itemSelector.prefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
package net.momirealms.customfishing.gui.page.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||
import net.momirealms.customfishing.gui.YamlPage;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.gui.Gui;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.item.Item;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
import xyz.xenondevs.invui.item.impl.SimpleItem;
|
||||
import xyz.xenondevs.invui.window.AnvilWindow;
|
||||
|
||||
public class CustomModelDataEditor {
|
||||
|
||||
private final Player player;
|
||||
private final YamlPage parentPage;
|
||||
private String cmd;
|
||||
private final ConfigurationSection section;
|
||||
private final String material;
|
||||
|
||||
public CustomModelDataEditor(Player player, YamlPage parentPage, String material, ConfigurationSection section) {
|
||||
this.player = player;
|
||||
this.parentPage = parentPage;
|
||||
this.section = section;
|
||||
this.material = material;
|
||||
|
||||
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||
var confirm = new ConfirmIcon();
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"a # b"
|
||||
)
|
||||
.addIngredient('a', new ItemBuilder(CustomFishingPlugin.get()
|
||||
.getItemManager()
|
||||
.getItemStackAppearance(player, material)
|
||||
)
|
||||
.setCustomModelData(section.getInt("custom-model-data", 0))
|
||||
.setDisplayName(String.valueOf(section.getInt("custom-model-data", 0))))
|
||||
.addIngredient('#', border)
|
||||
.addIngredient('b', confirm)
|
||||
.build();
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit CustomModelData")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
cmd = s;
|
||||
confirm.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public class ConfirmIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
if (cmd == null || cmd.isEmpty()) {
|
||||
return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1>● Delete property"
|
||||
)));
|
||||
} else {
|
||||
try {
|
||||
int value = Integer.parseInt(cmd);
|
||||
if (value >= 0) {
|
||||
return new ItemBuilder(
|
||||
CustomFishingPlugin.get()
|
||||
.getItemManager()
|
||||
.getItemStackAppearance(player, material)
|
||||
)
|
||||
.setCustomModelData(value)
|
||||
.setDisplayName("New value: " + value)
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Click to confirm"
|
||||
)));
|
||||
} else {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>● Invalid number"
|
||||
)));
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>● Invalid number"
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (cmd == null || cmd.isEmpty()) {
|
||||
section.set("custom-model-data", null);
|
||||
} else {
|
||||
try {
|
||||
int value = Integer.parseInt(cmd);
|
||||
if (value >= 0) {
|
||||
section.set("custom-model-data", value);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
parentPage.reOpen();
|
||||
parentPage.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package net.momirealms.customfishing.gui.page.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.YamlPage;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.gui.Gui;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.item.Item;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
import xyz.xenondevs.invui.item.impl.SimpleItem;
|
||||
import xyz.xenondevs.invui.window.AnvilWindow;
|
||||
|
||||
public class DisplayNameEditor {
|
||||
|
||||
private final Player player;
|
||||
private final YamlPage parentPage;
|
||||
private String name;
|
||||
private final ConfigurationSection section;
|
||||
|
||||
public DisplayNameEditor(Player player, YamlPage parentPage, ConfigurationSection section) {
|
||||
this.player = player;
|
||||
this.parentPage = parentPage;
|
||||
this.section = section;
|
||||
|
||||
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||
var confirm = new ConfirmIcon();
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"a # b"
|
||||
)
|
||||
.addIngredient('a', new ItemBuilder(Material.NAME_TAG).setDisplayName(section.getString("display.name", "New Name")))
|
||||
.addIngredient('#', border)
|
||||
.addIngredient('b', confirm)
|
||||
.build();
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x a x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', new ItemStack(Material.AIR))
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Display Name")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
name = s;
|
||||
confirm.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public class ConfirmIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
if (name == null || name.isEmpty()) {
|
||||
return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1>● Delete property"
|
||||
)));
|
||||
} else {
|
||||
return new ItemBuilder(Material.NAME_TAG)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
name
|
||||
)))
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Click to confirm"
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (name == null || name.isEmpty()) {
|
||||
section.set("display.name", null);
|
||||
} else {
|
||||
section.set("display.name", name);
|
||||
}
|
||||
parentPage.reOpen();
|
||||
parentPage.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
package net.momirealms.customfishing.gui.page.property;
|
||||
|
||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||
import net.momirealms.customfishing.gui.YamlPage;
|
||||
import net.momirealms.customfishing.gui.icon.BackGroundItem;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import xyz.xenondevs.invui.gui.Gui;
|
||||
import xyz.xenondevs.invui.gui.PagedGui;
|
||||
import xyz.xenondevs.invui.gui.structure.Markers;
|
||||
import xyz.xenondevs.invui.item.Item;
|
||||
import xyz.xenondevs.invui.item.ItemProvider;
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder;
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem;
|
||||
import xyz.xenondevs.invui.item.impl.SimpleItem;
|
||||
import xyz.xenondevs.invui.window.AnvilWindow;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class LoreEditor {
|
||||
|
||||
private final Player player;
|
||||
private final YamlPage parentPage;
|
||||
private final ArrayList<String> lore;
|
||||
private final ConfigurationSection section;
|
||||
private int index;
|
||||
|
||||
public LoreEditor(Player player, YamlPage parentPage, ConfigurationSection section) {
|
||||
this.player = player;
|
||||
this.parentPage = parentPage;
|
||||
this.section = section;
|
||||
this.index = 0;
|
||||
this.lore = new ArrayList<>(section.getStringList("display.lore"));
|
||||
this.lore.add(0, "Select one line");
|
||||
reOpen(0);
|
||||
}
|
||||
|
||||
public void reOpen(int idx) {
|
||||
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||
var confirm = new ConfirmIcon();
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"a # b"
|
||||
)
|
||||
.addIngredient('a', new ItemBuilder(Material.NAME_TAG).setDisplayName(lore.get(idx)))
|
||||
.addIngredient('#', border)
|
||||
.addIngredient('b', confirm)
|
||||
.build();
|
||||
|
||||
var gui = PagedGui.items()
|
||||
.setStructure(
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"x x x x x x x x x",
|
||||
"# # # # c # # # #"
|
||||
)
|
||||
.addIngredient('x', Markers.CONTENT_LIST_SLOT_HORIZONTAL)
|
||||
.addIngredient('c', parentPage.getBackItem())
|
||||
.addIngredient('#', new BackGroundItem())
|
||||
.setContent(getContents())
|
||||
.build();
|
||||
|
||||
var window = AnvilWindow.split()
|
||||
.setViewer(player)
|
||||
.setTitle(new ShadedAdventureComponentWrapper(
|
||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Edit Lore")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
if (index == 0) return;
|
||||
lore.set(index, s);
|
||||
confirm.notifyWindows();
|
||||
})
|
||||
.setUpperGui(upperGui)
|
||||
.setLowerGui(gui)
|
||||
.build();
|
||||
|
||||
window.open();
|
||||
}
|
||||
|
||||
public List<Item> getContents() {
|
||||
ArrayList<Item> items = new ArrayList<>();
|
||||
int i = 1;
|
||||
List<String> subList = lore.subList(1, lore.size());
|
||||
for (String lore : subList) {
|
||||
items.add(new LoreElement(lore, i++));
|
||||
}
|
||||
items.add(new AddLore());
|
||||
return items;
|
||||
}
|
||||
|
||||
public class AddLore extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<green>[+] <gray>Add a new line"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
lore.add("Text");
|
||||
index = lore.size() - 1;
|
||||
reOpen(index);
|
||||
}
|
||||
}
|
||||
|
||||
public class LoreElement extends AbstractItem {
|
||||
|
||||
private final String line;
|
||||
private final int idx;
|
||||
|
||||
public LoreElement(String line, int idx) {
|
||||
this.line = line;
|
||||
this.idx = idx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.PAPER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
line
|
||||
))).addLoreLines("")
|
||||
.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Left click to edit"
|
||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#FF6347> -> Right click to delete"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
if (clickType == ClickType.LEFT) {
|
||||
index = idx;
|
||||
reOpen(idx);
|
||||
} else if (clickType == ClickType.RIGHT) {
|
||||
lore.remove(idx);
|
||||
index = Math.min(index, lore.size() - 1);
|
||||
reOpen(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ConfirmIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
List<String> subList = lore.subList(1, lore.size());
|
||||
if (subList.isEmpty()) {
|
||||
return new ItemBuilder(Material.STRUCTURE_VOID).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00CED1>● Delete property"
|
||||
)));
|
||||
} else {
|
||||
var builder = new ItemBuilder(Material.NAME_TAG)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#00FF7F> -> Click to confirm"
|
||||
)));
|
||||
for (String lore : subList) {
|
||||
builder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
" <gray>-</gray> " + lore
|
||||
)));
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
List<String> subList = lore.subList(1, lore.size());
|
||||
if (lore.isEmpty()) {
|
||||
section.set("display.lore", null);
|
||||
} else {
|
||||
section.set("display.lore", subList);
|
||||
}
|
||||
parentPage.reOpen();
|
||||
parentPage.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -62,6 +62,7 @@ import org.bukkit.event.player.PlayerItemMendEvent;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -358,6 +359,37 @@ public class ItemManagerImpl implements ItemManager, Listener {
|
||||
return nbtItem.getItem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStackAppearance(Player player, String material) {
|
||||
if (material != null) {
|
||||
if (material.contains(":")) {
|
||||
ItemStack itemStack = buildAnyPluginItemByID(player, material);
|
||||
if (itemStack != null) {
|
||||
ItemStack stack = new ItemStack(itemStack.getType());
|
||||
ItemMeta meta = stack.getItemMeta();
|
||||
meta.setCustomModelData(itemStack.getItemMeta().getCustomModelData());
|
||||
stack.setItemMeta(meta);
|
||||
return stack;
|
||||
} else {
|
||||
return new ItemStack(Material.BARRIER);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
var m = Material.valueOf(material.toUpperCase(Locale.ENGLISH));
|
||||
if (m.isItem()) {
|
||||
return new ItemStack(m);
|
||||
} else {
|
||||
return new ItemStack(Material.BARRIER);
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
return new ItemStack(Material.BARRIER);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return new ItemStack(Material.STRUCTURE_VOID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register an item library.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user