SG Update

This commit is contained in:
Chiss 2013-11-22 18:40:38 +11:00
parent 7aec2d572b
commit 0a683416ff
24 changed files with 1104 additions and 294 deletions

View File

@ -100,10 +100,12 @@ public class WorldUtil
internal.setSpawnFlags(true, true);
server.getServer().worlds.add(internal);
/*
for (WorldServer worlder : server.getServer().worlds)
{
System.out.println(worlder.getWorldData().getName() + " with dimension: " + worlder.dimension);
}
*/
if (generator != null)
{
@ -113,10 +115,12 @@ public class WorldUtil
server.getPluginManager().callEvent(new WorldInitEvent(internal.getWorld()));
server.getPluginManager().callEvent(new WorldLoadEvent(internal.getWorld()));
/*
for (WorldServer worlder : server.getServer().worlds)
{
System.out.println(worlder.getWorldData().getName() + " with dimension: " + worlder.dimension);
}
*/
return internal.getWorld();
}

View File

@ -16,7 +16,6 @@ import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
public class AntiStack extends MiniPlugin
@ -33,6 +32,9 @@ public class AntiStack extends MiniPlugin
@EventHandler(priority = EventPriority.MONITOR)
public void BlockBreak(BlockBreakEvent event)
{
if (!_enabled)
return;
if (event.isCancelled())
return;
@ -42,6 +44,9 @@ public class AntiStack extends MiniPlugin
@EventHandler
public void ClearIgnoreAround(UpdateEvent event)
{
if (!_enabled)
return;
if (event.getType() != UpdateType.TICK)
return;

View File

@ -21,6 +21,11 @@ import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
@ -81,7 +86,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
private GameManager _gameManager;
private GameLobbyManager _gameLobbyManager;
private GameWorldManager _gameWorldManager;
private ClassManager _classManager;
private SkillFactory _skillFactory;
private ClassShopManager _classShopManager;
@ -101,7 +106,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
//Modules
_antistack = antistack;
_blockRestore = new BlockRestore(plugin);
_blood = blood;
@ -126,17 +131,17 @@ public class ArcadeManager extends MiniPlugin implements IRelation
_firework = new FireworkHandler();
_fire = new Fire(plugin, conditionManager, damageManager);
_projectileManager = new ProjectileManager(plugin);
/*
_skillFactory = new SkillFactory(plugin, damageManager, this, new CombatManager(plugin), conditionManager, _projectileManager, _blockRestore, _fire, new Movement(plugin), plugin.GetTeleport(), new Energy(plugin), webAddress);
_classManager = new ClassManager(plugin, clientManager, donationManager, _skillFactory, webAddress);
_classShopManager = new ClassShopManager(_plugin, _classManager, _skillFactory, new ItemPackFactory(_plugin));
_classCustomBuildShop = new ClassCombatCustomBuildShop(_classShopManager, clientManager, donationManager, webAddress);
*/
*/
_portal = portal;
//Shop
@ -184,7 +189,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
{
return _antistack;
}
public Blood GetBlood()
{
return _blood;
@ -229,7 +234,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
{
return _donationManager;
}
public Explosion GetExplosion()
{
return _explosionManager;
@ -348,7 +353,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
if (_game.IsPlaying(player))
return false;
return true;
}
@ -356,7 +361,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
public void MessageMOTD(ServerListPingEvent event)
{
String extrainformation = "|" + _serverConfig.ServerType + "|" + (_game == null ? "Unknown" : _game.GetName()) + "|" + ((_game == null || _game.WorldData == null) ? "Unknown" : _game.WorldData.MapName);
if (_game == null || _game.GetState() == GameState.Recruit)
{
if (_game != null && _game.GetType() == GameType.UHC)
@ -364,7 +369,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
event.setMotd(ChatColor.RED + "UHC - Season 3");
return;
}
if (_game != null && _game.GetCountdown() != -1)
{
event.setMotd(ChatColor.GREEN + "Starting in " + _game.GetCountdown() + " Seconds" + extrainformation);
@ -424,11 +429,11 @@ public class ArcadeManager extends MiniPlugin implements IRelation
player.getInventory().setItem(8, ItemStackFactory.Instance.CreateStack(Material.WATCH, (byte)0, 1, (short)0, C.cGreen + "Return to Hub",
new String[] {"", ChatColor.RESET + "Click while holding this", ChatColor.RESET + "to return to the Hub."}));
}
@EventHandler
public void Login(PlayerLoginEvent event)
{
// Reserved Slot Check
// Reserved Slot Check
if (Bukkit.getOnlinePlayers().length >= Bukkit.getServer().getMaxPlayers())
{
if (_clientManager.Get(event.getPlayer().getName()).GetRank().Has(event.getPlayer(), Rank.ULTRA, false) || _donationManager.Get(event.getPlayer().getName()).OwnsUnknownPackage(_serverConfig.ServerType + " ULTRA"))
@ -437,7 +442,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
event.setResult(PlayerLoginEvent.Result.ALLOWED);
return;
}
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "Server Full > Donate for Ultra");
}
}
@ -455,21 +460,21 @@ public class ArcadeManager extends MiniPlugin implements IRelation
player.setGameMode(GameMode.SURVIVAL);
player.setAllowFlight(false);
UtilInv.Clear(player);
((CraftEntity)player).getHandle().getDataWatcher().watch(0, Byte.valueOf((byte) 0));
player.setFoodLevel(20);
player.setSaturation(3f);
player.setExhaustion(0f);
player.setHealth(20);
player.setFireTicks(0);
player.setFallDistance(0);
player.setLevel(0);
player.setExp(0f);
((CraftPlayer)player).getHandle().spectating = false;
((CraftPlayer)player).getHandle().m = true;
@ -517,7 +522,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
{
return _classManager;
}
public ClassCombatCustomBuildShop getClassShop()
{
return _classCustomBuildShop;
@ -527,4 +532,39 @@ public class ArcadeManager extends MiniPlugin implements IRelation
{
_classCustomBuildShop.attemptShopOpen(player);
}
@EventHandler
public void BlockBurn(BlockBurnEvent event)
{
if (_game == null)
event.setCancelled(true);
}
@EventHandler
public void BlockSpread(BlockSpreadEvent event)
{
if (_game == null)
event.setCancelled(true);
}
@EventHandler
public void BlockFade(BlockFadeEvent event)
{
if (_game == null)
event.setCancelled(true);
}
@EventHandler
public void BlockDecay(LeavesDecayEvent event)
{
if (_game == null)
event.setCancelled(true);
}
@EventHandler
public void MobSpawn(CreatureSpawnEvent event)
{
if (_game == null)
event.setCancelled(true);
}
}

View File

@ -16,7 +16,7 @@ public enum GameType
Halloween("Halloween Horror"),
HideSeek("Block Hunt"),
Horse("Horseback"),
HungerGames("Hunger Games"),
HungerGames("Survival Games"),
MineWare("MineWare"),
MilkCow("Milk the Cow"),
Paintball("Super Paintball"),

View File

@ -45,6 +45,7 @@ import org.bukkit.inventory.meta.FireworkMeta;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilInv;
@ -690,8 +691,7 @@ public class HideSeek extends TeamGame
else if (UtilGear.isMat(player.getItemInHand(), Material.STONE_AXE))
{
Manager.GetCondition().Factory().Speed("Boost", player, player, 4, 1, false, false, false);
Manager.GetCondition().Factory().Regen("Boost", player, player, 4, 0, false, false, false);
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.elem("Ultra Boost") + "!"));
@ -700,9 +700,9 @@ public class HideSeek extends TeamGame
}
else if (UtilGear.isMat(player.getItemInHand(), Material.IRON_AXE))
{
Manager.GetCondition().Factory().Speed("Boost", player, player, 4, 2, false, false, false);
Manager.GetCondition().Factory().Regen("Boost", player, player, 4, 1, false, false, false);
Manager.GetCondition().Factory().Speed("Boost", player, player, 4, 1, false, false, false);
Manager.GetCondition().Factory().Regen("Boost", player, player, 4, 0, false, false, false);
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.elem("Mega Boost") + "!"));
@ -711,8 +711,8 @@ public class HideSeek extends TeamGame
}
else if (UtilGear.isMat(player.getItemInHand(), Material.DIAMOND_AXE))
{
Manager.GetCondition().Factory().Speed("Boost", player, player, 4, 3, false, false, false);
Manager.GetCondition().Factory().Regen("Boost", player, player, 4, 2, false, false, false);
Manager.GetCondition().Factory().Speed("Boost", player, player, 4, 2, false, false, false);
Manager.GetCondition().Factory().Regen("Boost", player, player, 4, 1, false, false, false);
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.elem("Hyper Boost") + "!"));
@ -1037,4 +1037,14 @@ public class HideSeek extends TeamGame
{
return DeathMessageType.Detailed;
}
@EventHandler
public void UsableCancel(PlayerInteractEvent event)
{
if (event.getClickedBlock() == null)
return;
if (UtilBlock.usable(event.getClickedBlock()))
event.setCancelled(true);
}
}

View File

@ -43,7 +43,7 @@ public class BlockForm extends Form
Apply();
}
@Override
public void Apply()
{

View File

@ -0,0 +1,17 @@
package nautilus.game.arcade.game.games.hungergames;
import org.bukkit.Location;
public class BlockChange
{
public Location Location;
public int Id;
public byte Data;
public BlockChange(Location loc, int id, byte data)
{
Location = loc;
Id = id;
Data = data;
}
}

View File

@ -4,34 +4,59 @@ import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.Color;
import org.bukkit.Effect;
import org.bukkit.FireworkEffect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Chest;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent;
import org.bukkit.event.entity.ItemSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.MapUtil;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.common.util.UtilWorld;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
@ -45,8 +70,15 @@ import nautilus.game.arcade.kit.Kit;
public class HungerGames extends SoloGame
{
private HashSet<Location> _openedChest = new HashSet<Location>();
private ArrayList<ItemStack> _chestLoot = new ArrayList<ItemStack>();
private ArrayList<ItemStack> _baseChestLoot = new ArrayList<ItemStack>();
private ArrayList<ItemStack> _superChestLoot = new ArrayList<ItemStack>();
//Misc
private HashMap<Entity, Player> _tntMap = new HashMap<Entity, Player>();
private HashSet<Location> _placedBlocks = new HashSet<Location>();
//Creep
private int _maxSpreadRate = 60;
private ArrayList<Location> _redLocations = new ArrayList<Location>();
private int _spreadType = 0;
private String _spreadName = "";
@ -54,7 +86,16 @@ public class HungerGames extends SoloGame
private ArrayList<Entry<Integer, Integer>> _spreadTypeBlocks;
private Location _spreadSafe = null;
private HashMap<Player, Long> _redOutTime = new HashMap<Player, Long>();
private ArrayList<BlockChange> _redQueue = new ArrayList<BlockChange>();
//Supply Drop
private ArrayList<Location> _supplyLocations = new ArrayList<Location>();
private Location _supplyCurrent = null;
private Location _supplyEffect = null;
private ArrayList<Block> _supplyChests = new ArrayList<Block>();
//Debug
private long totalTime = 0;
public HungerGames(ArcadeManager manager)
@ -63,14 +104,14 @@ public class HungerGames extends SoloGame
new Kit[]
{
new KitHunter(manager),
new KitLooter(manager),
new KitAxeman(manager),
//new KitLooter(manager),
new KitKnight(manager),
new KitArcher(manager),
new KitAssassin(manager),
new KitBrawler(manager),
new KitAssassin(manager),
new KitBeastmaster(manager),
new KitBomber(manager),
new KitNecromancer(manager)
@ -78,19 +119,24 @@ public class HungerGames extends SoloGame
new String[]
{
"Scavenge supplies to survive.",
"Playable area shrinks over time!",
"Last player alive wins!"
"Search for chests to find loot",
"Slaughter your opponents",
"Stay away from the Deep Freeze!",
"Last tribute alive wins!"
});
Manager.GetAntiStack().SetEnabled(false);
this.WorldTimeSet = 13000;
this.SpawnDistanceRequirement = 48;
this.DamageSelf = true;
this.DamageTeamSelf = true;
this.DeathOut = false; //XXX
this.DeathDropItems = true;
this.ItemDrop = true;
this.ItemPickup = true;
@ -98,10 +144,27 @@ public class HungerGames extends SoloGame
this.GemMultiplier = 2;
//Blocks
this.BlockBreakAllow.add(30); //Web
this.BlockPlaceAllow.add(30);
this.BlockBreakAllow.add(132); //Tripwire
this.BlockPlaceAllow.add(132);
this.BlockBreakAllow.add(131); //Wire Hook
this.BlockPlaceAllow.add(131);
this.BlockBreakAllow.add(55); //Redstone Dust
this.BlockPlaceAllow.add(55);
this.BlockBreakAllow.add(72); //Wood Pressure Plate
this.BlockPlaceAllow.add(72);
this.BlockBreakAllow.add(69); //Lever
this.BlockPlaceAllow.add(69);
//SPREAD
_spreadType = 1;//UtilMath.r(3);
System.out.println("===================");
System.out.println("SPREAD TYPE: " + _spreadType);
System.out.println("===================");
_spreadTypeBlocks = new ArrayList<Entry<Integer, Integer>>();
@ -122,11 +185,17 @@ public class HungerGames extends SoloGame
else if (_spreadType == 2)
{
_spreadName = "Nether Corruption";
_ignoreLiquids = false;
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(49, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(87, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(88, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(89, 0));
_spreadTypeBlocks.add(new AbstractMap.SimpleEntry<Integer, Integer>(153, 0));
}
System.out.println("===================");
System.out.println("CREEP TYPE: " + _spreadName);
System.out.println("===================");
}
@Override
@ -135,16 +204,54 @@ public class HungerGames extends SoloGame
return 4;
}
@EventHandler
public void BlockBreak(BlockBreakEvent event)
@Override
public void ParseData()
{
event.setCancelled(true);
event.getBlock().setTypeId(0);
event.getBlock().getWorld().playEffect(event.getBlock().getLocation(), Effect.STEP_SOUND, event.getBlock().getTypeId());
CreateChestCraftEnchant();
_supplyLocations = WorldData.GetDataLocs("WHITE");
if (!WorldData.GetCustomLocs("VARS").isEmpty())
_maxSpreadRate = WorldData.GetCustomLocs("VARS").get(0).getBlockX();
}
//@EventHandler
public void CreateChests(GameStateChangeEvent event)
private void CreateChestCraftEnchant()
{
ArrayList<Location> chests = WorldData.GetCustomLocs("54");
System.out.println("Map Chest Locations: " + chests.size());
//Enchants
System.out.println("Enchanting Tables: " + Math.min(10, chests.size()));
for (int i=0 ; i<10 && !chests.isEmpty() ; i++)
{
Location loc = chests.remove(UtilMath.r(chests.size()));
loc.getBlock().setType(Material.ENCHANTMENT_TABLE);
}
//Crafting
System.out.println("Crafting Benches: " + Math.min(20, chests.size()));
for (int i=0 ; i<20 && !chests.isEmpty() ; i++)
{
Location loc = chests.remove(UtilMath.r(chests.size()));
loc.getBlock().setType(Material.WORKBENCH);
}
//Chests
System.out.println("Chests: " + Math.min(180, chests.size()));
for (int i=0 ; i<180 && !chests.isEmpty() ; i++)
{
chests.remove(UtilMath.r(chests.size()));
}
for (Location loc : chests)
{
loc.getBlock().setType(Material.AIR);
}
}
@EventHandler
public void CreateRandomChests(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Recruit)
return;
@ -158,7 +265,7 @@ public class HungerGames extends SoloGame
int done = 0;
while (done < 256)
while (done < 20)
{
Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), WorldData.MinZ + UtilMath.r(zDiff), ignore);
@ -169,32 +276,6 @@ public class HungerGames extends SoloGame
block.setTypeIdAndData(54, (byte)UtilMath.r(4), true);
done++;
}
done = 0;
while (done < 64)
{
Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), WorldData.MinZ + UtilMath.r(zDiff), ignore);
if (!UtilBlock.airFoliage(block) || !UtilBlock.solid(block.getRelative(BlockFace.DOWN)))
continue;
block.setTypeIdAndData(58, (byte)0, true);
done++;
}
while (done < 32)
{
Block block = UtilBlock.getHighest(WorldData.World, WorldData.MinX + UtilMath.r(xDiff), WorldData.MinZ + UtilMath.r(zDiff), ignore);
if (!UtilBlock.airFoliage(block) || !UtilBlock.solid(block.getRelative(BlockFace.DOWN)))
continue;
block.setType(Material.ENCHANTMENT_TABLE);
done++;
}
}
@EventHandler
@ -218,76 +299,101 @@ public class HungerGames extends SoloGame
chest.getBlockInventory().clear();
int count = 1 + UtilMath.r(4);
int count = 1 + UtilMath.r(3);
if (GetKit(event.getPlayer()) instanceof KitLooter)
{
count += UtilMath.r(3);
count += UtilMath.r(2);
}
for (int i = 0; i < count; i++)
{
chest.getBlockInventory().addItem(GetChestItem());
}
chest.getBlockInventory().setItem(UtilMath.r(27), GetChestItem(_supplyChests.contains(event.getClickedBlock())));
_supplyChests.remove(event.getClickedBlock());
}
private ItemStack GetChestItem()
private ItemStack GetChestItem(boolean superChest)
{
if (_chestLoot.isEmpty())
if (_baseChestLoot.isEmpty())
{
for (int i = 0; i < 1; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_HELMET));
for (int i = 0; i < 1; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_CHESTPLATE));
for (int i = 0; i < 1; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_LEGGINGS));
for (int i = 0; i < 1; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_BOOTS));
for (int i = 0; i < 1; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_SWORD));
//Armor
for (int i = 0; i < 12; i++) _baseChestLoot.add(new ItemStack(Material.CHAINMAIL_HELMET));
for (int i = 0; i < 12; i++) _baseChestLoot.add(new ItemStack(Material.CHAINMAIL_CHESTPLATE));
for (int i = 0; i < 12; i++) _baseChestLoot.add(new ItemStack(Material.CHAINMAIL_LEGGINGS));
for (int i = 0; i < 12; i++) _baseChestLoot.add(new ItemStack(Material.CHAINMAIL_BOOTS));
for (int i = 0; i < 3; i++) _chestLoot.add(new ItemStack(Material.IRON_HELMET));
for (int i = 0; i < 3; i++) _chestLoot.add(new ItemStack(Material.IRON_CHESTPLATE));
for (int i = 0; i < 3; i++) _chestLoot.add(new ItemStack(Material.IRON_LEGGINGS));
for (int i = 0; i < 3; i++) _chestLoot.add(new ItemStack(Material.IRON_BOOTS));
for (int i = 0; i < 3; i++) _chestLoot.add(new ItemStack(Material.IRON_SWORD));
for (int i = 0; i < 15; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_HELMET));
for (int i = 0; i < 15; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_CHESTPLATE));
for (int i = 0; i < 15; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_LEGGINGS));
for (int i = 0; i < 15; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_BOOTS));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.CHAINMAIL_HELMET));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.CHAINMAIL_CHESTPLATE));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.CHAINMAIL_LEGGINGS));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.CHAINMAIL_BOOTS));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.STONE_SWORD));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.LEATHER_HELMET));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.LEATHER_CHESTPLATE));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.LEATHER_LEGGINGS));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.LEATHER_BOOTS));
//Weapons
for (int i = 0; i < 48; i++) _baseChestLoot.add(new ItemStack(Material.WOOD_AXE));
for (int i = 0; i < 48; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_AXE));
for (int i = 0; i < 12; i++) _baseChestLoot.add(new ItemStack(Material.STONE_AXE));
for (int i = 0; i < 6; i++) _baseChestLoot.add(new ItemStack(Material.IRON_AXE));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.WOOD_SWORD));
for (int i = 0; i < 48; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_SWORD));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.STONE_SWORD));
for (int i = 0; i < 32; i++) _baseChestLoot.add(new ItemStack(Material.IRON_SWORD));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.BOW));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.ARROW, 8));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.TNT, 1));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.WEB, 2));
//Food
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.MUSHROOM_SOUP));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.COOKED_CHICKEN));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.RAW_BEEF, 1));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.GRILLED_PORK, 2));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.BREAD, 3));
for (int i = 0; i < 15; i++) _chestLoot.add(new ItemStack(Material.GOLD_HELMET));
for (int i = 0; i < 15; i++) _chestLoot.add(new ItemStack(Material.GOLD_CHESTPLATE));
for (int i = 0; i < 15; i++) _chestLoot.add(new ItemStack(Material.GOLD_LEGGINGS));
for (int i = 0; i < 15; i++) _chestLoot.add(new ItemStack(Material.GOLD_BOOTS));
for (int i = 0; i < 15; i++) _chestLoot.add(new ItemStack(Material.GOLD_SWORD));
for (int i = 0; i < 32; i++) _chestLoot.add(new ItemStack(Material.LEATHER_HELMET));
for (int i = 0; i < 32; i++) _chestLoot.add(new ItemStack(Material.LEATHER_CHESTPLATE));
for (int i = 0; i < 32; i++) _chestLoot.add(new ItemStack(Material.LEATHER_LEGGINGS));
for (int i = 0; i < 32; i++) _chestLoot.add(new ItemStack(Material.LEATHER_BOOTS));
for (int i = 0; i < 32; i++) _chestLoot.add(new ItemStack(Material.WOOD_SWORD));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.BOW));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.ARROW, 8));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.MUSHROOM_SOUP));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.COOKED_CHICKEN));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.RAW_BEEF, 1));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.GRILLED_PORK, 2));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.BREAD, 3));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.EXP_BOTTLE, 1));
for (int i = 0; i < 48; i++) _chestLoot.add(new ItemStack(Material.WOOD_AXE));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.STONE_AXE));
for (int i = 0; i < 6; i++) _chestLoot.add(new ItemStack(Material.IRON_AXE));
for (int i = 0; i < 4; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_AXE));
for (int i = 0; i < 24; i++) _chestLoot.add(new ItemStack(Material.GOLD_INGOT));
for (int i = 0; i < 12; i++) _chestLoot.add(new ItemStack(Material.IRON_INGOT));
for (int i = 0; i < 3; i++) _chestLoot.add(new ItemStack(Material.DIAMOND));
for (int i = 0; i < 128; i++) _chestLoot.add(new ItemStack(Material.STICK));
//Misc
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.EXP_BOTTLE, 1));
for (int i = 0; i < 24; i++) _baseChestLoot.add(new ItemStack(Material.GOLD_INGOT, 2));
for (int i = 0; i < 12; i++) _baseChestLoot.add(new ItemStack(Material.IRON_INGOT, 2));
for (int i = 0; i < 3; i++) _baseChestLoot.add(new ItemStack(Material.DIAMOND));
for (int i = 0; i < 128; i++) _baseChestLoot.add(new ItemStack(Material.STICK, 4));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.FLINT, 4));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.FEATHER, 4));
//Building Supplies
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.PISTON_BASE, 4));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.REDSTONE, 4));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.STRING, 4));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.TRIPWIRE_HOOK, 4));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.WOOD_PLATE));
for (int i = 0; i < 64; i++) _baseChestLoot.add(new ItemStack(Material.LEVER));
}
ItemStack stack = _chestLoot.get(UtilMath.r(_chestLoot.size()));
if (_superChestLoot.isEmpty())
{
for (int i = 0; i < 1; i++) _baseChestLoot.add(new ItemStack(Material.DIAMOND_HELMET));
for (int i = 0; i < 1; i++) _superChestLoot.add(new ItemStack(Material.DIAMOND_CHESTPLATE));
for (int i = 0; i < 1; i++) _superChestLoot.add(new ItemStack(Material.DIAMOND_LEGGINGS));
for (int i = 0; i < 1; i++) _superChestLoot.add(new ItemStack(Material.DIAMOND_BOOTS));
for (int i = 0; i < 3; i++) _superChestLoot.add(new ItemStack(Material.IRON_HELMET));
for (int i = 0; i < 3; i++) _superChestLoot.add(new ItemStack(Material.IRON_CHESTPLATE));
for (int i = 0; i < 3; i++) _superChestLoot.add(new ItemStack(Material.IRON_LEGGINGS));
for (int i = 0; i < 3; i++) _superChestLoot.add(new ItemStack(Material.IRON_BOOTS));
for (int i = 0; i < 1; i++) _superChestLoot.add(new ItemStack(Material.DIAMOND_SWORD));
for (int i = 0; i < 2; i++) _baseChestLoot.add(new ItemStack(Material.DIAMOND_AXE));
}
ItemStack stack = _baseChestLoot.get(UtilMath.r(_baseChestLoot.size()));
if (superChest)
stack = _superChestLoot.get(UtilMath.r(_superChestLoot.size()));
int amount = 1;
@ -316,7 +422,7 @@ public class HungerGames extends SoloGame
if (damager != null)
Manager.GetCondition().EndCondition(damager, null, "Start Speed");
}
//If an item spawns and no one is there to see it, does it really spawn? No.
@EventHandler
public void ItemSpawn(ItemSpawnEvent event)
@ -324,7 +430,7 @@ public class HungerGames extends SoloGame
for (Player player : GetPlayers(true))
if (UtilMath.offset(player, event.getEntity()) < 6)
return;
event.setCancelled(true);
}
@ -378,16 +484,16 @@ public class HungerGames extends SoloGame
return;
long time = System.currentTimeMillis();
if (_redLocations.isEmpty())
{
if (UtilTime.elapsed(GetStateTime(), 6000))
SetState(GameState.End);
return;
}
int max = Math.max(5, Math.min(100, _redLocations.size()/100));
int max = Math.max(5, Math.min(_maxSpreadRate, _redLocations.size()/100));
for (int i=0 ; i<max ; i++)
{
@ -436,10 +542,10 @@ public class HungerGames extends SoloGame
RedSpread(block.getRelative(BlockFace.WEST).getRelative(BlockFace.DOWN));
}
}
totalTime += System.currentTimeMillis() - time;
}
@EventHandler
public void RedTimer(UpdateEvent event)
{
@ -448,13 +554,16 @@ public class HungerGames extends SoloGame
if (!IsLive())
return;
if (true)
return;
System.out.println(" ");
System.out.println("Game Time: " + UtilTime.MakeStr(System.currentTimeMillis() - this.GetStateTime()));
System.out.println("Creep Size: " + _redLocations.size());
System.out.println("Creep Time: " + UtilTime.convertString(totalTime, 4, TimeUnit.SECONDS));
totalTime = 0;
}
@ -465,14 +574,14 @@ public class HungerGames extends SoloGame
{
if (_ignoreLiquids)
return false;
//Only freeze surface water
boolean surroundedByWater = true;
for (Block other : UtilBlock.getSurrounding(block, false))
{
if (other.getY() < block.getY())
continue;
if (!other.isLiquid() && !IsRed(other))
{
surroundedByWater = false;
@ -483,6 +592,10 @@ public class HungerGames extends SoloGame
return false;
}
//Ignore Signs
if (block.getType() == Material.SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.WALL_SIGN)
return false;
//Pre-Red
if (IsRed(block))
{
@ -498,7 +611,7 @@ public class HungerGames extends SoloGame
RedChangeBlock(block.getLocation(), 0, (byte)0);
block = block.getRelative(BlockFace.DOWN);
}
//Remove Foliage
if (block.getType() != Material.AIR)
RedChangeBlock(block.getLocation(), 0, (byte)0);
@ -519,7 +632,7 @@ public class HungerGames extends SoloGame
_spreadSafe = GetSpectatorLocation().clone();
_spreadSafe.setY(GetTeamList().get(0).GetSpawn().getY());
}
if (UtilMath.offset(_spreadSafe, block.getLocation()) < 32)
return false;
@ -538,6 +651,8 @@ public class HungerGames extends SoloGame
{
MapUtil.ChunkBlockChange(loc, id, data);
//_redQueue.add(new BlockChange(loc, id, data));
for (Player player : UtilServer.getPlayers())
{
if (player.getLocation().getChunk().getX() - loc.getChunk().getX() > UtilServer.getServer().getViewDistance())
@ -550,6 +665,59 @@ public class HungerGames extends SoloGame
}
}
@EventHandler
public void RedChangeBlockClient(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
/** TYPE A **/
for (BlockChange change : _redQueue)
{
for (Player player : UtilServer.getPlayers())
{
if (player.getLocation().getChunk().getX() - change.Location.getChunk().getX() > UtilServer.getServer().getViewDistance())
continue;
if (player.getLocation().getChunk().getZ() - change.Location.getChunk().getZ() > UtilServer.getServer().getViewDistance())
continue;
player.sendBlockChange(change.Location, change.Id, change.Data);
}
}
_redQueue.clear();
/** TYPE B **/
/*
HashSet<Chunk> chunks = new HashSet<Chunk>();
for (BlockChange change : _redQueue)
{
chunks.add(change.Location.getChunk());
}
for (Chunk chunk : chunks)
{
for (Player player : UtilServer.getPlayers())
{
if (player.getLocation().getChunk().getX() - chunk.getX() > UtilServer.getServer().getViewDistance())
continue;
if (player.getLocation().getChunk().getZ() - chunk.getZ() > UtilServer.getServer().getViewDistance())
continue;
MapUtil.SendChunkForPlayer(chunk.getX(), chunk.getZ(), player);
}
}
_redQueue.clear();
*/
}
public boolean IsRed(Block block)
{
for (Entry<Integer,Integer> entry : _spreadTypeBlocks)
@ -580,11 +748,12 @@ public class HungerGames extends SoloGame
else
{
if (loc.getBlock().getType() == Material.LEAVES) RedChangeBlock(loc, 88, (byte)0);
else if (loc.getBlock().getTypeId() == 8 || loc.getBlock().getTypeId() == 9) RedChangeBlock(loc, 49, (byte)0);
else
{
double r = Math.random();
if (r > 0.1) RedChangeBlock(loc, 87, (byte)0);
else RedChangeBlock(loc, 153, (byte)0);
else RedChangeBlock(loc, 153, (byte)0);
}
}
}
@ -594,18 +763,18 @@ public class HungerGames extends SoloGame
{
if (event.getType() != UpdateType.FASTER)
return;
for (Player player : GetPlayers(true))
{
boolean near = false;
for (Block block : UtilBlock.getInRadius(player.getLocation(), 5d).keySet())
{
if (!IsRed(block))
continue;
near = true;
//Red
if (_spreadType == 0)
{
@ -615,20 +784,20 @@ public class HungerGames extends SoloGame
break;
}
}
//Snow
else if (_spreadType == 1)
{
if (Math.random() > 0.8)
{
Vector traj = UtilAlg.getTrajectory(block.getLocation().add(0.5, 1.5, 0.5), player.getLocation());
Snowball ball = player.getWorld().spawn(block.getLocation().add(0.5, 1.5, 0.5).subtract(traj.clone().multiply(8 + UtilMath.r(8))), Snowball.class);
ball.setVelocity(UtilAlg.getTrajectory(ball.getLocation(), player.getEyeLocation().add(0, 3, 0)).add(new Vector(Math.random()-0.5, Math.random()-0.5, Math.random()-0.5).multiply(0.1)));
}
}
//Nether
if (_spreadType == 2)
{
@ -639,21 +808,21 @@ public class HungerGames extends SoloGame
}
}
}
if (!near)
{
if (!UtilEnt.isGrounded(player))
{
Block block = player.getLocation().getBlock();
while (!UtilBlock.solid(block) && block.getY() > 0)
block = block.getRelative(BlockFace.DOWN);
if (IsRed(block) || block.getY() == 0)
near = true;
}
}
if (near)
{
if (!_redOutTime.containsKey(player))
@ -676,31 +845,238 @@ public class HungerGames extends SoloGame
}
}
}
@EventHandler
public void SnowballDamage(CustomDamageEvent event)
public void RedDamage(CustomDamageEvent event)
{
if (event.GetProjectile() == null)
return;
if (!(event.GetProjectile() instanceof Snowball))
return;
event.AddMod("Snowball", _spreadName, 1, true);
event.AddMod("Snowball", _spreadName, 2, true);
event.AddKnockback("Snowball", 4);
}
@EventHandler
public void DebugCmd(PlayerCommandPreprocessEvent event)
{
@EventHandler
public void DayNightCycle(UpdateEvent event)
{
if (!IsLive())
return;
if (event.getType() != UpdateType.TICK)
return;
long time = WorldData.World.getTime();
if (time > 22000 || time < 14000)
{
WorldTimeSet = (WorldTimeSet + 4)%24000;
}
else
{
WorldTimeSet = (WorldTimeSet + 16)%24000;
}
WorldData.World.setTime(WorldTimeSet);
}
@EventHandler
public void SupplyDrop(UpdateEvent event)
{
if (!IsLive())
return;
if (event.getType() != UpdateType.FASTEST)
return;
long time = WorldData.World.getTime();
if (time > 14000 && time < 23000)
{
if (_supplyCurrent == null)
{
_supplyCurrent = _supplyLocations.get(UtilMath.r(_supplyLocations.size()));
//Remove Prior
_supplyChests.remove(_supplyCurrent.getBlock().getRelative(BlockFace.UP));
_supplyCurrent.getBlock().getRelative(BlockFace.UP).setType(Material.AIR);
//Create New
_supplyCurrent.getBlock().setType(Material.BEACON);
for (int x=-1 ; x<=1 ; x++)
for (int z=-1 ; z<=1 ; z++)
_supplyCurrent.getBlock().getRelative(x, -1, z).setType(Material.IRON_BLOCK);
//Announce
this.Announce(C.cYellow + C.Bold + "Supply Drop Incoming (" + ChatColor.RESET + UtilWorld.locToStrClean(_supplyCurrent) + C.cYellow + C.Bold + ")");
}
}
else
{
if (_supplyCurrent != null)
{
if (_supplyEffect == null)
{
_supplyEffect = _supplyCurrent.clone();
_supplyEffect.setY(250);
}
FireworkEffect effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BURST).trail(false).build();
UtilFirework.playFirework(_supplyEffect, effect);
_supplyEffect.setY(_supplyEffect.getY()-1);
if (UtilMath.offset(_supplyEffect, _supplyCurrent) < 2)
{
effect = FireworkEffect.builder().flicker(false).withColor(Color.YELLOW).with(Type.BALL_LARGE).trail(true).build();
UtilFirework.playFirework(_supplyEffect, effect);
//Create Chest
_supplyCurrent.getBlock().setType(Material.GLASS);
_supplyCurrent.getBlock().getRelative(BlockFace.UP).setType(Material.CHEST);
_supplyChests.add(_supplyCurrent.getBlock().getRelative(BlockFace.UP));
//Reset
_supplyEffect = null;
_supplyCurrent = null;
}
}
}
}
@EventHandler
public void SupplyGlow(UpdateEvent event)
{
if (!IsLive())
return;
if (event.getType() != UpdateType.TICK)
return;
if (_supplyChests.isEmpty())
return;
Iterator<Block> chestIterator = _supplyChests.iterator();
while (chestIterator.hasNext())
{
Block block = chestIterator.next();
if (block.getType() != Material.CHEST)
{
chestIterator.remove();
continue;
}
UtilParticle.PlayParticle(ParticleType.SPELL, block.getLocation().add(0.5, 0.5, 0.5), 0.3f, 0.3f, 0.3f, 0, 1);
}
}
@EventHandler
public void TNTThrow(PlayerInteractEvent event)
{
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK &&
event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_AIR)
return;
Player player = event.getPlayer();
if (!UtilInv.IsItem(player.getItemInHand(), Material.TNT, (byte)0))
return;
event.setCancelled(true);
if (!Manager.GetGame().CanThrowTNT(player.getLocation()))
{
//Inform
UtilPlayer.message(event.getPlayer(), F.main(GetName(), "You cannot use " + F.item("Throw TNT") + " here."));
return;
}
UtilInv.remove(player, Material.TNT, (byte)0, 1);
UtilInv.Update(player);
TNTPrimed tnt = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), TNTPrimed.class);
UtilAction.velocity(tnt, player.getLocation().getDirection(), 0.5, false, 0, 0.1, 10, false);
_tntMap.put(tnt, player);
}
@EventHandler
public void TNTExplosion(ExplosionPrimeEvent event)
{
if (!_tntMap.containsKey(event.getEntity()))
return;
Player player = _tntMap.remove(event.getEntity());
for (Player other : UtilPlayer.getNearby(event.getEntity().getLocation(), 14))
Manager.GetCondition().Factory().Explosion("Throwing TNT", other, player, 50, 0.1, false, false);
}
@EventHandler
public void BlockPlace(BlockPlaceEvent event)
{
if (event.getItemInHand().getType() == Material.PISTON_BASE)
{
_placedBlocks.add(event.getBlock().getLocation());
event.setCancelled(false);
final Block block = event.getBlock();
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(Manager.GetPlugin(), new Runnable()
{
public void run()
{
block.setType(Material.PISTON_BASE);
block.setData((byte) 6);
}
}, 0);
}
}
@EventHandler
public void BlockBreak(BlockBreakEvent event)
{
if (_placedBlocks.remove(event.getBlock().getLocation()))
{
event.setCancelled(false);
}
}
@EventHandler
public void BlockBurn(BlockBurnEvent event)
{
event.setCancelled(true);
}
@EventHandler
public void BlockSpread(BlockSpreadEvent event)
{
event.setCancelled(true);
}
@EventHandler
public void BlockFade(BlockFadeEvent event)
{
event.setCancelled(true);
}
@EventHandler
public void BlockDecay(LeavesDecayEvent event)
{
event.setCancelled(true);
}
//XXX REMOVE ME
@Override
public void EndCheck()
{
}
}

