Ir para conteúdo
  • 0

Ao passar em cima de uma slime chunk fazer um som!


yLR111

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0

Na 1.8:

	@EventHandler
	private void onMove(PlayerMoveEvent event) {
		if(isSlimeChunk(event.getPlayer().getLocation().getChunk())) {
			event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.EXPLODE, 1.0f, 1.2f);
		}
	}
	
    private boolean isSlimeChunk(Chunk chunk) {
        final long worldSeed = chunk.getWorld().getSeed();
        final int x = chunk.getX();
        final int z = chunk.getZ();
        final Random random = new Random(worldSeed + x * x * 4987142 + x * 5947611 + z * z * 4392871L + z * 389711 ^ 0x3AD8025FL);
        return random.nextInt(10) == 0;
    }

Eu dei uma pesquisa e acho que é assim, não testei nada.

 

Em versões mais recentes, existe um método dentro da class Chunk.

Link para o comentário
Compartilhar em outros sites

  • 0

Na 1.8:

	@EventHandler
	private void onMove(PlayerMoveEvent event) {
		if(isSlimeChunk(event.getPlayer().getLocation().getChunk())) {
			event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.EXPLODE, 1.0f, 1.2f);
		}
	}
	
    private boolean isSlimeChunk(Chunk chunk) {
        final long worldSeed = chunk.getWorld().getSeed();
        final int x = chunk.getX();
        final int z = chunk.getZ();
        final Random random = new Random(worldSeed + x * x * 4987142 + x * 5947611 + z * z * 4392871L + z * 389711 ^ 0x3AD8025FL);
        return random.nextInt(10) == 0;
    }

Eu dei uma pesquisa e acho que é assim, não testei nada.

 

Em versões mais recentes, existe um método dentro da class Chunk.

 

Eu fiz algo parecido quando estava trabalhando no meu "essentials" da uma olhada:

package rush.comandos;

import java.util.Random;

import org.bukkit.Chunk;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;

import rush.Main;

public class ComandoSlime implements Listener, CommandExecutor {

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String lb, String[] args) {
	      if (cmd.getName().equalsIgnoreCase("slime")) {
		       if (!(sender instanceof Player)) {
		          sender.sendMessage(Main.aqui.getMensagens().getString("Console-Nao-Pode").replaceAll("&", "§"));
		          return true;}
	         }
	      Player p = (Player)sender;
	      long worldSeed = p.getPlayer().getWorld().getSeed();
	      Chunk playerChunk;
	      int xChunk;
	      int zChunk;
	      Random random = new Random(worldSeed + (xChunk = (playerChunk = p.getPlayer().getWorld().getChunkAt(p.getLocation())).getX()) * xChunk * 4987142 + xChunk * 5947611 + (zChunk = playerChunk.getZ()) * zChunk * 4392871L + zChunk * 389711 ^ 0x3AD8025F);
	      if (random.nextInt(10) == 0) {
	        p.sendMessage(Main.aqui.getMensagens().getString("SlimeChunk.Esta").replaceAll("&", "§"));
	        p.playSound(p.getLocation(), Sound.SLIME_WALK2, 1, 1);
	      } else {
	        p.sendMessage(Main.aqui.getMensagens().getString("SlimeChunk.NaoEsta").replaceAll("&", "§"));
	        p.playSound(p.getLocation(), Sound.VILLAGER_NO, 1, 1);
	      }
		return false;
	}
	
	

}

Ao usar o comando /slime o plugin verifica, caso o player esta em cima de uma slime chunk uma mensagem em verde aparece no chat e o som de um slime é reproduzido, caso contrario uma mensagem em vermelho é exibida no chat e o som da negação do villager é executado

Link para o comentário
Compartilhar em outros sites

  • 0

Eu fiz algo parecido quando estava trabalhando no meu "essentials" da uma olhada:

package rush.comandos;

import java.util.Random;

import org.bukkit.Chunk;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;

import rush.Main;

public class ComandoSlime implements Listener, CommandExecutor {

	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String lb, String[] args) {
	      if (cmd.getName().equalsIgnoreCase("slime")) {
		       if (!(sender instanceof Player)) {
		          sender.sendMessage(Main.aqui.getMensagens().getString("Console-Nao-Pode").replaceAll("&", "§"));
		          return true;}
	         }
	      Player p = (Player)sender;
	      long worldSeed = p.getPlayer().getWorld().getSeed();
	      Chunk playerChunk;
	      int xChunk;
	      int zChunk;
	      Random random = new Random(worldSeed + (xChunk = (playerChunk = p.getPlayer().getWorld().getChunkAt(p.getLocation())).getX()) * xChunk * 4987142 + xChunk * 5947611 + (zChunk = playerChunk.getZ()) * zChunk * 4392871L + zChunk * 389711 ^ 0x3AD8025F);
	      if (random.nextInt(10) == 0) {
	        p.sendMessage(Main.aqui.getMensagens().getString("SlimeChunk.Esta").replaceAll("&", "§"));
	        p.playSound(p.getLocation(), Sound.SLIME_WALK2, 1, 1);
	      } else {
	        p.sendMessage(Main.aqui.getMensagens().getString("SlimeChunk.NaoEsta").replaceAll("&", "§"));
	        p.playSound(p.getLocation(), Sound.VILLAGER_NO, 1, 1);
	      }
		return false;
	}
	
	

}

Ao usar o comando /slime o plugin verifica, caso o player esta em cima de uma slime chunk uma mensagem em verde aparece no chat e o som de um slime é reproduzido, caso contrario uma mensagem em vermelho é exibida no chat e o som da negação do villager é executado

É praticamente a mesma coisa do código que enviei, a única diferença é que o seu está dentro de um onCommand e envia mensagens também.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...