Milk The Cow

This commit is contained in:
Sam 2018-07-10 14:08:45 +01:00 committed by Alexander Meech
parent 24a1d09f18
commit f34bdd64d3
14 changed files with 746 additions and 902 deletions

View File

@ -17,6 +17,7 @@ import mineplex.core.common.util.UtilText;
import mineplex.core.gadget.GadgetManager;
import mineplex.core.gadget.types.ParticleGadget;
import mineplex.core.gadget.util.CostConstants;
import mineplex.core.particleeffects.BabyFireworkEffect;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
@ -29,7 +30,8 @@ public class ParticleFiveYear extends ParticleGadget
{
super(manager, "Five Years of Mineplex", new String[]
{
C.cGray + "",
C.cGray + "Celebrate Mineplex's 5th",
C.cGray + "Anniversary with this aura!",
C.blankLine,
C.cBlue + "Earned by joining the server during",
C.cBlue + "the Mineplex 5 Year Anniversary."
@ -47,24 +49,33 @@ public class ParticleFiveYear extends ParticleGadget
}
Location location = player.getLocation().add(0, 1, 0);
location.setPitch(0);
Vector direction = location.getDirection();
location.add(UtilAlg.getRight(direction).multiply(0.3));
location.subtract(direction.multiply(0.5));
int color, height = _bufferedImage.getHeight() / 2, width = _bufferedImage.getWidth() / 2;
double yaw = Math.toRadians(location.getYaw());
for (int y = 1; y < _bufferedImage.getHeight(); y++)
if (Manager.isMoving(player))
{
for (int x = 0; x < _bufferedImage.getWidth() - 1; x++)
{
color = _bufferedImage.getRGB(x, y);
new BabyFireworkEffect(location, Color.ORANGE, 1)
.start();
}
else
{
location.setPitch(0);
Vector direction = location.getDirection();
location.add(UtilAlg.getRight(direction).multiply(0.3));
location.subtract(direction.multiply(0.5));
Vector vector = new Vector(width - x, height - y, 0).multiply(0.2);
UtilAlg.rotateAroundYAxis(vector, yaw);
UtilParticle.PlayParticleToAll(Color.black.getRGB() == color ? ParticleType.FLAME : ParticleType.SMOKE, location.add(vector), null, 0, 1, ViewDist.NORMAL);
location.subtract(vector);
int color, height = _bufferedImage.getHeight() / 2, width = _bufferedImage.getWidth() / 2;
double yaw = Math.toRadians(location.getYaw());
for (int y = 1; y < _bufferedImage.getHeight(); y++)
{
for (int x = 0; x < _bufferedImage.getWidth() - 1; x++)
{
color = _bufferedImage.getRGB(x, y);
Vector vector = new Vector(width - x, height - y, 0).multiply(0.2);
UtilAlg.rotateAroundYAxis(vector, yaw);
UtilParticle.PlayParticleToAll(Color.black.getRGB() == color ? ParticleType.FLAME : ParticleType.SMOKE, location.add(vector), null, 0, 1, ViewDist.NORMAL);
location.subtract(vector);
}
}
}
}

View File

@ -1838,24 +1838,6 @@ public enum GameKit
)
),
MILK_THE_COW_FARM_HAND
(
1,
GameDisplay.MilkCow,
"Sturdy Farmhand",
"milksturdyfarmhand",
new String[]
{
"Been working on the ranch so long, even a charging bull can't faze him!"
},
new KitEntityData<>
(
Zombie.class,
new ItemStack(Material.IRON_SPADE)
),
2000
),
MILK_THE_COW_COW
(
2,

View File

@ -1,15 +0,0 @@
package nautilus.game.arcade.game.games.milkcow;
import org.bukkit.entity.Player;
public class CowScore
{
public org.bukkit.entity.Player Player;
public double Score;
public CowScore(Player player, double i)
{
Player = player;
Score = i;
}
}

View File

@ -1,53 +1,26 @@
package nautilus.game.arcade.game.games.milkcow;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import mineplex.core.Managers;
import mineplex.core.common.Pair;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.visibility.VisibilityManager;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.GameTeam.PlayerState;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.milkcow.MilkRemoveEvent.RemoveType;
import nautilus.game.arcade.game.games.milkcow.kits.KitCow;
import nautilus.game.arcade.game.games.milkcow.kits.KitFarmerJump;
import nautilus.game.arcade.game.games.milkcow.kits.KitSturdyFarmhand;
import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.game.team.selectors.RatioSelector;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.NullKit;
import net.minecraft.server.v1_8_R3.EntityCreature;
import net.minecraft.server.v1_8_R3.NavigationAbstract;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature;
import org.bukkit.entity.Chicken;
import org.bukkit.entity.Ageable;
import org.bukkit.entity.Cow;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Pig;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Villager;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
@ -56,64 +29,89 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import mineplex.core.Managers;
import mineplex.core.common.Pair;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.core.visibility.VisibilityManager;
import mineplex.minecraft.game.core.combat.CombatComponent;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.game.SoloGame;
import nautilus.game.arcade.game.games.milkcow.kits.KitCow;
import nautilus.game.arcade.game.games.milkcow.kits.KitFarmerJump;
import nautilus.game.arcade.game.modules.compass.CompassModule;
import nautilus.game.arcade.game.team.selectors.RatioSelector;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.NullKit;
public class MilkCow extends SoloGame
{
private static final int SCORE_TO_WIN = 15;
private static final int SCORE_DEATH = 5;
private static final String[] DESCRIPTION =
{
C.cGreen + "Farmers" + C.Reset + " get " + C.cYellow + "1" + C.Reset + " point for drinking milk.",
C.cRed + "Cows" + C.Reset + " defend your herd from the farmers.",
"",
C.cYellow + "Everyone" + C.Reset + " loses " + C.cYellow + SCORE_DEATH + C.Reset + " points for dying.",
"First player to " + C.cYellow + "15" + C.Reset + " points wins!"
};
private GameTeam _farmers;
private GameTeam _cows;
private ArrayList<Location> _chickens;
private ArrayList<Location> _pigs;
private ArrayList<Location> _villager;
private ArrayList<CowScore> _ranks = new ArrayList<CowScore>();
private ArrayList<String> _lastScoreboard = new ArrayList<String>();
private HashSet<Cow> _herd = new HashSet<Cow>();
private Objective _scoreObj;
private final Map<EntityType, List<Location>> _animals;
private final Map<Player, Integer> _scores;
private final Set<Cow> _herd;
private final Objective _objective;
public MilkCow(ArcadeManager manager)
{
super(manager, GameType.MilkCow,
new Kit[]
{
super(manager, GameType.MilkCow, new Kit[]
{
new KitFarmerJump(manager),
new KitSturdyFarmhand(manager),
new NullKit(manager),
new KitCow(manager),
},
}, DESCRIPTION);
new String[]
{
"Farmers get 1 point for drinking milk.",
"You lose 5 points for dying!",
"",
"Cows get 1 point for killing farmers.",
"Defend your herd to stop farmers!",
"",
"First player to 15 points wins!"
});
_animals = new HashMap<>(3);
_scores = new HashMap<>();
_herd = new HashSet<>();
DeathOut = false;
new CompassModule()
.setGiveCompassToAlive(true)
.register(this);
this.DeathOut = false;
_scoreObj = Scoreboard.getScoreboard().registerNewObjective("Milk", "dummy");
_scoreObj.setDisplaySlot(DisplaySlot.BELOW_NAME);
_objective = Scoreboard.getScoreboard().registerNewObjective("Milk", "dummy");
_objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
registerChatStats(
Kills
Kills,
Deaths
);
}
@Override
public void ParseData()
public void ParseData()
{
_chickens = WorldData.GetDataLocs("WHITE");
_pigs = WorldData.GetDataLocs("PINK");
_villager = WorldData.GetDataLocs("PURPLE");
_animals.put(EntityType.CHICKEN, WorldData.GetDataLocs("WHITE"));
_animals.put(EntityType.PIG, WorldData.GetDataLocs("PINK"));
_animals.put(EntityType.VILLAGER, WorldData.GetDataLocs("PURPLE"));
}
@Override
@ -126,12 +124,16 @@ public class MilkCow extends SoloGame
if (team.GetColor() == ChatColor.RED)
{
if (kit.GetName().contains("Farm"))
{
team.GetRestrictedKits().add(kit);
}
}
else
{
if (kit.GetName().contains("Cow"))
{
team.GetRestrictedKits().add(kit);
}
}
}
}
@ -139,17 +141,18 @@ public class MilkCow extends SoloGame
@Override
@EventHandler
public void CustomTeamGeneration(GameStateChangeEvent event)
public void CustomTeamGeneration(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Recruit)
{
return;
}
_farmers = this.GetTeamList().get(0);
_farmers = GetTeamList().get(0);
_farmers.SetName("Farmers");
//Undead Team
_cows = new GameTeam(this, "Cow", ChatColor.RED, _farmers.GetSpawns());
GetTeamList().add(_cows);
_cows = new GameTeam(this, "Cow", ChatColor.RED, _farmers.GetSpawns());
AddTeam(_cows);
_teamSelector = new RatioSelector(_cows, 0.25);
@ -157,117 +160,90 @@ public class MilkCow extends SoloGame
}
@EventHandler
public void SpawnAnimals(GameStateChangeEvent event)
public void spawnAnimals(GameStateChangeEvent event)
{
if (event.GetState() != GameState.Live)
{
return;
for (Location loc : _chickens)
{
this.CreatureAllowOverride = true;
Chicken ent = loc.getWorld().spawn(loc, Chicken.class);
if (Math.random() > 0.75)
{
ent.setBaby();
ent.setAgeLock(true);
}
this.CreatureAllowOverride = false;
}
for (Location loc : _pigs)
CreatureAllowOverride = true;
_animals.forEach((entityType, locations) ->
{
this.CreatureAllowOverride = true;
Pig ent = loc.getWorld().spawn(loc, Pig.class);
if (Math.random() > 0.75)
locations.forEach(location ->
{
ent.setBaby();
ent.setAgeLock(true);
}
Entity entity = location.getWorld().spawnEntity(location, entityType);
this.CreatureAllowOverride = false;
}
if (entity instanceof Ageable)
{
Ageable ageable = (Ageable) entity;
ageable.setBaby();
ageable.setAgeLock(true);
}
else
{
entity.setCustomName("Bob");
entity.setCustomNameVisible(true);
}
});
});
for (Location loc : _villager)
{
this.CreatureAllowOverride = true;
Villager ent = loc.getWorld().spawn(loc, Villager.class);
if (Math.random() > 0.75)
{
ent.setCustomName("Bob");
ent.setCustomNameVisible(true);
}
this.CreatureAllowOverride = false;
}
CreatureAllowOverride = false;
}
@EventHandler
public void HerdUpdate(UpdateEvent event)
public void updateHerd(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
if (!IsLive())
return;
if (_cows.GetPlayers(true).size() <= 0)
return;
Player host = _cows.GetPlayers(true).get(0);
Iterator<Cow> herdIterator = _herd.iterator();
while (herdIterator.hasNext())
if (event.getType() != UpdateType.SEC || !IsLive())
{
Cow cow = herdIterator.next();
return;
}
List<Player> aliveCows = _cows.GetPlayers(true);
if (aliveCows.isEmpty())
{
return;
}
Location target = aliveCows.get(0).getLocation();
_herd.removeIf(cow ->
{
if (!cow.isValid())
{
cow.remove();
herdIterator.remove();
continue;
return true;
}
//Move
EntityCreature ec = ((CraftCreature)cow).getHandle();
NavigationAbstract nav = ec.getNavigation();
if (UtilMath.offset(cow, host) > 6)
{
if (UtilMath.offset(cow, host) > 16)
{
Location target = cow.getLocation();
target.add(UtilAlg.getTrajectory(cow, host).multiply(16));
nav.a(target.getX(), target.getY(), target.getZ(), 1.8f);
}
else
nav.a(host.getLocation().getX(), host.getLocation().getY(),host.getLocation().getZ(), 1.4f);
}
}
UtilEnt.CreatureMove(cow, target, 1.4F);
return false;
});
while (_herd.size() < 5)
{
this.CreatureAllowOverride = true;
Cow cow = host.getWorld().spawn(host.getLocation(), Cow.class);
CreatureAllowOverride = true;
Cow cow = target.getWorld().spawn(target, Cow.class);
if (Math.random() > 0.5)
{
cow.setBaby();
cow.setAgeLock(true);
}
_herd.add(cow);
this.CreatureAllowOverride = false;
}
CreatureAllowOverride = false;
}
}
@EventHandler
public void HerdDamage(CustomDamageEvent event)
public void cowDamage(CustomDamageEvent event)
{
if (event.GetDamageeEntity() instanceof Creature)
if (event.GetDamageeEntity() instanceof Creature || _cows.HasPlayer(event.GetDamageePlayer()))
{
event.SetCancelled("Cow Immunity");
}
}
@EventHandler
@ -281,189 +257,193 @@ public class MilkCow extends SoloGame
if (_cows.GetPlayers(true).isEmpty() && !_farmers.GetPlayers(true).isEmpty())
{
Player player = UtilAlg.Random(_farmers.GetPlayers(true));
SetCow(player, true);
setCow(player);
}
}
public void SetCow(Player player, boolean forced)
private void setCow(Player player)
{
SetPlayerTeam(player, _cows, true);
//Refresh
VisibilityManager vm = Managers.require(VisibilityManager.class);
Bukkit.getOnlinePlayers().forEach(pl -> vm.refreshVisibility(pl, player));
//Turn off flight
player.setAllowFlight(false);
player.setFlying(false);
if (forced)
{
AddGems(player, 10, "Forced Cow", false, false);
AddGems(player, 10, "Forced Cow", false, false);
Announce(F.main("Game", F.elem(_farmers.GetColor() + player.getName()) + " has become " +
F.elem(_cows.GetColor() + GetKit(player).GetName()) + "."));
Announce(F.main("Game", F.elem(_farmers.GetColor() + player.getName()) + " has become " + F.elem(_cows.GetColor() + GetKit(player).GetName()) + "."));
player.getWorld().strikeLightningEffect(player.getLocation());
}
player.getWorld().strikeLightningEffect(player.getLocation());
}
@EventHandler
public void GetMilk(PlayerInteractEntityEvent event)
public void getMilk(PlayerInteractEntityEvent event)
{
if (!UtilGear.isMat(event.getPlayer().getItemInHand(), Material.BUCKET))
return;
Player player = event.getPlayer();
ItemStack itemStack = player.getItemInHand();
if (!(event.getRightClicked() instanceof Player))
if (itemStack == null || itemStack.getType() != Material.BUCKET || !(event.getRightClicked() instanceof Player))
{
return;
}
Player cow = (Player)event.getRightClicked();
Player cow = (Player) event.getRightClicked();
if (!_cows.HasPlayer(cow))
{
return;
}
event.setCancelled(true);
itemStack.setType(Material.MILK_BUCKET);
player.updateInventory();
}
event.getPlayer().setItemInHand(new ItemStack(Material.MILK_BUCKET));
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void bucketFill(PlayerBucketFillEvent event)
{
if (!InProgress())
{
return;
}
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.MONITOR)
public void drinkMilk(PlayerItemConsumeEvent event)
{
if (!IsLive() || event.getItem().getType() != Material.MILK_BUCKET)
{
return;
}
Player player = event.getPlayer();
incrementScore(player, 1);
UtilPlayer.health(player, 2);
player.getWorld().playSound(player.getLocation(), Sound.BURP, 2, 1);
AddGems(player, 0.5, "Milk Drunk", true, true);
}
@EventHandler
public void DrinkMilk(PlayerItemConsumeEvent event)
public void loseMilk(PlayerDeathEvent event)
{
if (!IsLive())
return;
if (event.getItem().getType() != Material.MILK_BUCKET)
return;
SetScore(event.getPlayer(), GetScore(event.getPlayer())+1);
event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.BURP, 2f, 1f);
UtilPlayer.health(event.getPlayer(), 2);
this.AddGems(event.getPlayer(), 0.5, "Milk Drunk", true, true);
UtilServer.CallEvent(new MilkRemoveEvent(event.getEntity(), SCORE_DEATH));
}
@EventHandler
public void LoseMilk(PlayerDeathEvent event)
public void killFarmer(CombatDeathEvent event)
{
MilkRemoveEvent e = new MilkRemoveEvent(event.getEntity(), 5, RemoveType.DEATH);
Bukkit.getPluginManager().callEvent(e);
SetScore(event.getEntity(), Math.max(0, GetScore(event.getEntity()) - e.GetMilk()));
}
CombatComponent killer = event.GetLog().GetKiller();
@EventHandler
public void KillFarmer(CombatDeathEvent event)
{
if (event.GetLog().GetKiller() == null)
if (killer == null)
{
return;
}
if (!event.GetLog().GetKiller().IsPlayer())
Player player = UtilPlayer.searchExact(killer.getUniqueIdOfEntity());
if (player == null)
{
return;
Player player = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
if (player == null) return;
//Score
SetScore(player, GetScore(player)+1);
}
public void SetScore(Player player, double level)
{
_scoreObj.getScore(player.getName()).setScore((int)level);
//Rank
for (CowScore score : _ranks)
{
if (score.Player.equals(player))
{
score.Score = level;
if (level == 15)
End();
return;
}
}
_ranks.add(new CowScore(player, level));
incrementScore(player, 1);
}
public double GetScore(Player player)
@EventHandler(priority = EventPriority.MONITOR)
public void handleLostMilk(MilkRemoveEvent event)
{
if (!IsAlive(player))
return 0;
//Rank
for (CowScore score : _ranks)
{
if (score.Player.equals(player))
{
return score.Score;
}
}
return 0;
incrementScore(event.getPlayer(), -event.getMilkToRemove());
}
private void SortScores()
private void incrementScore(Player player, int score)
{
for (int i=0 ; i<_ranks.size() ; i++)
int newScore = getScore(player) + score;
if (newScore < 0)
{
for (int j=_ranks.size()-1 ; j>0 ; j--)
{
if (_ranks.get(j).Score > _ranks.get(j-1).Score)
{
CowScore temp = _ranks.get(j);
_ranks.set(j, _ranks.get(j-1));
_ranks.set(j-1, temp);
}
}
newScore = 0;
}
_objective.getScore(player.getName()).setScore(newScore);
_scores.put(player, newScore);
if (newScore >= SCORE_TO_WIN)
{
End();
}
}
private int getScore(Player player)
{
return _scores.getOrDefault(player, 0);
}
private List<Player> getPlacements()
{
return _scores.entrySet().stream()
// Reserved natural ordering
.sorted((o1, o2) -> o2.getValue().compareTo(o1.getValue()))
.map(Entry::getKey)
.collect(Collectors.toList());
}
private void End()
{
SortScores();
//Set Places
ArrayList<Player> places = new ArrayList<Player>();
for (int i=0 ; i<_ranks.size() ; i++)
places.add(i, _ranks.get(i).Player);
List<Player> places = getPlacements();
//Award Gems
if (_ranks.size() >= 1)
AddGems(_ranks.get(0).Player, 20, "1st Place", false, false);
if (!places.isEmpty())
{
AddGems(places.get(0), 20, "1st Place", false, false);
}
if (_ranks.size() >= 2)
AddGems(_ranks.get(1).Player, 15, "2nd Place", false, false);
if (places.size() > 1)
{
AddGems(places.get(1), 15, "2nd Place", false, false);
}
if (_ranks.size() >= 3)
AddGems(_ranks.get(2).Player, 10, "3rd Place", false, false);
if (places.size() > 2)
{
AddGems(places.get(2), 10, "3rd Place", false, false);
}
//Participation
for (Player player : GetPlayers(false))
for (Player player : places)
{
if (player.isOnline())
{
AddGems(player, 10, "Participation", false, false);
}
}
SetState(GameState.End);
AnnounceEnd(places);
SetState(GameState.End);
}
@Override
public void EndCheck()
{
if (!IsLive())
return;
if (!UtilTime.elapsed(GetStateTime(), 5000))
return;
if (_cows.GetPlayers(true).size() <= 0)
End();
if (_farmers.GetPlayers(true).size() <= 0)
{
SetScore(_cows.GetPlayers(true).get(0), 20);
return;
}
if (_cows.GetPlayers(true).isEmpty())
{
End();
}
else if (_farmers.GetPlayers(true).isEmpty())
{
_cows.GetPlayers(true).forEach(player -> incrementScore(player, SCORE_TO_WIN));
End();
}
}
@ -473,45 +453,24 @@ public class MilkCow extends SoloGame
public void ScoreboardUpdate(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
{
return;
}
//Wipe Last
Scoreboard.reset();
Scoreboard.writeNewLine();
Scoreboard.writeGroup(GetPlayers(true), player ->
{
int score = (int)GetScore(player);
GameTeam team = GetTeam(player);
if (team == null) return null;
return Pair.create(team.GetColor() + player.getName(), score);
if (team == null)
{
return null;
}
return Pair.create(team.GetColor() + player.getName(), getScore(player));
}, true);
Scoreboard.draw();
}
@EventHandler
public void BucketFill(PlayerBucketFillEvent event)
{
if (!IsLive())
{
event.setCancelled(true);
UtilInv.Update(event.getPlayer());
}
if (event.getBlockClicked() == null)
return;
if (event.getBlockClicked().getTypeId() != 8 && event.getBlockClicked().getTypeId() != 9)
return;
event.setCancelled(true);
UtilInv.Update(event.getPlayer());
if (event.getBlockClicked() != null)
event.getPlayer().sendBlockChange(event.getBlockClicked().getLocation(), 8, (byte)0);
}
}