View File

@ -15,17 +15,16 @@ public class KitAssassin extends Kit
{
public KitAssassin(ArcadeManager manager)
{
super(manager, "Assassin", KitAvailability.Green,
super(manager, "Assassin", KitAvailability.Blue,
new String[]
{
"Able to go invisible and surprise opponents."
"Sneak up on opponents while they're looting chests!"
},
new Perk[]
{
new PerkBackstab(),
new PerkSmokebomb()
},
EntityType.ZOMBIE,
new ItemStack(Material.IRON_SWORD));

View File

@ -11,21 +11,22 @@ import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.*;
public class KitHunter extends Kit
public class KitAxeman extends Kit
{
public KitHunter(ArcadeManager manager)
public KitAxeman(ArcadeManager manager)
{
super(manager, "Hunter", KitAvailability.Free,
super(manager, "Axeman", KitAvailability.Free,
new String[]
{
"Agile hunter, able to tackle opponents."
"Proficient in the art of axe combat!"
},
new Perk[]
{
new PerkLeapTackleHG(6),
new PerkAxeman(),
new PerkAxeThrower(manager)
},
EntityType.ZOMBIE,
new ItemStack(Material.IRON_AXE));

View File

@ -19,12 +19,13 @@ public class KitBomber extends Kit
new String[]
{
"Crazy bomb throwing guy."
"BOOM! BOOM! BOOM!"
},
new Perk[]
{
new PerkBomber(30, 2, -1)
new PerkBomberHG(30, 2),
new PerkTNTArrow()
},
EntityType.ZOMBIE,
new ItemStack(Material.TNT));

View File

@ -24,7 +24,7 @@ public class KitKnight extends Kit
new Perk[]
{
new PerkIronSkin(1),
new PerkIronSkin(0.5),
new PerkHiltSmash()
},
EntityType.ZOMBIE,

View File

@ -19,7 +19,7 @@ public class KitLooter extends Kit
new String[]
{
"+50% Loot from chests you are first to open!"
"Defeat your opponents with your swag loots!"
},
new Perk[]
@ -27,7 +27,7 @@ public class KitLooter extends Kit
new PerkLooter(),
},
EntityType.ZOMBIE,
new ItemStack(Material.IRON_SWORD));
new ItemStack(Material.CHEST));
}

View File

@ -0,0 +1,106 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilInv;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Perk;
public class PerkAxeThrower extends Perk implements IThrown
{
public PerkAxeThrower(ArcadeManager manager)
{
super("Axe Thrower", new String[]
{
C.cYellow + "RIGHT-Click" + C.cGray + " with Axes to " + C.cGreen + "Throw Axe",
});
}
@EventHandler
public void Throw(PlayerInteractEvent event)
{
if (!UtilEvent.isAction(event, ActionType.R))
return;
if (event.getPlayer().getItemInHand() == null)
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
event.setCancelled(true);
org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(player.getItemInHand().getType()));
UtilAction.velocity(ent, player.getLocation().getDirection(), 1.2, false, 0, 0.2, 10, false);
Manager.GetProjectile().AddThrow(ent, player, this, -1, true, true, true, false, 1d);
//Remove Axe
player.setItemInHand(null);
UtilInv.Update(player);
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
if (target == null)
return;
if (target instanceof Player)
if (!Manager.GetGame().IsAlive((Player)target))
return;
Item item = (Item)data.GetThrown();
int damage = 4;
if (item.getItemStack().getType() == Material.STONE_AXE) damage = 5;
else if (item.getItemStack().getType() == Material.IRON_AXE) damage = 6;
else if (item.getItemStack().getType() == Material.DIAMOND_AXE) damage = 7;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.GetThrower(), null,
DamageCause.CUSTOM, damage, true, true, false,
UtilEnt.getName(data.GetThrower()), GetName());
//Effect
data.GetThrown().getWorld().playSound(data.GetThrown().getLocation(), Sound.ZOMBIE_WOOD, 1f, 1.6f);
//Re-Drop
data.GetThrown().getWorld().dropItem(data.GetThrown().getLocation(), ItemStackFactory.Instance.CreateStack(item.getItemStack().getType())).setPickupDelay(60);
//Remove
data.GetThrown().remove();
}
@Override
public void Idle(ProjectileUser data)
{
}
@Override
public void Expire(ProjectileUser data)
{
}
}

View File

@ -30,6 +30,9 @@ public class PerkBackstab extends Perk
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
return;
if (event.GetDamageInitial() <= 1)
return;
Player damager = event.GetDamagerPlayer(false);
if (damager == null) return;

View File

@ -0,0 +1,106 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashSet;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.updater.UpdateType;
import nautilus.game.arcade.kit.Perk;
public class PerkBomberHG extends Perk
{
private int _spawnRate;
private int _max;
public PerkBomberHG(int spawnRate, int max)
{
super("Explosives", new String[]
{
C.cGray + "Receive 1 TNT every " + spawnRate + " seconds. Maximum of " + max + ".",
});
_spawnRate = spawnRate;
_max = max;
}
public void Apply(Player player)
{
Recharge.Instance.use(player, GetName(), _spawnRate*1000, false);
}
@EventHandler
public void TNTSpawn(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
return;
for (Player cur : UtilServer.getPlayers())
{
if (!Kit.HasKit(cur))
continue;
if (!Manager.GetGame().IsAlive(cur))
continue;
if (!Recharge.Instance.use(cur, GetName(), _spawnRate*1000, false))
continue;
if (UtilInv.contains(cur, Material.TNT, (byte)0, _max))
continue;
//Add
cur.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item("Throwing TNT")));
cur.playSound(cur.getLocation(), Sound.ITEM_PICKUP, 2f, 1f);
}
}
@EventHandler
public void TNTDrop(PlayerDropItemEvent event)
{
if (event.isCancelled())
return;
if (!UtilInv.IsItem(event.getItemDrop().getItemStack(), Material.TNT, (byte)0))
return;
//Cancel
event.setCancelled(true);
//Inform
UtilPlayer.message(event.getPlayer(), F.main(GetName(), "You cannot drop " + F.item("Throwing TNT") + "."));
}
@EventHandler
public void TNTDeathRemove(PlayerDeathEvent event)
{
HashSet<org.bukkit.inventory.ItemStack> remove = new HashSet<org.bukkit.inventory.ItemStack>();
for (org.bukkit.inventory.ItemStack item : event.getDrops())
if (UtilInv.IsItem(item, Material.TNT, (byte)0))
remove.add(item);
for (org.bukkit.inventory.ItemStack item : remove)
event.getDrops().remove(item);
}
@EventHandler
public void TNTInvClick(InventoryClickEvent event)
{
UtilInv.DisallowMovementOf(event, "Throwing TNT", Material.TNT, (byte)0, true);
}
}

View File

@ -11,16 +11,16 @@ import nautilus.game.arcade.kit.Perk;
public class PerkIronSkin extends Perk
{
private int _reduction;
private double _reduction;
public PerkIronSkin(int reduction)
public PerkIronSkin(double d)
{
super("Iron Skin", new String[]
{
C.cGray + "You take " + reduction + " less damage from attacks",
C.cGray + "You take " + d + " less damage from attacks",
});
_reduction = reduction;
_reduction = d;
}
@EventHandler(priority = EventPriority.HIGH)
@ -32,6 +32,9 @@ public class PerkIronSkin extends Perk
if (event.GetCause() == DamageCause.FIRE_TICK)
return;
if (event.GetDamage() <= 1)
return;
Player damagee = event.GetDamageePlayer();
if (damagee == null) return;

View File

@ -2,6 +2,7 @@ package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import org.bukkit.EntityEffect;
import org.bukkit.GameMode;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@ -27,16 +28,12 @@ public class PerkLeapTackleHG extends Perk
{
private HashMap<LivingEntity, Long> _live = new HashMap<LivingEntity, Long>();
private int _damage;
public PerkLeapTackleHG(int damage)
public PerkLeapTackleHG()
{
super("Leap Attack", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Sword/Axe to " + C.cGreen + "Leap Attack"
C.cYellow + "Right-Click" + C.cGray + " with Sword/Axe to " + C.cGreen + "Leap Tackle"
});
_damage = damage;
}
@EventHandler
@ -111,10 +108,7 @@ public class PerkLeapTackleHG extends Perk
public void Hit(Player damager, LivingEntity damagee)
{
//Damage Event
Manager.GetDamage().NewDamageEvent(damagee, damager, null,
DamageCause.CUSTOM, _damage, false, true, false,
damager.getName(), GetName());
damagee.playEffect(EntityEffect.HURT);
//Slow
Manager.GetCondition().Factory().Slow(GetName(), damagee, damager, 1, 3, false, false, true, false);

View File

@ -14,7 +14,7 @@ public class PerkMammoth extends Perk
{
super("Mammoth", new String[]
{
C.cGray + "Take 75% knockback and deal 150% knockback",
C.cGray + "Take 50% knockback and deal 150% knockback",
});
}

View File

@ -3,6 +3,7 @@ package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import org.bukkit.Effect;
import org.bukkit.EntityEffect;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
@ -10,9 +11,7 @@ import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
@ -21,21 +20,16 @@ import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkSeismicSlamHG extends Perk
{
private HashMap<LivingEntity, Long> _live = new HashMap<LivingEntity, Long>();
public PerkSeismicSlamHG()
{
super("Seismic Slam", new String[]
super("Ground Pound", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Sword/Axe to " + C.cGreen + "Seismic Slam"
C.cYellow + "Right-Click" + C.cGray + " with Sword/Axe to " + C.cGreen + "Ground Pound"
});
}
@ -66,74 +60,40 @@ public class PerkSeismicSlamHG extends Perk
return;
//Action
Vector vec = player.getLocation().getDirection();
if (vec.getY() < 0)
vec.setY(vec.getY() * -1);
double range = 6;
UtilAction.velocity(player, vec, 1, true, 1, 0, 1, true);
HashMap<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), range);
for (LivingEntity cur : targets.keySet())
{
if (cur.equals(player))
continue;
if (!UtilEnt.isGrounded(player))
continue;
cur.playEffect(EntityEffect.HURT);
//Velocity
UtilAction.velocity(cur,
UtilAlg.getTrajectory2d(player.getLocation().toVector(), cur.getLocation().toVector()),
1.8 * targets.get(cur), true, 0, 0.4 + 1.0 * targets.get(cur), 1.6, true);
//Condition
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
//Inform
if (cur instanceof Player)
UtilPlayer.message((Player)cur, F.main("Game", F.name(player.getName()) +" hit you with " + F.skill(GetName()) + "."));
}
//Effect
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_WOOD, 2f, 0.2f);
for (Block cur : UtilBlock.getInRadius(player.getLocation(), 4d).keySet())
if (UtilBlock.airFoliage(cur.getRelative(BlockFace.UP)) && !UtilBlock.airFoliage(cur))
cur.getWorld().playEffect(cur.getLocation(), Effect.STEP_SOUND, cur.getTypeId());
//Record
_live.put(player, System.currentTimeMillis());
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
}
@EventHandler
public void Slam(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!UtilEnt.isGrounded(player))
continue;
if (!_live.containsKey(player))
continue;
if (!UtilTime.elapsed(_live.get(player), 1000))
continue;
_live.remove(player);
//Action
int damage = 8;
double range = 6;
HashMap<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation(), range);
for (LivingEntity cur : targets.keySet())
{
if (cur.equals(player))
continue;
if (!UtilEnt.isGrounded(player))
continue;
//Damage Event
Manager.GetDamage().NewDamageEvent(cur, player, null,
DamageCause.CUSTOM, damage * targets.get(cur) + 0.5, false, true, false,
player.getName(), GetName());
//Velocity
UtilAction.velocity(cur,
UtilAlg.getTrajectory2d(player.getLocation().toVector(), cur.getLocation().toVector()),
1.8 * targets.get(cur), true, 0, 0.4 + 1.0 * targets.get(cur), 1.6, true);
//Condition
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
//Inform
if (cur instanceof Player)
UtilPlayer.message((Player)cur, F.main("Game", F.name(player.getName()) +" hit you with " + F.skill(GetName()) + "."));
}
//Effect
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_WOOD, 2f, 0.2f);
for (Block cur : UtilBlock.getInRadius(player.getLocation(), 4d).keySet())
if (UtilBlock.airFoliage(cur.getRelative(BlockFace.UP)) && !UtilBlock.airFoliage(cur))
cur.getWorld().playEffect(cur.getLocation(), Effect.STEP_SOUND, cur.getTypeId());
}
}
}

