-
Total de itens
729 -
Registro em
-
Última visita
Respostas na Comunidade
-
zAth's postagem in Erro, plugin was marked as the answer
tens algo na config assim?
1: qualquer coisa 2: outra coisa com um número antes do :
Se for, coloca o número entre '' '1'
.. prnt.sc down ..
-
zAth's postagem in Editar uma ScoreBoard Simples was marked as the answer
Agradecimentos a @leonardosc pelo https://leonardosnt.github.io/jar-string-editor/
http://www.mediafire.com/file/xlu23oajuqv08l4/HaskScoreEDIT_%281%29.jar
-
zAth's postagem in [Duvida] Fornalha was marked as the answer
1. deve dar para fazer com Furnace#setBurnTime e Furnace#setCookTime mas nunca tentei fazer a fornalha queimar algo que não seja combustivel
2. usa o FurnaceSmeltEvent#setResult
3. Furnace#getInventory#getFuel, Furnace#getInventory#getSmelting, Furnace#getInventory#getResult .. tem setters tb
4. cancela o FurnaceSmeltEvent
5. tem três, FurnaceSmeltEvent, FurnaceBurnEvent, FurnaceExtractEvent
6. 4.
Furnace
-
zAth's postagem in BukkitScheduler ou BukkitRunnable ? was marked as the answer
BukkitScheduler é meio que um "manager" para criar/cancelar BukkitRunnables
BukkitRunnable é um Runnable ;-;
Eu uso BukkitRunnable porque acho que fica mais organizado e mais fácil de cancelar se criar uma classe que extende o BukkitRunnable ao invés de ficar mexendo no BukkitScheduler.
BukkitScheduler
BukkitRunnable
-
zAth's postagem in 3 Duvidas em java bukkit :D was marked as the answer
Inventory inventory = Bukkit.getServer().createInventory(null, InventoryType.ANVIL);
player.openInventory(inventory);
https://dev.bukkit.org/projects/simpleclans/pages/simple-clans1-api
// verifica se o bloco é algum tipo de placa ( tem 2 tipos acho eu )
Sign sign = (Sign) e.getClickedBlock().getState();
sign.setLine(0, e.getPlayer.getName());
sign.update(true);
-
zAth's postagem in [Duvida] nome da entidade was marked as the answer
Não tem como por esse evento, eu usaria o playerinteract e verificava se o event.getAction() == Action.RIGHT_CLICK_BLOCK, se o jogador tem um ovo na mão e se é o ovo que vc quer, e se o evento não é cancelado ( importante, o worldguard por exemplo pode bloquear isso então precisa verificar ).. depois disso você spawna o mob e faz oq quiser.
Como você estaria "simulando" o CreatureSpawnEvent, se quiser pode até chamar o evento para ele ser recebido por outros plugins mas não é necessário.
-
zAth's postagem in Cooldown was marked as the answer
private HashMap<String, Long> cooldowns = new HashMap<>(); @EventHandler public void onQualquerCoisa(Event e){ if(!e.getPlayer().hasPermission("cooldown.bypass")) { long cooldown = 200; // 0.2 segundos = 200 milisegundos if (cooldowns.keySet().contains(e.getPlayer().getName().toLowerCase())) { if (cooldowns.get(e.getPlayer().getName().toLowerCase()) > System.currentTimeMillis()) { e.getPlayer().sendMessage("Em cooldown"); e.setCancelled(true); return; } cooldowns.put(e.getPlayer().getName().toLowerCase(), System.currentTimeMillis() + cooldown); } cooldowns.put(e.getPlayer().getName().toLowerCase(), System.currentTimeMillis() + cooldown); } // resto do seu código, ex.: teleporta } Nem sei quantas vezes passei esse código aqui no forum ;-; é o que mais pedem
-
zAth's postagem in [Duvida] ItemStack em BlockPlaceEvent was marked as the answer
Não.
Use outro evento como o interact, verifique se o action é RIGHT_CLICK_BLOCK e se o evento não é cancelado, a partir dae tem o que precisa num BlockPlace e o que você precisa.
-
zAth's postagem in Método de preparar was marked as the answer
BukkitRunnable countdown;
private void start(){
countdown = new BukkitRunnable() {
int count = 10;
@Override
public void run() {
Bukkit.getServer().broadcastMessage(count);
if(count <= 0)
countdown.cancel();
else
count--;
}
};
countdown.runTaskTimer(this, 0, 20); // de segundo em segundo
}
private void stop(){
try {
countdown.cancel();
} catch (Exception ignored) { }
}
-
zAth's postagem in Mundo com baús was marked as the answer
Olha o exemplo que o jeta deu mas não precisa criar um ChunkGenerator, apenas um BlockPopulator e ae usa o WorldInitEvent e seta o BlockPopulator com
event.getWorld().getPopulators.add(new SeuBlockPopulator()); Então só precisa olhar essa classe e ter em conta que:
o método populate() só é chamado 1 vez em cada chunk que é gerada para pegar as verdadeiras coordenadas da chunk tem que usar (source.getX() << 4), se por exemplo uma chunk começar em x:48 z:48 o source.getX() não retorna 48 .. mas o (source.getX() << 4), por isso que no exemplo tem int centerX = (source.getX() << 4) + random.nextInt(16);, para pegar o canto da chunk e adicionar um número randômico de 0 a 15. para pegar o block à superficie int centerY = world.getHighestBlockYAt(centerX, centerZ); O resto acho que dá para entender do exemplo e como spawnar o baú e setar itens já falaram aqui.
-
zAth's postagem in Pegar blocos was marked as the answer
Location location = ... ; // sua location do centro Block east = location.clone().add(1, 0, 0).getBlock(); Block west = location.clone().add(-1, 0, 0).getBlock(); Block south = location.clone().add(0, 0, 1).getBlock(); Block north = location.clone().add(0, 0, -1).getBlock(); Pode pegar o bloco que está a norte, sul, este e oeste de você mas pegar o da direita/Esquerda/frente/trás é diferente porque precisa de ver para que direção o jogador está virado.. se é isso mesmo que quer fala ae que tb tenho método para isso
-
zAth's postagem in [Duvida] Por que nada acontece ? (MYSQL & SQLite) was marked as the answer
Eu possl ser cego, mas não vi nenhum sts2.execute(); '-'
Você fechou os statement mas nem abriu.
-
zAth's postagem in Sobre Cooldown was marked as the answer
private HashMap<String, Long> cooldowns = new HashMap<>();
public String getTime(String playerName) {
if(!cooldowns.containsKey(playerName))
return "agora";
long time = cooldowns.get(playerName);
if (time == 0) {
return "nunca";
}
long day = TimeUnit.MILLISECONDS.toDays(time);
long hours = TimeUnit.MILLISECONDS.toHours(time) - (day * 24);
long minutes = TimeUnit.MILLISECONDS.toMinutes(time) - (TimeUnit.MILLISECONDS.toHours(time) * 60);
long seconds = TimeUnit.MILLISECONDS.toSeconds(time) - (TimeUnit.MILLISECONDS.toMinutes(time) * 60);
StringBuilder sb = new StringBuilder();
if (day > 0) {
sb.append(day).append(" ").append(day == 1 ? "dia" : "dias").append(" ");
}
if (hours > 0) {
sb.append(hours).append(" ").append(hours == 1 ? "hora" : "horas").append(" ");
}
if (minutes > 0) {
sb.append(minutes).append(" ").append(minutes == 1 ? "minuto" : "minutos").append(" ");
}
if (seconds > 0) {
sb.append(seconds).append(" ").append(seconds == 1 ? "segundo" : "segundos");
}
String diff = sb.toString();
return diff.isEmpty() ? "agora" : diff;
}
public void addItem(Player player){
Long delay = TimeUnit.HOURS.toMillis(24); // cooldown de 24 hora
if (cooldowns.keySet().contains(player.getName().toLowerCase())) {
if (cooldowns.get(player.getName().toLowerCase()) > System.currentTimeMillis()) {
e.getPlayer().sendMessage(getTime(player.getName().toLowerCase()) + " para usar o comando");
return;
}
cooldowns.put(player.getName().toLowerCase(), System.currentTimeMillis() + delay);
}
cooldowns.put(player.getName().toLowerCase(), System.currentTimeMillis() + delay);
// adiciona o item.. algo que você ainda não fez .-. você verifica se tem algo na hash mas nunca coloca nada nela...
}
-
zAth's postagem in [Pedido Java] Serializer Inventory was marked as the answer
Class
Uso
Isso serializa os itens apenas. O holder, tamanho do inventário, titulo do inventário e slot de cada item não sei como serializar.
-
zAth's postagem in [BUG] Entrada de Valores Com Ponto Flutuante was marked as the answer
Tem que usar , no lugar do . sei lá porquê :kk:
É suposto usar isso no java
double numero = 7.1; Mas na consola tem que ser com , e não .
E acho que essa formatação está errada ( você queria formatar né? ), porque colocou o símbolo de formatação ( % ) se depois concatenou a string? ( "bla" + MEDIA + "bla" )
Faz assim
System.out.printf("MEDIA = %.5f\n", MEDIA); O float é f, em minúsculo.
-
zAth's postagem in Pedido - Plugin de /bau igual o SkyChests (mas modificado na GUI) (1.8) was marked as the answer
Arrumado agora.
@Topic
Quer mesmo com espaço entre, ou assim tá bom?
-
zAth's postagem in Cooldown não está pegando was marked as the answer
Acabei de decompilar aqui e.. @Override public boolean onCommand(CommandSender sender, Command arg1, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(" §cVoce Não é um player!"); return true; } Player p = (Player)sender; p.sendMessage(""); p.sendMessage("§a§l RECOMPENSA"); p.sendMessage(""); p.sendMessage("§a* §7Você pegou uma recompensa!"); p.sendMessage("§a* §7Tempo pra pegar novamente: " + CooldownAPI.haveCooldown); p.sendMessage(""); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "crates give " + p.getName() + " básica 1"); return false; } public static HashMap<String, Integer> haveCooldown = new HashMap<String, Integer>(); // Digite o cooldown em minutos public static void addCooldown(String name, int cooldown) { // Caso queira remove o sistema de minutos coloque no lugar de: cooldown // * 160; apenas: cooldown // E sera em segundos! int realcooldown = cooldown * 160; haveCooldown.put(name, realcooldown); while (realcooldown > 0) { realcooldown--; } if (realcooldown == 0) { haveCooldown.remove(name); } } public static boolean inCooldown(String name) { return haveCooldown.containsKey(name); } public static void removeCooldown(String name) { haveCooldown.remove(name); } Isso me deu vontade de rir.
1º que você nunca adiciona cooldown nele, ele criou um comand que manda msg e executa um /crates give.. não adiciona cooldown nenhum.
2º memso que adicionasse cooldown, o cooldown seria removido em 1 nanosegundo .-.
int realcooldown = cooldown * 160; haveCooldown.put(name, realcooldown); while (realcooldown > 0) { realcooldown--; } if (realcooldown == 0) { haveCooldown.remove(name); } Não sei quem fez isso dae, mas deve pensar que o java é lerdo e só é "executado" a cada segundo slá, nem sei o que deu para colocar o * 160 lá.. mesmo que colocasse cooldown de 1 dia, ele terminaria em menos de 1 segundo.
3º que ele nem salva em lugar nenhum.. dá /rl que já era
@Edit
Cooldown é o que é mais pedido nesse forum, só precisa isso
@Override public boolean onCommand(CommandSender sender, Command arg1, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage(" §cVoce Não é um player!"); return true; } Player p = (Player)sender; if(!p.hasPermission("plugin.bypass")) { Long delay = TimeUnit.MINUTES.toMillis(5); // 5 minutos if (cooldown.keySet().contains(p.getName().toLowerCase())) { if (cooldown.get(p.getName().toLowerCase()) > System.currentTimeMillis()) { p.sendMessage("Está em cooldown, aguarde " TimeUnit.MILLIS.toMinutes(cooldown.get(p.getName().toLowerCase()) - System.currentTimeMillis())); return; } cooldown.put(p.getName().toLowerCase(), System.currentTimeMillis() + delay); } cooldown.put(p.getName().toLowerCase(), System.currentTimeMillis() + delay); } p.sendMessage(""); p.sendMessage("§a§l RECOMPENSA"); p.sendMessage(""); p.sendMessage("§a§l §7Você pegou uma recompensa!"); p.sendMessage(""); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "crates give " + p.getName() + " básica 1"); return false; } private HashMap<String, Long> cooldown = new HashMap<>(); E algo para salvar a hashmap em algum lugar.
-
zAth's postagem in ItemStack Movimento was marked as the answer
private ArrayList<Player> array = new ArrayList<>(); private Inventory invs(Player player){ ItemStack itemStack; if(array.contains(player)){ itemStack = new ItemStack(0); // coloca o itemmeta do item adquirido lá } else { itemStack = new ItemStack(1); // coloca o itemmeta do item a ser adquirido } // coloca os seus itens e pá return getServer().createInventory(null, 9, "Inventário"); } @EventHandler public void onClick(InventoryClickEvent event){ if(!event.getInventory.getName().equals("Inventário")) return; event.setCancelled(true); if(array.contains(event.getWhoClicked())) return; // se estiver na array, o código para por aqui.. será melhor fazer verificações do slot clicado antes // faz as verificações do $ // da o item que comprou array.add(event.getWhoClicked()); } Fiz aqui no navegador mesmo, pode ter algum erro.
-
zAth's postagem in Problema NullPointerException was marked as the answer
Coloca no onEnable isso: cooldown = new Cooldown();
-
zAth's postagem in Pedido - Addon MineShop (1.8) was marked as the answer
http://www.mediafire.com/file/wap1w0jw2mtid9c/FBMineShopAddon.jar
Placeholder: mineshop
-
zAth's postagem in Cooldown was marked as the answer
private HashMap<String, Long> cooldowns = new HashMap<>(); Long delay = TimeUnit.MINUTES.toMillis(5); // cooldown de 5 minutos @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (command.getName().equalsIgnoreCase("sb")) { if (cooldowns.keySet().contains(sender.getName().toLowerCase())) { if (cooldowns.get(sender.getName().toLowerCase()) > System.currentTimeMillis()) { int minutesRemaining = TimeUnit.MILLIS.toMinutes(System.currentTimeMillis() - cooldowns.get(sender.getName().toLowerCase())); sender.sendMessage("Falta " + minutesRemaining + "minutos"); return true; } cooldowns.put(sender.getName().toLowerCase(), System.currentTimeMillis() + delay); } cooldowns.put(sender.getName().toLowerCase(), System.currentTimeMillis() + delay); ((Player) sender).teleport(getServer().getWorld("skyblock").getSpawnLocation()); } return false; } -
zAth's postagem in Dúvida - Item was marked as the answer
Eu já falei, até você já falou..
quer pegar o material pelo comando? Material.valueOf("STONE");
-
zAth's postagem in [Dúvida] Bukkit Runnable was marked as the answer
int i = 0; int delay = 20; public void run(){ i += 10; if (i >= delay){ i = 0; delay = 40; // aumenta o delay ... } }.RuntaskTimer(plugin,10,10); ?? ou então faz gambiarra :kk:
private void a(Player player, int count, int delay){ player.sendMessage("Ola"); int newCount = count + 1; if(newCount == 5) // apenas manda a msg 5 vezes, depois para return; int newDelay = delay + 20; // aumenta o delay em 1s new BukkitRunnable() { @Override public void run() { a(player, newCount, newDelay); } }.runTaskLater(this, newDelay); } -
zAth's postagem in [Duvida] Como coloco delay em um for? was marked as the answer
Bukkit.getScheduler().runTaskAsynchronously(HG.getInstance(), new Runnable() { @Override public void run() { int removidos = 0; for (Iterator<?> i = Manager.getInstance().construcao.iterator(); i.hasNext(); ) { removidos++; Block b = (Block) i.next(); Bukkit.getScheduler().runTask(HG.getInstance(), new Runnable() { @Override public void run() { b.setType(Material.AIR); } }); if(removidos == 80) { removidos = 0; } Thread.sleep(1000); } } });