9
0
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:
XiaoMoMi
2023-10-10 23:18:15 +08:00
parent 25340f59aa
commit ca19b99768
5 changed files with 368 additions and 5 deletions

View File

@@ -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();
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -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;
}

View File

@@ -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();
}
}
}

View File

@@ -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"
)));
}