All source projects
MrUltimateLibrary Source
Standalone source project / 68 files
MrUltimateLibrary is the backbone of all my plugins; it offers features that facilitate plugin creation, maintenance, and updates.
java
MrUltimateLibrary/src/main/java/eu/mrneznamy/mrultimatelibrary/gui/MrLibFormFallback.java
JAVA · Read-only source
package eu.mrneznamy.mrultimatelibrary.gui;
import eu.mrneznamy.mrultimatelibrary.utils.MrLibColors;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import eu.mrneznamy.mrultimatelibrary.MrUltimateLibrary;
import eu.mrneznamy.mrultimatelibrary.MrLibRegisterPlugin;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Consumer;
/**
* Robust fallback for MrLibForm using Chest GUIs and Chat Input.
*/
public class MrLibFormFallback {
private final String title;
private final List<MrLibForm.FormElement> elements;
private final Consumer<MrLibForm.FormResult> onSubmit;
private final Runnable onCancel;
public MrLibFormFallback(String title, List<MrLibForm.FormElement> elements, Consumer<MrLibForm.FormResult> onSubmit, Runnable onCancel) {
this.title = title;
this.elements = elements;
this.onSubmit = onSubmit;
this.onCancel = onCancel;
}
public void open(Player player) {
MrLibForm.FormElement textElement = null;
for (MrLibForm.FormElement el : elements) {
if (el.type == MrLibForm.FormElementType.TEXT) {
textElement = el;
break;
}
}
if (textElement != null) {
openChatFallback(player, textElement);
return;
}
openChestFallback(player);
}
private void openChatFallback(Player player, MrLibForm.FormElement element) {
player.closeInventory();
player.sendMessage("");
player.sendMessage(MrLibColors.colorize("&b&l" + title));
for (MrLibForm.FormElement el : elements) {
if (el.type == MrLibForm.FormElementType.MESSAGE && el.label != null) {
player.sendMessage(MrLibColors.colorize("&7" + el.label));
}
}
player.sendMessage(MrLibColors.colorize("&7" + element.label + ":"));
player.sendMessage(MrLibColors.colorize("&7(Type your answer in chat, or type 'cancel' to exit)"));
player.sendMessage("");
UUID uuid = player.getUniqueId();
final org.bukkit.plugin.Plugin pluginInstance = getPlugin();
Listener listener = new Listener() {
@EventHandler(priority = EventPriority.LOWEST)
public void onChat(AsyncPlayerChatEvent event) {
if (!event.getPlayer().getUniqueId().equals(uuid)) return;
event.setCancelled(true);
String message = event.getMessage();
Bukkit.getScheduler().runTask(pluginInstance, () -> {
AsyncPlayerChatEvent.getHandlerList().unregister(this);
if (message.equalsIgnoreCase("cancel")) {
if (onCancel != null) onCancel.run();
player.sendMessage(MrLibColors.colorize("&cInput cancelled."));
} else {
MrLibForm.FormResult result = new MrLibForm.FormResult();
result.put(element.id, message);
if (onSubmit != null) onSubmit.accept(result);
}
});
}
};
Bukkit.getPluginManager().registerEvents(listener, pluginInstance);
}
private org.bukkit.plugin.Plugin getPlugin() {
org.bukkit.plugin.Plugin plugin = MrUltimateLibrary.getInstance();
if (plugin == null) {
try {
plugin = org.bukkit.plugin.java.JavaPlugin.getProvidingPlugin(MrLibFormFallback.class);
} catch (Throwable t) {
try {
plugin = Bukkit.getPluginManager().getPlugins()[0];
} catch (Throwable ignored) {}
}
}
return plugin;
}
private void openChestFallback(Player player) {
int rows = Math.min(6, (elements.size() / 9) + 1);
MrLibGUI gui = new MrLibGUI(title, rows);
int slot = 0;
for (MrLibForm.FormElement element : elements) {
if (slot >= gui.getSize() - 1) break;
ItemStack item = new ItemStack(Material.PAPER);
ItemMeta meta = item.getItemMeta();
if (meta != null) {
meta.setDisplayName(MrLibColors.colorize("&b" + element.label));
item.setItemMeta(meta);
}
gui.setItem(slot++, item);
}
ItemStack submit = new ItemStack(Material.EMERALD_BLOCK);
ItemMeta sMeta = submit.getItemMeta();
if (sMeta != null) {
sMeta.setDisplayName(MrLibColors.colorize("&a&lSUBMIT"));
submit.setItemMeta(sMeta);
}
gui.setItem(gui.getSize() - 1, submit, e -> {
MrLibForm.FormResult result = new MrLibForm.FormResult();
if (onSubmit != null) onSubmit.accept(result);
player.closeInventory();
});
gui.open(player);
}
}
148 linesGNU GENERAL PUBLIC LICENSE · Version 3, 29 June 2007 · UTF-8 · Read only