Initial MineStrike push

fixed frames being breakable in games
This commit is contained in:
Chiss 2014-09-01 21:37:39 +10:00
parent 492b3cc0a4
commit 05623b7522
38 changed files with 3785 additions and 30 deletions

View File

@ -23,7 +23,7 @@ public enum Achievement
BRIDGES_SNIPER("Sniper", 600,
new String[] {"The Bridges.Sniper"},
new String[] {"Kill an enemy with Bow before Bridges fall"},
new String[] {"Kill an enemy with Archery before Bridges fall"},
new int[] {1},
AchievementCategory.BRIDGES),

View File

@ -543,6 +543,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable
});
}
}
/*
else if (packet instanceof PacketPlayOutNamedSoundEffect)
{
try
@ -567,6 +568,7 @@ public class DisguiseManager extends MiniPlugin implements IPacketRunnable
e.printStackTrace();
}
}
*/
return true;
}

View File

@ -62,6 +62,7 @@ public class MorphPumpkinKing extends MorphGadget
{
this.RemoveArmor(player);
Manager.getDisguiseManager().undisguise(player);
player.getInventory().setHelmet(null);
}

View File

@ -7,6 +7,7 @@ import org.bukkit.Sound;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
@ -170,4 +171,11 @@ public class MountCart extends Mount<Minecart>
}
}
}
@EventHandler
public void cancelBreak(EntityDamageEvent event)
{
if (GetActive().values().contains(event.getEntity()))
event.setCancelled(true);
}
}

View File

@ -647,7 +647,8 @@ public class ArcadeManager extends MiniPlugin implements IRelation
// Arrows go bye bye.
((CraftPlayer) player).getHandle().p(0);
GetCondition().EndCondition(player, ConditionType.CLOAK, null);
//Remove all conditions
GetCondition().EndCondition(player, null, null);
HubClock(player);

View File

@ -26,7 +26,7 @@ import nautilus.game.arcade.game.games.halloween.Halloween;
import nautilus.game.arcade.game.games.hideseek.HideSeek;
import nautilus.game.arcade.game.games.micro.Micro;
import nautilus.game.arcade.game.games.milkcow.MilkCow;
//import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.mineware.MineWare;
import nautilus.game.arcade.game.games.quiver.Quiver;
import nautilus.game.arcade.game.games.quiver.QuiverTeams;
@ -79,7 +79,7 @@ public class GameFactory
else if (gameType == GameType.Halloween) return new Halloween(_manager);
else if (gameType == GameType.HideSeek) return new HideSeek(_manager);
else if (gameType == GameType.Micro) return new Micro(_manager);
//else if (gameType == GameType.MineStrike) return new MineStrike(_manager);
else if (gameType == GameType.MineStrike) return new MineStrike(_manager);
else if (gameType == GameType.MineWare) return new MineWare(_manager);
else if (gameType == GameType.MilkCow) return new MilkCow(_manager);
else if (gameType == GameType.Paintball) return new Paintball(_manager);

View File

@ -6,6 +6,7 @@ import mineplex.core.common.util.*;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.updater.UpdateType;
import mineplex.minecraft.game.core.combat.DeathMessageType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeFormat;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
@ -37,10 +38,14 @@ import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
import org.bukkit.entity.Hanging;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.scoreboard.Objective;
import org.bukkit.util.Vector;
@ -1147,4 +1152,25 @@ public abstract class Game implements Listener
{
return _statTrackers;
}
@EventHandler
public void onHangingBreak(HangingBreakEvent event)
{
event.setCancelled(true);
}
@EventHandler
public void onHangingPlace(HangingPlaceEvent event)
{
event.setCancelled(true);
}
@EventHandler
public void onDamageHanging(EntityDamageEvent event)
{
if (event.getEntity() instanceof Hanging)
{
event.setCancelled(true);
}
}
}

View File

@ -0,0 +1,259 @@
package nautilus.game.arcade.game.games.minestrike;
import java.util.HashMap;
import java.util.HashSet;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.recharge.Recharge;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItem;
import nautilus.game.arcade.game.games.minestrike.items.equipment.DefusalKit;
import nautilus.game.arcade.game.games.minestrike.items.equipment.Helmet;
import nautilus.game.arcade.game.games.minestrike.items.equipment.Kevlar;
import nautilus.game.arcade.game.games.minestrike.items.grenades.*;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.pistol.*;
import nautilus.game.arcade.game.games.minestrike.items.guns.rifle.*;
import nautilus.game.arcade.game.games.minestrike.items.guns.shotgun.*;
import nautilus.game.arcade.game.games.minestrike.items.guns.smg.*;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
public class ShopManager
{
private MineStrike Host;
private HashMap<Player, HashMap<Integer, StrikeItem>> _shop = new HashMap<Player, HashMap<Integer, StrikeItem>>();
private HashMap<Player, Integer> _money = new HashMap<Player, Integer>();
private HashSet<Player> _inShop = new HashSet<Player>();
public ShopManager(MineStrike host)
{
Host = host;
}
public void enterShop(Player player)
{
GameTeam team = Host.GetTeam(player);
if (team == null)
return;
clearShopInventory(player);
_shop.put(player, new HashMap<Integer, StrikeItem>());
int slot;
//Pistols
slot = 9;
//addItem(team.GetColor() == ChatColor.RED ? new Glock18() : new USP(), player, slot++);
addItem(new CZ75(), player, slot++);
addItem(new Deagle(), player, slot++);
//Shotgun
slot = 18;
addItem(new Nova(), player, slot++);
//SMG
addItem(new P90(), player, slot++);
//Rifles
slot = 27;
addItem(team.GetColor() == ChatColor.RED ? new AK47() : new M4A1(), player, slot++);
addItem(new AWP(), player, slot++);
//Grenades
addItem(new FlashBang(), player, 15);
addItem(new HighExplosive(), player, 16);
addItem(new Smoke(), player, 17);
//Gear
if (team.GetColor() == ChatColor.AQUA)
addItem(new DefusalKit(), player, 26);
//Equipment
addItem(new Helmet(), player, 34);
addItem(new Kevlar(), player, 35);
_inShop.add(player);
}
public void addItem(StrikeItem item, Player player, int slot)
{
player.getInventory().setItem(slot, item.getShopItem(getMoney(player)));
_shop.get(player).put(slot, item);
}
public void clearShopInventory(Player player)
{
_shop.remove(player);
for (int i=9 ; i<36 ; i++)
player.getInventory().setItem(i, null);
}
public int getMoney(Player player)
{
if (!_money.containsKey(player))
_money.put(player, 800);
return _money.get(player);
}
public void addMoney(Player player, int amount, String reason)
{
_money.put(player, Math.min(16000, getMoney(player) + amount));
UtilPlayer.message(player, F.main("Game", "Received " + F.elem(C.cDGreen + "$" + amount) + " for " + reason + "."));
}
public void inventoryClick(InventoryClickEvent event)
{
event.setCancelled(true);
Player player = UtilPlayer.searchExact(event.getWhoClicked().getName());
if (player == null)
return;
GameTeam team = Host.GetTeam(player);
if (team == null)
return;
if (!_shop.containsKey(player))
return;
if (!_shop.get(player).containsKey(event.getSlot()))
return;
//Prevent accidently buying multi
if (!Recharge.Instance.use(player, "Shop Purchase", 120, false, false))
return;
StrikeItem item = _shop.get(player).get(event.getSlot());
if (getMoney(player) < item.getCost())
{
player.playSound(player.getLocation(), Sound.NOTE_BASS, 1f, 1f);
return;
}
//Gun
if (item instanceof Gun)
{
Gun gun = (Gun)item;
Host.dropSlotItem(player, gun.getSlot());
gun.giveToPlayer(player);
Host.registerGun(gun, player);
}
//Grenade
else if (item instanceof Grenade)
{
Grenade grenade = (Grenade)item;
if (!grenade.giveToPlayer(player))
{
player.playSound(player.getLocation(), Sound.NOTE_BASS, 1f, 1f);
return;
}
Host.registerGrenade(grenade, player);
}
else if (item instanceof Helmet)
{
((Helmet)item).giveToPlayer(player, (team.GetColor() == ChatColor.RED) ? Color.fromRGB(100, 0, 0) : Color.fromRGB(0, 0, 100));
}
else if (item instanceof Kevlar)
{
((Kevlar)item).giveToPlayer(player, (team.GetColor() == ChatColor.RED) ? Color.fromRGB(100, 0, 0) : Color.fromRGB(0, 0, 100));
}
else if (item instanceof DefusalKit)
{
item.giveToPlayer(player, 8);
}
_money.put(player, getMoney(player) - item.getCost());
enterShop(player);
}
public void leaveShop(Player player, boolean showShopItem, boolean wipeMoney)
{
_shop.remove(player);
_inShop.remove(player);
clearShopInventory(player);
if (wipeMoney)
_money.remove(player);
if (showShopItem)
{
player.getInventory().setItem(22,
ItemStackFactory.Instance.CreateStack(Material.PAPER, (byte)0, 1, C.cRed + "Cannot Purchase Gear",
new String[]
{
C.cWhite + "",
C.cWhite + "You can only purchase gear when",
C.cWhite + "you are near your spawn point in",
C.cWhite + "the first 45 seconds of the round!",
}));
}
}
public boolean isBuyTime()
{
return !UtilTime.elapsed(Host.GetStateTime(), 45000) && Host.InProgress();
}
public void update()
{
for (Player player : Host.GetPlayers(true))
{
GameTeam team = Host.GetTeam(player);
if (team == null)
{
leaveShop(player, false, false);
continue;
}
//Near Shop?
boolean nearShop = false;
for (Location loc : team.GetSpawns())
{
if (UtilMath.offset(player.getLocation(), loc) < 5)
{
nearShop = true;
break;
}
}
//Leave Shop
if (_inShop.contains(player) && (!nearShop || !isBuyTime()))
{
leaveShop(player, true, false);
}
//Enter Shop
else if (!_inShop.contains(player) && (nearShop && isBuyTime()))
{
enterShop(player);
}
}
}
}

View File

@ -0,0 +1,86 @@
package nautilus.game.arcade.game.games.minestrike.data;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilParticle.ParticleType;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
public class Bomb
{
public long BombTime = 45000;
public Block Block;
public long StartTime;
public long LastBeep;
public long MinBeepTime = 40;
public long StartBeepTime = 2000;
public Player Planter;
public Bomb(Player planter)
{
Planter = planter;
Block = planter.getLocation().getBlock();
Block.setType(Material.DAYLIGHT_DETECTOR);
StartTime = System.currentTimeMillis();
}
public boolean update()
{
double scale = (double)(System.currentTimeMillis() - StartTime)/(double)BombTime;
long beepDuration = MinBeepTime + (long)(StartBeepTime * (1-scale));
float volume = 1f + 4f*(float)scale;
if (UtilTime.elapsed(LastBeep, beepDuration))
{
Block.getWorld().playSound(Block.getLocation(), Sound.ANVIL_BREAK, volume, 1f);
UtilParticle.PlayParticle(ParticleType.HAPPY_VILLAGER, Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1);
LastBeep = System.currentTimeMillis();
}
if (UtilTime.elapsed(StartTime, BombTime))
{
Block.setType(Material.AIR);
//Effect
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, Block.getLocation(), 10f, 10f, 10f, 0, 30);
for (int i=0 ; i<3 ; i++)
Block.getWorld().playSound(Block.getLocation(), Sound.ANVIL_LAND, 20f, (float)(Math.random() * 0.5 + 0.5));
return true;
}
return false;
}
public boolean isBlock(Block block)
{
if (block == null)
return false;
return block.equals(Block);
}
public void defuse()
{
Block.setType(Material.AIR);
//Effect
UtilParticle.PlayParticle(ParticleType.CLOUD, Block.getLocation().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1);
}
public void clean()
{
Block.setType(Material.AIR);
}
}

View File

@ -0,0 +1,47 @@
package nautilus.game.arcade.game.games.minestrike.data;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import org.bukkit.Location;
import org.bukkit.entity.Snowball;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilTime;
public class Bullet
{
public Snowball Bullet;
public Gun Gun;
public Location Origin;
public long LastSound = System.currentTimeMillis() - 100;
public Bullet(Snowball bullet, Gun gun, Location loc)
{
Bullet = bullet;
Gun = gun;
Origin = loc;
}
public boolean isValid()
{
return Bullet.isValid();
}
public double getDamage(Location destination)
{
return Gun.getDamage() * (1 - (Gun.getDropOff() * UtilMath.offset(Origin, destination)));
}
public boolean bulletSound()
{
if (UtilTime.elapsed(LastSound, 250))
{
LastSound = System.currentTimeMillis();
return true;
}
return false;
}
}

View File

@ -0,0 +1,178 @@
package nautilus.game.arcade.game.games.minestrike.items;
import java.util.ArrayList;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.items.grenades.Grenade;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public abstract class StrikeItem
{
private StrikeItemType _type;
private String _name;
private String[] _desc;
private int _cost;
private int _gemCost;
private Material _skin;
private ItemStack _stack = null;
public StrikeItem(StrikeItemType type, String name, String[] desc, int cost, int gemCost, Material skin)
{
_type = type;
_name = name;
_desc = desc;
_cost = cost;
_gemCost = gemCost;
_skin = skin;
//Make Stack
_stack = new ItemStack(skin);
fixStackName();
}
public StrikeItemType getType()
{
return _type;
}
public String getName()
{
return _name;
}
public String[] getDesc()
{
return _desc;
}
public int getCost()
{
return _cost;
}
public int getGemCost()
{
return _gemCost;
}
public Material getSkin()
{
return _skin;
}
public void drop(MineStrike game, Player player, boolean natural)
{
Entity ent;
if (natural)
{
ent = player.getWorld().dropItemNaturally(player.getEyeLocation(), _stack);
}
else
{
ent = player.getWorld().dropItem(player.getEyeLocation(), _stack);
ent.setVelocity(player.getLocation().getDirection().multiply(0.6));
}
if (this instanceof Gun)
{
game.deregisterGun((Gun)this);
game.registerDroppedGun(ent, (Gun)this);
}
else if (this instanceof Grenade)
{
game.deregisterGrenade((Grenade)this);
game.registerDroppedGrenade(ent, (Grenade)this);
}
}
public ItemStack getStack()
{
return _stack;
}
public void setStack(ItemStack stack)
{
_stack = stack;
}
public boolean isHolding(Player player)
{
return UtilGear.isMat(player.getItemInHand(), _skin);
}
public boolean isStack(ItemStack stack)
{
return UtilGear.isMat(stack, _skin);
}
public void giveToPlayer(Player player, int slot)
{
fixStackName();
player.getInventory().setItem(slot, getStack());
UtilPlayer.message(player, F.main("Game", "You equipped " + getName() + "."));
player.getWorld().playSound(player.getLocation(), Sound.ITEM_PICKUP, 1.5f, 1f);
}
public void fixStackName()
{
ItemMeta meta = _stack.getItemMeta();
meta.setDisplayName(C.Bold + getName());
_stack.setItemMeta(meta);
}
public abstract boolean pickup(MineStrike game, Player player);
public ItemStack getShopItem(int money)
{
ArrayList<String> lore = new ArrayList<String>();
for (String cur : _desc)
lore.add(C.cWhite + cur);
//Custom (Gun Stats)
if (getShopItemCustom().length > 0)
{
lore.add(" ");
for (String cur : getShopItemCustom())
lore.add(C.cWhite + cur);
}
lore.add(" ");
lore.add(C.cYellow + C.Bold + "Cost: " + ChatColor.RESET + "$" + _cost);
lore.add(" ");
lore.add(C.cYellow + C.Bold + "Money: " + ChatColor.RESET + "$" + money);
lore.add(" ");
lore.add((money >= _cost) ? C.cGreen + C.Bold + "Click to Purchase" : C.cRed + C.Bold + "Not enough Money");
String[] loreArray = new String[lore.size()];
loreArray = lore.toArray(loreArray);
return ItemStackFactory.Instance.CreateStack(_skin, (byte)0, 1, C.cGreen + getName(), loreArray);
}
public String[] getShopItemCustom()
{
return new String[] {};
}
}

View File

@ -0,0 +1,10 @@
package nautilus.game.arcade.game.games.minestrike.items;
public enum StrikeItemType
{
PRIMARY_WEAPON,
SECONDARY_WEAPON,
GRENADE,
EQUIPMENT,
ARMOR
}

View File

@ -0,0 +1,40 @@
package nautilus.game.arcade.game.games.minestrike.items.equipment;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItem;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
public class DefusalKit extends StrikeItem
{
public DefusalKit()
{
super(StrikeItemType.EQUIPMENT, "Defusal Kit", new String[]
{
"Halves the time it takes to defuse."
},
400, 0, Material.SHEARS);
}
@Override
public boolean pickup(MineStrike game, Player player)
{
return false;
}
public void giveToPlayer(Player player, int slot)
{
fixStackName();
player.getInventory().setItem(slot, getStack());
UtilPlayer.message(player, F.main("Game", "You equipped " + getName() + "."));
player.getWorld().playSound(player.getLocation(), Sound.HORSE_ARMOR, 1.5f, 1f);
}
}

View File

@ -0,0 +1,46 @@
package nautilus.game.arcade.game.games.minestrike.items.equipment;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItem;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
public class Helmet extends StrikeItem
{
public Helmet()
{
super(StrikeItemType.EQUIPMENT, "Helmet", new String[]
{
},
350, 0, Material.LEATHER_HELMET);
}
@Override
public boolean pickup(MineStrike game, Player player)
{
return false;
}
public void giveToPlayer(Player player, Color color)
{
ItemStack armor = new ItemStack(getSkin());
LeatherArmorMeta meta = (LeatherArmorMeta)armor.getItemMeta();
meta.setColor(color);
meta.setDisplayName(getName());
armor.setItemMeta(meta);
player.getInventory().setHelmet(armor);
UtilPlayer.message(player, F.main("Game", "You equipped " + getName() + "."));
player.getWorld().playSound(player.getLocation(), Sound.HORSE_ARMOR, 1f, 1f);
}
}

View File

@ -0,0 +1,46 @@
package nautilus.game.arcade.game.games.minestrike.items.equipment;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItem;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
public class Kevlar extends StrikeItem
{
public Kevlar()
{
super(StrikeItemType.EQUIPMENT, "Kevlar Vest", new String[]
{
},
650, 0, Material.LEATHER_CHESTPLATE);
}
@Override
public boolean pickup(MineStrike game, Player player)
{
return false;
}
public void giveToPlayer(Player player, Color color)
{
ItemStack armor = new ItemStack(getSkin());
LeatherArmorMeta meta = (LeatherArmorMeta)armor.getItemMeta();
meta.setColor(color);
meta.setDisplayName(getName());
armor.setItemMeta(meta);
player.getInventory().setChestplate(armor);
UtilPlayer.message(player, F.main("Game", "You equipped " + getName() + "."));
player.getWorld().playSound(player.getLocation(), Sound.HORSE_ARMOR, 1f, 1f);
}
}

View File

@ -0,0 +1,80 @@
package nautilus.game.arcade.game.games.minestrike.items.grenades;
import java.util.HashMap;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilFirework;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class FlashBang extends Grenade
{
public FlashBang()
{
super("Flash Bang", new String[]
{
},
300, 0, Material.CARROT_ITEM, 2);
}
@Override
public boolean updateCustom(MineStrike game, Entity ent)
{
if (ent.getTicksLived() > 40)
{
FireworkEffect effect = FireworkEffect.builder().flicker(true).withColor(Color.WHITE).with(Type.BALL_LARGE).trail(false).build();
UtilFirework.playFirework(ent.getLocation(), effect);
HashMap<Player, Double> players = UtilPlayer.getInRadius(ent.getLocation(), 48);
for (Player player : players.keySet())
{
if (!game.IsAlive(player))
continue;
//Line of Sight
Location loc = player.getEyeLocation();
boolean sight = true;
while (UtilMath.offset(loc, ent.getLocation()) > 0.5)
{
if (UtilBlock.solid(loc.getBlock()))
{
sight = false;
break;
}
loc.add(UtilAlg.getTrajectory(loc, ent.getLocation()).multiply(0.2));
}
if (!sight)
continue;
//Calculate if player is looking away
Location eyeToGrenade = player.getEyeLocation().add(UtilAlg.getTrajectory(player.getEyeLocation(), ent.getLocation()));
double flashIntensity = 2 - UtilMath.offset(player.getEyeLocation().add(player.getLocation().getDirection()), eyeToGrenade);
//Duration
double duration = (2 + (3 * (players.get(player)))) * flashIntensity;
duration += 1;
//Blind
game.Manager.GetCondition().Factory().Blind(getName(), player, _thrower, duration, 0, false, false, false);
}
return true;
}
return false;
}
}

View File

@ -0,0 +1,162 @@
package nautilus.game.arcade.game.games.minestrike.items.grenades;
import java.util.ArrayList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItem;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
public abstract class Grenade extends StrikeItem
{
protected Player _thrower = null;
protected Vector _vel;
protected Location _lastLoc;
protected ArrayList<Vector> _velHistory = new ArrayList<Vector>();
protected int _limit;
public Grenade(String name, String[] desc, int cost, int gemCost, Material skin, int limit)
{
super(StrikeItemType.GRENADE, name, desc, cost, gemCost, skin);
_limit = limit;
}
public boolean giveToPlayer(Player player)
{
int slot = 3;
int alreadyHas = 0;
while (player.getInventory().getItem(slot) != null && player.getInventory().getItem(slot).getType() != Material.AIR && slot <= 6)
{
if (player.getInventory().getItem(slot).getType() == getSkin())
{
alreadyHas++;
if (alreadyHas >= _limit)
return false;
}
slot++;
}
if (slot > 6)
return false;
giveToPlayer(player, slot);
return true;
}
public void throwGrenade(Player player, MineStrike game)
{
player.setItemInHand(null);
_thrower = player;
Entity ent = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()), getStack());
UtilAction.velocity(ent, player.getLocation().getDirection(), 1.2, false, 0, 0.2, 2, false);
//Rebound Data
_vel = player.getLocation().getDirection();
_velHistory.add(_vel);
_lastLoc = ent.getLocation();
UtilPlayer.message(player, F.main("Game", "You threw " + getName() + "."));
game.registerThrownGrenade(ent, this);
game.deregisterGrenade(this);
}
public boolean update(MineStrike game, Entity ent)
{
//Invalid
if (!ent.isValid())
return true;
//Rebound Off Blocks
rebound(ent);
//Custom
if (updateCustom(game, ent))
return true;
return false;
}
public void rebound(Entity ent)
{
if (UtilEnt.isGrounded(ent) || ent.getVelocity().length() < 0.1 || ent.getTicksLived() < 4)
return;
/*
* What we must do here, is record the velocity every tick.
* Then when it collides, we get the velocity from a few ticks before and apply it, reversing the direction of collision.
* We record history because as soon as it collides the collision direction is set to 0.
*/
//X Rebound
if ((_vel.getX() > 0 && ent.getLocation().getX() - _lastLoc.getX() <= 0) ||
(_vel.getX() < 0 && ent.getLocation().getX() - _lastLoc.getX() >= 0))
{
_vel = _velHistory.get(0);
_vel.setX(-_vel.getX());
_vel.multiply(0.75);
ent.setVelocity(_vel);
ent.getWorld().playSound(ent.getLocation(), Sound.ZOMBIE_WOOD, 1f, 2f);
}
//Z Rebound
else if ((_vel.getZ() > 0 && ent.getLocation().getZ() - _lastLoc.getZ() <= 0) ||
(_vel.getZ() < 0 && ent.getLocation().getZ() - _lastLoc.getZ() >= 0))
{
_vel = _velHistory.get(0);
_vel.setZ(-_vel.getZ());
_vel.multiply(0.75);
ent.setVelocity(_vel);
ent.getWorld().playSound(ent.getLocation(), Sound.ZOMBIE_WOOD, 1f, 2f);
}
else
{
_velHistory.add(ent.getVelocity());
while (_velHistory.size() > 4)
_velHistory.remove(0);
}
_lastLoc = ent.getLocation();
}
public abstract boolean updateCustom(MineStrike game, Entity ent);
@Override
public boolean pickup(MineStrike game, Player player)
{
if (giveToPlayer(player))
{
game.registerGrenade(this, player);
game.deregisterDroppedGrenade(this);
}
return false;
}
}

View File

@ -0,0 +1,55 @@
package nautilus.game.arcade.game.games.minestrike.items.grenades;
import java.util.HashMap;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilPlayer;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
public class HighExplosive extends Grenade
{
public HighExplosive()
{
super("HE Grenade", new String[]
{
},
300, 0, Material.APPLE, 1);
}
@Override
public boolean updateCustom(MineStrike game, Entity ent)
{
if (ent.getTicksLived() > 40)
{
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION,
ent.getLocation(), 0, 0, 0, 0, 1);
ent.getWorld().playSound(ent.getLocation(),
Sound.EXPLODE, 3f, 0.8f);
HashMap<Player, Double> players = UtilPlayer.getInRadius(
ent.getLocation(), 8);
for (Player player : players.keySet())
{
if (!game.IsAlive(player))
continue;
// Damage Event
game.Manager.GetDamage().NewDamageEvent(player, _thrower, null,
DamageCause.CUSTOM, 1 + (players.get(player) * 18),
true, true, false, _thrower.getName(), getName());
}
return true;
}
return false;
}
}

View File

@ -0,0 +1,36 @@
package nautilus.game.arcade.game.games.minestrike.items.grenades;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
public class Smoke extends Grenade
{
public Smoke()
{
super("Smoke Grenade", new String[]
{
},
300, 0, Material.POTATO_ITEM, 1);
}
@Override
public boolean updateCustom(MineStrike game, Entity ent)
{
if (ent.getTicksLived() > 60)
{
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, ent.getLocation(), 0, 0, 0, 0, 1);
ent.getWorld().playSound(ent.getLocation(), Sound.FIZZ, 0.1f, 0.1f);
return false;
}
return ent.getTicksLived() > 360;
}
}

View File

@ -0,0 +1,361 @@
package nautilus.game.arcade.game.games.minestrike.items.guns;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilServer;
import mineplex.core.recharge.Recharge;
import mineplex.core.recharge.RechargedEvent;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.data.Bullet;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItem;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.rifle.AWP;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;
public abstract class Gun extends StrikeItem
{
protected GunType _gunType;
protected int _slot;
//Stats
protected int _clipSize;
protected int _clipReserve;
protected long _fireRate;
protected long _reloadTime;
protected double _damage;
protected double _dropOffPerBlock;
protected double _bulletSpeed;
protected Sound _fireSound;
protected double _coneMin;
protected double _coneMax;
protected double _coneReduceRate;
protected double _coneIncreaseRate;
//Active Data
protected int _loadedAmmo;
protected int _reserveAmmo;
protected double _cone;
protected double _lastMove;
protected long _lastMoveTime;
public Gun(StrikeItemType type, GunType gunType, String name, String[] desc,
int cost, int gemCost,
int clipSize, int clipReserve,
long fireRate, long reloadTime,
double damage, double dropOffPerBlock, double bulletSpeed,
double coneMin, double coneMax,
double coneIncrease, double coneReduce,
Material skin, Sound sound)
{
super(type, name, desc, cost, gemCost, skin);
_gunType = gunType;
if (type == StrikeItemType.PRIMARY_WEAPON)
_slot = 0;
else
_slot = 1;
_clipSize = clipSize;
_clipReserve = clipReserve;
_fireRate = fireRate;
_reloadTime = reloadTime;
_damage = damage;
_dropOffPerBlock = dropOffPerBlock;
_bulletSpeed = bulletSpeed;
_fireSound = sound;
_coneMin = coneMin;
_coneMax = coneMax;
_coneIncreaseRate = coneIncrease;
_coneReduceRate = coneReduce;
_cone = _coneMin;
_loadedAmmo = clipSize;
_reserveAmmo = clipReserve * clipSize;
updateWeaponName(null);
}
public void shoot(final Player player, final MineStrike game)
{
//Standard (300) RPM
shootOnce(player, game);
//600RPM
if (_fireRate <= 100 && _fireRate > 50)
{
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(game.Manager.GetPlugin(), new Runnable()
{
public void run()
{
shootOnce(player, game);
}
}, 2);
}
//1200RPM
if (_fireRate <= 50)
{
for (int i=1 ; i<4 ; i++)
{
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(game.Manager.GetPlugin(), new Runnable()
{
public void run()
{
shootOnce(player, game);
}
}, i);
}
}
}
public void shootOnce(Player player, MineStrike game)
{
//Check Ammo
if (!ammoCheck(player))
return;
if (!Recharge.Instance.use(player, getName() + " Shoot", _fireRate, false, false))
return;
//Use Ammo
_loadedAmmo--;
updateWeaponName(player);
//Effect
soundFire(player.getLocation());
UtilParticle.PlayParticle(ParticleType.CLOUD, player.getEyeLocation().add(player.getLocation().getDirection().multiply(1.5)), 0, 0, 0, 0, 1);
game.registerBullet(fireBullet(player));
}
public Bullet fireBullet(Player player)
{
//Shoot
Snowball ball = player.launchProjectile(Snowball.class);
//COF
double cone = getCone(player);
//Calc
Vector cof = new Vector(Math.random() - 0.5, (Math.random() - 0.2) * (5d/8d), Math.random() - 0.5);
cof.normalize();
cof.multiply(cone);
cof.add(player.getLocation().getDirection());
cof.normalize();
ball.setVelocity(cof.multiply(_bulletSpeed));
//Increase COF
_cone = Math.min(_coneMax, _cone + _coneIncreaseRate);
return new Bullet(ball, this, player.getEyeLocation());
}
public double getCone(Player player)
{
double cone = _cone;
//Move Penalty
if (!UtilTime.elapsed(_lastMoveTime, 75))
cone += _lastMove * _gunType.getMovePenalty();
//Sprint Penalty
if (player.isSprinting())
cone += _gunType.getSprintPenalty();
//Airborne Penalty
else if (!UtilEnt.isGrounded(player))
cone += _gunType.getJumpPenalty();
//Crouch
else if (player.isSneaking() && _gunType != GunType.SNIPER)
cone = cone * 0.8;
//Sniper Zoomed
if (_gunType == GunType.SNIPER)
{
if (player.isSneaking())
{
cone -= _cone;
}
}
return cone;
}
public boolean ammoCheck(Player player)
{
if (_loadedAmmo > 0)
return true;
//Sound
if (Recharge.Instance.use(player, getName() + " Ammo Tick", 200, false, false))
soundEmpty(player.getLocation());
return false;
}
public void reload(Player player)
{
if (_loadedAmmo == _clipSize)
return;
int ammo = _reserveAmmo + _loadedAmmo;
if (ammo == 0)
{
UtilPlayer.message(player, F.main("Gun", "You have no ammo for " + F.name(getName()) + "."));
return;
}
_loadedAmmo = Math.min(ammo, _clipSize);
_reserveAmmo = Math.max(0, ammo - _clipSize);
//Recharge
Recharge.Instance.useForce(player, getName() + " Shoot", _reloadTime);
Recharge.Instance.use(player, getName() + " Reload", _reloadTime, false, true);
//Sound
soundReload(player.getLocation());
//Update
updateWeaponName(player);
}
@Override
public void fixStackName()
{
updateWeaponName(null);
}
public void updateWeaponName(Player player)
{
ItemMeta meta = getStack().getItemMeta();
meta.setDisplayName(C.Bold + getName() + ChatColor.RESET + " " + C.cGreen + _loadedAmmo + ChatColor.RESET + " / " + C.cYellow + _reserveAmmo);
getStack().setItemMeta(meta);
if (player != null)
player.getInventory().setItem(_slot, getStack());
}
public double getDamage()
{
return _damage;
}
public double getDropOff()
{
return _dropOffPerBlock;
}
public void soundFire(Location loc)
{
loc.getWorld().playSound(loc, _fireSound, 3f, (float)(Math.random() * 0.2 + 0.9));
}
public void soundEmpty(Location loc)
{
loc.getWorld().playSound(loc, Sound.NOTE_STICKS, 1f, 2f);
loc.getWorld().playSound(loc, Sound.NOTE_STICKS, 1f, 2f);
loc.getWorld().playSound(loc, Sound.NOTE_STICKS, 1f, 2f);
}
public void soundReload(Location loc)
{
loc.getWorld().playSound(loc, Sound.PISTON_RETRACT, 1f, 0.8f);
}
public void soundReloaded(Location loc)
{
loc.getWorld().playSound(loc, Sound.PISTON_EXTEND, 1f, 1.6f);
}
public void soundRefire(Location loc)
{
}
public void giveToPlayer(Player player)
{
giveToPlayer(player, _slot);
}
public int getSlot()
{
return _slot;
}
public void moveEvent(PlayerMoveEvent event)
{
double dist = UtilMath.offset(event.getFrom(), event.getTo());
_lastMove = dist;
_lastMoveTime = System.currentTimeMillis();
}
public void reduceCone()
{
_cone = Math.max(_coneMin, _cone - (_coneReduceRate / 20d));
}
public void reloadEvent(RechargedEvent event)
{
if (!isHolding(event.GetPlayer()))
return;
if (event.GetAbility().equals(getName() + " Shoot"))
{
soundRefire(event.GetPlayer().getEyeLocation());
}
else if (event.GetAbility().equals(getName() + " Reload"))
{
soundReloaded(event.GetPlayer().getEyeLocation());
}
}
@Override
public boolean pickup(MineStrike game, Player player)
{
if (player.getInventory().getItem(_slot) != null && player.getInventory().getItem(_slot).getType() != Material.AIR)
return false;
giveToPlayer(player);
game.registerGun(this, player);
game.deregisterDroppedGun(this);
return true;
}
public void restockAmmo(Player player)
{
_loadedAmmo = _clipSize;
_reserveAmmo = _clipReserve * _clipSize;
updateWeaponName(player);
player.setHealth(20);
}
}

View File

@ -0,0 +1,47 @@
package nautilus.game.arcade.game.games.minestrike.items.guns;
public enum GunType
{
PISTOL("Pistol", 0.06, 0.04, 0.08),
SHOTGUN("Shotgun", 0, 0, 0),
SMG("SMG", 0.08, 0.05, 0.1),
RIFLE("Rifle", 0.1, 0.06, 0.12),
SNIPER("Sniper Rifle", 0.16, 0.08, 0.16);
private String _name;
private double _movePenalty;
private double _sprintPentalty;
private double _jumpPenalty;
GunType(String name, double move, double sprint, double jump)
{
_name = name;
_movePenalty = move;
_sprintPentalty = sprint;
_jumpPenalty = jump;
}
public String getName()
{
return _name;
}
public double getMovePenalty()
{
return _movePenalty;
}
public double getSprintPenalty()
{
return _sprintPentalty;
}
public double getJumpPenalty()
{
return _jumpPenalty;
}
}

View File

@ -0,0 +1,74 @@
package nautilus.game.arcade.game.games.minestrike.items.guns;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.recharge.Recharge;
import nautilus.game.arcade.game.games.minestrike.MineStrike;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
public abstract class Shotgun extends Gun
{
private int _pellets;
public Shotgun(StrikeItemType type, String name, String[] desc,
int cost, int gemCost,
int clipSize, int spareAmmo,
long fireRate, long reloadTime, double damage,
double dropOffPerBlock, double bulletSpeed, double coneMin,
double coneMax, double coneIncrease, double coneReduce,
Material skin, Sound sound, int pellets)
{
super(type, GunType.SHOTGUN, name, desc, cost, gemCost, clipSize, spareAmmo, fireRate, reloadTime, damage,
dropOffPerBlock, bulletSpeed, coneMin, coneMax, coneIncrease,
coneReduce, skin, sound);
_pellets = pellets;
}
@Override
public void shoot(Player player, MineStrike game)
{
//Check Ammo
if (!ammoCheck(player))
return;
if (!Recharge.Instance.use(player, getName() + " Shoot", _fireRate, false, false))
return;
//Use Ammo
_loadedAmmo--;
updateWeaponName(player);
//Effect
soundFire(player.getLocation());
UtilParticle.PlayParticle(ParticleType.CLOUD, player.getEyeLocation().add(player.getLocation().getDirection().multiply(1.5)), 0, 0, 0, 0, 1);
for (int i=0 ; i<_pellets ; i++)
game.registerBullet(fireBullet(player));
}
@Override
public void soundRefire(Location loc)
{
loc.getWorld().playSound(loc, Sound.PISTON_RETRACT, 0.8f, 1.2f);
loc.getWorld().playSound(loc, Sound.PISTON_RETRACT, 0.8f, 1.2f);
}
@Override
public double getCone(Player player)
{
return _cone;
}
@Override
public void moveEvent(PlayerMoveEvent event)
{
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.pistol;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class CZ75 extends Gun
{
public CZ75()
{
super(StrikeItemType.SECONDARY_WEAPON, GunType.PISTOL, "CZ75-Auto", new String[]
{
},
300, 0, //Cost, Gem Cost
12, 1, //Clip Size, Spare Ammo
80, 2700, //ROF, Reload Time
6, 0.01, 3, //Damage, Dropoff, Bullet Speed
0, 0.15, //COF Min, COF Max
0.06, 0.4, //COF Inc per Bullet, COF Dec per Second
Material.IRON_HOE, Sound.ENDERMAN_DEATH);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.pistol;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class Deagle extends Gun
{
public Deagle()
{
super(StrikeItemType.SECONDARY_WEAPON, GunType.PISTOL, "Desert Eagle", new String[]
{
},
800, 0, //Cost, Gem Cost
7, 5, //Clip Size, Spare Ammo
300, 2000, //ROF, Reload Time
9, 0.01, 3, //Damage, Dropoff, Bullet Speed
0, 0.2, //COF Min, COF Max
0.12, 0.2, //COF Inc per Bullet, COF Dec per Second
Material.GOLD_HOE, Sound.BAT_DEATH);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.pistol;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class Glock18 extends Gun
{
public Glock18()
{
super(StrikeItemType.SECONDARY_WEAPON, GunType.PISTOL, "Glock 18", new String[]
{
},
0, 0, //Cost, Gem Cost
20, 6, //Clip Size, Spare Ammo
120, 2000, //ROF, Reload Time
5, 0.01, 3, //Damage, Dropoff, Bullet Speed
0, 0.15, //COF Min, COF Max
0.08, 0.3, //COF Inc per Bullet, COF Dec per Second
Material.STONE_HOE, Sound.BAT_LOOP);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.pistol;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class P2000 extends Gun
{
public P2000()
{
super(StrikeItemType.SECONDARY_WEAPON, GunType.PISTOL, "P2000", new String[]
{
},
0, 0, //Cost, Gem Cost
13, 4, //Clip Size, Spare Ammo
130, 2200, //ROF, Reload Time
6, 0.01, 3, //Damage, Dropoff, Bullet Speed
0, 0.15, //COF Min, COF Max
0.08, 0.3, //COF Inc per Bullet, COF Dec per Second
Material.WOOD_HOE, Sound.GHAST_SCREAM2);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.rifle;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class AK47 extends Gun
{
public AK47()
{
super(StrikeItemType.PRIMARY_WEAPON, GunType.RIFLE, "AK-47", new String[]
{
},
2700, 5000, //Cost, Gem Cost
30, 3, //Clip Size, Spare Ammo
80, 3600, //ROF, Reload Time
7.5, 0.005, 3.5, //Damage, Dropoff, Bullet Speed
0, 0.25, //COF Min, COF Max
0.050, 0.4, //COF Inc per Bullet, COF Dec per Second
Material.WOOD_SPADE, Sound.BURP);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.rifle;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class AWP extends Gun
{
public AWP()
{
super(StrikeItemType.PRIMARY_WEAPON, GunType.SNIPER, "AWP", new String[]
{
},
4750, 5000, //Cost, Gem Cost
10, 3, //Clip Size, Spare Ammo
1500, 3600, //ROF, Reload Time
30, 0.002, 4.4, //Damage, Dropoff, Bullet Speed
0.05, 0.05, //COF Min, COF Max
0, 0, //COF Inc per Bullet, COF Dec per Second
Material.GOLD_SPADE, Sound.DRINK);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.rifle;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class M4A1 extends Gun
{
public M4A1()
{
super(StrikeItemType.PRIMARY_WEAPON, GunType.RIFLE, "M4A4", new String[]
{
},
2900, 5000, //Cost, Gem Cost
30, 3, //Clip Size, Spare Ammo
80, 3600, //ROF, Reload Time
7, 0.005, 3.5, //Damage, Dropoff, Bullet Speed
0, 0.2, //COF Min, COF Max
0.048, 0.4, //COF Inc per Bullet, COF Dec per Second
Material.STONE_SPADE, Sound.BAT_TAKEOFF);
}
}

View File

@ -0,0 +1,26 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.shotgun;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Shotgun;
public class Nova extends Shotgun
{
public Nova()
{
super(StrikeItemType.PRIMARY_WEAPON, "Nova", new String[]
{
},
1200, 5000, //Cost, Gem Cost
8, 4, //Clip Size, Spare Ammo
1000, 4000, //ROF, Reload Time
5, 0.02, 2.5, //Damage, Dropoff, Bullet Speed
0.15, 0.15, //COF Min, COF Max
0, 0, //COF Inc per Bullet, COF Dec per Second
Material.GOLD_AXE, Sound.BLAZE_DEATH, 9);
}
}

View File

@ -0,0 +1,27 @@
package nautilus.game.arcade.game.games.minestrike.items.guns.smg;
import org.bukkit.Material;
import org.bukkit.Sound;
import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType;
import nautilus.game.arcade.game.games.minestrike.items.guns.Gun;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
public class P90 extends Gun
{
public P90()
{
super(StrikeItemType.PRIMARY_WEAPON, GunType.SMG, "P90", new String[]
{
},
2350, 5000, //Cost, Gem Cost
50, 2, //Clip Size, Spare Ammo
35, 2800, //ROF, Reload Time
5, 0.01, 2.5, //Damage, Dropoff, Bullet Speed
0, 0.2, //COF Min, COF Max
0.03, 0.4, //COF Inc per Bullet, COF Dec per Second
Material.STONE_AXE, Sound.CREEPER_DEATH);
}
}

View File

@ -0,0 +1,50 @@
package nautilus.game.arcade.game.games.minestrike.kits;
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.common.util.C;
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;
public class KitPlayer extends Kit
{
public KitPlayer(ArcadeManager manager)
{
super(manager, "Player", KitAvailability.Free,
new String[]
{
C.cGreen + "Right-Click" + C.cWhite + " - " + C.cYellow + "Fire Gun",
C.cGreen + "Left-Click" + C.cWhite + " - " + C.cYellow + "Reload Gun",
C.cGreen + "Crouch" + C.cWhite + " - " + C.cYellow + "Sniper Scope",
"",
C.cGreen + "Hold Right-Click with Bomb" + C.cWhite + " - " + C.cRed + "Plant Bomb",
C.cGreen + "Hold Right-Click with Knife" + C.cWhite + " - " + C.cAqua + "Defuse Bomb",
},
new Perk[]
{
},
EntityType.PLAYER,
new ItemStack(Material.AIR));
}
@Override
public void GiveItems(Player player)
{
}
@Override
public void SpawnCustom(LivingEntity ent)
{
}
}

View File

@ -278,18 +278,6 @@ public class SneakyAssassins extends SoloGame
event.setCancelled(true);
}
@EventHandler(ignoreCancelled = true)
public void onHangingBreak(HangingBreakEvent event)
{
event.setCancelled(true);
}
@EventHandler(ignoreCancelled = true)
public void onHangingPlace(HangingPlaceEvent event)
{
event.setCancelled(true);
}
@EventHandler(ignoreCancelled = true)
public void onPlayerInteractHanging(PlayerInteractEntityEvent event)
{
@ -297,13 +285,6 @@ public class SneakyAssassins extends SoloGame
event.setCancelled(true);
}
@EventHandler(ignoreCancelled = true)
public void onDamageHanging(EntityDamageEvent event)
{
if (event.getEntity() instanceof Hanging)
event.setCancelled(true);
}
@EventHandler(ignoreCancelled = true)
public void onWitherEffectDamager(CustomDamageEvent event)
{

View File

@ -187,9 +187,11 @@ public class Spleef extends SoloGame
public void BlockFade(Block block, Player player, boolean slowDamage)
{
if (block.getTypeId() == 7)
return;
//Prevent Super Hunger from Bow
if (Recharge.Instance.use(player, GetName() + " Hunger", 50, false, false))
if (block.getTypeId() != 7)
UtilPlayer.hunger(player, 1);
if (!slowDamage)

View File

@ -253,7 +253,7 @@ public class GameFlagManager implements Listener
}
@EventHandler(priority = EventPriority.LOWEST)
public void InventoryOpen(InventoryClickEvent event)
public void InventoryClick(InventoryClickEvent event)
{
Game game = Manager.GetGame();
if (game == null)
@ -262,6 +262,10 @@ public class GameFlagManager implements Listener
if (!game.InProgress())
return;
Player player = UtilPlayer.searchExact(event.getWhoClicked().getName());
if (player != null && !game.IsAlive(player))
return;
if (game.InventoryClick)
return;
@ -560,7 +564,7 @@ public class GameFlagManager implements Listener
final Player player = event.getEntity();
//Visual
Manager.GetCondition().Factory().Blind("Ghost", player, player, 1.5, 0, false, false, false);
Manager.GetCondition().Factory().Blind("Ghost", player, player, 2, 0, false, false, false);
player.setFireTicks(0);
player.setFallDistance(0);

View File

@ -68,7 +68,6 @@ public class GamePlayerManager implements Listener
event.GetLog().SetKillerColor(Manager.GetColor(player)+"");
}
if (event.GetEvent().getEntity() instanceof Player)
{
Player player = (Player)event.GetEvent().getEntity();