Ir para conteúdo

[Entregue] Oi, Poderia ler ?


Gutyerrez

Posts Recomendados

Plugin básico, conforme solicitado. Source code abaixo para quem tiver interesse em modificar.

 

 

X1.java:

package notsafeforwork.x1;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.plugin.java.JavaPlugin;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;

public class X1 extends JavaPlugin implements Listener
{
	@Getter(AccessLevel.PACKAGE)
	private static X1 x1;
	
	@Getter(AccessLevel.PACKAGE)
	private Location x1Pos1;
	@Getter(AccessLevel.PACKAGE)
	private Location x1Pos2;
	
	@Getter(AccessLevel.PACKAGE)
	private Location x1Exit;
	@Getter(AccessLevel.PACKAGE)
	private Location x1Wait;
	
	@Override
	public void onEnable()
	{
		x1 = this;
		
		for (Messages messages : Messages.values())
		{
			getConfig().set("messages." + messages.name(), getConfig().get("messages." + messages.name(), messages.getMessage()));
			messages.setMessage(getConfig().getString("messages." + messages.name()));
		}
		
		saveConfig();
		
		x1Pos1 = fromString(getConfig().getString("locations.x1Pos1"));
		x1Pos2 = fromString(getConfig().getString("locations.x1Pos2"));
		x1Exit = fromString(getConfig().getString("locations.x1Exit"));
		x1Wait = fromString(getConfig().getString("locations.x1Wait"));
		
		Bukkit.getPluginManager().registerEvents(this, this);
	}
	
	@EventHandler
	public void onPlayerDeathEvent(PlayerDeathEvent event)
	{
		X1Data x1Data = X1Data.get(event.getEntity());
		
		if (x1Data != null && x1Data.isRunning())
		{
			Player winner = event.getEntity().getName().equals(x1Data.getPlayer1().getName()) ? x1Data.getPlayer2() : x1Data.getPlayer1();
			x1Data.cancelX1(winner);
		}
	}
	
	@EventHandler
	public void onPlayerQuitEvent(PlayerQuitEvent event)
	{
		X1Data x1Data = X1Data.get(event.getPlayer());
		
		if (x1Data != null)
		{
			if (x1Data.isRunning())
			{
				Player winner = event.getPlayer().getName().equals(x1Data.getPlayer1().getName()) ? x1Data.getPlayer2() : x1Data.getPlayer1();
				x1Data.cancelX1(winner);
				return;
			}
			
			x1Data.cancelX1(null);
		}
	}
	
	@EventHandler(ignoreCancelled = true)
	public void onPlayerTeleportEvent(PlayerTeleportEvent event)
	{
		X1Data x1Data = X1Data.get(event.getPlayer());
		
		if (x1Data != null && x1Data.isRunning() && !x1Data.isTeleportEnabled())
		{
			Player winner = event.getPlayer().getName().equals(x1Data.getPlayer1().getName()) ? x1Data.getPlayer2() : x1Data.getPlayer1();
			x1Data.cancelX1(winner);
		}
	}
	
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
	{
		if (!(sender instanceof Player))
		{
			sender.sendMessage(Messages.ONLY_PLAYERS.getMessage());
			return false;
		}
		
		Player player = (Player) sender;
		
		if (args.length == 0)
		{
			if (player.hasPermission("notsafeforwork.x1admin"))
			{
				player.sendMessage("§cUtilize /" + commandLabel + " <setPos1 | setPos2 | setExit | setWait>");
			}
			
			player.sendMessage("§cUtilize /" + commandLabel + " <aceitar | desafiar>");
			return false;
		}
		
		if (player.hasPermission("notsafeforwork.x1admin"))
		{
			if (args[0].equalsIgnoreCase("setPos1"))
			{
				x1Pos1 = player.getLocation();
				getConfig().set("locations.x1Pos1", locationToString(player.getLocation()));
				saveConfig();
				
				player.sendMessage("§aFeito.");
				return true;
			}
			
			if (args[0].equalsIgnoreCase("setPos2"))
			{
				x1Pos2 = player.getLocation();
				getConfig().set("locations.x1Pos2", locationToString(player.getLocation()));
				saveConfig();
				
				player.sendMessage("§aFeito.");
				return true;
			}
			
			if (args[0].equalsIgnoreCase("setWait"))
			{
				x1Wait = player.getLocation();
				getConfig().set("locations.x1Wait", locationToString(player.getLocation()));
				saveConfig();
				
				player.sendMessage("§aFeito.");
				return true;
			}
			
			if (args[0].equalsIgnoreCase("setExit"))
			{
				x1Exit = player.getLocation();
				getConfig().set("locations.x1Exit", locationToString(player.getLocation()));
				saveConfig();
				
				player.sendMessage("§aFeito.");
				return true;
			}
		}
		
		if (args[0].equalsIgnoreCase("aceitar") || args[0].equalsIgnoreCase("desafiar"))
		{
			if (getX1Pos1() == null || getX1Pos2() == null || getX1Exit() == null || getX1Wait() == null)
			{
				player.sendMessage(Messages.NOT_OPERATIONAL.getMessage());
				return false;
			}
			
			if (args.length != 2)
			{
				player.sendMessage("§cUtilize /" + commandLabel + " " + args[0] + " <nick>");
				return false;
			}
			
			Player target = Bukkit.getPlayer(args[1]);
			
			if (target == null)
			{
				player.sendMessage(Messages.PLAYER_NOT_FOUND.getMessage().replace("$targetName", args[1]));
				return false;
			}
			
			if (args[0].equalsIgnoreCase("aceitar"))
			{
				X1Data x1Data = X1Data.get(player);
				
				if (x1Data == null || !x1Data.isMember(target))
				{
					player.sendMessage(Messages.X1_NOT_FOUND.getMessage().replace("$targetName", target.getName()));
					return false;
				}
				
				player.sendMessage(Messages.X1_WAITING_QUEUE.getMessage());
				target.sendMessage(Messages.X1_WAITING_QUEUE.getMessage());
				
				x1Data.setTeleportEnabled(true);
				player.teleport(x1Wait);
				target.teleport(x1Wait);
				x1Data.setTeleportEnabled(false);
				
				X1Data.next();
				
				return true;
			}
			
			if (args[0].equalsIgnoreCase("desafiar"))
			{
				if (X1Data.get(player) != null)
				{
					player.sendMessage(Messages.PLAYER_IS_IN_X1.getMessage());
					return false;
				}
				
				if (X1Data.get(target) != null)
				{
					player.sendMessage(Messages.TARGET_IS_IN_X1.getMessage().replace("$targetName", args[1]));
					return false;
				}
				
				X1Data x1Data = new X1Data(player, target);
				x1Data.register();
				
				return true;
			}
			
			return false;
		}
		
		Bukkit.dispatchCommand(sender, commandLabel);
		
		return true;
	}
	
	public String locationToString(@NonNull Location location)
	{
		return String.format("%s;%s;%s;%s;%s;%s", location.getWorld().getName(), location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
	}
	
	private Location fromString(String str)
	{
		try
		{
			String[] location = str.split(";");
			
			String worldName = location[0];
			double x = Double.parseDouble(location[1]);
			double y = Double.parseDouble(location[2]);
			double z = Double.parseDouble(location[3]);
			float yaw = Float.parseFloat(location[4]);
			float pitch = Float.parseFloat(location[5]);
			
			return new Location(Bukkit.getWorld(worldName), x, y, z, yaw, pitch);
		}
		catch (Exception e)
		{
			return null;
		}
	}
	
	enum Messages
	{
		ONLY_PLAYERS("&cEste comando só pode ser utilizado por jogadores."),
		
		NOT_OPERATIONAL("&cO X1 ainda não está configurado, avise um admin!"),
		
		PLAYER_NOT_FOUND("&c$targetName não está online no momento."),
		X1_NOT_FOUND("&cVocê não tem um desafio de X1 pendente com $targetName."),
		
		PLAYER_IS_IN_X1("&cVocê já tem um desafio de X1 pendente."),
		TARGET_IS_IN_X1("&c$targetName já está em um desafio X1."),
		
		INVITE_1("&cVocê convidou $targetName para um X1"),
		INVITE_2("&cVocê foi convidado para um X1 por $playerName, digite /x1 aceitar $playerName para continuar."),
		
		X1_CANCELLED("&cO X1 pendente foi cancelado."),
		X1_STARTED("&aValendo!"),
		X1_WAITING_QUEUE("Aguardando fila.."),
		
		WIN("&c$playerName venceu o X1!");
		
		private String message;
		
		private Messages(String message)
		{
			this.message = message;
		}
		
		public String getMessage()
		{
			return ChatColor.translateAlternateColorCodes('&', message);
		}
		
		public void setMessage(String message)
		{
			this.message = message;
		}
	}
}

X1Data.java

package notsafeforwork.x1;

import java.util.ArrayList;
import java.util.List;

import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;

public class X1Data
{
	private static List<X1Data> data = new ArrayList<X1Data>();
	
	@Getter(AccessLevel.PACKAGE)
	private static X1Data running = null;
	
	@Getter(AccessLevel.PACKAGE)
	private Player player1;
	
	@Getter(AccessLevel.PACKAGE)
	private Player player2;
	
	@Getter(AccessLevel.PACKAGE)
	@Setter(AccessLevel.PACKAGE)
	private boolean teleportEnabled;
	
	public static X1Data get(@NonNull Player player)
	{
		for (X1Data data : data)
		{
			if (data.player1.getName().equals(player.getName()) || data.player2.getName().equals(player.getName()))
			{
				return data;
			}
		}
		
		return null;
	}
	
	public X1Data(@NonNull Player player1, @NonNull Player player2)
	{
		this.player1 = player1;
		this.player2 = player2;
	}
	
	public static void next()
	{
		if (getRunning() == null && !data.isEmpty())
		{
			data.get(0).start();
		}
	}
	
	public void register()
	{
		if (!bothOnline())
		{
			return;
		}
		
		data.add(this);
		
		player1.sendMessage(X1.Messages.INVITE_1.getMessage().replace("$targetName", player2.getName()));
		player2.sendMessage(X1.Messages.INVITE_2.getMessage().replace("$playerName", player1.getName()));
		
		new BukkitRunnable()
		{
			@Override
			public void run()
			{
				if (!isRunning() && isRegistered())
				{
					cancelX1(null);
				}
			}
		}.runTaskLater(X1.getX1(), 20 * 15);
	}
	
	public void cancelX1(Player winner)
	{
		data.remove(this);
		running = null;
		next();
		
		if (player1.isOnline())
		{
			if (winner == null)
			{
				player1.sendMessage(X1.Messages.X1_CANCELLED.getMessage());
			}
			else
			{
				player1.sendMessage(X1.Messages.WIN.getMessage().replace("$playerName", winner.getName()));
			}
			
			player1.teleport(X1.getX1().getX1Exit());
		}
		
		if (player2.isOnline())
		{
			if (winner == null)
			{
				player2.sendMessage(X1.Messages.X1_CANCELLED.getMessage());
			}
			else
			{
				player2.sendMessage(X1.Messages.WIN.getMessage().replace("$playerName", winner.getName()));
			}
			
			player2.teleport(X1.getX1().getX1Exit());
		}
	}
	
	private void start()
	{
		if (!bothOnline())
		{
			cancelX1(null);
			return;
		}
		
		running = this;
		
		teleportEnabled = true;
		player1.teleport(X1.getX1().getX1Pos1());
		player2.teleport(X1.getX1().getX1Pos2());
		teleportEnabled = false;
		
		player1.sendMessage(X1.Messages.X1_STARTED.getMessage());
		player2.sendMessage(X1.Messages.X1_STARTED.getMessage());
	}
	
	public boolean isMember(@NonNull Player player)
	{
		return player1.getName().equals(player.getName()) || player2.getName().equals(player.getName());
	}
	
	public boolean isRegistered()
	{
		return data.contains(this);
	}
	
	public boolean isRunning()
	{
		return running != null && running.equals(this);
	}
	
	private boolean bothOnline()
	{
		return player1.isOnline() && player2.isOnline();
	}
}

plugin.yml:

name: X1-NOTSAFEFORWORK
version: 0.1

main: notsafeforwork.x1.X1

commands:
  x1:
Editado por NotSafeForWork
Link para o comentário
Compartilhar em outros sites

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