View File

@ -1,56 +1,40 @@
package nautilus.game.arcade.game.games.milkcow;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
public class MilkRemoveEvent extends Event
public class MilkRemoveEvent extends PlayerEvent
{
private static final HandlerList handlers = new HandlerList();
private Player _player;
private int _milk;
private RemoveType _cause;
public MilkRemoveEvent(Player player, int milk, RemoveType cause)
private static final HandlerList HANDLER_LIST = new HandlerList();
public static HandlerList getHandlerList()
{
_player = player;
_milk = milk;
_cause = cause;
return HANDLER_LIST;
}
public HandlerList getHandlers()
private int _milkToRemove;
public MilkRemoveEvent(Player who, int milkToRemove)
{
super(who);
_milkToRemove = milkToRemove;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
public Player GetPlayer()
{
return _player;
}
public int GetMilk()
{
return _milk;
}
public RemoveType GetCause()
{
return _cause;
}
public void SetMilk(int milk)
{
_milk = milk;
}
public static enum RemoveType
{
FLING, DEATH;
return HANDLER_LIST;
}
public void setMilkToRemove(int milkToRemove)
{
_milkToRemove = milkToRemove;
}
public int getMilkToRemove()
{
return _milkToRemove;
}
}

View File

@ -3,23 +3,21 @@ package nautilus.game.arcade.game.games.milkcow.kits;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.disguise.disguises.DisguiseCow;
import mineplex.core.game.kit.GameKit;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.game.games.milkcow.kits.perk.PerkCharge;
import nautilus.game.arcade.game.games.milkcow.kits.perk.PerkCowBomb;
import nautilus.game.arcade.game.games.milkcow.kits.perk.PerkSeismicCow;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkCharge;
import nautilus.game.arcade.kit.perks.PerkCowBomb;
import nautilus.game.arcade.kit.perks.PerkDamageSet;
import nautilus.game.arcade.kit.perks.PerkKnockbackMultiplier;
import nautilus.game.arcade.kit.perks.PerkSeismicCow;
public class KitCow extends Kit
{
@ -30,7 +28,7 @@ public class KitCow extends Kit
new PerkKnockbackMultiplier(4),
new PerkCharge(),
new PerkCowBomb(),
new PerkSeismicCow("Body Slam")
new PerkSeismicCow()
};
private static final ItemStack[] PLAYER_ITEMS =
@ -72,18 +70,8 @@ public class KitCow extends Kit
//Disguise
DisguiseCow disguise = new DisguiseCow(player);
disguise.setName(C.cRed + player.getName());//+ " the Furious Cow");
disguise.setName(C.cRed + player.getName());
disguise.setCustomNameVisible(true);
Manager.GetDisguise().disguise(disguise);
}
@EventHandler
public void NoDamage(CustomDamageEvent event)
{
Player player = event.GetDamageePlayer();
if (player == null) return;
if (HasKit(player))
event.SetCancelled("Cow Immunity");
}
}

