Created
January 26, 2021 16:41
-
-
Save n005/61389cb8f2cf4e293117b894086ab09b to your computer and use it in GitHub Desktop.
Minecraft ManHunt Dream
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.bukkit.event.player.PlayerRespawnEvent; | |
import org.bukkit.event.player.PlayerDropItemEvent; | |
import org.bukkit.event.entity.PlayerDeathEvent; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.block.Action; | |
import org.bukkit.event.player.PlayerInteractEvent; | |
import org.bukkit.entity.Player; | |
import org.bukkit.Material; | |
import org.bukkit.inventory.ItemStack; | |
import org.bukkit.ChatColor; | |
import org.bukkit.Bukkit; | |
import org.bukkit.command.Command; | |
import org.bukkit.command.CommandSender; | |
import java.util.Iterator; | |
import java.util.HashSet; | |
import org.bukkit.plugin.Plugin; | |
import java.util.UUID; | |
import java.util.Set; | |
import org.bukkit.command.CommandExecutor; | |
import org.bukkit.event.Listener; | |
import org.bukkit.plugin.java.JavaPlugin; | |
public class ManHunt extends JavaPlugin implements Listener, CommandExecutor | |
{ | |
private Set<UUID> hunters; | |
public void onEnable() { | |
this.getServer().getPluginManager().registerEvents((Listener)this, (Plugin)this); | |
for (final String command : this.getDescription().getCommands().keySet()) { | |
this.getServer().getPluginCommand(command).setExecutor((CommandExecutor)this); | |
} | |
this.hunters = new HashSet<UUID>(); | |
} | |
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) { | |
if (command.getName().equalsIgnoreCase("hunter")) { | |
if (args.length != 2) { | |
this.sendInvalid(sender); | |
return false; | |
} | |
final Player player = Bukkit.getPlayer(args[1]); | |
if (player == null) { | |
sender.sendMessage(ChatColor.RED + "Player not found."); | |
return false; | |
} | |
if (args[0].equalsIgnoreCase("add")) { | |
this.hunters.add(player.getUniqueId()); | |
sender.sendMessage(ChatColor.GREEN + player.getName() + " is now a hunter."); | |
player.getInventory().addItem(new ItemStack[] { new ItemStack(Material.COMPASS) }); | |
} | |
else if (args[0].equalsIgnoreCase("remove")) { | |
this.hunters.remove(player.getUniqueId()); | |
sender.sendMessage(ChatColor.GREEN + player.getName() + " is no longer a hunter."); | |
player.getInventory().remove(new ItemStack(Material.COMPASS)); | |
} | |
else { | |
this.sendInvalid(sender); | |
} | |
} | |
return false; | |
} | |
private void sendInvalid(final CommandSender sender) { | |
sender.sendMessage(ChatColor.RED + "Invalid usage. Please use:"); | |
sender.sendMessage(ChatColor.RED + "/hunter add <name>"); | |
sender.sendMessage(ChatColor.RED + "/hunter remove <name>"); | |
} | |
@EventHandler | |
public void onPlayerInteractEvent(final PlayerInteractEvent event) { | |
final Player player = event.getPlayer(); | |
if (this.hunters.contains(player.getUniqueId()) && event.hasItem() && event.getItem().getType() == Material.COMPASS && (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR)) { | |
Player nearest = null; | |
double distance = Double.MAX_VALUE; | |
for (final Player onlinePlayer : Bukkit.getOnlinePlayers()) { | |
if (!onlinePlayer.equals(player) && onlinePlayer.getWorld().equals(player.getWorld())) { | |
if (this.hunters.contains(onlinePlayer.getUniqueId())) { | |
continue; | |
} | |
final double distanceSquared = onlinePlayer.getLocation().distanceSquared(player.getLocation()); | |
if (distanceSquared >= distance) { | |
continue; | |
} | |
distance = distanceSquared; | |
nearest = onlinePlayer; | |
} | |
} | |
if (nearest == null) { | |
player.sendMessage(ChatColor.RED + "No players to track!"); | |
return; | |
} | |
player.setCompassTarget(nearest.getLocation()); | |
player.sendMessage(ChatColor.GREEN + "Compass is now pointing to " + nearest.getName() + "."); | |
} | |
} | |
@EventHandler | |
public void onPlayerDeathEvent(final PlayerDeathEvent event) { | |
if (this.hunters.contains(event.getEntity().getUniqueId())) { | |
event.getDrops().removeIf(next -> next.getType() == Material.COMPASS); | |
} | |
} | |
@EventHandler | |
public void onPlayerDropItemEvent(final PlayerDropItemEvent event) { | |
if (this.hunters.contains(event.getPlayer().getUniqueId()) && event.getItemDrop().getItemStack().getType() == Material.COMPASS) { | |
event.setCancelled(true); | |
} | |
} | |
@EventHandler | |
public void onPlayerRespawnEvent(final PlayerRespawnEvent event) { | |
final Player player = event.getPlayer(); | |
if (this.hunters.contains(player.getUniqueId())) { | |
player.getInventory().addItem(new ItemStack[] { new ItemStack(Material.COMPASS) }); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment