Skip to content

Instantly share code, notes, and snippets.

@WouterG
Last active July 16, 2019 22:00
Show Gist options
  • Save WouterG/1f7428de7d292aafeeeac83c4ec8a721 to your computer and use it in GitHub Desktop.
Save WouterG/1f7428de7d292aafeeeac83c4ec8a721 to your computer and use it in GitHub Desktop.
import net.menoni.rd.RuntimeDebugger;
import net.menoni.rd.model.Debugger;
import net.menoni.wimlex.addons.Beans;
import net.menoni.wimlex.addons.menu.wimlexcmd.WimlexMenuBase;
import net.menoni.wimlex.addons.model.WPlayer;
import net.menoni.wimlex.core.beans.player.MenuHelper;
import net.menoni.wimlex.core.beans.singleton.MessageSource;
import net.menoni.wimlex.core.menu.base.*;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FullEnchantMenu extends WimlexMenuBase implements Debugger {
@Override
public void debug(RuntimeDebugger plugin, CommandSender cs) {
if (!(cs instanceof Player)) {
return;
}
Player p = (Player) cs;
WPlayer wp = Beans.getPlugin().getPlayer(p.getUniqueId());
MessageSource messageSource = Beans.getBean(MessageSource.class);
MenuHelper playerMenuHelper = Beans.getPlayerMenuHelper(p);
playerMenuHelper.showMenu(() -> enchantmentPickerMenu(messageSource, p, wp));
}
private static Menu enchantmentLevelPickerMenu(Enchantment enchantment, MessageSource bean, Player player, WPlayer wPlayer) {
Menu menu = new Menu(MENU_NAME_ENCHANTMENT_LEVELS, bean.getMessage(wPlayer, factorEnchantmentLevelTranslation("menu-title")));
for (int i = 0; i <= 10; i++) {
final int fI = i;
menu.setItemProvider(i, () -> {
ItemStack is = player.getInventory().getItemInMainHand();
Integer level = is.getEnchantments().get(enchantment);
boolean hasEnchant = true;
boolean isLevel = false;
boolean isLevelPossible = true;
if (level == null) {
hasEnchant = false;
} else {
isLevel = fI == level;
}
if (fI > enchantment.getMaxLevel()) {
isLevelPossible = false;
}
ColoredText[] lore = new ColoredText[0];
if (isLevel) {
lore = new ColoredText[] {
ColoredText.translated(ChatColor.GREEN, factorEnchantmentLevelTranslation("current-level"))
};
if (!isLevelPossible) {
lore = new ColoredText[] {
ColoredText.translated(ChatColor.GREEN, factorEnchantmentLevelTranslation("current-level")),
ColoredText.translated(ChatColor.RED, factorEnchantmentLevelTranslation("non-possible-level"))
};
}
} else if (!isLevelPossible) {
lore = new ColoredText[] {
ColoredText.translated(ChatColor.RED, factorEnchantmentLevelTranslation("non-possible-level"))
};
}
Material mat = isLevel ? Material.BOOK : Material.ENCHANTED_BOOK;
if (fI == 0) {
mat = Material.PAPER;
}
return new MenuItem(
new MenuItemData(
"enchantmentLevelPicker-" + (fI),
new ItemStack(mat, fI == 0 ? 1 : fI),
ColoredText.translated(
MenuButton.getButtonTextColor(hasEnchant && isLevel), bean.getMessage(wPlayer, fI > 0 ? factorEnchantmentLevelTranslation("level") : factorEnchantmentLevelTranslation("remove-level"), Integer.toString(fI))),
lore
).setData(fI),
new MenuDestination(
MenuAction.EXECUTE,
id -> {
int setLevel = (int) id.getData();
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getEnchantments().containsKey(enchantment)) {
item.removeEnchantment(enchantment);
}
if (setLevel > 0) {
item.addUnsafeEnchantment(enchantment, setLevel);
}
}
)
);
});
}
menu.setItemProvider(17, () -> new MenuItem(
new MenuItemData(
"enchantmentLevelPickerBack",
new ItemStack(Material.BARRIER, 1),
ColoredText.translated(ChatColor.RED, factorGenericMenuTranslation("back"))
),
new MenuDestination(MenuAction.NONE).setGoBack(true)
));
return menu;
}
private static Menu enchantmentPickerMenu(MessageSource bean, Player player, WPlayer wPlayer) {
ItemStack mainHand = player.getInventory().getItemInMainHand();
List<Enchantment> enchantmentList = new ArrayList<>(Arrays.asList(Enchantment.values()));
Menu menu = new Menu(MENU_NAME_ENCHANTMENTS, bean.getMessage(wPlayer, factorEnchantmentChooserTranslation("menu-title")));
int position = 0;
for (Enchantment enchantment : enchantmentList) {
menu.setItemProvider(position++, () -> {
boolean hasEnchantment = mainHand.getEnchantments().containsKey(enchantment);
return new MenuItem(
new MenuItemData(
"enchantmentPicker-" + enchantment.getKey().getKey(),
new ItemStack(Material.ENCHANTED_BOOK, 1),
new ColoredText(MenuButton.getButtonTextColor(hasEnchantment), enchantment.getName())
),
new MenuDestination(MenuAction.OPEN_OTHER_MENU, enchantmentLevelPickerMenu(enchantment, bean, player, wPlayer))
);
});
}
if (position % 9 == 0) {
position+=9;
}
while (position % 9 > 0) {
position++;
}
position--;
menu.setItemProvider(position, () -> new MenuItem(
new MenuItemData("enchantmentMenuClose", new ItemStack(Material.BARRIER, 1), ColoredText.translated(ChatColor.RED, factorGenericMenuTranslation("back"))),
new MenuDestination(MenuAction.NONE).setGoBack(true)
));
return menu;
}
private static MenuItem disabledEnchantmentPicker(MessageSource bean, Player player, WPlayer wPlayer) {
ColoredText[] lore;
if (!player.isOp() && !wPlayer.isAdmin()) {
lore = new ColoredText[] {
ColoredText.translated(ChatColor.YELLOW, factorEnchantmentChooserTranslation("no-permission", 1)),
ColoredText.translated(ChatColor.YELLOW, factorEnchantmentChooserTranslation("no-permission", 2))
};
} else {
lore = new ColoredText[] {
ColoredText.translated(ChatColor.YELLOW, factorEnchantmentChooserTranslation("no-possible-enchants-description", 1)),
ColoredText.translated(ChatColor.YELLOW, factorEnchantmentChooserTranslation("no-possible-enchants-description", 2))
};
}
return new MenuItem(
new MenuItemData(
"disabledEnchantmentPicker",
new ItemStack(Material.BOOK, 1),
ColoredText.translated(ChatColor.GRAY, factorEnchantmentChooserTranslation("item-title")),
lore
),
new MenuDestination(MenuAction.NONE)
);
}
private static MenuItem enchantmentPickerIcon(MessageSource bean, Player player, WPlayer wPlayer) {
ItemStack mainHand = player.getInventory().getItemInMainHand();
if ((!player.isOp() && !wPlayer.isAdmin()) || mainHand.getType() == Material.AIR) {
return disabledEnchantmentPicker(bean, player, wPlayer);
}
List<Enchantment> enchantmentList = new ArrayList<>();
for (Enchantment value : Enchantment.values()) {
if (value.canEnchantItem(mainHand)) {
enchantmentList.add(value);
}
}
if (enchantmentList.isEmpty() && mainHand.getType() != Material.DEBUG_STICK) {
return disabledEnchantmentPicker(bean, player, wPlayer);
}
return new MenuItem(
new MenuItemData(
"enchantmentPicker",
new ItemStack(Material.ENCHANTED_BOOK, 1),
ColoredText.translated(ChatColor.GREEN, factorEnchantmentChooserTranslation("item-title")),
ColoredText.translated(ChatColor.YELLOW, factorEnchantmentChooserTranslation("item-description", 1)),
ColoredText.translated(ChatColor.YELLOW, factorEnchantmentChooserTranslation("item-description", 2))
),
new MenuDestination(MenuAction.OPEN_OTHER_MENU, enchantmentPickerMenu(bean, player, wPlayer))
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment