Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.31 KB | None | 0 0
  1. package com.garbagemule.MobArena;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Random;
  8. import java.util.UUID;
  9.  
  10. import com.garbagemule.MobArena.events.ArenaCompleteEvent;
  11.  
  12. import org.bukkit.Bukkit;
  13. import org.bukkit.Location;
  14. import org.bukkit.World;
  15. import org.bukkit.craftbukkit.Main;
  16. import org.bukkit.entity.LivingEntity;
  17. import org.bukkit.entity.Player;
  18. import org.bukkit.entity.Entity;
  19. import org.bukkit.entity.Zombie;
  20. import org.bukkit.inventory.ItemStack;
  21.  
  22. import com.garbagemule.MobArena.events.NewWaveEvent;
  23. import com.garbagemule.MobArena.framework.Arena;
  24. import com.garbagemule.MobArena.region.ArenaRegion;
  25. import com.garbagemule.MobArena.waves.*;
  26. import com.garbagemule.MobArena.waves.enums.WaveType;
  27. import com.garbagemule.MobArena.waves.types.BossWave;
  28. import com.garbagemule.MobArena.waves.types.SupplyWave;
  29. import com.garbagemule.MobArena.waves.types.UpgradeWave;
  30.  
  31. public class MASpawnThread implements Runnable
  32. {
  33.     private MobArena plugin;
  34.     private Arena arena;
  35.     private ArenaRegion region;
  36.     private RewardManager rewardManager;
  37.     private WaveManager waveManager;
  38.     private MonsterManager monsterManager;
  39.  
  40.     private int playerCount, monsterLimit;
  41.     private boolean waveClear, bossClear, preBossClear, wavesAsLevel;
  42.  
  43.     /**
  44.      * Create a new monster spawner for the input arena. Note that the arena's
  45.      * WaveManager is reset
  46.      *
  47.      * @param plugin
  48.      *            a MobArena instance
  49.      * @param arena
  50.      *            an arena
  51.      */
  52.     public MASpawnThread(MobArena plugin, Arena arena) {
  53.     this.plugin = plugin;
  54.     this.arena = arena;
  55.     this.region = arena.getRegion();
  56.     this.rewardManager = arena.getRewardManager();
  57.     this.waveManager = arena.getWaveManager();
  58.     this.monsterManager = arena.getMonsterManager();
  59.  
  60.     reset();
  61.     }
  62.  
  63.     /**
  64.      * Reset the spawner, so all systems and settings are ready for a new
  65.      * session.
  66.      */
  67.     public void reset() {
  68.     waveManager.reset();
  69.     playerCount = arena.getPlayersInArena().size();
  70.     monsterLimit = arena.getSettings().getInt("monster-limit", 100);
  71.     waveClear = arena.getSettings().getBoolean("clear-wave-before-next", false);
  72.     bossClear = arena.getSettings().getBoolean("clear-boss-before-next", false);
  73.     preBossClear = arena.getSettings().getBoolean("clear-wave-before-boss", false);
  74.     wavesAsLevel = arena.getSettings().getBoolean("display-waves-as-level", false);
  75.     }
  76.  
  77.     public void run() {
  78.     // If the arena isn't running or if there are no players in it.
  79.     if (!arena.isRunning() || arena.getPlayersInArena().isEmpty()) {
  80.         return;
  81.     }
  82.  
  83.     // Clear out all dead monsters in the monster set.
  84.     removeDeadMonsters();
  85.     removeCheatingPlayers();
  86.  
  87.     // In case some players were removed, check again.
  88.     if (!arena.isRunning()) {
  89.         return;
  90.     }
  91.  
  92.     // Grab the wave number.
  93.     int nextWave = waveManager.getWaveNumber() + 1;
  94.  
  95.     // Check if wave needs to be cleared first. If so, return!
  96.     if (!isWaveClear()) {
  97.         arena.scheduleTask(this, 60);
  98.         return;
  99.     }
  100.  
  101.     // Fire off the event. If cancelled, try again in 3 seconds.
  102.     NewWaveEvent event = new NewWaveEvent(arena, waveManager.getNext(), nextWave);
  103.     plugin.getServer().getPluginManager().callEvent(event);
  104.     if (event.isCancelled()) {
  105.         arena.scheduleTask(this, 60);
  106.         return;
  107.     }
  108.  
  109.     // Spawn the next wave.
  110.     MobSpawningTasks.put(arena.getSettings().getName(), spawnWave(nextWave));
  111.  
  112.     // Update stats
  113.     updateStats(nextWave);
  114.  
  115.     // Reschedule the spawner for the next wave.
  116.     arena.scheduleTask(this, arena.getSettings().getInt("wave-interval", 3) * 20);
  117.     }
  118.  
  119.    
  120.     public Random rand = new Random();
  121.     public Map<String, Integer> MobSpawningTasks = new HashMap<String, Integer>();
  122.  
  123.     private int spawnWave(final int wave) {
  124.     final Wave w = waveManager.next();
  125.  
  126.     w.announce(arena, wave);
  127.  
  128.     arena.getScoreboard().updateWave(wave);
  129.  
  130.     //If the task is not cleared for any reason remove it before creating a new one,
  131.     if (MobSpawningTasks.containsKey(arena.getSettings().getName())) {
  132.     MobSpawningTasks.remove(arena.getSettings().getName());
  133.     }
  134.    
  135.    
  136.    
  137.     int TaskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(MobArena.plugin, new Runnable() {
  138.  
  139.         Map<MACreature, Integer> monsters = w.getMonstersToSpawn(wave, playerCount, arena);
  140.         List<Location> spawnpoints = w.getSpawnpoints(arena);
  141.        
  142.        
  143.        
  144.         boolean SingleTimeCode = false;
  145.  
  146.         @Override public void run() {
  147.  
  148.         World world = arena.getWorld();
  149.         for (Map.Entry<MACreature, Integer> entry : monsters.entrySet()) {
  150.             int amount = entry.getValue();
  151.  
  152.             // Grab a spawnpoint
  153.             Location spawnpoint = spawnpoints.get(1);
  154.  
  155.             // Spawn the monster
  156.             LivingEntity e = entry.getKey().spawn(arena, world, spawnpoint);
  157.                     Zombie z = (Zombie) e;
  158.                     z.setBaby(false);
  159.                     z.setVillager(false);
  160.                     z.setCanPickupItems(false);
  161.                     z.getEquipment().setBootsDropChance(0);
  162.                     z.getEquipment().setLeggingsDropChance(0);
  163.                     z.getEquipment().setChestplateDropChance(0);
  164.                     z.getEquipment().setHelmetDropChance(0);
  165.                     z.getEquipment().setItemInHandDropChance(0);
  166.                     z.setRemoveWhenFarAway(false);
  167.                    
  168.            
  169.             // Add it to the arena.
  170.             monsterManager.addMonster(e);
  171.  
  172.             // Set the health.
  173.             e.resetMaxHealth();
  174.             int health = 10 + wave*3 + arena.getPlayerCount();
  175.             e.setMaxHealth(health + 1);
  176.             e.setHealth(health);
  177.  
  178.             MACreature maCreature = entry.getKey();
  179.  
  180.             //Code will only run ONCE per wave...
  181.             if (SingleTimeCode == false) {
  182.          
  183.             //Set zombie amount
  184.             amount = BaseAmount(wave) + playerCount + rand.nextInt((9 - 1) + 1) + 1;           
  185.             SingleTimeCode = true;
  186.             }
  187.            
  188.             //Lower the amount of mobs to spawn by one
  189.             if (amount > 0) {
  190.             monsters.clear();
  191.             monsters.put(maCreature, amount - 1);
  192.             }
  193.  
  194.             //If all mobs have spawned cancel the spawn task.
  195.             if (amount <= 0) {
  196.             Bukkit.getScheduler().cancelTask(MobSpawningTasks.get(arena.getSettings().getName()));
  197.             MobSpawningTasks.remove(arena.getSettings().getName());
  198.             }
  199.  
  200.         }
  201.  
  202.         }
  203.     }, 0l, 20l);
  204.  
  205.     return TaskID;
  206.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement