Instantly share code, notes, and snippets.
Last active
July 16, 2019 22:00
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save WouterG/1f7428de7d292aafeeeac83c4ec8a721 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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