View File

@ -1,40 +0,0 @@
package nautilus.game.arcade.game.games.milkcow.kits;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import mineplex.core.game.kit.GameKit;
import mineplex.core.itemstack.ItemStackFactory;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.kit.perks.PerkIronSkin;
import nautilus.game.arcade.kit.perks.PerkNoSpillMilk;
public class KitSturdyFarmhand extends Kit
{
private static final Perk[] PERKS =
{
new PerkNoSpillMilk(),
new PerkIronSkin(2)
};
private static final ItemStack[] PLAYER_ITEMS =
{
ItemStackFactory.Instance.CreateStack(Material.BUCKET)
};
public KitSturdyFarmhand(ArcadeManager manager)
{
super(manager, GameKit.MILK_THE_COW_FARM_HAND, PERKS);
}
@Override
public void GiveItems(Player player)
{
player.getInventory().addItem(PLAYER_ITEMS);
}
}

View File

@ -0,0 +1,134 @@
package nautilus.game.arcade.game.games.milkcow.kits.perk;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Cow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.game.games.milkcow.MilkRemoveEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkCharge extends Perk
{
public PerkCharge()
{
super("Cow Charge", new String[]
{
C.cYellow + "Sprint" + C.cGray + " to use " + C.cGreen + "Cow Charge"
});
}
@EventHandler
public void collide(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!player.isSprinting() || !hasPerk(player))
{
continue;
}
Location location = player.getLocation();
location.setYaw(0);
player.getWorld().playSound(location, Sound.COW_WALK, 0.8f, 1f);
Manager.GetCondition().Factory().Speed(GetName(), player, player, 0.9, 2, false, false, false);
UtilEnt.getInRadius(location.clone().add(location.getDirection()), 2).forEach((entity, scale) ->
{
if (entity.equals(player) || entity instanceof Cow)
{
return;
}
if (entity instanceof Player)
{
Player hit = (Player) entity;
if (!Recharge.Instance.use(hit, "Hit By " + GetName(), 500, false, false))
{
return;
}
UtilServer.CallEvent(new MilkRemoveEvent(hit, 1));
for (ItemStack itemStack : hit.getInventory().getContents())
{
if (itemStack == null || itemStack.getType() != Material.MILK_BUCKET)
{
continue;
}
itemStack.setType(Material.BUCKET);
}
}
Location entityLocation = entity.getLocation();
Vector dir = UtilAlg.getTrajectory2d(location, entityLocation);
dir.add(location.getDirection());
dir.setY(0);
Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.CUSTOM, 3, false, false, false, player.getName(), GetName());
Manager.GetCondition().Factory().Falling(GetName(), entity, player, 10, false, true);
UtilAction.velocity(entity, dir, 1 + 0.8 * scale, true, 0, 0.8 + 0.4 * scale, 1.6, true);
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_WOOD, 0.75f, 1f);
});
}
}
@EventHandler
public void charge(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
{
return;
}
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!hasPerk(player))
{
continue;
}
if (player.isSprinting())
{
UtilPlayer.hunger(player, -1);
if (player.getFoodLevel() <= 0)
{
player.setSprinting(false);
}
}
else
{
UtilPlayer.hunger(player, 1);
}
}
}
}

View File

@ -0,0 +1,138 @@
package nautilus.game.arcade.game.games.milkcow.kits.perk;
import java.util.concurrent.TimeUnit;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Cow;
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.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilItem;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkCowBomb extends Perk implements IThrown
{
private static final long COOLDOWN = TimeUnit.SECONDS.toMillis(3);
public PerkCowBomb()
{
super("Cow Bomb", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Cow Bomb"
});
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void Shoot(PlayerInteractEvent event)
{
if (!UtilEvent.isAction(event, ActionType.R))
{
return;
}
Block block = event.getClickedBlock();
if (UtilBlock.usable(block))
{
return;
}
Player player = event.getPlayer();
ItemStack itemStack = player.getItemInHand();
if (!UtilItem.isAxe(itemStack) || !hasPerk(player) || !Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
{
return;
}
event.setCancelled(true);
Manager.GetGame().CreatureAllowOverride = true;
Location location = player.getEyeLocation();
Cow cow = location.getWorld().spawn(location.add(location.getDirection()), Cow.class);
cow.setBaby();
cow.setAgeLock(true);
Manager.GetGame().CreatureAllowOverride = false;
UtilAction.velocity(cow, player.getLocation().getDirection(), 1.4, false, 0, 0.3, 10, false);
Manager.GetProjectile().AddThrow(cow, player, this, -1, true, true, true, true, 0.5f);
player.sendMessage(F.main(Manager.getName(), "You used " + F.skill(GetName()) + "."));
player.getWorld().playSound(player.getLocation(), Sound.COW_IDLE, 2f, 1.5f);
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Explode(data);
if (target == null)
{
return;
}
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null, DamageCause.PROJECTILE, 4, true, true, false, data.getThrower().getName(), GetName());
}
@Override
public void Idle(ProjectileUser data)
{
Explode(data);
}
@Override
public void Expire(ProjectileUser data)
{
Explode(data);
}
public void Explode(ProjectileUser data)
{
Location location = data.getThrown().getLocation();
location.getWorld().playSound(location, Sound.COW_HURT, 2f, 1.2f);
location.getWorld().createExplosion(location, 0.5f);
data.getThrown().remove();
}
@Override
public void ChunkUnload(ProjectileUser data)
{
data.getThrown().remove();
}
@EventHandler
public void Knockback(CustomDamageEvent event)
{
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
{
return;
}
event.AddKnockback(GetName(), 5);
}
}

View File

@ -0,0 +1,160 @@
package nautilus.game.arcade.game.games.milkcow.kits.perk;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Cow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilEvent;
import mineplex.core.common.util.UtilEvent.ActionType;
import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilTime;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkSeismicCow extends Perk
{
private static final long COOLDOWN = TimeUnit.SECONDS.toMillis(6);
private static final long LEAP_TIME = TimeUnit.SECONDS.toMillis(1);
private static final int DAMAGE = 4;
private static final int RANGE = 6;
private final Map<Player, Long> _live = new HashMap<>();
public PerkSeismicCow()
{
super("Body Slam", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Shovel to " + C.cGreen + "Body Slam"
});
}
@Override
public void unregisteredEvents()
{
_live.clear();
}
@EventHandler
public void playerInteract(PlayerInteractEvent event)
{
if (!UtilEvent.isAction(event, ActionType.R))
{
return;
}
Block block = event.getClickedBlock();
if (UtilBlock.usable(block))
{
return;
}
Player player = event.getPlayer();
ItemStack itemStack = player.getItemInHand();
if (!UtilItem.isSpade(itemStack) || !hasPerk(player) || !Recharge.Instance.use(player, GetName(), COOLDOWN, true, true))
{
return;
}
Vector direction = player.getLocation().getDirection();
if (direction.getY() < 0)
{
direction.setY(direction.getY() * -1);
}
UtilAction.velocity(player, direction);
_live.put(player, System.currentTimeMillis());
player.sendMessage(F.main(Manager.getName(), "You used " + F.skill(GetName()) + "."));
}
@EventHandler
public void updateSlam(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
{
return;
}
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!UtilEnt.isGrounded(player))
{
continue;
}
Long last = _live.get(player);
if (last == null || !UtilTime.elapsed(last, LEAP_TIME))
{
return;
}
_live.remove(player);
Location location = player.getLocation();
UtilEnt.getInRadius(location, RANGE).forEach((entity, scale) ->
{
if (entity.equals(player) || entity instanceof Cow)
{
return;
}
Manager.GetDamage().NewDamageEvent(entity, player, null, DamageCause.CUSTOM, DAMAGE * scale + 0.5, false, true, false, player.getName(), GetName());
UtilAction.velocity(entity, UtilAlg.getTrajectory2d(location, entity.getLocation()), 1.8 * scale, true, 0, 0.4 + 1.0 * scale, 1.6, true);
Manager.GetCondition().Factory().Falling(GetName(), entity, player, 10, false, true);
if (entity instanceof Player)
{
player.sendMessage(F.main(Manager.getName(), F.name(player.getName()) + " hit you with " + F.skill(GetName()) + "."));
}
});
location.getWorld().playSound(location, Sound.ZOMBIE_WOOD, 2f, 0.2f);
UtilBlock.getBlocksInRadius(player.getLocation(), 4).forEach(block ->
{
if (UtilBlock.airFoliage(block.getRelative(BlockFace.UP)) && !UtilBlock.airFoliage(block))
{
block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
}
});
}
}
@EventHandler
public void playerQuit(PlayerQuitEvent event)
{
_live.remove(event.getPlayer());
}
}

View File

@ -1,126 +0,0 @@
package nautilus.game.arcade.kit.perks;
import java.util.HashMap;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilAction;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.game.games.milkcow.MilkRemoveEvent;
import nautilus.game.arcade.game.games.milkcow.MilkRemoveEvent.RemoveType;
import nautilus.game.arcade.kit.Perk;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Cow;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
public class PerkCharge extends Perk
{
public PerkCharge()
{
super("Cow Charge", new String[]
{
C.cYellow + "Sprint" + C.cGray + " to use " + C.cGreen + "Cow Charge"
});
}
@EventHandler
public void Damage(UpdateEvent event)
{
if (event.getType() != UpdateType.TICK)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!player.isSprinting())
continue;
if (!Kit.HasKit(player))
continue;
player.getWorld().playSound(player.getLocation(), Sound.COW_WALK, 0.8f, 1f);
Manager.GetCondition().Factory().Speed(GetName(), player, player, 0.9, 2, false, false, false);
HashMap<LivingEntity, Double> targets = UtilEnt.getInRadius(player.getLocation().add(player.getLocation().getDirection().setY(0).normalize()), 2);
for (LivingEntity cur : targets.keySet())
{
if (cur.equals(player))
continue;
if (cur instanceof Cow)
continue;
Vector dir = UtilAlg.getTrajectory2d(player.getLocation().toVector(), cur.getLocation().toVector());
dir.add(player.getLocation().getDirection().setY(0).normalize());
dir.setY(0);
dir.normalize();
//Damage Event
Manager.GetDamage().NewDamageEvent(cur, player, null,
DamageCause.CUSTOM, 3, false, false, false,
player.getName(), GetName());
//Velocity
UtilAction.velocity(cur, dir, 1 + 0.8 * targets.get(cur), true, 0, 0.8 + 0.4 * targets.get(cur), 1.6, true);
//Condition
Manager.GetCondition().Factory().Falling(GetName(), cur, player, 10, false, true);
//Sound
player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_WOOD, 0.75f, 1f);
if (cur instanceof Player)
{
MilkRemoveEvent e = new MilkRemoveEvent((Player)cur, 1, RemoveType.FLING);
Bukkit.getPluginManager().callEvent(e);
ItemStack bucket = e.GetPlayer().getInventory().getItem(0);
if ((bucket.getType() == Material.MILK_BUCKET) && e.GetMilk() >= 0)
{
bucket.setType(Material.BUCKET);
e.GetPlayer().getInventory().setItem(0, bucket);
}
UtilInv.Update(e.GetPlayer());
}
}
}
}
@EventHandler
public void Charge(UpdateEvent event)
{
if (event.getType() != UpdateType.FASTER)
return;
for (Player player : Manager.GetGame().GetPlayers(true))
{
if (!Kit.HasKit(player))
continue;
if (player.isSprinting())
{
UtilPlayer.hunger(player, -1);
if (player.getFoodLevel() <= 0)
{
player.setSprinting(false);
}
}
else
{
UtilPlayer.hunger(player, 1);
}
}
}
}

View File

@ -1,140 +0,0 @@
package nautilus.game.arcade.kit.perks;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.entity.Cow;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.common.util.C;
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.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.projectile.IThrown;
import mineplex.core.projectile.ProjectileUser;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
public class PerkCowBomb extends Perk implements IThrown
{
public PerkCowBomb()
{
super("Cow Bomb", new String[]
{
C.cYellow + "Right-Click" + C.cGray + " with Axe to use " + C.cGreen + "Cow Bomb"
});
}
@EventHandler
public void Shoot(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() == null)
return;
if (!event.getPlayer().getItemInHand().getType().toString().contains("_AXE"))
return;
Player player = event.getPlayer();
if (!Kit.HasKit(player))
return;
if (!Recharge.Instance.use(player, GetName(), 3000, true, true))
return;
event.setCancelled(true);
UtilInv.Update(player);
Manager.GetGame().CreatureAllowOverride = true;
Cow ent = player.getWorld().spawn(player.getEyeLocation().add(player.getLocation().getDirection()), Cow.class);
Manager.GetGame().CreatureAllowOverride = false;
ent.setBaby();
ent.setAgeLock(true);
ent.setMaxHealth(100);
ent.setHealth(100);
UtilAction.velocity(ent, player.getLocation().getDirection(), 1.4, false, 0, 0.3, 10, false);
Manager.GetProjectile().AddThrow(ent, player, this, -1, true, true, true, true,
null, 1f, 1f,
null, 1, UpdateType.SLOW,
0.5f);
//Inform
UtilPlayer.message(player, F.main("Game", "You used " + F.skill(GetName()) + "."));
//Effect
player.getWorld().playSound(player.getLocation(), Sound.COW_IDLE, 2f, 1.5f);
}
@Override
public void Collide(LivingEntity target, Block block, ProjectileUser data)
{
Explode(data);
if (target == null)
return;
//Damage Event
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null,
DamageCause.PROJECTILE, 4, true, true, false,
UtilEnt.getName(data.getThrower()), GetName());
}
@Override
public void Idle(ProjectileUser data)
{
Explode(data);
}
@Override
public void Expire(ProjectileUser data)
{
Explode(data);
}
public void Explode(ProjectileUser data)
{
//Effect
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.COW_HURT, 2f, 1.2f);
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.COW_HURT, 2f, 1.2f);
data.getThrown().getWorld().createExplosion(data.getThrown().getLocation(), 0.5f);
data.getThrown().remove();
}
@Override
public void ChunkUnload(ProjectileUser data)
{
data.getThrown().remove();
}
@EventHandler
public void Knockback(CustomDamageEvent event)
{
if (event.GetReason() == null || !event.GetReason().contains(GetName()))
return;
event.AddKnockback(GetName(), 5);
}
}

View File

@ -1,43 +0,0 @@
package nautilus.game.arcade.kit.perks;
import mineplex.core.common.util.C;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.game.games.milkcow.MilkRemoveEvent;
import nautilus.game.arcade.game.games.milkcow.MilkRemoveEvent.RemoveType;
import nautilus.game.arcade.kit.Perk;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
public class PerkNoSpillMilk extends Perk
{
public PerkNoSpillMilk()
{
super("Steady Hands", new String[]
{
C.cGray + "Lose less milk when you die",
C.cGray + "Don't lose your bucket of milk when cows run into you",
});
}
@EventHandler
public void onLoseMilk(MilkRemoveEvent event)
{
Player player = event.GetPlayer();
if (!Kit.HasKit(player))
return;
if (event.GetCause() == RemoveType.DEATH)
{
if (event.GetMilk() > 3)
event.SetMilk(3);
}
if (event.GetCause() == RemoveType.FLING)
{
event.SetMilk(-1);
}
}
}

View File

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