View File

@ -5,11 +5,15 @@ import java.util.HashMap;
import java.util.Iterator;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftSkeleton;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Skeleton;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import mineplex.core.common.util.C;
@ -20,6 +24,7 @@ import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.updater.UpdateType;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.Navigation;
@ -45,39 +50,44 @@ public class PerkSkeletons extends Perk
{
if (event.GetLog().GetKiller() == null)
return;
if (!(event.GetEvent().getEntity() instanceof Player))
return;
Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
if (killer == null)
return;
if (!Kit.HasKit(killer))
return;
Player killed = (Player)event.GetEvent().getEntity();
Manager.GetGame().CreatureAllowOverride = true;
Skeleton skel = killer.getWorld().spawn(killed.getLocation(), Skeleton.class);
Manager.GetGame().CreatureAllowOverride = false;
skel.setMaxHealth(30);
skel.setHealth(skel.getMaxHealth());
skel.getEquipment().setItemInHand(killed.getItemInHand());
skel.getEquipment().setHelmet(killed.getInventory().getHelmet());
skel.getEquipment().setChestplate(killed.getInventory().getChestplate());
skel.getEquipment().setLeggings(killed.getInventory().getLeggings());
skel.getEquipment().setBoots(killed.getInventory().getBoots());
event.GetEvent().getDrops().remove(killed.getItemInHand());
event.GetEvent().getDrops().remove(killed.getInventory().getHelmet());
event.GetEvent().getDrops().remove(killed.getInventory().getChestplate());
event.GetEvent().getDrops().remove(killed.getInventory().getLeggings());
event.GetEvent().getDrops().remove(killed.getInventory().getBoots());
skel.getEquipment().setItemInHandDropChance(1f);
skel.getEquipment().setHelmetDropChance(1f);
skel.getEquipment().setChestplateDropChance(1f);
skel.getEquipment().setLeggingsDropChance(1f);
skel.getEquipment().setBootsDropChance(1f);
if (_name)
{
skel.setCustomName("Skeletal " + UtilEnt.getName(event.GetEvent().getEntity()));
@ -91,7 +101,7 @@ public class PerkSkeletons extends Perk
killer.playSound(killer.getLocation(), Sound.SKELETON_HURT, 1f, 1f);
}
@EventHandler
public void TargetCancel(EntityTargetEvent event)
{
@ -103,9 +113,9 @@ public class PerkSkeletons extends Perk
}
@EventHandler
public void WolfUpdate(UpdateEvent event)
public void MinionUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
if (event.getType() != UpdateType.SEC)
return;
for (Player player : _minions.keySet())
@ -122,12 +132,22 @@ public class PerkSkeletons extends Perk
skelIterator.remove();
continue;
}
//Return to Owner
double range = 3;
double range = 4;
if (skel.getTarget() != null)
range = 12;
{
range = 8;
System.out.println("A: " + UtilEnt.getName(skel.getTarget()));
}
if (((CraftSkeleton)skel).getHandle().getGoalTarget() != null)
{
range = 8;
System.out.println("B: " + ((CraftSkeleton)skel).getHandle().getGoalTarget());
}
if (UtilMath.offset(skel, player) > range)
{
float speed = 1f;
@ -141,6 +161,9 @@ public class PerkSkeletons extends Perk
nav.a(target.getX(), target.getY(), target.getZ(), speed);
skel.setTarget(null);
((CraftSkeleton)skel).getHandle().setGoalTarget(null);
System.out.println("OUT OF RANGE! RETURN HOME MY FRIEND");
}
}
}
@ -162,4 +185,61 @@ public class PerkSkeletons extends Perk
}
}
public boolean IsMinion(Entity ent)
{
for (ArrayList<Skeleton> skels : _minions.values())
{
for (Skeleton skel : skels)
{
if (ent.equals(skel))
{
return true;
}
}
}
return false;
}
@EventHandler
public void Combust(EntityCombustEvent event)
{
if (IsMinion(event.getEntity()))
event.setCancelled(true);
}
@EventHandler
public void Damage(CustomDamageEvent event)
{
if (event.GetDamagerEntity(true) == null)
return;
if (!IsMinion(event.GetDamagerEntity(true)))
return;
double damage = 4;
if (event.GetDamagerEntity(true) instanceof Skeleton)
{
Skeleton skel = (Skeleton)event.GetDamagerEntity(true);
if (skel.getEquipment().getItemInHand() != null)
{
if (skel.getEquipment().getItemInHand().getType() == Material.STONE_SWORD) damage = 5;
else if (skel.getEquipment().getItemInHand().getType() == Material.IRON_SWORD) damage = 6;
else if (skel.getEquipment().getItemInHand().getType() == Material.GOLD_SWORD) damage = 6;
else if (skel.getEquipment().getItemInHand().getType() == Material.DIAMOND_SWORD) damage = 7;
else if (skel.getEquipment().getItemInHand().getType() == Material.IRON_AXE) damage = 5;
else if (skel.getEquipment().getItemInHand().getType() == Material.GOLD_AXE) damage = 5;
else if (skel.getEquipment().getItemInHand().getType() == Material.DIAMOND_AXE) damage = 6;
}
}
if (event.GetProjectile() != null)
damage = 6;
event.AddMod("Skeleton Minion", "Negate", -event.GetDamageInitial(), false);
event.AddMod("Skeleton Minion", "Damage", damage, false);
}
}

