mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-21 16:09:34 +00:00
editor
This commit is contained in:
@@ -133,6 +133,8 @@ public interface ItemManager {
|
|||||||
@Nullable
|
@Nullable
|
||||||
BuildableItem getBuildableItem(String namespace, String value);
|
BuildableItem getBuildableItem(String namespace, String value);
|
||||||
|
|
||||||
|
ItemStack getItemStackAppearance(Player player, String material);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register an item library.
|
* Register an item library.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package net.momirealms.customfishing.command.sub;
|
|||||||
|
|
||||||
import dev.jorel.commandapi.CommandAPICommand;
|
import dev.jorel.commandapi.CommandAPICommand;
|
||||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||||
import net.momirealms.customfishing.gui.SelectFileGUI;
|
import net.momirealms.customfishing.gui.page.file.FileSelector;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ public class GUIEditorCommand {
|
|||||||
public CommandAPICommand getEditorCommand() {
|
public CommandAPICommand getEditorCommand() {
|
||||||
return new CommandAPICommand("edit")
|
return new CommandAPICommand("edit")
|
||||||
.executesPlayer((player, arg) -> {
|
.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(
|
CustomEntity customEntity = CustomEntity.spawn(
|
||||||
id,
|
id,
|
||||||
location,
|
location,
|
||||||
(Boolean) propertyMap.get("frustumCulling"),
|
(Boolean) propertyMap.getOrDefault("frustumCulling", true),
|
||||||
(Boolean) propertyMap.get("noBase"),
|
(Boolean) propertyMap.getOrDefault("noBase", false),
|
||||||
(Boolean) propertyMap.get("noHitbox")
|
(Boolean) propertyMap.getOrDefault("noHitbox", false)
|
||||||
);
|
);
|
||||||
return customEntity.getEntity();
|
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;
|
package net.momirealms.customfishing.gui.icon;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.gui.Icon;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
@@ -13,7 +14,7 @@ public class BackGroundItem extends AbstractItem implements Icon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemProvider getItemProvider() {
|
public ItemProvider getItemProvider() {
|
||||||
return new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE);
|
return new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).setDisplayName("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ package net.momirealms.customfishing.gui.icon;
|
|||||||
|
|
||||||
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
import net.momirealms.customfishing.adventure.AdventureManagerImpl;
|
||||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
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.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
@@ -15,7 +16,7 @@ import xyz.xenondevs.invui.item.impl.AbstractItem;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class BackToFolderItem extends AbstractItem implements Icon {
|
public class BackToFolderItem extends AbstractItem implements Icon {
|
||||||
|
|
||||||
private final File file;
|
private final File file;
|
||||||
|
|
||||||
@@ -41,6 +42,6 @@ public class BackToFolderItem extends AbstractItem implements Icon {
|
|||||||
@Override
|
@Override
|
||||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||||
if (file != null && file.getPath().startsWith("plugins\\CustomFishing\\contents"))
|
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;
|
package net.momirealms.customfishing.gui.icon;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.gui.Icon;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import xyz.xenondevs.invui.gui.PagedGui;
|
import xyz.xenondevs.invui.gui.PagedGui;
|
||||||
import xyz.xenondevs.invui.item.ItemProvider;
|
import xyz.xenondevs.invui.item.ItemProvider;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.customfishing.gui.icon;
|
package net.momirealms.customfishing.gui.icon;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.gui.Icon;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import xyz.xenondevs.invui.gui.PagedGui;
|
import xyz.xenondevs.invui.gui.PagedGui;
|
||||||
import xyz.xenondevs.invui.item.ItemProvider;
|
import xyz.xenondevs.invui.item.ItemProvider;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.customfishing.gui.icon;
|
package net.momirealms.customfishing.gui.icon;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.gui.Icon;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import xyz.xenondevs.invui.gui.ScrollGui;
|
import xyz.xenondevs.invui.gui.ScrollGui;
|
||||||
import xyz.xenondevs.invui.item.ItemProvider;
|
import xyz.xenondevs.invui.item.ItemProvider;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package net.momirealms.customfishing.gui.icon;
|
package net.momirealms.customfishing.gui.icon;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.gui.Icon;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import xyz.xenondevs.invui.gui.ScrollGui;
|
import xyz.xenondevs.invui.gui.ScrollGui;
|
||||||
import xyz.xenondevs.invui.item.ItemProvider;
|
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.AdventureManagerImpl;
|
||||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
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.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
@@ -23,9 +28,9 @@ import java.io.File;
|
|||||||
import java.util.ArrayDeque;
|
import java.util.ArrayDeque;
|
||||||
import java.util.Deque;
|
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();
|
File[] files = folder.listFiles();
|
||||||
Deque<Item> items = new ArrayDeque<>();
|
Deque<Item> items = new ArrayDeque<>();
|
||||||
if (files != null) {
|
if (files != null) {
|
||||||
@@ -94,7 +99,7 @@ public class SelectFileGUI {
|
|||||||
String type = split[3];
|
String type = split[3];
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "item" -> {
|
case "item" -> {
|
||||||
new ItemEditor(player, file);
|
new ItemSelector(player, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,7 +122,7 @@ public class SelectFileGUI {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
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.AdventureManagerImpl;
|
||||||
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
import net.momirealms.customfishing.adventure.component.ShadedAdventureComponentWrapper;
|
||||||
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
import net.momirealms.customfishing.api.CustomFishingPlugin;
|
||||||
import net.momirealms.customfishing.api.util.LogUtils;
|
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.BackGroundItem;
|
||||||
import net.momirealms.customfishing.gui.icon.BackToFolderItem;
|
import net.momirealms.customfishing.gui.icon.BackToFolderItem;
|
||||||
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
import net.momirealms.customfishing.gui.icon.NextPageItem;
|
||||||
@@ -33,29 +34,35 @@ import java.util.List;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
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 Player player;
|
||||||
private final YamlConfiguration yaml;
|
private final YamlConfiguration yaml;
|
||||||
private String prefix;
|
private String prefix;
|
||||||
private final File file;
|
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.yaml = YamlConfiguration.loadConfiguration(file);
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.file = file;
|
this.file = file;
|
||||||
this.prefix = SEARCH;
|
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));
|
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||||
Gui upperGui = Gui.normal()
|
Gui upperGui = Gui.normal()
|
||||||
.setStructure(
|
.setStructure(
|
||||||
"a # #"
|
"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)
|
.addIngredient('#', border)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@@ -74,16 +81,18 @@ public class ItemEditor {
|
|||||||
.setContent(getItemList())
|
.setContent(getItemList())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
var temp = prefix;
|
|
||||||
var window = AnvilWindow.split()
|
var window = AnvilWindow.split()
|
||||||
.setViewer(player)
|
.setViewer(player)
|
||||||
.setTitle(new ShadedAdventureComponentWrapper(
|
.setTitle(new ShadedAdventureComponentWrapper(
|
||||||
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Select item to edit")
|
AdventureManagerImpl.getInstance().getComponentFromMiniMessage("Select item to edit")
|
||||||
))
|
))
|
||||||
.addRenameHandler(s -> {
|
.addRenameHandler(s -> {
|
||||||
if (s.equals(temp)) return;
|
long current = System.currentTimeMillis();
|
||||||
|
if (current - coolDown < 100) return;
|
||||||
|
if (s.equals(filter)) return;
|
||||||
prefix = s;
|
prefix = s;
|
||||||
reOpenWithFilter();
|
coolDown = current;
|
||||||
|
reOpenWithFilter(s);
|
||||||
})
|
})
|
||||||
.setUpperGui(upperGui)
|
.setUpperGui(upperGui)
|
||||||
.setLowerGui(gui)
|
.setLowerGui(gui)
|
||||||
@@ -126,6 +135,7 @@ public class ItemEditor {
|
|||||||
yaml.set(key, null);
|
yaml.set(key, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void save() {
|
public void save() {
|
||||||
try {
|
try {
|
||||||
yaml.save(file);
|
yaml.save(file);
|
||||||
@@ -138,33 +148,34 @@ public class ItemEditor {
|
|||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
private final ItemBuilder itemBuilder;
|
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.key = key;
|
||||||
this.itemBuilder = itemBuilder;
|
this.itemBuilder = itemBuilder.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||||
this.itemEditor = itemEditor;
|
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
|
@Override
|
||||||
public ItemProvider getItemProvider() {
|
public ItemProvider getItemProvider() {
|
||||||
return itemBuilder.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
return itemBuilder;
|
||||||
key
|
|
||||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
|
||||||
"<green>Left click to edit"
|
|
||||||
))).addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
|
||||||
"<red>Right click to delete"
|
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||||
if (clickType.isLeftClick()) {
|
if (clickType.isLeftClick()) {
|
||||||
|
new ItemEditor(player, key, itemSelector, itemSelector.yaml.getConfigurationSection(key));
|
||||||
} else if (clickType.isRightClick()) {
|
} else if (clickType.isRightClick()) {
|
||||||
this.itemEditor.removeKey(key);
|
this.itemSelector.removeKey(key);
|
||||||
this.itemEditor.save();
|
this.itemSelector.save();
|
||||||
this.itemEditor.reOpenWithFilter();
|
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.ItemFlag;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.Damageable;
|
import org.bukkit.inventory.meta.Damageable;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -358,6 +359,37 @@ public class ItemManagerImpl implements ItemManager, Listener {
|
|||||||
return nbtItem.getItem();
|
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.
|
* Register an item library.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user