Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ java {
}

group = 'me.playbosswar.com'
version = '8.13.1'
version = '8.13.2'
description = 'CommandTimer'

repositories {
Expand Down Expand Up @@ -74,7 +74,7 @@ publishing {
maven(MavenPublication) {
groupId = 'me.playbosswar.com'
artifactId = 'commandtimer'
version = '8.13.1'
version = '8.13.2'

from components.java
}
Expand Down
4 changes: 2 additions & 2 deletions java17-build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ java {


group = 'me.playbosswar.com'
version = '8.13.1'
version = '8.13.2'
description = 'CommandTimer'

repositories {
Expand Down Expand Up @@ -63,7 +63,7 @@ publishing {
maven(MavenPublication) {
groupId = 'me.playbosswar.com'
artifactId = 'commandtimer-java17'
version = '8.13.1'
version = '8.13.2'

from components.java
}
Expand Down
4 changes: 2 additions & 2 deletions java21-build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ java {


group = 'me.playbosswar.com'
version = '8.13.1'
version = '8.13.2'
description = 'CommandTimer'

repositories {
Expand Down Expand Up @@ -67,7 +67,7 @@ publishing {
maven(MavenPublication) {
groupId = 'me.playbosswar.com'
artifactId = 'commandtimer-java21'
version = '8.13.1'
version = '8.13.2'
from components.java
}
}
Expand Down
118 changes: 118 additions & 0 deletions src/main/java/me/playbosswar/com/gui/TextInputManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package me.playbosswar.com.gui;

import me.playbosswar.com.CommandTimerPlugin;
import me.playbosswar.com.language.LanguageKey;
import me.playbosswar.com.language.LanguageManager;
import me.playbosswar.com.utils.Callback;
import org.bukkit.Bukkit;
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.event.player.PlayerQuitEvent;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class TextInputManager implements Listener {
private static TextInputManager instance;
private final Map<UUID, TextInputPrompt> activePrompts = new HashMap<>();
private final LanguageManager languageManager = CommandTimerPlugin.getLanguageManager();

public static TextInputManager getInstance() {
if (instance == null) {
instance = new TextInputManager();
}
return instance;
}

private TextInputManager() {
Bukkit.getPluginManager().registerEvents(this, CommandTimerPlugin.getPlugin());
}

public void startTextInput(Player player, String prompt, Callback<String> callback) {
startTextInput(player, prompt, callback, null);
}

public void startTextInput(Player player, LanguageKey languageKey, Callback<String> callback) {
startTextInput(player, languageManager.get(languageKey), callback, null);
}

public void startTextInput(Player player, String prompt, Callback<String> callback, Callback<Void> cancelCallback) {
UUID playerId = player.getUniqueId();

if (activePrompts.containsKey(playerId)) {
activePrompts.remove(playerId);
}

TextInputPrompt textPrompt = new TextInputPrompt(prompt, callback, cancelCallback);
activePrompts.put(playerId, textPrompt);

player.sendMessage("§6" + prompt);
player.sendMessage("§7" + languageManager.get(LanguageKey.TEXT_INPUT_CANCEL_HINT));
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
UUID playerId = player.getUniqueId();

if (!activePrompts.containsKey(playerId)) {
return;
}

event.setCancelled(true);

TextInputPrompt prompt = activePrompts.remove(playerId);
String input = event.getMessage();

if (input.equalsIgnoreCase("cancel") || input.equalsIgnoreCase("exit")) {
if (prompt.getCancelCallback() != null) {
prompt.getCancelCallback().execute(null);
}
player.sendMessage("§c" + languageManager.get(LanguageKey.TEXT_INPUT_CANCELLED));
return;
}

CommandTimerPlugin.getScheduler().runTask(() -> prompt.getCallback().execute(input));
}

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
activePrompts.remove(event.getPlayer().getUniqueId());
}

public boolean hasActivePrompt(Player player) {
return activePrompts.containsKey(player.getUniqueId());
}

public void cancelPrompt(Player player) {
activePrompts.remove(player.getUniqueId());
}

private static class TextInputPrompt {
private final String prompt;
private final Callback<String> callback;
private final Callback<Void> cancelCallback;

public TextInputPrompt(String prompt, Callback<String> callback, Callback<Void> cancelCallback) {
this.prompt = prompt;
this.callback = callback;
this.cancelCallback = cancelCallback;
}

public String getPrompt() {
return prompt;
}

public Callback<String> getCallback() {
return callback;
}

public Callback<Void> getCancelCallback() {
return cancelCallback;
}
}
}
49 changes: 18 additions & 31 deletions src/main/java/me/playbosswar/com/gui/conditions/ConditionMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@
import me.playbosswar.com.conditionsengine.validations.SimpleCondition;
import me.playbosswar.com.gui.MenuUtils;
import me.playbosswar.com.gui.conditions.inputs.ConditionCompareItem;
import me.playbosswar.com.gui.tasks.general.TextInputConversationPrompt;
import me.playbosswar.com.gui.TextInputManager;
import me.playbosswar.com.language.LanguageKey;
import me.playbosswar.com.language.LanguageManager;
import me.playbosswar.com.tasks.Task;
import me.playbosswar.com.utils.Callback;
import me.playbosswar.com.utils.Items;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

Expand Down Expand Up @@ -145,46 +144,34 @@ public void init(Player player, InventoryContents contents) {
lore);
ClickableItem clickableItem = ClickableItem.of(item, e -> {
if(neededValue.getType() == Double.class) {
ConversationFactory conversationFactory =
new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(data -> {
double text = Double.parseDouble(data);
((ConditionParamField<Double>) conditionParamField).setValue(text);
task.storeInstance();
new ConditionMenu(task, condition, onClose).INVENTORY.open(player);
}));
conversationFactory.buildConversation(player).begin();
player.closeInventory();
TextInputManager.getInstance().startTextInput(player, LanguageKey.TEXT_INPUT_DEFAULT, data -> {
double text = Double.parseDouble(data);
((ConditionParamField<Double>) conditionParamField).setValue(text);
task.storeInstance();
new ConditionMenu(task, condition, onClose).INVENTORY.open(player);
});
return;
}

if(neededValue.getType() == Integer.class) {
ConversationFactory conversationFactory =
new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(data -> {
int text = Integer.parseInt(data);
((ConditionParamField<Integer>) conditionParamField).setValue(text);
task.storeInstance();
new ConditionMenu(task, condition, onClose).INVENTORY.open(player);
}));
conversationFactory.buildConversation(player).begin();
player.closeInventory();
TextInputManager.getInstance().startTextInput(player, LanguageKey.TEXT_INPUT_DEFAULT, data -> {
int text = Integer.parseInt(data);
((ConditionParamField<Integer>) conditionParamField).setValue(text);
task.storeInstance();
new ConditionMenu(task, condition, onClose).INVENTORY.open(player);
});
return;
}

if(neededValue.getType() == String.class) {
ConversationFactory conversationFactory =
new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(text -> {
((ConditionParamField<String>) conditionParamField).setValue(text);
task.storeInstance();
new ConditionMenu(task, condition, onClose).INVENTORY.open(player);
}));
conversationFactory.buildConversation(player).begin();
player.closeInventory();
TextInputManager.getInstance().startTextInput(player, LanguageKey.TEXT_INPUT_DEFAULT, text -> {
((ConditionParamField<String>) conditionParamField).setValue(text);
task.storeInstance();
new ConditionMenu(task, condition, onClose).INVENTORY.open(player);
});
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import me.playbosswar.com.api.events.EventSimpleCondition;
import me.playbosswar.com.conditionsengine.ConditionCompare;
import me.playbosswar.com.gui.HorizontalIteratorWithBorder;
import me.playbosswar.com.gui.tasks.general.TextInputConversationPrompt;
import me.playbosswar.com.gui.TextInputManager;
import me.playbosswar.com.gui.tasks.scheduler.EditSpecificTimeMenu;
import me.playbosswar.com.gui.worlds.WorldSelector;
import me.playbosswar.com.language.LanguageKey;
Expand All @@ -23,7 +23,6 @@
import me.playbosswar.com.utils.Callback;
import me.playbosswar.com.utils.Items;
import org.bukkit.World;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

Expand Down Expand Up @@ -76,55 +75,43 @@ public void init(Player player, InventoryContents contents) {
return ClickableItem.of(item, e -> {
if(e.isLeftClick()) {
if(v.getType() == Double.class) {
ConversationFactory conversationFactory =
new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(data -> {
double text = Double.parseDouble(data);
EventSimpleCondition<Double> simpleCondition =
new EventSimpleCondition<>(v.getName(), text,
ConditionCompare.EQUAL);
condition.setSimpleCondition(simpleCondition);
task.storeInstance();
new ConfigureEventValuesMenu(task, extension, eventExtension, condition, callback).INVENTORY.open(player);
}));
conversationFactory.buildConversation(player).begin();
player.closeInventory();
TextInputManager.getInstance().startTextInput(player, LanguageKey.TEXT_INPUT_DEFAULT, data -> {
double text = Double.parseDouble(data);
EventSimpleCondition<Double> simpleCondition =
new EventSimpleCondition<>(v.getName(), text,
ConditionCompare.EQUAL);
condition.setSimpleCondition(simpleCondition);
task.storeInstance();
new ConfigureEventValuesMenu(task, extension, eventExtension, condition, callback).INVENTORY.open(player);
});
return;
}

if(v.getType() == Integer.class) {
ConversationFactory conversationFactory =
new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(data -> {
int text = Integer.parseInt(data);
EventSimpleCondition<Integer> simpleCondition =
new EventSimpleCondition<>(v.getName(), text,
ConditionCompare.EQUAL);
condition.setSimpleCondition(simpleCondition);
task.storeInstance();
new ConfigureEventValuesMenu(task, extension, eventExtension, condition, callback).INVENTORY.open(player);
}));
conversationFactory.buildConversation(player).begin();
player.closeInventory();
TextInputManager.getInstance().startTextInput(player, LanguageKey.TEXT_INPUT_DEFAULT, data -> {
int text = Integer.parseInt(data);
EventSimpleCondition<Integer> simpleCondition =
new EventSimpleCondition<>(v.getName(), text,
ConditionCompare.EQUAL);
condition.setSimpleCondition(simpleCondition);
task.storeInstance();
new ConfigureEventValuesMenu(task, extension, eventExtension, condition, callback).INVENTORY.open(player);
});
return;
}

if(v.getType() == String.class) {
ConversationFactory conversationFactory =
new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(text -> {
EventSimpleCondition<String> simpleCondition =
new EventSimpleCondition<>(v.getName(), text,
ConditionCompare.EQUAL);
condition.setSimpleCondition(simpleCondition);
task.storeInstance();
new ConfigureEventValuesMenu(task, extension, eventExtension, condition, callback).INVENTORY.open(player);
}));
conversationFactory.buildConversation(player).begin();
player.closeInventory();
TextInputManager.getInstance().startTextInput(player, LanguageKey.TEXT_INPUT_DEFAULT, text -> {
EventSimpleCondition<String> simpleCondition =
new EventSimpleCondition<>(v.getName(), text,
ConditionCompare.EQUAL);
condition.setSimpleCondition(simpleCondition);
task.storeInstance();
new ConfigureEventValuesMenu(task, extension, eventExtension, condition, callback).INVENTORY.open(player);
});
}

if(v.getType() == World.class) {
Expand Down
17 changes: 6 additions & 11 deletions src/main/java/me/playbosswar/com/gui/tasks/EditTaskMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@
import me.playbosswar.com.gui.events.MainEventsMenu;
import me.playbosswar.com.gui.tasks.commands.AllCommandsMenu;
import me.playbosswar.com.gui.tasks.general.GeneralLimitsMenu;
import me.playbosswar.com.gui.tasks.general.TextInputConversationPrompt;
import me.playbosswar.com.gui.TextInputManager;
import me.playbosswar.com.gui.tasks.scheduler.MainScheduleMenu;
import me.playbosswar.com.language.LanguageKey;
import me.playbosswar.com.language.LanguageManager;
import me.playbosswar.com.tasks.Task;
import me.playbosswar.com.utils.Callback;
import me.playbosswar.com.utils.Items;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

Expand All @@ -40,19 +39,15 @@ public EditTaskMenu(Task task) {
public void init(Player player, InventoryContents contents) {
contents.fillBorders(ClickableItem.empty(XMaterial.BLUE_STAINED_GLASS_PANE.parseItem()));

ConversationFactory conversationFactory = new ConversationFactory(CommandTimerPlugin.getPlugin())
.withModality(true)
.withFirstPrompt(new TextInputConversationPrompt(LanguageKey.NEW_TASK_INPUT, text -> {
task.setName(text);
task.storeInstance();
new EditTaskMenu(task).INVENTORY.open(player);
}));

String[] nameLore = languageManager.getList(LanguageKey.CHANGE_TASK_DISPLAY_NAME_LORE).toArray(new String[]{});
ItemStack nameItem = Items.generateItem(LanguageKey.CHANGE_TASK_DISPLAY_NAME_TITLE, XMaterial.PAPER, nameLore);
ClickableItem clickableNameItem = ClickableItem.of(nameItem, e -> {
player.closeInventory();
conversationFactory.buildConversation(player).begin();
TextInputManager.getInstance().startTextInput(player, LanguageKey.NEW_TASK_INPUT, text -> {
task.setName(text);
task.storeInstance();
new EditTaskMenu(task).INVENTORY.open(player);
});
});
contents.set(1, 1, clickableNameItem);

Expand Down
Loading