View File

@ -0,0 +1,105 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import java.util.HashSet;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftFallingSand;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftTNTPrimed;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.kit.Perk;
public class PerkTNTArrow extends Perk
{
private HashSet<Player> _active = new HashSet<Player>();
private HashMap<Entity, Player> _tntMap = new HashMap<Entity, Player>();
public PerkTNTArrow()
{
super("Explosive Arrow", new String[]
{
C.cYellow + "Left-Click" + C.cGray + " with Bow to prepare " + C.cGreen + "Explosive Arrow"
});
}
@EventHandler
public void Fire(PlayerInteractEvent event)
{
if (event.getAction() != Action.LEFT_CLICK_AIR && event.getAction() != Action.LEFT_CLICK_BLOCK)
return;
if (event.getPlayer().getItemInHand() == null)
return;
if (event.getPlayer().getItemInHand().getType() != Material.BOW)
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
event.setCancelled(true);
if (!player.getInventory().contains(Material.TNT))
{
UtilPlayer.message(player, F.main("Game", "You have no " + F.item("TNT") + "."));
return;
}
if (_active.contains(player))
return;
//Use Stock
UtilInv.remove(player, Material.TNT, (byte)0, 1);
UtilInv.Update(player);
//Action
_active.add(player);
//Effect
player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 2.5f, 2.0f);
//Inform
UtilPlayer.message(player, F.main("Game", "You prepared " + F.skill(GetName()) + "."));
}
@EventHandler
public void ShootBow(EntityShootBowEvent event)
{
if (!(event.getEntity() instanceof Player))
return;
if (!(event.getProjectile() instanceof Arrow))
return;
Player player = (Player)event.getEntity();
if (!_active.remove(player))
return;
//Inform
UtilPlayer.message(player, F.main("Game", "You fired " + F.skill(GetName()) + "."));
//TNT
TNTPrimed tnt = player.getWorld().spawn(player.getEyeLocation().add(0, 2, 0), TNTPrimed.class);
//XXX ((CraftTNTPrimed)tnt).getHandle().spectating = true;
event.getProjectile().setPassenger(tnt);
_tntMap.put(tnt, player);
}
}

