Hello, im working on a plugin which uses BarApi, and i have a question. i want i message to change color every second, it works but i have no clue of how to make a loop. i have this code so far: Code:java package me.jkctech.JKCBar; import me.confuser.barapi.BarAPI; import org.bukkit.Bukkit;import org.bukkit.ChatColor;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.player.PlayerJoinEvent;import org.bukkit.plugin.PluginDescriptionFile;import org.bukkit.plugin.java.JavaPlugin;import org.bukkit.scheduler.BukkitRunnable;import org.bukkit.scheduler.BukkitScheduler; public class Main extends JavaPlugin implements Listener{ @Override public void onEnable(){ PluginDescriptionFile ymlFile = this.getDescription(); this.getLogger().info(ymlFile.getName() + " Version " + ymlFile.getVersion() + " is enabled!"); this.getLogger().info("This plugin is made by jkctech!"); this.getServer().getPluginManager().registerEvents(this, this); } @Override public void onDisable(){ PluginDescriptionFile ymlFile = this.getDescription(); this.getLogger().info(ymlFile.getName() + ymlFile.getVersion() + " is now disabled!"); } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); BukkitScheduler scheduler1 = Bukkit.getServer().getScheduler(); scheduler1.scheduleSyncDelayedTask(this, new BukkitRunnable() {@Override public void run() { BarAPI.setMessage(player, ChatColor.BLUE + "[JKC-Craft]");}}, 20); scheduler1.scheduleSyncDelayedTask(this, new BukkitRunnable() {@Override public void run() { BarAPI.setMessage(player, ChatColor.GOLD + "[JKC-Craft]");}}, 30); } } it only has 2 colors, but you get the idea. i was thinking about changing a variable every second which contains the color, but im fairly new to bukkit os i need help. thanks in advance!
I found this thread to be helpful. Check it out. https://forums.bukkit.org/threads/repeating-tasks.134389/
Code: private Map<String, Integer> playerTasks = new HashMap<String, Integer>(); @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); this.playerTasks.put(player.getName(), player.getServer().getScheduler().runTaskTimer(this, new Runnable() { private int index = 0; public void run() { if (player != null) { BarAPI.setMessage(player, getColour(index) + "[JKC-Craft]"); this.index++; if (this.index > 15) this.index = 0; } } }, 1L, 20L).getTaskId()); } @EventHandler public void onPlayerLeave(PlayerQuitEvent event) { if (this.playerTasks.containsKey(event.getPlayer().getName())) event.getPlayer().getServer().getScheduler().cancelTask(this.playerTasks.remove(event.getPlayer().getName())); } @EventHandler public void onPlayerKicked(PlayerKickEvent event) { if (this.playerTasks.containsKey(event.getPlayer().getName())) event.getPlayer().getServer().getScheduler().cancelTask(this.playerTasks.remove(event.getPlayer().getName())); } public ChatColor getColour(int index) { if (index == 0) return ChatColor.BLACK; if (index == 1) return ChatColor.DARK_BLUE; if (index == 2) return ChatColor.DARK_GREEN; if (index == 3) return ChatColor.DARK_AQUA; if (index == 4) return ChatColor.DARK_RED; if (index == 5) return ChatColor.DARK_PURPLE; if (index == 6) return ChatColor.GOLD; if (index == 7) return ChatColor.GRAY; if (index == 8) return ChatColor.DARK_GRAY; if (index == 9) return ChatColor.BLUE; if (index == 10) return ChatColor.GREEN; // &a if (index == 11) return ChatColor.AQUA; // &b if (index == 12) return ChatColor.RED; // &c if (index == 13) return ChatColor.LIGHT_PURPLE; // &d if (index == 14) return ChatColor.YELLOW; // &e return ChatColor.WHITE; // &f }
Garris0n I know, but i like to do it also Hello, im struggeling with another thing last days, how do i replace an ender eye with an ender pearl? and they both have to have custom names. ive tried several things but nothing worked. EDIT by Moderator: merged posts, please use the edit button instead of double posting.
Garris0n That doesn't seem to work for me, it think because its for 1.6.4 do you have onother suggestion, also i wasnt able to change the name using this method.
Please try and type in the best English you can. :/ I don't understand this... Care to retype that or explain better? Edit: Why can't you just use item.setType(Material.ENDER_PEARL);
KingFaris11 ok, i want that if a player uses an ender eye called "Players - enabled" it changes the item to an ender eye and the name to "Players - disabled" and hides all other players. and the other way around. can someone do this for me?
Firstly, don't ask if someone can do this for you. Although, bad thing for me yet good thing for you that you asked here, because even though I hate people who do this, I always end up doing it. -_- Here I go, spoon-feeding you breakfast/lunch/dinner. Code: @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (event.getItem() != null) { ItemStack itemStack = event.getItem(); ItemMeta itemMeta = itemStack.getItemMeta(); if (itemMeta != null) { if (itemMeta.hasDisplayName()) { String itemName = ChatColor.stripColor(itemMeta.getDisplayName()); if (itemStack.getType() == Material.ENDER_PEARL && itemName.equals("Players - Enabled")) { itemMeta.setDisplayName(itemMeta.getDisplayName().replaceAll("Enabled", "Disabled")); event.getItem().setType(Material.EYE_OF_ENDER); event.getItem().setItemMeta(itemMeta); event.setCancelled(true); for (Player onlinePlayer : event.getPlayer().getServer().getOnlinePlayers()) { if (!onlinePlayer.getUniqueId().equals(event.getPlayer().getUniqueId())) event.getPlayer().hidePlayer(onlinePlayer); } } else if (itemStack.getType() == Material.EYE_OF_ENDER && itemName.equals("Players - Disabled")) { itemMeta.setDisplayName(itemMeta.getDisplayName().replaceAll("Disabled", "Enabled")); event.getItem().setType(Material.ENDER_PEARL); event.getItem().setItemMeta(itemMeta); event.setCancelled(true); for (Player onlinePlayer : event.getPlayer().getServer().getOnlinePlayers()) { if (!onlinePlayer.getUniqueId().equals(event.getPlayer().getUniqueId())) event.getPlayer().showPlayer(onlinePlayer); } } } } } } } Note: Not sure if this will throw errors or has a syntax error - didn't use an IDE.