Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
d16896e493
@ -188,5 +188,41 @@ public class UtilAlg
|
||||
return cross(vec, getRight(vec));
|
||||
}
|
||||
|
||||
|
||||
public static Location getAverageLocation(ArrayList<Location> locs)
|
||||
{
|
||||
if (locs.isEmpty())
|
||||
return null;
|
||||
|
||||
Vector vec = new Vector(0,0,0);
|
||||
double amount = 0;
|
||||
|
||||
for (Location loc : locs)
|
||||
{
|
||||
vec.add(loc.toVector());
|
||||
amount++;
|
||||
}
|
||||
|
||||
vec.multiply(1d/amount);
|
||||
|
||||
return vec.toLocation(locs.get(0).getWorld());
|
||||
}
|
||||
|
||||
public static Vector getAverageBump(Location source, ArrayList<Location> locs)
|
||||
{
|
||||
if (locs.isEmpty())
|
||||
return null;
|
||||
|
||||
Vector vec = new Vector(0,0,0);
|
||||
double amount = 0;
|
||||
|
||||
for (Location loc : locs)
|
||||
{
|
||||
vec.add(UtilAlg.getTrajectory(loc, source));
|
||||
amount++;
|
||||
}
|
||||
|
||||
vec.multiply(1d/amount);
|
||||
|
||||
return vec;
|
||||
}
|
||||
}
|
||||
|
@ -596,33 +596,39 @@ public enum Achievement
|
||||
|
||||
int expReq = 0;
|
||||
|
||||
for (int i=0 ; i<20 ; i++)
|
||||
for (int i=0 ; i<10 ; i++)
|
||||
{
|
||||
expReq += 2000;
|
||||
expReq += 500;
|
||||
levels[i] = expReq;
|
||||
}
|
||||
|
||||
for (int i=10 ; i<20 ; i++)
|
||||
{
|
||||
expReq += 1000;
|
||||
levels[i] = expReq;
|
||||
}
|
||||
|
||||
for (int i=20 ; i<40 ; i++)
|
||||
{
|
||||
expReq += 3000;
|
||||
expReq += 2000;
|
||||
levels[i] = expReq;
|
||||
}
|
||||
|
||||
for (int i=40 ; i<60 ; i++)
|
||||
{
|
||||
expReq += 4000;
|
||||
expReq += 3000;
|
||||
levels[i] = expReq;
|
||||
}
|
||||
|
||||
for (int i=60 ; i<80 ; i++)
|
||||
{
|
||||
expReq += 5000;
|
||||
expReq += 4000;
|
||||
levels[i] = expReq;
|
||||
}
|
||||
|
||||
for (int i=80 ; i<levels.length ; i++)
|
||||
{
|
||||
expReq += 6000;
|
||||
expReq += 5000;
|
||||
levels[i] = expReq;
|
||||
}
|
||||
|
||||
|
@ -25,19 +25,19 @@ public class MorphGeno extends MorphGadget
|
||||
|
||||
public MorphGeno(GadgetManager manager)
|
||||
{
|
||||
super(manager, "Farewell Genocide604", new String[]
|
||||
super(manager, "Genocide604", new String[]
|
||||
{
|
||||
"Say goodbye to Genocide604 by burping",
|
||||
"and eating a lot.",
|
||||
" ",
|
||||
C.cYellow + "Left Click" + C.cGray + " to use " + C.cGreen + "Burp",
|
||||
" ",
|
||||
" ",
|
||||
C.cRed + C.Bold + "WARNING: " + ChatColor.RESET + "This is a temporary item!",
|
||||
},
|
||||
10,
|
||||
Material.SKULL_ITEM, (byte)3);
|
||||
|
||||
_profile = new ProfileLoader(UUIDFetcher.getUUIDOf("SFox").toString(), "SFox").loadProfile();
|
||||
_profile = new ProfileLoader(UUIDFetcher.getUUIDOf("Genocide604").toString(), "Genocide604").loadProfile();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -123,7 +123,7 @@ public class Hub extends JavaPlugin implements IRelation
|
||||
energy.setEnabled(false);
|
||||
|
||||
ItemFactory itemFactory = new ItemFactory(this, blockRestore, conditionManager, damage, energy, fire, throwManager, webServerAddress);
|
||||
SkillFactory skillManager = new SkillFactory(this, damage, this, combatManager, conditionManager, throwManager, blockRestore, fire, new Movement(this), teleport, energy, webServerAddress);
|
||||
SkillFactory skillManager = new SkillFactory(this, damage, this, combatManager, conditionManager, throwManager, disguiseManager, blockRestore, fire, new Movement(this), teleport, energy, webServerAddress);
|
||||
ClassManager classManager = new ClassManager(this, clientManager, donationManager, skillManager, itemFactory, webServerAddress);
|
||||
|
||||
ClassShopManager shopManager = new ClassShopManager(this, classManager, skillManager, itemFactory);
|
||||
|
@ -0,0 +1,185 @@
|
||||
package mineplex.minecraft.game.classcombat.Skill.Assassin;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillActive;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
|
||||
import mineplex.minecraft.game.classcombat.event.ClassCombatCreatureAllowSpawnEvent;
|
||||
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
|
||||
|
||||
public class Illusion extends SkillActive
|
||||
{
|
||||
private HashMap<Player, Skeleton> _active = new HashMap<Player, Skeleton>();
|
||||
|
||||
public Illusion(SkillFactory skills, String name, ClassType classType, SkillType skillType,
|
||||
int cost, int levels,
|
||||
int energy, int energyMod,
|
||||
long recharge, long rechargeMod, boolean rechargeInform,
|
||||
Material[] itemArray,
|
||||
Action[] actionArray)
|
||||
{
|
||||
super(skills, name, classType, skillType,
|
||||
cost, levels,
|
||||
energy, energyMod,
|
||||
recharge, rechargeMod, rechargeInform,
|
||||
itemArray,
|
||||
actionArray);
|
||||
|
||||
SetDesc(new String[]
|
||||
{
|
||||
"Block to go invisible, and create an",
|
||||
"illusion of yourself that runs towards",
|
||||
"your target location.",
|
||||
"",
|
||||
"Invisibility ends if you release Block",
|
||||
"or your Illusion is killed.",
|
||||
"",
|
||||
"Lasts up to #2#2 seconds.",
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetEnergyString()
|
||||
{
|
||||
return "Energy: #30#-5 and #10#-2 per Second";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean CustomCheck(Player player, int level)
|
||||
{
|
||||
if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9)
|
||||
{
|
||||
UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water."));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Skill(Player player, int level)
|
||||
{
|
||||
//Spawn
|
||||
ClassCombatCreatureAllowSpawnEvent enableEvent = new ClassCombatCreatureAllowSpawnEvent(true);
|
||||
UtilServer.getServer().getPluginManager().callEvent(enableEvent);
|
||||
|
||||
Skeleton skel = player.getWorld().spawn(player.getLocation(), Skeleton.class);
|
||||
skel.teleport(player.getLocation());
|
||||
UtilEnt.Vegetate(skel);
|
||||
UtilEnt.silence(skel, true);
|
||||
|
||||
ClassCombatCreatureAllowSpawnEvent disableEvent = new ClassCombatCreatureAllowSpawnEvent(false);
|
||||
UtilServer.getServer().getPluginManager().callEvent(disableEvent);
|
||||
|
||||
skel.getEquipment().setHelmet(player.getInventory().getHelmet());
|
||||
skel.getEquipment().setChestplate(player.getInventory().getChestplate());
|
||||
skel.getEquipment().setLeggings(player.getInventory().getLeggings());
|
||||
skel.getEquipment().setBoots(player.getInventory().getBoots());
|
||||
skel.getEquipment().setItemInHand(Math.random() > 0.5 ? player.getItemInHand() : new ItemStack(Material.IRON_AXE));
|
||||
|
||||
//Disguise
|
||||
DisguisePlayer disguise = new DisguisePlayer(skel, ((CraftPlayer)player).getHandle().getProfile());
|
||||
Factory.Disguise().disguise(disguise);
|
||||
|
||||
//Invis
|
||||
Factory.Condition().Factory().Cloak(GetName(), player, player, 2 + 2*level, false, true);
|
||||
|
||||
_active.put(player, skel);
|
||||
|
||||
//Inform
|
||||
UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Energy(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
return;
|
||||
|
||||
for (Player cur : GetUsers())
|
||||
{
|
||||
if (!_active.containsKey(cur))
|
||||
continue;
|
||||
|
||||
Skeleton skel = _active.get(cur);
|
||||
|
||||
if (Factory.Condition().GetActiveCondition(cur, ConditionType.CLOAK) == null ||
|
||||
!cur.isBlocking() ||
|
||||
!Factory.Energy().Use(cur, GetName(), 0.5 - (getLevel(cur) * 0.1), true, true) ||
|
||||
skel == null ||
|
||||
!skel.isValid())
|
||||
{
|
||||
end(cur);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (UtilEnt.isGrounded(skel) &&
|
||||
(!UtilBlock.airFoliage(skel.getLocation().add(skel.getLocation().getDirection()).getBlock()) ||
|
||||
!UtilBlock.airFoliage(skel.getLocation().add(skel.getLocation().getDirection().multiply(2)).getBlock())))
|
||||
{
|
||||
UtilAction.velocity(skel, 0.6, 0.4, 1, false);
|
||||
}
|
||||
|
||||
UtilEnt.CreatureMoveFast(skel, cur.getTargetBlock(null, 0).getLocation().add(0, 2, 0), 1.8f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void illusionDeath(EntityDeathEvent event)
|
||||
{
|
||||
if (_active.containsValue(event.getEntity()))
|
||||
{
|
||||
event.getDrops().clear();
|
||||
event.getEntity().remove();
|
||||
}
|
||||
}
|
||||
|
||||
private void end(Player cur)
|
||||
{
|
||||
Factory.Condition().EndCondition(cur, null, GetName());
|
||||
|
||||
Skeleton skel = _active.remove(cur);
|
||||
if (skel == null)
|
||||
return;
|
||||
|
||||
//Ploop
|
||||
UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, skel.getLocation().add(0, 1, 0), 0.3f, 0.3f, 0.3f, 0.06f, 30);
|
||||
|
||||
for (int i=0 ; i<2 ; i++)
|
||||
skel.getWorld().playSound(skel.getLocation(), Sound.FIZZ, 2f, 0.4f);
|
||||
|
||||
skel.remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Reset(Player player)
|
||||
{
|
||||
end(player);
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@ import java.util.List;
|
||||
import mineplex.core.MiniPlugin;
|
||||
import mineplex.core.blockrestore.BlockRestore;
|
||||
import mineplex.minecraft.game.core.condition.ConditionManager;
|
||||
import mineplex.core.disguise.DisguiseManager;
|
||||
import mineplex.core.donation.repository.GameSalesPackageToken;
|
||||
import mineplex.core.energy.Energy;
|
||||
import mineplex.core.movement.Movement;
|
||||
@ -44,6 +45,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
|
||||
private CombatManager _combatManager;
|
||||
private ConditionManager _conditionManager;
|
||||
private ProjectileManager _projectileManager;
|
||||
private DisguiseManager _disguiseManager;
|
||||
private BlockRestore _blockRestore;
|
||||
private Fire _fire;
|
||||
private Movement _movement;
|
||||
@ -54,7 +56,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
|
||||
private HashMap<Integer, ISkill> _skillSalesPackageMap;
|
||||
|
||||
public SkillFactory(JavaPlugin plugin, DamageManager damageManager, IRelation relation,
|
||||
CombatManager combatManager, ConditionManager conditionManager, ProjectileManager projectileManager,
|
||||
CombatManager combatManager, ConditionManager conditionManager, ProjectileManager projectileManager, DisguiseManager disguiseManager,
|
||||
BlockRestore blockRestore, Fire fire, Movement movement, Teleport teleport, Energy energy, String webAddress)
|
||||
{
|
||||
super("Skill Factory", plugin);
|
||||
@ -66,6 +68,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
|
||||
_conditionManager = conditionManager;
|
||||
_projectileManager = projectileManager;
|
||||
_blockRestore = blockRestore;
|
||||
_disguiseManager = disguiseManager;
|
||||
_fire = fire;
|
||||
_movement = movement;
|
||||
_teleport = teleport;
|
||||
@ -164,6 +167,13 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
|
||||
0, 0, true,
|
||||
new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD},
|
||||
new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK}));
|
||||
//
|
||||
// AddSkill(new Illusion(this, "Illusion", ClassType.Assassin, SkillType.Sword,
|
||||
// 1, 4,
|
||||
// 30, -5,
|
||||
// 0, 0, true,
|
||||
// new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD},
|
||||
// new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK}));
|
||||
|
||||
//Axe
|
||||
AddSkill(new Blink(this, "Blink", ClassType.Assassin, SkillType.Axe,
|
||||
@ -700,6 +710,11 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
|
||||
return _blockRestore;
|
||||
}
|
||||
|
||||
public DisguiseManager Disguise()
|
||||
{
|
||||
return _disguiseManager;
|
||||
}
|
||||
|
||||
public Fire Fire()
|
||||
{
|
||||
return _fire;
|
||||
|
@ -0,0 +1,31 @@
|
||||
package mineplex.minecraft.game.classcombat.event;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class ClassCombatCreatureAllowSpawnEvent extends Event
|
||||
{
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private boolean _allow;
|
||||
|
||||
public ClassCombatCreatureAllowSpawnEvent(boolean allow)
|
||||
{
|
||||
_allow = allow;
|
||||
}
|
||||
|
||||
public HandlerList getHandlers()
|
||||
{
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList()
|
||||
{
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public boolean getAllowed()
|
||||
{
|
||||
return _allow;
|
||||
}
|
||||
}
|
@ -226,7 +226,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
|
||||
ItemFactory itemFactory = new ItemFactory(_plugin, _blockRestore, _conditionManager, damageManager, energy,
|
||||
_fire, _projectileManager, webAddress);
|
||||
_skillFactory = new SkillFactory(plugin, damageManager, this, _damageManager.GetCombatManager(),
|
||||
_conditionManager, _projectileManager, _blockRestore, _fire, new Movement(plugin), teleport,
|
||||
_conditionManager, _projectileManager, _disguiseManager, _blockRestore, _fire, new Movement(plugin), teleport,
|
||||
energy, webAddress);
|
||||
_classManager = new ClassManager(plugin, clientManager, donationManager, _skillFactory, itemFactory,
|
||||
webAddress);
|
||||
|
@ -52,7 +52,7 @@ public class CompassAddon extends MiniPlugin
|
||||
@EventHandler
|
||||
public void Update(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC)
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
return;
|
||||
|
||||
if (Manager.GetGame() == null)
|
||||
|
@ -38,6 +38,7 @@ import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.classcombat.event.ClassCombatCreatureAllowSpawnEvent;
|
||||
import mineplex.minecraft.game.core.combat.DeathMessageType;
|
||||
import nautilus.game.arcade.ArcadeFormat;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
@ -1256,4 +1257,21 @@ public abstract class Game implements Listener
|
||||
{
|
||||
return Manager;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void classCombatCreatureAllow(ClassCombatCreatureAllowSpawnEvent event)
|
||||
{
|
||||
CreatureAllowOverride = event.getAllowed();
|
||||
}
|
||||
|
||||
public boolean isInsideMap(Location loc)
|
||||
{
|
||||
return !(
|
||||
loc.getX() >= WorldData.MaxX ||
|
||||
loc.getX() <= WorldData.MinX ||
|
||||
loc.getZ() >= WorldData.MaxZ ||
|
||||
loc.getZ() <= WorldData.MinZ ||
|
||||
loc.getY() >= WorldData.MaxY ||
|
||||
loc.getY() <= WorldData.MinY);
|
||||
}
|
||||
}
|
||||
|
@ -54,8 +54,6 @@ public class Christmas extends SoloGame
|
||||
|
||||
private ArrayList<Location> _barrier = new ArrayList<Location>();
|
||||
|
||||
private ArrayList<String> _lastScoreboard = new ArrayList<String>();
|
||||
|
||||
private long _gameTime = 900000;
|
||||
|
||||
public Christmas(ArcadeManager manager)
|
||||
|
@ -1,32 +1,38 @@
|
||||
package nautilus.game.arcade.game.games.wither;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAction;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilFirework;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTextMiddle;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.data.BlockData;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.events.PlayerDeathOutEvent;
|
||||
import nautilus.game.arcade.events.PlayerKitGiveEvent;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.TeamGame;
|
||||
import nautilus.game.arcade.game.games.wither.kit.*;
|
||||
@ -39,23 +45,15 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
private GameTeam _runners;
|
||||
private GameTeam _withers;
|
||||
|
||||
private double _witherFactor = 3;
|
||||
private double _witherFactor = 2.5;
|
||||
|
||||
private long _gameTime = 240000;
|
||||
private int _pointGoal = 50;
|
||||
private int _points = 0;
|
||||
private int _yLimit = 0;
|
||||
|
||||
private int _witherY = 60;
|
||||
|
||||
private Location _spawnA;
|
||||
private Location _spawnB;
|
||||
|
||||
private Location _safeA;
|
||||
private Location _safeB;
|
||||
|
||||
private Location _boatA;
|
||||
private Location _boatB;
|
||||
private long _gameTime = 300000;
|
||||
|
||||
private int _livesPerPlayer = 3;
|
||||
private HashMap<Player, Integer> _lives = new HashMap<Player, Integer>();
|
||||
|
||||
private HashSet<BlockData> _blocks = new HashSet<BlockData>();
|
||||
|
||||
public WitherGame(ArcadeManager manager)
|
||||
@ -64,43 +62,50 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
|
||||
new Kit[]
|
||||
{
|
||||
new KitHumanRunner(manager),
|
||||
new KitHumanBlinder(manager),
|
||||
new KitHumanRepairman(manager),
|
||||
//new KitHumanRunner(manager),
|
||||
new KitHumanArcher(manager),
|
||||
new KitHumanBuilder(manager),
|
||||
new NullKit(manager),
|
||||
new KitWither(manager),
|
||||
new NullKit(manager),
|
||||
new KitWitherMinion(manager),
|
||||
//new KitWitherWeb(manager),
|
||||
//new KitWitherWeb(manager),
|
||||
},
|
||||
|
||||
new String[]
|
||||
{
|
||||
C.cGreen + "Humans" + C.cWhite + " Escape to the Beacon",
|
||||
C.cGreen + "Humans" + C.cWhite + " Win by reaching Beacon 100 times",
|
||||
|
||||
C.cGreen + "Humans" + C.cWhite + " Find Armor Upgrades to help surive!",
|
||||
C.cGreen + "Humans" + C.cWhite + " 5 Lives per Player",
|
||||
C.cGreen + "Humans" + C.cWhite + " Win by surviving for 5 minutes",
|
||||
" ",
|
||||
C.cRed + "Withers" + C.cWhite + " Stop Humans from reaching the Beacon",
|
||||
C.cRed + "Withers" + C.cWhite + " Win after 4 Minutes",
|
||||
C.cRed + "Withers" + C.cWhite + " Moves very slowly when near ground",
|
||||
C.cRed + "Withers" + C.cWhite + " Kill all the Humans within 5 Minutes",
|
||||
});
|
||||
|
||||
this.DeathOut = false;
|
||||
|
||||
this.DeathOut = true;
|
||||
this.DamageTeamSelf = false;
|
||||
this.DamageSelf = false;
|
||||
this.DeathSpectateSecs = 4;
|
||||
this.HungerSet = 20;
|
||||
this.WorldBoundaryKill = false;
|
||||
|
||||
this.CompassEnabled = true;
|
||||
this.CompassGiveItem = false;
|
||||
|
||||
this.KitRegisterState = GameState.Prepare;
|
||||
|
||||
_help = new String[]
|
||||
{
|
||||
C.cRed + C.Bold + "This game is in early stages of development!",
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void ParseData()
|
||||
{
|
||||
_witherY = WorldData.GetDataLocs("RED").get(0).getBlockY();
|
||||
|
||||
_safeA = WorldData.GetDataLocs("YELLOW").get(0);
|
||||
_safeB = WorldData.GetDataLocs("YELLOW").get(1);
|
||||
|
||||
_boatA = WorldData.GetDataLocs("GREEN").get(0);
|
||||
_boatB = WorldData.GetDataLocs("GREEN").get(1);
|
||||
|
||||
_spawnA = WorldData.GetDataLocs("BLUE").get(0);
|
||||
_spawnB = WorldData.GetDataLocs("BLUE").get(1);
|
||||
_yLimit = WorldData.GetDataLocs("RED").get(0).getBlockY();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -138,7 +143,7 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
@EventHandler
|
||||
public void teamBalance(UpdateEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
if (!InProgress())
|
||||
return;
|
||||
|
||||
if (event.getType() != UpdateType.FAST)
|
||||
@ -159,6 +164,8 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
|
||||
public void setWither(Player player, boolean forced)
|
||||
{
|
||||
_lives.remove(player);
|
||||
|
||||
SetPlayerTeam(player, _withers, true);
|
||||
|
||||
//Kit
|
||||
@ -177,6 +184,58 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
player.getWorld().strikeLightningEffect(player.getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDead(final PlayerDeathOutEvent event)
|
||||
{
|
||||
Player player = event.GetPlayer();
|
||||
|
||||
if (_lives.containsKey(player))
|
||||
{
|
||||
int lives = _lives.get(player);
|
||||
|
||||
if (lives <= 1)
|
||||
return;
|
||||
|
||||
_lives.put(player, lives - 1);
|
||||
|
||||
UtilPlayer.message(player, F.main("Game", "You have " + F.elem(C.cGreen + C.Bold + lives + " Lives Remaining") + "."));
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void gameStart(GameStateChangeEvent event)
|
||||
{
|
||||
if (event.GetState() != GameState.Live)
|
||||
return;
|
||||
|
||||
UtilTextMiddle.display(C.cGreen + "Humans Hiding", "12 Seconds until Assault", 10, 80, 10);
|
||||
|
||||
for (Player player : _withers.GetPlayers(true))
|
||||
{
|
||||
Manager.GetCondition().Factory().Blind("Game Start", player, null, 12, 0, false, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerLivesDisplay(PlayerKitGiveEvent event)
|
||||
{
|
||||
if (!_runners.HasPlayer(event.GetPlayer()))
|
||||
return;
|
||||
|
||||
//Player Lives
|
||||
if (!_lives.containsKey(event.GetPlayer()))
|
||||
_lives.put(event.GetPlayer(), _livesPerPlayer);
|
||||
|
||||
int lives = _lives.get(event.GetPlayer());
|
||||
|
||||
if (lives <= 0)
|
||||
return;
|
||||
|
||||
event.GetPlayer().getInventory().setItem(8, ItemStackFactory.Instance.CreateStack(Material.BONE, (byte)0, lives, C.cGreen + C.Bold + lives + " Lives Remaining"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void EndCheck()
|
||||
@ -194,16 +253,16 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
|
||||
//Wither Win
|
||||
if (UtilTime.elapsed(this.GetStateTime(), _gameTime))
|
||||
winner = _withers;
|
||||
winner = _runners;
|
||||
|
||||
//Runner Win
|
||||
if (_points >= _pointGoal)
|
||||
winner = _runners;
|
||||
if (_runners.GetPlayers(true).isEmpty())
|
||||
winner = _withers;
|
||||
|
||||
//Set Win
|
||||
if (winner != null)
|
||||
{
|
||||
AnnounceEnd(_withers);
|
||||
AnnounceEnd(winner);
|
||||
|
||||
for (GameTeam team : GetTeamList())
|
||||
{
|
||||
@ -232,6 +291,10 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
|
||||
if (event.getType() != UpdateType.FAST)
|
||||
return;
|
||||
|
||||
int lives = 0;
|
||||
for (int i : _lives.values())
|
||||
lives += i;
|
||||
|
||||
//Wipe Last
|
||||
Scoreboard.Reset();
|
||||
@ -245,8 +308,8 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
Scoreboard.Write(_withers.GetColor() + "" + _withers.GetPlayers(true).size() + " Players");
|
||||
|
||||
Scoreboard.WriteBlank();
|
||||
Scoreboard.Write(C.cYellow + C.Bold + "Escapes");
|
||||
Scoreboard.Write(_points + " / " + _pointGoal);
|
||||
Scoreboard.Write(C.cYellow + C.Bold + "Human Lives");
|
||||
Scoreboard.Write(lives + " / " + (_lives.size() * _livesPerPlayer));
|
||||
|
||||
Scoreboard.WriteBlank();
|
||||
Scoreboard.Write(C.cYellow + C.Bold + "Time Left");
|
||||
@ -255,12 +318,23 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
Scoreboard.Draw();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GameTeam ChooseTeam(Player player)
|
||||
{
|
||||
if (CanJoinTeam(_withers))
|
||||
return _withers;
|
||||
|
||||
return _runners;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean CanJoinTeam(GameTeam team)
|
||||
{
|
||||
if (team.equals(_withers))
|
||||
{
|
||||
return team.GetSize() < getRequiredWithers();
|
||||
|
||||
}
|
||||
|
||||
return team.GetSize() < GetPlayers(true).size() - getRequiredWithers();
|
||||
}
|
||||
|
||||
@ -270,26 +344,74 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void witherBump(UpdateEvent event)
|
||||
public void witherMovement(UpdateEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
return;
|
||||
|
||||
for (Player player : _withers.GetPlayers(true))
|
||||
{
|
||||
if (player.getLocation().getY() < _witherY)
|
||||
{
|
||||
player.setVelocity(new Vector(0, 0.6, 0));
|
||||
|
||||
if (Recharge.Instance.use(player, "Wither Bump", 5000, false, false))
|
||||
UtilPlayer.message(player, F.main("Game", "Withers cannot descend past this point."));
|
||||
}
|
||||
ArrayList<Location> collisions = new ArrayList<Location>();
|
||||
|
||||
//Fly Speed
|
||||
if (player.getLocation().getY() > _yLimit)
|
||||
{
|
||||
player.setFlySpeed(0.06f);
|
||||
}
|
||||
else
|
||||
{
|
||||
double speed = (_yLimit - player.getLocation().getY()) * 0.075;
|
||||
|
||||
player.setFlySpeed(Math.max(0.015f, 0.06f - (float)speed));
|
||||
}
|
||||
|
||||
//Bump
|
||||
for (Block block : UtilBlock.getInRadius(player.getLocation().add(0, 0.5, 0), 1.5d).keySet())
|
||||
{
|
||||
if (!UtilBlock.airFoliage(block))
|
||||
{
|
||||
collisions.add(block.getLocation().add(0.5, 0.5, 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
Vector vec = UtilAlg.getAverageBump(player.getLocation(), collisions);
|
||||
|
||||
if (vec == null)
|
||||
continue;
|
||||
|
||||
UtilAction.velocity(player, vec, 0.6, false, 0, 0.4, 10, true);
|
||||
|
||||
// if (player.getLocation().getY() < _yLimit + 6)
|
||||
// UtilAction.velocity(player, new Vector(0, 1, 0), 0.6, false, 0, 0, 10, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBlocks(Set<Block> blocks)
|
||||
{
|
||||
Iterator<Block> blockIter = blocks.iterator();
|
||||
|
||||
while (blockIter.hasNext())
|
||||
{
|
||||
Block block = blockIter.next();
|
||||
|
||||
if (block.getType() == Material.BEDROCK || block.getType() == Material.IRON_BLOCK)
|
||||
blockIter.remove();
|
||||
|
||||
else if (!isInsideMap(block.getLocation()))
|
||||
blockIter.remove();
|
||||
|
||||
// else if (UtilAlg.inBoundingBox(block.getLocation(), _safeA, _safeB) || UtilAlg.inBoundingBox(block.getLocation(), _spawnA, _spawnB))
|
||||
// blockIter.remove();
|
||||
}
|
||||
|
||||
for (Block block : blocks)
|
||||
_blocks.add(new BlockData(block));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreBlock(Location loc, double radius)
|
||||
{
|
||||
@ -309,46 +431,29 @@ public class WitherGame extends TeamGame implements IBlockRestorer
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBlocks(Set<Block> blocks)
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
Iterator<Block> blockIter = blocks.iterator();
|
||||
|
||||
while (blockIter.hasNext())
|
||||
{
|
||||
Block block = blockIter.next();
|
||||
|
||||
if (UtilAlg.inBoundingBox(block.getLocation(), _safeA, _safeB) || UtilAlg.inBoundingBox(block.getLocation(), _spawnA, _spawnB))
|
||||
blockIter.remove();
|
||||
}
|
||||
|
||||
for (Block block : blocks)
|
||||
_blocks.add(new BlockData(block));
|
||||
_lives.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void boatEscape(UpdateEvent event)
|
||||
public void livesUpdate(UpdateEvent event)
|
||||
{
|
||||
if (!IsLive())
|
||||
return;
|
||||
|
||||
if (event.getType() != UpdateType.TICK)
|
||||
if (event.getType() != UpdateType.FASTER)
|
||||
return;
|
||||
|
||||
for (Player player : _runners.GetPlayers(true))
|
||||
Iterator<Player> playerIter = _lives.keySet().iterator();
|
||||
|
||||
while (playerIter.hasNext())
|
||||
{
|
||||
if (UtilAlg.inBoundingBox(player.getLocation(), _boatA, _boatB))
|
||||
{
|
||||
_points++;
|
||||
|
||||
UtilFirework.playFirework(player.getLocation(), Type.BALL, Color.LIME, true, true);
|
||||
|
||||
player.teleport(_runners.GetSpawn());
|
||||
|
||||
Announce(C.cGreen + C.Bold + player.getName() + " escaped!");
|
||||
|
||||
AddGems(player, 4, "Escapes", true);
|
||||
}
|
||||
Player player = playerIter.next();
|
||||
|
||||
if (!player.isOnline() || !_runners.HasPlayer(player))
|
||||
playerIter.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,20 +4,21 @@ import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkFletcher;
|
||||
import nautilus.game.arcade.kit.perks.PerkRopedArrow;
|
||||
import nautilus.game.arcade.kit.perks.PerkWitherArrowBlind;
|
||||
|
||||
public class KitHumanBlinder extends Kit
|
||||
public class KitHumanArcher extends Kit
|
||||
{
|
||||
public KitHumanBlinder(ArcadeManager manager)
|
||||
public KitHumanArcher(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Human Blinder", KitAvailability.Free,
|
||||
super(manager, "Human Archer", KitAvailability.Free,
|
||||
|
||||
new String[]
|
||||
{
|
||||
@ -26,7 +27,10 @@ public class KitHumanBlinder extends Kit
|
||||
|
||||
new Perk[]
|
||||
{
|
||||
new PerkWitherArrowBlind(4)
|
||||
new PerkRopedArrow("Roped Arrow", 1, 4000),
|
||||
new PerkWitherArrowBlind(3),
|
||||
new PerkFletcher(4, 4, true),
|
||||
|
||||
},
|
||||
EntityType.ZOMBIE,
|
||||
null);
|
||||
@ -38,24 +42,15 @@ public class KitHumanBlinder extends Kit
|
||||
{
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.BOW));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.ARROW, 8));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
|
||||
|
||||
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET));
|
||||
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE));
|
||||
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS));
|
||||
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS));
|
||||
|
||||
Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 8, false, false);
|
||||
|
||||
Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 6, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpawnCustom(LivingEntity ent)
|
||||
{
|
||||
ent.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET));
|
||||
ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE));
|
||||
ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS));
|
||||
ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS));
|
||||
|
||||
}
|
||||
}
|
@ -4,7 +4,6 @@ import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
@ -12,12 +11,13 @@ import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.PerkBlockRestorer;
|
||||
import nautilus.game.arcade.kit.perks.PerkIronShell;
|
||||
|
||||
public class KitHumanRepairman extends Kit
|
||||
public class KitHumanBuilder extends Kit
|
||||
{
|
||||
public KitHumanRepairman(ArcadeManager manager)
|
||||
public KitHumanBuilder(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Human Repairman", KitAvailability.Free,
|
||||
super(manager, "Human Builder", KitAvailability.Free,
|
||||
|
||||
new String[]
|
||||
{
|
||||
@ -26,6 +26,7 @@ public class KitHumanRepairman extends Kit
|
||||
|
||||
new Perk[]
|
||||
{
|
||||
new PerkIronShell(),
|
||||
new PerkBlockRestorer()
|
||||
},
|
||||
EntityType.ZOMBIE,
|
||||
@ -37,23 +38,16 @@ public class KitHumanRepairman extends Kit
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SPADE));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
|
||||
|
||||
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET));
|
||||
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE));
|
||||
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS));
|
||||
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS));
|
||||
|
||||
Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 8, false, false);
|
||||
|
||||
Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 6, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpawnCustom(LivingEntity ent)
|
||||
{
|
||||
ent.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET));
|
||||
ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE));
|
||||
ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS));
|
||||
ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS));
|
||||
|
||||
}
|
||||
}
|
@ -40,21 +40,13 @@ public class KitHumanRunner extends Kit
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_AXE));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.MUSHROOM_SOUP));
|
||||
|
||||
player.getInventory().setHelmet(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_HELMET));
|
||||
player.getInventory().setChestplate(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_CHESTPLATE));
|
||||
player.getInventory().setLeggings(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_LEGGINGS));
|
||||
player.getInventory().setBoots(ItemStackFactory.Instance.CreateStack(Material.CHAINMAIL_BOOTS));
|
||||
|
||||
Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 8, false, false);
|
||||
|
||||
Manager.GetCondition().Factory().Invulnerable("Spawn Invul", player, player, 6, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpawnCustom(LivingEntity ent)
|
||||
{
|
||||
ent.getEquipment().setHelmet(new ItemStack(Material.CHAINMAIL_HELMET));
|
||||
ent.getEquipment().setChestplate(new ItemStack(Material.CHAINMAIL_CHESTPLATE));
|
||||
ent.getEquipment().setLeggings(new ItemStack(Material.CHAINMAIL_LEGGINGS));
|
||||
ent.getEquipment().setBoots(new ItemStack(Material.CHAINMAIL_BOOTS));
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,130 @@
|
||||
package nautilus.game.arcade.game.games.wither.kit;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.disguise.disguises.DisguiseWither;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
|
||||
public class KitWitherMinion extends Kit
|
||||
{
|
||||
public KitWitherMinion(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Wither", KitAvailability.Free,
|
||||
|
||||
new String[]
|
||||
{
|
||||
""
|
||||
},
|
||||
|
||||
new Perk[]
|
||||
{
|
||||
new PerkWitherArrows(),
|
||||
new PerkWitherAttack(),
|
||||
new PerkWitherMinion()
|
||||
},
|
||||
EntityType.SKELETON,
|
||||
null);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpawnCustom(LivingEntity ent)
|
||||
{
|
||||
ent.setMaxHealth(300);
|
||||
ent.setHealth(300);
|
||||
|
||||
DisguiseWither disguise = new DisguiseWither(ent);
|
||||
disguise.SetName(C.cYellow + "Wither");
|
||||
disguise.SetCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void GiveItems(Player player)
|
||||
{
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1,
|
||||
C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Wither Skull"));
|
||||
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1,
|
||||
C.cYellow + C.Bold + "Right-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Skeletal Minions"));
|
||||
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.COMPASS, (byte)0, 1,
|
||||
C.cYellow + C.Bold + "Human Finder X-9000"));
|
||||
|
||||
//Disguise
|
||||
DisguiseWither disguise = new DisguiseWither(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.SetName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
else
|
||||
disguise.SetName(player.getName());
|
||||
|
||||
disguise.SetCustomNameVisible(true);
|
||||
Manager.GetDisguise().disguise(disguise);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void witherDamageCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
return;
|
||||
|
||||
Player player = event.GetDamageePlayer();
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
if (HasKit(player))
|
||||
event.SetCancelled("Wither Immunity");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void witherMeleeCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
return;
|
||||
|
||||
Player player = event.GetDamagerPlayer(true);
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
if (!HasKit(player))
|
||||
return;
|
||||
|
||||
if (event.GetCause() != DamageCause.ENTITY_ATTACK)
|
||||
return;
|
||||
|
||||
event.SetCancelled("Wither Melee Cancel");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void witherFlight(UpdateEvent event)
|
||||
{
|
||||
for (Player player : UtilServer.getPlayers())
|
||||
{
|
||||
if (!HasKit(player))
|
||||
continue;
|
||||
|
||||
if (player.isFlying())
|
||||
continue;
|
||||
|
||||
player.setAllowFlight(true);
|
||||
player.setFlying(true);
|
||||
}
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.disguise.disguises.DisguiseBlaze;
|
||||
import mineplex.core.disguise.disguises.DisguiseWither;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
@ -18,13 +18,12 @@ import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.perks.*;
|
||||
import nautilus.game.arcade.kit.perks.data.IBlockRestorer;
|
||||
|
||||
public class KitWither extends Kit
|
||||
public class KitWitherWeb extends Kit
|
||||
{
|
||||
public KitWither(ArcadeManager manager)
|
||||
public KitWitherWeb(ArcadeManager manager)
|
||||
{
|
||||
super(manager, "Wither", KitAvailability.Free,
|
||||
super(manager, "Wither Trapper", KitAvailability.Free,
|
||||
|
||||
new String[]
|
||||
{
|
||||
@ -36,9 +35,8 @@ public class KitWither extends Kit
|
||||
new PerkWitherArrows(),
|
||||
new PerkWitherAttack(),
|
||||
new PerkWitherWeb(),
|
||||
new PerkWitherMinion()
|
||||
},
|
||||
EntityType.ZOMBIE,
|
||||
EntityType.WITHER,
|
||||
null);
|
||||
|
||||
}
|
||||
@ -51,12 +49,9 @@ public class KitWither extends Kit
|
||||
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1,
|
||||
C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Web Blast"));
|
||||
|
||||
player.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.DIAMOND_SWORD, (byte)0, 1,
|
||||
C.cYellow + C.Bold + "Left-Click" + C.cWhite + C.Bold + " - " + C.cGreen + C.Bold + "Skeletal Minions"));
|
||||
|
||||
//Disguise
|
||||
DisguiseBlaze disguise = new DisguiseBlaze(player);
|
||||
DisguiseWither disguise = new DisguiseWither(player);
|
||||
|
||||
if (Manager.GetGame().GetTeam(player) != null)
|
||||
disguise.SetName(Manager.GetGame().GetTeam(player).GetColor() + player.getName());
|
||||
@ -113,7 +108,6 @@ public class KitWither extends Kit
|
||||
|
||||
player.setAllowFlight(true);
|
||||
player.setFlying(true);
|
||||
player.setFlySpeed(0.1f);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package nautilus.game.arcade.kit.perks;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkIronShell extends Perk
|
||||
{
|
||||
public PerkIronShell()
|
||||
{
|
||||
super("Iron Shell", new String[]
|
||||
{
|
||||
C.cYellow + "Right-Click" + C.cGray + " with Spade to use " + C.cGreen + "Iron Shell"
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void Activate(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
|
||||
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK)
|
||||
return;
|
||||
|
||||
if (UtilBlock.usable(event.getClickedBlock()))
|
||||
return;
|
||||
|
||||
if (!event.getPlayer().getItemInHand().getType().toString().contains("_SPADE"))
|
||||
return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!Kit.HasKit(player))
|
||||
return;
|
||||
|
||||
if (!Recharge.Instance.use(player, GetName(), 60000, true, true))
|
||||
return;
|
||||
|
||||
//Sphere
|
||||
Block block = player.getLocation().getBlock();
|
||||
HashMap<Block, Double> blocks = UtilBlock.getInRadius(block.getLocation().add(0.5, 0.5, 0.5), 6d);
|
||||
for (Block cur : blocks.keySet())
|
||||
{
|
||||
if (UtilMath.offset(block.getLocation(), cur.getLocation()) <= 5)
|
||||
continue;
|
||||
|
||||
//Doors
|
||||
if (cur.getY() < block.getLocation().getY() + 2)
|
||||
if (cur.getX() == block.getX() || cur.getZ() == block.getZ())
|
||||
continue;
|
||||
|
||||
//None Below
|
||||
if (cur.getY() < block.getLocation().getY())
|
||||
continue;
|
||||
|
||||
Manager.GetBlockRestore().Add(cur, 42, (byte)0, 12000);
|
||||
}
|
||||
|
||||
|
||||
//Inform
|
||||
UtilPlayer.message(player, F.main("Skill", "You used " + F.skill(GetName()) + "."));
|
||||
}
|
||||
}
|
@ -96,7 +96,7 @@ public class PerkWitherArrowBlind extends Perk
|
||||
boolean hit = false;
|
||||
for (Player player : getWitherTeam().GetPlayers(true))
|
||||
{
|
||||
if (UtilMath.offset(player.getLocation().add(0, 2, 0), arrow.getLocation()) < _proximityHit)
|
||||
if (UtilMath.offset(player.getLocation().add(0, 1, 0), arrow.getLocation()) < _proximityHit)
|
||||
{
|
||||
Manager.GetCondition().Factory().Blind(GetName(), player, null, 4, 0, false, false, false);
|
||||
|
||||
|
@ -41,17 +41,17 @@ public class PerkWitherArrows extends Perk
|
||||
|
||||
if (!player.isBlocking())
|
||||
{
|
||||
player.setExp((float) Math.min(0.999, player.getExp()+(1f/40f)));
|
||||
player.setExp((float) Math.min(0.999, player.getExp()+(1f/30f)));
|
||||
}
|
||||
else if (player.getExp() > 0)
|
||||
{
|
||||
player.setExp((float) Math.max(0, player.getExp()-(1f/40f)));
|
||||
player.setExp((float) Math.max(0, player.getExp()-(1f/30f)));
|
||||
|
||||
for (int i=0 ; i<2 ; i++)
|
||||
for (int i=0 ; i<1 ; i++)
|
||||
{
|
||||
Arrow arrow = player.getWorld().spawnArrow(
|
||||
player.getEyeLocation().add(player.getLocation().getDirection()),
|
||||
player.getLocation().getDirection(), 2, 12);
|
||||
player.getLocation().getDirection(), 2, 6);
|
||||
|
||||
arrow.setShooter(player);
|
||||
|
||||
@ -64,7 +64,6 @@ public class PerkWitherArrows extends Perk
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
@ -77,10 +76,12 @@ public class PerkWitherArrows extends Perk
|
||||
{
|
||||
Arrow arrow = arrowIter.next();
|
||||
|
||||
if (!arrow.isValid() || arrow.getTicksLived() > 60 || arrow.getLocation().getY() < 0)
|
||||
if (!arrow.isValid() || arrow.getTicksLived() > 60 || arrow.getLocation().getY() < 0 || arrow.isOnGround())
|
||||
{
|
||||
arrow.remove();
|
||||
arrowIter.remove();
|
||||
|
||||
UtilParticle.PlayParticle(ParticleType.LAVA, arrow.getLocation(), 0, 0, 0, 0, 1);
|
||||
}
|
||||
else if (arrow.getTicksLived() > 1)
|
||||
{
|
||||
|
@ -145,7 +145,7 @@ public class PerkWitherAttack extends Perk
|
||||
|
||||
//Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(player, (LivingEntity)skull.getShooter(), null,
|
||||
DamageCause.CUSTOM, 10 * scale, true, true, false,
|
||||
DamageCause.CUSTOM, 8 * players.get(player) * scale, true, true, false,
|
||||
UtilEnt.getName((LivingEntity)skull.getShooter()), GetName());
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ public class PerkWitherMinion extends Perk
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void witherMeleeCancel(CustomDamageEvent event)
|
||||
public void witherFallCancel(CustomDamageEvent event)
|
||||
{
|
||||
if (event.IsCancelled())
|
||||
return;
|
||||
@ -117,7 +117,7 @@ public class PerkWitherMinion extends Perk
|
||||
if (event.GetCause() != DamageCause.FALL)
|
||||
return;
|
||||
|
||||
if (_ents.contains(event.GetDamageeEntity()))
|
||||
if (!_ents.contains(event.GetDamageeEntity()))
|
||||
return;
|
||||
|
||||
event.SetCancelled("Minion Fall Damage");
|
||||
|
@ -391,8 +391,10 @@ public class GameManager implements Listener
|
||||
Player player = queueIterator.next();
|
||||
|
||||
if (!game.CanJoinTeam(team))
|
||||
{
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
queueIterator.remove();
|
||||
|
||||
if (!game.IsPlaying(player))
|
||||
|
@ -328,12 +328,18 @@ public class GamePlayerManager implements Listener
|
||||
Donor donor = Manager.GetDonation().Get(player.getName());
|
||||
|
||||
if (kit.GetAvailability() == KitAvailability.Free || //Free
|
||||
|
||||
Manager.isYoutuber(player) || //YouTube
|
||||
(kit.GetAvailability() == KitAvailability.Achievement &&
|
||||
Manager.GetAchievement().hasCategory(player, kit.getAchievementRequirement())) || //Achievement
|
||||
|
||||
(kit.GetAvailability() == KitAvailability.Achievement && //Achievement
|
||||
Manager.GetAchievement().hasCategory(player, kit.getAchievementRequirement())) ||
|
||||
|
||||
donor.OwnsUnknownPackage(Manager.GetGame().GetName() + " " + kit.GetName()) || //Green
|
||||
|
||||
Manager.GetClients().Get(player).GetRank().Has(Rank.HELPER) || //STAFF
|
||||
|
||||
donor.OwnsUnknownPackage(Manager.GetServerConfig().ServerType + " ULTRA") || //Single Ultra (Old)
|
||||
|
||||
Manager.GetServerConfig().Tournament) //Tournament
|
||||
{
|
||||
Manager.GetGame().SetKit(player, kit, true);
|
||||
|
Loading…
Reference in New Issue
Block a user