View File

@ -10,6 +10,7 @@ import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftLivingEntity;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftWolf;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@ -33,7 +34,6 @@ import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.updater.UpdateType;
import nautilus.game.arcade.kit.Perk;
import net.minecraft.server.v1_6_R3.EntityCreature;
import net.minecraft.server.v1_6_R3.EntityLiving;
import net.minecraft.server.v1_6_R3.Navigation;
public class PerkWolfPet extends Perk
@ -53,7 +53,6 @@ public class PerkWolfPet extends Perk
{
C.cGray + "Spawn 1 Wolf every " + spawnRate + " seconds. Maximum of " + max + ".",
C.cYellow + "Right-Click" + C.cGray + " with Sword/Axe to use " + C.cGreen + "Wolf Tackle",
//C.cYellow + "Hold Crouch" + C.cGray + " to " + C.cGreen + "Wolf Return"
});
_spawnRate = spawnRate;
@ -268,13 +267,13 @@ public class PerkWolfPet extends Perk
public void CubStrikeHit(Player damager, LivingEntity damagee, Wolf wolf)
{
//Damage Event
((CraftWolf)wolf).getHandle().setGoalTarget((EntityLiving)damagee);
((CraftWolf)wolf).getHandle().setGoalTarget(((CraftLivingEntity)damagee).getHandle());
//Sound
damagee.getWorld().playSound(damagee.getLocation(), Sound.WOLF_BARK, 1.5f, 1.5f);
//Slow
Manager.GetCondition().Factory().Slow(GetName(), damagee, damager, 6, 2, false, false, true, false);
Manager.GetCondition().Factory().Slow(GetName(), damagee, damager, 4, 1, false, false, true, false);
//Inform
UtilPlayer.message(damager, F.main("Game", "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill("Wolf Tackle") + "."));

View File

@ -145,6 +145,7 @@ public class GameCreationManager implements Listener
Manager.GetDamage().SetEnabled(true);
Manager.GetExplosion().SetRegenerate(false);
Manager.GetExplosion().SetTNTSpread(true);
Manager.GetAntiStack().SetEnabled(true);
HashMap<String, ChatColor> pastTeams = null;