mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-26 10:29:16 +00:00
enchantments
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package net.momirealms.customfishing.gui.icon.property.item;
|
||||
|
||||
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.EnchantmentEditor;
|
||||
import net.momirealms.customfishing.gui.page.property.SizeEditor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
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;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class EnchantmentItem extends AbstractItem {
|
||||
|
||||
private final ItemPage itemPage;
|
||||
|
||||
public EnchantmentItem(ItemPage itemPage) {
|
||||
this.itemPage = itemPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
ItemBuilder itemBuilder = new ItemBuilder(Material.IRON_HOE)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#8A2BE2>● Enchantment"
|
||||
)))
|
||||
.addEnchantment(Enchantment.ARROW_FIRE,1,true)
|
||||
.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
|
||||
if (itemPage.getSection().contains("enchantments")) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<gray>Current value: "
|
||||
)));
|
||||
|
||||
for (Map.Entry<String, Object> entry : itemPage.getSection().getConfigurationSection("enchantments").getValues(false).entrySet()) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
" <gray>- <white>" + entry.getKey() + ":" + entry.getValue()
|
||||
)));
|
||||
}
|
||||
|
||||
itemBuilder.addLoreLines("").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 EnchantmentEditor(player, itemPage, itemPage.getSection(), false);
|
||||
} else if (clickType.isRightClick()) {
|
||||
itemPage.getSection().set("enchantments", null);
|
||||
itemPage.save();
|
||||
itemPage.reOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package net.momirealms.customfishing.gui.icon.property.item;
|
||||
|
||||
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.EnchantmentEditor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
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;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class StoredEnchantmentItem extends AbstractItem {
|
||||
|
||||
private final ItemPage itemPage;
|
||||
|
||||
public StoredEnchantmentItem(ItemPage itemPage) {
|
||||
this.itemPage = itemPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
ItemBuilder itemBuilder = new ItemBuilder(Material.ENCHANTED_BOOK)
|
||||
.setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<#6A5ACD>● Stored Enchantment"
|
||||
)))
|
||||
.addEnchantment(Enchantment.ARROW_FIRE,1,true)
|
||||
.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||
|
||||
if (itemPage.getSection().contains("stored-enchantments")) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<gray>Current value: "
|
||||
)));
|
||||
|
||||
for (Map.Entry<String, Object> entry : itemPage.getSection().getConfigurationSection("stored-enchantments").getValues(false).entrySet()) {
|
||||
itemBuilder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
" <gray>- <white>" + entry.getKey() + ":" + entry.getValue()
|
||||
)));
|
||||
}
|
||||
|
||||
itemBuilder.addLoreLines("").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 EnchantmentEditor(player, itemPage, itemPage.getSection(), true);
|
||||
} else if (clickType.isRightClick()) {
|
||||
itemPage.getSection().set("stored-enchantments", null);
|
||||
itemPage.save();
|
||||
itemPage.reOpen();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ 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;
|
||||
@@ -46,13 +47,12 @@ public class ItemEditor implements ItemPage {
|
||||
|
||||
@Override
|
||||
public void reOpen() {
|
||||
Item border = new SimpleItem(new ItemBuilder(Material.AIR));
|
||||
Gui upperGui = Gui.normal()
|
||||
.setStructure(
|
||||
"# a #"
|
||||
)
|
||||
.addIngredient('a', new RefreshExample())
|
||||
.addIngredient('#', border)
|
||||
.addIngredient('#', new ItemStack(Material.AIR))
|
||||
.build();
|
||||
|
||||
var gui = PagedGui.items()
|
||||
@@ -124,6 +124,8 @@ public class ItemEditor implements ItemPage {
|
||||
items.add(new ItemFlagItem(this));
|
||||
items.add(new Head64Item(this));
|
||||
items.add(new NBTItem(this));
|
||||
items.add(new EnchantmentItem(this));
|
||||
items.add(new StoredEnchantmentItem(this));
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
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;
|
||||
import java.util.Map;
|
||||
|
||||
public class EnchantmentEditor {
|
||||
|
||||
private final Player player;
|
||||
private final YamlPage parentPage;
|
||||
private final ArrayList<String> enchantments;
|
||||
private final ConfigurationSection section;
|
||||
private int index;
|
||||
private boolean store;
|
||||
|
||||
public EnchantmentEditor(Player player, YamlPage parentPage, ConfigurationSection section, boolean store) {
|
||||
this.player = player;
|
||||
this.parentPage = parentPage;
|
||||
this.section = section;
|
||||
this.store = store;
|
||||
this.index = 0;
|
||||
this.enchantments = new ArrayList<>();
|
||||
this.enchantments.add("Select one enchantment");
|
||||
ConfigurationSection eSection = section.getConfigurationSection(store ? "stored-enchantments" : "enchantments");
|
||||
if (eSection != null)
|
||||
for (Map.Entry<String, Object> entry : eSection.getValues(false).entrySet()) {
|
||||
this.enchantments.add(entry.getKey() + ":" + entry.getValue());
|
||||
}
|
||||
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(enchantments.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" + (store ? " Stored ": " ") + "Enchantment")
|
||||
))
|
||||
.addRenameHandler(s -> {
|
||||
if (index == 0) return;
|
||||
enchantments.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 = enchantments.subList(1, enchantments.size());
|
||||
for (String lore : subList) {
|
||||
items.add(new EnchantmentElement(lore, i++));
|
||||
}
|
||||
items.add(new AddEnchantment());
|
||||
return items;
|
||||
}
|
||||
|
||||
public class AddEnchantment extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<green>[+] <gray>Add a new enchantment"
|
||||
)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
enchantments.add("namespace:enchantment:level");
|
||||
index = enchantments.size() - 1;
|
||||
reOpen(index);
|
||||
}
|
||||
}
|
||||
|
||||
public class EnchantmentElement extends AbstractItem {
|
||||
|
||||
private final String line;
|
||||
private final int idx;
|
||||
|
||||
public EnchantmentElement(String line, int idx) {
|
||||
this.line = line;
|
||||
this.idx = idx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ENCHANTED_BOOK).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) {
|
||||
enchantments.remove(idx);
|
||||
index = Math.min(index, enchantments.size() - 1);
|
||||
reOpen(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ConfirmIcon extends AbstractItem {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
List<String> subList = enchantments.subList(1, enchantments.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 enchantment : subList) {
|
||||
String[] split = enchantment.split(":");
|
||||
if (split.length != 3) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>● Illegal format"
|
||||
)));
|
||||
}
|
||||
try {
|
||||
Integer.parseInt(split[2]);
|
||||
builder.addLoreLines(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
" <gray>-</gray> " + enchantment
|
||||
)));
|
||||
} catch (NumberFormatException e) {
|
||||
return new ItemBuilder(Material.BARRIER).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"<red>● Illegal format"
|
||||
)));
|
||||
}
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) {
|
||||
List<String> subList = enchantments.subList(1, enchantments.size());
|
||||
for (String line : subList) {
|
||||
String[] split = line.split(":");
|
||||
if (split.length != 3) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Integer.parseInt(split[2]);
|
||||
} catch (NumberFormatException e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
section.set(store ? "stored-enchantments" : "enchantments", null);
|
||||
for (String line : subList) {
|
||||
String[] split = line.split(":");
|
||||
section.set((store ? "stored-enchantments" : "enchantments") + "." + split[0] + ":" + split[1], Integer.parseInt(split[2]));
|
||||
}
|
||||
parentPage.reOpen();
|
||||
parentPage.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -416,7 +416,7 @@ public class NBTEditor {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
return new ItemBuilder(Material.OAK_SIGN).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Add a new compound"
|
||||
)));
|
||||
}
|
||||
@@ -431,7 +431,7 @@ public class NBTEditor {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
return new ItemBuilder(Material.SPRUCE_SIGN).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Add a new list"
|
||||
)));
|
||||
}
|
||||
@@ -446,7 +446,7 @@ public class NBTEditor {
|
||||
|
||||
@Override
|
||||
public ItemProvider getItemProvider() {
|
||||
return new ItemBuilder(Material.ANVIL).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
return new ItemBuilder(Material.ACACIA_SIGN).setDisplayName(new ShadedAdventureComponentWrapper(AdventureManagerImpl.getInstance().getComponentFromMiniMessage(
|
||||
"Add a new value"
|
||||
)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user