From 574596c8fb5446b868a79e252a98dd4dee7b7c24 Mon Sep 17 00:00:00 2001 From: Jos van 't Hof Date: Wed, 25 Apr 2012 18:38:53 +0200 Subject: [PATCH] Added world change listener for random spawning on world change. --- .../Listeners/WorldChangeListener.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 plugins/randomspawn-paper/Random Spawn/src/me/Josvth/RandomSpawn/Listeners/WorldChangeListener.java diff --git a/plugins/randomspawn-paper/Random Spawn/src/me/Josvth/RandomSpawn/Listeners/WorldChangeListener.java b/plugins/randomspawn-paper/Random Spawn/src/me/Josvth/RandomSpawn/Listeners/WorldChangeListener.java new file mode 100644 index 000000000..20f52f232 --- /dev/null +++ b/plugins/randomspawn-paper/Random Spawn/src/me/Josvth/RandomSpawn/Listeners/WorldChangeListener.java @@ -0,0 +1,87 @@ +package me.Josvth.RandomSpawn.Listeners; + +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerChangedWorldEvent; +import org.bukkit.metadata.FixedMetadataValue; + +import me.Josvth.RandomSpawn.RandomSpawn; + +public class WorldChangeListener { + + RandomSpawn plugin; + + public WorldChangeListener(RandomSpawn instance){ + plugin = instance; + } + + public void onPlayerWorldChange(PlayerChangedWorldEvent event){ + + Player player = event.getPlayer(); + String playerName = player.getName(); + + if (player.hasPermission("RandomSpawn.exclude")){ // checks if player should be excluded + plugin.logDebug(playerName + " is excluded from Random Spawning."); + return; + } + + World from = event.getFrom(); + World to = event.getPlayer().getWorld(); + + List randomSpawnFlags = plugin.yamlHandler.worlds.getStringList(to.getName() + ".randomspawnon"); + + if(randomSpawnFlags.contains("from-any-world")){ + randomSpawnPlayerInWorld(event.getPlayer(), to); + } + + if(to.getEnvironment().equals(Environment.NORMAL)){ // player going to a normal world + + World nether = plugin.getServer().getWorld(to.getName()+"_nether"); + World end = plugin.getServer().getWorld(to.getName()+"_the_end"); + + if(from.equals(nether)) { // player coming from own nether + if(randomSpawnFlags.contains("teleport-from-own-nether")){ + randomSpawnPlayerInWorld(event.getPlayer(), to); + } + }else if(from.equals(end)){ // player coming from own end + if(randomSpawnFlags.contains("teleport-from-own-end")){ + randomSpawnPlayerInWorld(event.getPlayer(), to); + } + } + }else if(to.getEnvironment().equals(Environment.NETHER)){ + World normal = plugin.getServer().getWorld(to.getName().replaceAll("[_nether]","")); + if(from.equals(normal)){ + if(randomSpawnFlags.contains("teleport-from-overworld")){ + randomSpawnPlayerInWorld(event.getPlayer(), to); + } + } + }else if(to.getEnvironment().equals(Environment.THE_END)){ + World normal = plugin.getServer().getWorld(to.getName().replaceAll("[_the_end]","")); + if(from.equals(normal)){ + if(randomSpawnFlags.contains("teleport-from-overworld")){ + randomSpawnPlayerInWorld(event.getPlayer(), to); + } + } + } + } + + public void randomSpawnPlayerInWorld(Player player, World world){ + + Location spawnLocation = plugin.chooseSpawn(world); + + plugin.sendGround(player, spawnLocation); + + player.teleport(spawnLocation); + + player.setMetadata("lasttimerandomspawned", new FixedMetadataValue(plugin, System.currentTimeMillis())); + + if (plugin.yamlHandler.config.getString("messages.randomspawned") != null){ + player.sendMessage(plugin.yamlHandler.config.getString("messages.randomspawned")); + } + + } +}