Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;
public class TitleInput {
private static Map<Player, TitleInput> titles = new HashMap<>();
public static TitleInput getTitleInput(Player player) {
return titles.get(player);
}
public static TitleInput createTitleInput(JavaPlugin plugin, Player player, String firstLine, String secondLine) {
TitleInput result = getTitleInput(player);
if ((result==null)||(result.getTask().isCancelled())) {
result = new TitleInput(plugin, firstLine, secondLine, player);
}else {
result.setFirstLine(firstLine);
result.setSecondLine(secondLine);
}
return result;
}
protected String firstLine,secondLine;
protected Player owner;
protected BukkitTask task;
protected TitleInput(JavaPlugin plugin, String firstLine, String secondLine, Player player) {
Validate.notNull(plugin, "Plugin can not be null");
Validate.notNull(player, "Player can not be null");
Validate.notNull(firstLine, "Text can not be null");
Validate.notNull(secondLine, "Text can not be null");
setFirstLine(firstLine);
setSecondLine(secondLine);
this.owner = player;
titles.put(player, this);
this.task = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
if ((getOwner()==null)||(!getOwner().isOnline())) {
getTask().cancel();
return;
}
getOwner().sendTitle(getFirstLine(), getSecondLine(), 0, 20, 10);
}, 0L, 20L);
}
public Player getOwner() {
return owner;
}
public String getFirstLine() {
return firstLine;
}
public void setFirstLine(String firstLine) {
this.firstLine = ChatColor.translateAlternateColorCodes('&', firstLine);
}
public String getSecondLine() {
return secondLine;
}
public void setSecondLine(String secondLine) {
this.secondLine = ChatColor.translateAlternateColorCodes('&', secondLine);
}
public BukkitTask getTask() {
return task;
}
}
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEvent;
public class TitleEventListener implements Listener{
@EventHandler
public void onInteract(PlayerInteractEvent e) {
if (e.getAction()!=Action.LEFT_CLICK_AIR&&e.getAction()!=Action.LEFT_CLICK_BLOCK) {
return;
}
TitleInput title = TitleInput.getTitleInput(e.getPlayer());
if (title==null) return;
if (title.getTask().isCancelled()) return;
title.getTask().cancel();
e.setCancelled(true);
}
@EventHandler
public void onChat(AsyncPlayerChatEvent e) {
TitleInput title = TitleInput.getTitleInput(e.getPlayer());
if (title==null) return;
if (title.getTask().isCancelled()) return;
title.getTask().cancel();
e.setCancelled(true);
String input = e.getMessage();
//TODO что-то делаем с инпутом
}
}
TitleInput.createTitleInput(Твой плагин, player, "&eВведите имя", "&8ЛКМ для &cотмены");
Глупости какие, зачем отправлять постоянно тайтл, если можно время указать оч большое, а когда нужно убрать тайтл?Шедулер с циклом, который показывает игроку тайтл.
Два ивента - на левый клик а на слово в чат, оба отменяют шедулер, второе еще подтягивает метод создания клана
Если все это обернуть нормально, получится примерно так
Код:import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; public class TitleInput { private static Map<Player, TitleInput> titles = new HashMap<>(); public static TitleInput getTitleInput(Player player) { return titles.get(player); } public static TitleInput createTitleInput(JavaPlugin plugin, Player player, String firstLine, String secondLine) { TitleInput result = getTitleInput(player); if ((result==null)||(result.getTask().isCancelled())) { result = new TitleInput(plugin, firstLine, secondLine, player); }else { result.setFirstLine(firstLine); result.setSecondLine(secondLine); } return result; } protected String firstLine,secondLine; protected Player owner; protected BukkitTask task; protected TitleInput(JavaPlugin plugin, String firstLine, String secondLine, Player player) { Validate.notNull(plugin, "Plugin can not be null"); Validate.notNull(player, "Player can not be null"); Validate.notNull(firstLine, "Text can not be null"); Validate.notNull(secondLine, "Text can not be null"); setFirstLine(firstLine); setSecondLine(secondLine); this.owner = player; titles.put(player, this); this.task = Bukkit.getScheduler().runTaskTimer(plugin, () -> { if ((getOwner()==null)||(!getOwner().isOnline())) { getTask().cancel(); return; } getOwner().sendTitle(getFirstLine(), getSecondLine(), 0, 20, 10); }, 0L, 20L); } public Player getOwner() { return owner; } public String getFirstLine() { return firstLine; } public void setFirstLine(String firstLine) { this.firstLine = ChatColor.translateAlternateColorCodes('&', firstLine); } public String getSecondLine() { return secondLine; } public void setSecondLine(String secondLine) { this.secondLine = ChatColor.translateAlternateColorCodes('&', secondLine); } public BukkitTask getTask() { return task; } }Дальше в нужном месте (при вводе команды)Не забудь зарегистрировать листенер в onEnable()
Код:import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerInteractEvent; public class TitleEventListener implements Listener{ @EventHandler public void onInteract(PlayerInteractEvent e) { if (e.getAction()!=Action.LEFT_CLICK_AIR&&e.getAction()!=Action.LEFT_CLICK_BLOCK) { return; } TitleInput title = TitleInput.getTitleInput(e.getPlayer()); if (title==null) return; if (title.getTask().isCancelled()) return; title.getTask().cancel(); e.setCancelled(true); } @EventHandler public void onChat(AsyncPlayerChatEvent e) { TitleInput title = TitleInput.getTitleInput(e.getPlayer()); if (title==null) return; if (title.getTask().isCancelled()) return; title.getTask().cancel(); e.setCancelled(true); String input = e.getMessage(); //TODO что-то делаем с инпутом } }
Код:TitleInput.createTitleInput(Твой плагин, player, "&eВведите имя", "&8ЛКМ для &cотмены");
затем что надо разные строки слать челу судя по скринам, а выше как и попросили "примерная реализцая", листы уже сам впихнетГлупости какие, зачем отправлять постоянно тайтл, если можно время указать оч большое, а когда нужно убрать тайтл?
Дак в чем проблема, если отправить новый тайтл с такой же длительностью, старый он удалит.затем что надо разные строки слать челу судя по скринам, а выше как и попросили "примерная реализцая", листы уже сам впихнет
Ну так нужно будет поменять тайтл, отправит новый с таким же длительным временем, зачем тут Observer, который обновляет каждую секунду?затем что надо разные строки слать челу судя по скринам, а выше как и попросили "примерная реализцая", листы уже сам впихнет
строки туда сюда меняются.Дак в чем проблема, если отправить новый тайтл с такой же длительностью, старый он удалит.
Ну для поэтапного создания клана оч удобноЧат ивент прослушивай и все. Но это убого, лучше комнд ексекутор таки юзать.
я нашел ошибку но незнаю как ее исправить, LiteClans cannot be resolved to a variableзатем что надо разные строки слать челу судя по скринам, а выше как и попросили "примерная реализцая", листы уже сам впихнет
ROFL, у человека, который не знает java, спрашиваешь, как выучить java.Извини за глупый вопрос но как и где вы учитесь Java языку? Сколько пытаюсь найти источники все безуспешно
ну как я его типо знаю, но скажем так на уровне картошки с луком.ROFL, у человека, который не знает java, спрашиваешь, как выучить java.
Ну почитай руководство для начинающих, погугли непонятные моменты, изучай шаблоны проектирования и как их правильно применять, побольше практики естественно, за год можно +- за****о выучить.ну как я его типо знаю, но скажем так на уровне картошки с луком.
а почему ты думаешь что он ничего не знает?ROFL, у человека, который не знает java, спрашиваешь, как выучить java.
Кароче параша странная, сделал все как надо но ничего не работаетНу почитай руководство для начинающих, погугли непонятные моменты, изучай шаблоны проектирования и как их правильно применять, побольше практики естественно, за год можно +- за****о выучить.
Вижу по его темам на рб и по коду, который он кинул.а почему ты думаешь что он ничего не знает?
ну ты глупыш, plugin null, там даже нулл чеки есть, а ты даже это не мож обработать, куда в баккит полез.Кароче параша странная, сделал все как надо но ничего не работает
org.bukkit.command.CommandException: Unhandled exception executing command 'cl' in plugin LiteClans v0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.14.jar:git-Spigot-da42974-8f47214]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.14.jar:git-Spigot-da42974-8f47214]
at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:651) ~[spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1386) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1221) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_211]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_211]
at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.14.jar:git-Spigot-da42974-8f47214]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_211]
Caused by: java.lang.IllegalArgumentException: Plugin can not be null
at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[spigot-1.14.jar:git-Spigot-da42974-8f47214]
at ru.PleasurE.LiteClans.utils.TitleInput.<init>(TitleInput.java:37) ~[?:?]
at ru.PleasurE.LiteClans.utils.TitleInput.createTitleInput(TitleInput.java:24) ~[?:?]
at ru.PleasurE.LiteClans.events.CmdClan.onCommand(CmdClan.java:16) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.14.jar:git-Spigot-da42974-8f47214]
... 15 more
(Версия 1.12.1 не 1.14)
Это то я исправил, я случайно удалил там название оповещенияну ты глупыш, plugin null, там даже нулл чеки есть, а ты даже это не мож обработать, куда в баккит полез.
Зач ты его говнокод скопировал лол, просто сетай тайтл какой когда надо и лови AsyncPlayerChatEvent, все.Это то я исправил, я случайно удалил там название оповещения
Мне лень думать, я за день сделал пол плагина XDЗач ты его говнокод скопировал лол, просто сетай тайтл какой когда надо и лови AsyncPlayerChatEvent, все.