Update Treasure Digger, improved chest loot and map creation. Code refactoring on several challenges.
This commit is contained in:
parent
f242919759
commit
5ca96b5614
@ -30,7 +30,6 @@ import nautilus.game.arcade.game.SoloGame;
|
||||
import nautilus.game.arcade.game.games.holeinwall.KitNormal;
|
||||
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeAnvilDance;
|
||||
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeBlockRunner;
|
||||
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeEvolutionOfCombat;
|
||||
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeFallingBlocks;
|
||||
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeFastFood;
|
||||
import nautilus.game.arcade.game.games.mineware.challenges.ChallengeTreasureDigger;
|
||||
@ -147,11 +146,11 @@ public class MineWare extends SoloGame implements IThrown
|
||||
public void PopulateOrders()
|
||||
{
|
||||
_challenges.add(ChallengeTreasureDigger.class);
|
||||
// _challenges.add(ChallengeFastFood.class);
|
||||
_challenges.add(ChallengeFastFood.class);
|
||||
// _challenges.add(ChallengeEvolutionOfCombat.class);
|
||||
// _challenges.add(ChallengeBlockRunner.class);
|
||||
// _challenges.add(ChallengeAnvilDance.class);
|
||||
// _challenges.add(ChallengeFallingBlocks.class);
|
||||
_challenges.add(ChallengeBlockRunner.class);
|
||||
_challenges.add(ChallengeAnvilDance.class);
|
||||
_challenges.add(ChallengeFallingBlocks.class);
|
||||
|
||||
// _challenges.add(ChallengeWaveCrush.class);
|
||||
// _challenges.add(ChallengePickASide.class);
|
||||
|
@ -24,6 +24,7 @@ import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
@ -93,7 +94,61 @@ public class ChallengeAnvilDance extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
private void startItemClearTask()
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
checkInvalidFallingBlocksTask();
|
||||
startFallingTask();
|
||||
startDancingTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
{
|
||||
_paused = false;
|
||||
|
||||
for(Block block : _landedAnvils)
|
||||
{
|
||||
block.setType(Material.AIR);
|
||||
}
|
||||
|
||||
_landedAnvils.clear();
|
||||
_fallingAnvils.clear();
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof FallingBlock || entity instanceof Item)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onItemSpawn(ItemSpawnEvent event)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlockEvent(final EntityChangeBlockEvent event)
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
return;
|
||||
|
||||
if(event.getEntity() instanceof FallingBlock)
|
||||
{
|
||||
Block block = event.getBlock();
|
||||
|
||||
if(!_landedAnvils.contains(block))
|
||||
{
|
||||
_fallingAnvils.remove(event.getEntity());
|
||||
_landedAnvils.add(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkInvalidFallingBlocksTask()
|
||||
{
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@ -106,11 +161,15 @@ public class ChallengeAnvilDance extends Challenge
|
||||
return;
|
||||
}
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
Iterator<FallingBlock> blocks = _fallingAnvils.iterator();
|
||||
|
||||
while(blocks.hasNext())
|
||||
{
|
||||
if(entity instanceof Item && entity.isValid())
|
||||
FallingBlock block = blocks.next();
|
||||
|
||||
if(!block.isValid())
|
||||
{
|
||||
entity.remove();
|
||||
blocks.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -136,22 +195,6 @@ public class ChallengeAnvilDance extends Challenge
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 20L, 1L);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void createAnvil()
|
||||
{
|
||||
Location center = new Location(Host.WorldData.World, 0, UtilMath.r(3) + WaveHeight, 0);
|
||||
ArrayList<Location> locations = UtilShapes.getCircle(center, false, getArenaSize());
|
||||
|
||||
Location random = locations.get(UtilMath.r(locations.size()));
|
||||
|
||||
World world = random.getWorld();
|
||||
final FallingBlock block = world.spawnFallingBlock(random, Material.ANVIL, (byte) UtilMath.r(3));
|
||||
block.setDropItem(false);
|
||||
damageNearby(block);
|
||||
|
||||
_fallingAnvils.add(block);
|
||||
}
|
||||
|
||||
private void startDancingTask()
|
||||
{
|
||||
new BukkitRunnable()
|
||||
@ -198,32 +241,20 @@ public class ChallengeAnvilDance extends Challenge
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 100L, DanceDelay * 20);
|
||||
}
|
||||
|
||||
private void checkInvalidFallingBlocksTask()
|
||||
@SuppressWarnings("deprecation")
|
||||
private void createAnvil()
|
||||
{
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
{
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
Location center = new Location(Host.WorldData.World, 0, UtilMath.r(3) + WaveHeight, 0);
|
||||
ArrayList<Location> locations = UtilShapes.getCircle(center, false, getArenaSize());
|
||||
|
||||
Iterator<FallingBlock> blocks = _fallingAnvils.iterator();
|
||||
Location random = locations.get(UtilMath.r(locations.size()));
|
||||
|
||||
while(blocks.hasNext())
|
||||
{
|
||||
FallingBlock block = blocks.next();
|
||||
World world = random.getWorld();
|
||||
final FallingBlock block = world.spawnFallingBlock(random, Material.ANVIL, (byte) UtilMath.r(3));
|
||||
block.setDropItem(false);
|
||||
damageNearby(block);
|
||||
|
||||
if(!block.isValid())
|
||||
{
|
||||
blocks.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
_fallingAnvils.add(block);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@ -320,53 +351,4 @@ public class ChallengeAnvilDance extends Challenge
|
||||
}
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
startItemClearTask();
|
||||
checkInvalidFallingBlocksTask();
|
||||
startFallingTask();
|
||||
startDancingTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
{
|
||||
_paused = false;
|
||||
|
||||
for(Block block : _landedAnvils)
|
||||
{
|
||||
block.setType(Material.AIR);
|
||||
}
|
||||
|
||||
_landedAnvils.clear();
|
||||
_fallingAnvils.clear();
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof FallingBlock || entity instanceof Item)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlockEvent(final EntityChangeBlockEvent event)
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
return;
|
||||
|
||||
if(event.getEntity() instanceof FallingBlock)
|
||||
{
|
||||
Block block = event.getBlock();
|
||||
|
||||
if(!_landedAnvils.contains(block))
|
||||
{
|
||||
_fallingAnvils.remove(event.getEntity());
|
||||
_landedAnvils.add(block);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -87,18 +87,6 @@ public class ChallengeBlockRunner extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
private void setupInventoryContents(Player player)
|
||||
{
|
||||
ArrayList<Material> shuffledMaterials = new ArrayList<Material>(Arrays.asList(_materials));
|
||||
Collections.shuffle(shuffledMaterials);
|
||||
|
||||
for(Material material : shuffledMaterials)
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(material, InventoryBlockAmount);
|
||||
player.getInventory().addItem(itemStack);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
@ -183,6 +171,18 @@ public class ChallengeBlockRunner extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
private void setupInventoryContents(Player player)
|
||||
{
|
||||
ArrayList<Material> shuffledMaterials = new ArrayList<Material>(Arrays.asList(_materials));
|
||||
Collections.shuffle(shuffledMaterials);
|
||||
|
||||
for(Material material : shuffledMaterials)
|
||||
{
|
||||
ItemStack itemStack = new ItemStack(material, InventoryBlockAmount);
|
||||
player.getInventory().addItem(itemStack);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void blockBreakEffect(Block block)
|
||||
{
|
||||
|
@ -21,20 +21,20 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockFadeEvent;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class ChallengeFallingBlocks extends Challenge
|
||||
{
|
||||
// The chance of an anvil to spawn in a single block.
|
||||
private static final int SpawnChance = 15;
|
||||
private static final double SpawnChance = 20.0;
|
||||
|
||||
// The amount of times the spawn chance will increment after each wave.
|
||||
private static final int IncrementRate = 5;
|
||||
private static final double IncrementRate = 5.0;
|
||||
|
||||
// The map height where all anvil waves will spawn.
|
||||
private static final double WaveHeight = 10.0;
|
||||
@ -49,7 +49,7 @@ public class ChallengeFallingBlocks extends Challenge
|
||||
private int _wavesCompleted;
|
||||
|
||||
// After each wave, the anvil spawn chance increases.
|
||||
private int _modifiedSpawnChance;
|
||||
private double _modifiedSpawnChance;
|
||||
|
||||
// The remaining number of blocks before they dissapear.
|
||||
private HashSet<Block> _remaining = new HashSet<Block>();
|
||||
@ -117,8 +117,54 @@ public class ChallengeFallingBlocks extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
private void startItemClearTask()
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
// startItemClearTask();
|
||||
startWavesTask();
|
||||
startWaveTimerTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
{
|
||||
_time = 0;
|
||||
_wavesCompleted = 0;
|
||||
_modifiedSpawnChance = 0;
|
||||
|
||||
for(Block block : _remaining)
|
||||
{
|
||||
block.setType(Material.AIR);
|
||||
}
|
||||
|
||||
_remaining.clear();
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof FallingBlock)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onItemSpawn(ItemSpawnEvent event)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlockEvent(final EntityChangeBlockEvent event)
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
return;
|
||||
|
||||
if(event.getEntity() instanceof FallingBlock)
|
||||
{
|
||||
final Block block = event.getBlock();
|
||||
_remaining.add(block);
|
||||
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
@ -130,15 +176,24 @@ public class ChallengeFallingBlocks extends Challenge
|
||||
return;
|
||||
}
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(block.getType(), 0), block.getLocation(), 0.3F, 0.3F, 0.3F, 0.0F,
|
||||
3, ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
block.setType(Material.AIR);
|
||||
_remaining.remove(block);
|
||||
}
|
||||
}.runTaskLater(Host.getArcadeManager().getPlugin(), 40L);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockFade(BlockFadeEvent event)
|
||||
{
|
||||
if(entity instanceof Item && entity.isValid())
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
return;
|
||||
|
||||
if(event.getNewState().getType() == Material.DIRT || event.getNewState().getType() == Material.GRASS)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
private void startWavesTask()
|
||||
@ -159,42 +214,6 @@ public class ChallengeFallingBlocks extends Challenge
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 20 * NextWave, 20 * NextWave);
|
||||
}
|
||||
|
||||
private void createWave()
|
||||
{
|
||||
if(_modifiedSpawnChance < 100)
|
||||
_modifiedSpawnChance += IncrementRate;
|
||||
|
||||
_wavesCompleted++;
|
||||
|
||||
Sound nextSound = _sounds[UtilMath.r(_sounds.length)];
|
||||
|
||||
for(Player player : Host.GetPlayers(true))
|
||||
{
|
||||
player.playSound(player.getLocation(), nextSound, 1.0F, 1.5F);
|
||||
}
|
||||
|
||||
Location center = new Location(Host.WorldData.World, 0, WaveHeight, 0);
|
||||
|
||||
for(Location location : UtilShapes.getCircle(center, false, getArenaSize()))
|
||||
{
|
||||
if(UtilMath.r(100) <= _modifiedSpawnChance)
|
||||
{
|
||||
createFallingBlock(location);
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent camping
|
||||
for(Player player : Host.GetPlayers(true))
|
||||
{
|
||||
Location camp = player.getLocation();
|
||||
|
||||
if(camp.getY() >= 1 && camp.getY() <= 3)
|
||||
{
|
||||
createFallingBlock(new Location(Host.WorldData.World, camp.getX(), WaveHeight, camp.getZ()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void startWaveTimerTask()
|
||||
{
|
||||
new BukkitRunnable()
|
||||
@ -230,6 +249,42 @@ public class ChallengeFallingBlocks extends Challenge
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 20L);
|
||||
}
|
||||
|
||||
private void createWave()
|
||||
{
|
||||
if(_modifiedSpawnChance < 100.0)
|
||||
_modifiedSpawnChance += IncrementRate;
|
||||
|
||||
_wavesCompleted++;
|
||||
|
||||
Sound nextSound = _sounds[UtilMath.r(_sounds.length)];
|
||||
|
||||
for(Player player : Host.GetPlayers(true))
|
||||
{
|
||||
player.playSound(player.getLocation(), nextSound, 1.0F, 1.5F);
|
||||
}
|
||||
|
||||
Location center = new Location(Host.WorldData.World, 0, WaveHeight, 0);
|
||||
|
||||
for(Location location : UtilShapes.getCircle(center, false, getArenaSize()))
|
||||
{
|
||||
if(Math.random() * 100 <= _modifiedSpawnChance)
|
||||
{
|
||||
createFallingBlock(location);
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent camping
|
||||
for(Player player : Host.GetPlayers(true))
|
||||
{
|
||||
Location camp = player.getLocation();
|
||||
|
||||
if(camp.getY() >= 1 && camp.getY() <= 3)
|
||||
{
|
||||
createFallingBlock(new Location(Host.WorldData.World, camp.getX(), WaveHeight, camp.getZ()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void createFallingBlock(Location location)
|
||||
{
|
||||
@ -276,77 +331,4 @@ public class ChallengeFallingBlocks extends Challenge
|
||||
}
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
startItemClearTask();
|
||||
startWavesTask();
|
||||
startWaveTimerTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
{
|
||||
_time = 0;
|
||||
_wavesCompleted = 0;
|
||||
_modifiedSpawnChance = 0;
|
||||
|
||||
for(Block block : _remaining)
|
||||
{
|
||||
block.setType(Material.AIR);
|
||||
}
|
||||
|
||||
_remaining.clear();
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof FallingBlock)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlockEvent(final EntityChangeBlockEvent event)
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
return;
|
||||
|
||||
if(event.getEntity() instanceof FallingBlock)
|
||||
{
|
||||
final Block block = event.getBlock();
|
||||
_remaining.add(block);
|
||||
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
{
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.BLOCK_CRACK.getParticle(block.getType(), 0), block.getLocation(), 0.3F, 0.3F, 0.3F, 0.0F,
|
||||
3, ViewDist.LONG, UtilServer.getPlayers());
|
||||
|
||||
block.setType(Material.AIR);
|
||||
_remaining.remove(block);
|
||||
}
|
||||
}.runTaskLater(Host.getArcadeManager().getPlugin(), 40L);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockFade(BlockFadeEvent event)
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
return;
|
||||
|
||||
if(event.getNewState().getType() == Material.DIRT || event.getNewState().getType() == Material.GRASS)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -79,6 +79,34 @@ public class ChallengeFastFood extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
itemParticleTask();
|
||||
|
||||
for(Player player : Host.GetPlayers(true))
|
||||
{
|
||||
for(int i = 0; i < 9; i++)
|
||||
{
|
||||
player.getInventory().setItem(i, getRandomFood());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
{
|
||||
itemSeperator = 0;
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof Item)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
@ -101,6 +129,53 @@ public class ChallengeFastFood extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
private void itemParticleTask()
|
||||
{
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
{
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof Item)
|
||||
{
|
||||
Item item = (Item) entity;
|
||||
|
||||
if(!item.isValid() || item.isDead() || item.isOnGround() || item.getItemStack().getType() == Material.INK_SACK)
|
||||
continue;
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.INSTANT_SPELL, item.getLocation(), 0, 0, 0, 0, 1, ViewDist.NORMAL,
|
||||
UtilServer.getPlayers());
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
}
|
||||
|
||||
private ItemStack getRandomFood()
|
||||
{
|
||||
Material foodMaterial = UtilMath.randomElement(_food);
|
||||
byte data = 0;
|
||||
|
||||
if(foodMaterial == Material.RAW_FISH)
|
||||
{
|
||||
data = (byte) (UtilMath.r(3) + 1);
|
||||
}
|
||||
else if(foodMaterial == Material.COOKED_FISH)
|
||||
{
|
||||
data = (byte) UtilMath.r(1);
|
||||
}
|
||||
|
||||
return new ItemStack(foodMaterial, 5, (byte) data);
|
||||
}
|
||||
|
||||
private void chanceItemSlot(Player player)
|
||||
{
|
||||
for(int i = 0; i < 9; i++)
|
||||
@ -139,44 +214,6 @@ public class ChallengeFastFood extends Challenge
|
||||
checkForWinner(player);
|
||||
}
|
||||
|
||||
private void checkForWinner(Player player)
|
||||
{
|
||||
ArrayList<ItemStack> items = UtilInv.getItems(player);
|
||||
|
||||
if(items.size() == 0)
|
||||
SetCompleted(player);
|
||||
}
|
||||
|
||||
private void itemParticleTask()
|
||||
{
|
||||
new BukkitRunnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if(!Host.IsLive() || !Host.isChallengeStarted())
|
||||
{
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof Item)
|
||||
{
|
||||
Item item = (Item) entity;
|
||||
|
||||
if(!item.isValid() || item.isDead() || item.isOnGround() || item.getItemStack().getType() == Material.INK_SACK)
|
||||
continue;
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.INSTANT_SPELL, item.getLocation(), 0, 0, 0, 0, 1, ViewDist.NORMAL,
|
||||
UtilServer.getPlayers());
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
}
|
||||
|
||||
private void growGrassTask(final Item item)
|
||||
{
|
||||
new BukkitRunnable()
|
||||
@ -238,6 +275,14 @@ public class ChallengeFastFood extends Challenge
|
||||
}.runTaskTimer(Host.getArcadeManager().getPlugin(), 0L, 1L);
|
||||
}
|
||||
|
||||
private void checkForWinner(Player player)
|
||||
{
|
||||
ArrayList<ItemStack> items = UtilInv.getItems(player);
|
||||
|
||||
if(items.size() == 0)
|
||||
SetCompleted(player);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void blockBreakEffect(Block block)
|
||||
{
|
||||
@ -245,49 +290,4 @@ public class ChallengeFastFood extends Challenge
|
||||
10, ViewDist.NORMAL, UtilServer.getPlayers());
|
||||
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getTypeId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
itemParticleTask();
|
||||
|
||||
for(Player player : Host.GetPlayers(true))
|
||||
{
|
||||
for(int i = 0; i < 9; i++)
|
||||
{
|
||||
player.getInventory().setItem(i, getRandomFood());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getRandomFood()
|
||||
{
|
||||
Material foodMaterial = UtilMath.randomElement(_food);
|
||||
byte data = 0;
|
||||
|
||||
if(foodMaterial == Material.RAW_FISH)
|
||||
{
|
||||
data = (byte) (UtilMath.r(3) + 1);
|
||||
}
|
||||
else if(foodMaterial == Material.COOKED_FISH)
|
||||
{
|
||||
data = (byte) UtilMath.r(1);
|
||||
}
|
||||
|
||||
return new ItemStack(foodMaterial, 5, (byte) data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupRoom()
|
||||
{
|
||||
itemSeperator = 0;
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof Item)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,14 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Chest;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@ -42,8 +46,8 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
_lootChance.put(Material.GOLD_SWORD, 10.0);
|
||||
_lootChance.put(Material.DIAMOND_SWORD, 5.0);
|
||||
|
||||
_lootChance.put(Material.GOLD_SPADE, 5.0);
|
||||
_lootChance.put(Material.GOLD_PICKAXE, 5.0);
|
||||
_lootChance.put(Material.IRON_SPADE, 15.0);
|
||||
_lootChance.put(Material.IRON_PICKAXE, 15.0);
|
||||
|
||||
_lootChance.put(Material.GOLDEN_APPLE, 5.0);
|
||||
_lootChance.put(Material.FISHING_ROD, 10.0);
|
||||
@ -52,76 +56,27 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
|
||||
_lootChance.put(Material.LEATHER_HELMET, 20.0);
|
||||
_lootChance.put(Material.LEATHER_CHESTPLATE, 15.0);
|
||||
_lootChance.put(Material.LEATHER_LEGGINGS, 10.0);
|
||||
_lootChance.put(Material.LEATHER_LEGGINGS, 12.0);
|
||||
_lootChance.put(Material.LEATHER_BOOTS, 20.0);
|
||||
|
||||
_lootChance.put(Material.CHAINMAIL_HELMET, 10.0);
|
||||
_lootChance.put(Material.CHAINMAIL_CHESTPLATE, 5.0);
|
||||
_lootChance.put(Material.CHAINMAIL_LEGGINGS, 5.0);
|
||||
_lootChance.put(Material.CHAINMAIL_LEGGINGS, 7.0);
|
||||
_lootChance.put(Material.CHAINMAIL_BOOTS, 10.0);
|
||||
|
||||
_lootChance.put(Material.IRON_HELMET, 10.0);
|
||||
_lootChance.put(Material.IRON_CHESTPLATE, 5.0);
|
||||
_lootChance.put(Material.IRON_LEGGINGS, 5.0);
|
||||
_lootChance.put(Material.IRON_LEGGINGS, 7.0);
|
||||
_lootChance.put(Material.IRON_BOOTS, 10.0);
|
||||
|
||||
_lootChance.put(Material.DIAMOND_HELMET, 5.0);
|
||||
_lootChance.put(Material.DIAMOND_CHESTPLATE, 2.0);
|
||||
_lootChance.put(Material.DIAMOND_LEGGINGS, 2.0);
|
||||
_lootChance.put(Material.DIAMOND_LEGGINGS, 4.0);
|
||||
_lootChance.put(Material.DIAMOND_BOOTS, 5.0);
|
||||
|
||||
_lootContents = _lootChance.keySet().toArray(new Material[_lootChance.keySet().size()]);
|
||||
}
|
||||
|
||||
private Material getRandomLootMaterial()
|
||||
{
|
||||
Material loot = UtilMath.randomElement(_lootContents);
|
||||
return loot;
|
||||
}
|
||||
|
||||
private double getLootChance(Material loot)
|
||||
{
|
||||
return _lootChance.get(loot);
|
||||
}
|
||||
|
||||
private void fillChestWithLoot(Chest chest)
|
||||
{
|
||||
Inventory inv = chest.getInventory();
|
||||
|
||||
for(int i = 0; i <= UtilMath.r(2) + 1; i++)
|
||||
{
|
||||
double chance = Math.random() * 100;
|
||||
Material loot = getRandomLootMaterial();
|
||||
double lootChance = getLootChance(loot);
|
||||
|
||||
while(chance >= lootChance)
|
||||
{
|
||||
chance = Math.random() * 100;
|
||||
loot = getRandomLootMaterial();
|
||||
lootChance = getLootChance(loot);
|
||||
}
|
||||
|
||||
if(chance < lootChance)
|
||||
{
|
||||
ItemStack item = new ItemStack(loot);
|
||||
|
||||
if(item.getType() == Material.ARROW || item.getType() == Material.BONE || item.getType() == Material.STRING)
|
||||
{
|
||||
item.setAmount(UtilMath.r(3) + 1);
|
||||
}
|
||||
|
||||
int slot = UtilMath.r(inv.getSize());
|
||||
|
||||
while(inv.getItem(slot) != null && inv.getContents().length != inv.getSize())
|
||||
{
|
||||
slot = UtilMath.r(inv.getSize());
|
||||
}
|
||||
|
||||
inv.setItem(slot, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<Location> getSpawns()
|
||||
{
|
||||
@ -169,7 +124,7 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
{
|
||||
block.setType(Material.SAND);
|
||||
|
||||
if (chance < 20.0)
|
||||
if(chance < 20.0)
|
||||
{
|
||||
block.setData((byte) 1);
|
||||
}
|
||||
@ -188,7 +143,7 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
{
|
||||
block.setType(Material.SAND);
|
||||
|
||||
if (chance < 20.0)
|
||||
if(chance < 20.0)
|
||||
{
|
||||
block.setData((byte) 1);
|
||||
}
|
||||
@ -199,7 +154,7 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
block.setData((byte) 0);
|
||||
}
|
||||
}
|
||||
else if (i == 3)
|
||||
else if(i == 3)
|
||||
{
|
||||
block.setType(Material.SAND);
|
||||
|
||||
@ -221,56 +176,6 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event)
|
||||
{
|
||||
event.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
|
||||
{
|
||||
if(event.getEntity() instanceof Player && event.getDamager() instanceof Player)
|
||||
{
|
||||
Player damager = (Player) event.getDamager();
|
||||
ItemStack item = damager.getItemInHand();
|
||||
|
||||
if(item != null)
|
||||
{
|
||||
if(!item.getType().name().toLowerCase().contains("sword"))
|
||||
{
|
||||
UtilTextMiddle.display("", C.cRed + "You cannot attack without a weapon.", 5, 40, 5, damager);
|
||||
damager.playSound(damager.getLocation(), Sound.NOTE_BASS_GUITAR, 1.0F, 0.5F);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void makeChestWithTreasure(Block block)
|
||||
{
|
||||
if(!canCollapseWithChests(block))
|
||||
{
|
||||
block.setType(Material.CHEST);
|
||||
block.setData((byte) UtilMath.r(4));
|
||||
|
||||
Chest chest = (Chest) block.getState();
|
||||
fillChestWithLoot(chest);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canCollapseWithChests(Block block)
|
||||
{
|
||||
Block north = block.getRelative(BlockFace.NORTH);
|
||||
Block south = block.getRelative(BlockFace.SOUTH);
|
||||
Block east = block.getRelative(BlockFace.EAST);
|
||||
Block west = block.getRelative(BlockFace.WEST);
|
||||
|
||||
return north.getType() == Material.CHEST || south.getType() == Material.CHEST || east.getType() == Material.CHEST
|
||||
|| west.getType() == Material.CHEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupPlayers()
|
||||
{
|
||||
@ -301,5 +206,122 @@ public class ChallengeTreasureDigger extends Challenge
|
||||
Host.DamagePvP = false;
|
||||
Host.WorldBlockBurn = false;
|
||||
Host.WorldFireSpread = false;
|
||||
|
||||
for(Entity entity : Host.WorldData.World.getEntities())
|
||||
{
|
||||
if(entity instanceof Item)
|
||||
{
|
||||
entity.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onItemSpawn(ItemSpawnEvent event)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityChangeBlock(EntityChangeBlockEvent event)
|
||||
{
|
||||
if(event.getEntity() instanceof FallingBlock)
|
||||
{
|
||||
FallingBlock block = (FallingBlock) event.getEntity();
|
||||
block.setDropItem(false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
|
||||
{
|
||||
if(event.getEntity() instanceof Player && event.getDamager() instanceof Player)
|
||||
{
|
||||
Player damager = (Player) event.getDamager();
|
||||
ItemStack item = damager.getItemInHand();
|
||||
|
||||
if(item != null)
|
||||
{
|
||||
if(!item.getType().name().toLowerCase().contains("sword"))
|
||||
{
|
||||
UtilTextMiddle.display("", C.cRed + "You cannot attack without a weapon.", 5, 40, 5, damager);
|
||||
damager.playSound(damager.getLocation(), Sound.NOTE_BASS_GUITAR, 1.0F, 0.5F);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void makeChestWithTreasure(Block block)
|
||||
{
|
||||
if(!areChestsNearby(block))
|
||||
{
|
||||
block.setType(Material.CHEST);
|
||||
block.setData((byte) UtilMath.r(4));
|
||||
|
||||
Chest chest = (Chest) block.getState();
|
||||
fillChestWithLoot(chest);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean areChestsNearby(Block block)
|
||||
{
|
||||
Block north = block.getRelative(BlockFace.NORTH);
|
||||
Block south = block.getRelative(BlockFace.SOUTH);
|
||||
Block east = block.getRelative(BlockFace.EAST);
|
||||
Block west = block.getRelative(BlockFace.WEST);
|
||||
|
||||
return north.getType() == Material.CHEST || south.getType() == Material.CHEST || east.getType() == Material.CHEST
|
||||
|| west.getType() == Material.CHEST;
|
||||
}
|
||||
|
||||
private void fillChestWithLoot(Chest chest)
|
||||
{
|
||||
Inventory inv = chest.getInventory();
|
||||
|
||||
for(int i = 0; i <= UtilMath.r(2) + 1; i++)
|
||||
{
|
||||
double chance = Math.random() * 100;
|
||||
Material loot = getRandomLootMaterial();
|
||||
double lootChance = getLootChance(loot);
|
||||
|
||||
while(chance >= lootChance)
|
||||
{
|
||||
chance = Math.random() * 100;
|
||||
loot = getRandomLootMaterial();
|
||||
lootChance = getLootChance(loot);
|
||||
}
|
||||
|
||||
if(chance < lootChance)
|
||||
{
|
||||
ItemStack item = new ItemStack(loot);
|
||||
|
||||
if(item.getType() == Material.ARROW || item.getType() == Material.BONE || item.getType() == Material.STRING)
|
||||
{
|
||||
item.setAmount(UtilMath.r(3) + 1);
|
||||
}
|
||||
|
||||
int slot = UtilMath.r(inv.getSize());
|
||||
|
||||
while(inv.getItem(slot) != null && inv.getContents().length != inv.getSize())
|
||||
{
|
||||
slot = UtilMath.r(inv.getSize());
|
||||
}
|
||||
|
||||
inv.setItem(slot, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Material getRandomLootMaterial()
|
||||
{
|
||||
Material loot = UtilMath.randomElement(_lootContents);
|
||||
return loot;
|
||||
}
|
||||
|
||||
private double getLootChance(Material loot)
|
||||
{
|
||||
return _lootChance.get(loot);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user