SG post patch
This commit is contained in:
parent
467b9f7f11
commit
84c1991321
|
@ -1429,7 +1429,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed
|
|||
@EventHandler
|
||||
public final void onFoodLevelChangeEvent(FoodLevelChangeEvent event)
|
||||
{
|
||||
((Player) event.getEntity()).setSaturation(3.8F); // While not entirely accurate, this is a pretty good guess at original
|
||||
((Player) event.getEntity()).setSaturation(5); // While not entirely accurate, this is a pretty good guess at original
|
||||
// food level changes
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,10 @@ import java.util.List;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.FireworkEffect;
|
||||
import org.bukkit.FireworkEffect.Type;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
|
@ -41,6 +44,7 @@ import mineplex.core.common.util.MapUtil;
|
|||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilFirework;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
|
@ -93,7 +97,8 @@ public abstract class SurvivalGamesNew extends Game
|
|||
private static final long PREPARE_TIME = TimeUnit.SECONDS.toMillis(15);
|
||||
private static final long REFILL_TIME = TimeUnit.MINUTES.toMillis(7);
|
||||
private static final long REFILL_INFORM_TIME = TimeUnit.MINUTES.toMillis(3);
|
||||
private static final long KIT_COOLDOWN = TimeUnit.SECONDS.toMillis(30);
|
||||
private static final long KIT_COOLDOWN = TimeUnit.SECONDS.toMillis(20);
|
||||
private static final long END_DAMAGE_TIME = TimeUnit.MINUTES.toMillis(15);
|
||||
private static final int MAX_ITEM_SPAWN_DISTANCE_SQUARED = 36;
|
||||
private static final String START_EFFECT_REASON = "Start Effect";
|
||||
private static final int START_EFFECT_DURATION = 30;
|
||||
|
@ -101,6 +106,10 @@ public abstract class SurvivalGamesNew extends Game
|
|||
private static final int CRAFTING_TABLES = 10;
|
||||
private static final int DISTANCE_NON_ASSASSIN = 576;
|
||||
private static final int DISTANCE_ASSASSIN = 64;
|
||||
private static final FireworkEffect DEATH_EFFECT = FireworkEffect.builder()
|
||||
.with(Type.BALL)
|
||||
.withColor(Color.RED)
|
||||
.build();
|
||||
|
||||
private List<Location> _chests;
|
||||
private SupplyDropModule _supplyDrop;
|
||||
|
@ -483,7 +492,7 @@ public abstract class SurvivalGamesNew extends Game
|
|||
new ChestLootPool()
|
||||
.addItem(new ItemStack(Material.FISHING_ROD))
|
||||
.addItem(new ItemStack(Material.BOW), 60)
|
||||
.addItem(new ItemStack(Material.ARROW), 1, 3)
|
||||
.addItem(new ItemStack(Material.ARROW), 1, 3, 50)
|
||||
.addItem(new ItemStack(Material.SNOW_BALL), 1, 2)
|
||||
.addItem(new ItemStack(Material.EGG), 1, 2)
|
||||
.setUnbreakable(true)
|
||||
|
@ -504,8 +513,8 @@ public abstract class SurvivalGamesNew extends Game
|
|||
.addItem(new ItemStack(Material.EXP_BOTTLE), 1, 2)
|
||||
.addItem(new ItemStack(Material.STICK), 1, 2)
|
||||
.addItem(new ItemStack(Material.BOAT), 50)
|
||||
.addItem(new ItemStack(Material.FLINT), 1, 2)
|
||||
.addItem(new ItemStack(Material.FEATHER), 1, 2)
|
||||
.addItem(new ItemStack(Material.FLINT), 1, 2, 70)
|
||||
.addItem(new ItemStack(Material.FEATHER), 1, 2, 70)
|
||||
.addItem(new ItemStack(Material.GOLD_INGOT), 1, 1, 80)
|
||||
.addItem(compassModule.getCompass(5))
|
||||
.addItem(tnt, 50)
|
||||
|
@ -546,7 +555,7 @@ public abstract class SurvivalGamesNew extends Game
|
|||
new ChestLootPool()
|
||||
.addItem(new ItemStack(Material.FISHING_ROD))
|
||||
.addItem(new ItemStack(Material.BOW), 50)
|
||||
.addItem(new ItemStack(Material.ARROW), 1, 3)
|
||||
.addItem(new ItemStack(Material.ARROW), 1, 3, 50)
|
||||
.addItem(new ItemStack(Material.SNOW_BALL), 1, 2)
|
||||
.addItem(new ItemStack(Material.EGG), 1, 2)
|
||||
.setUnbreakable(true)
|
||||
|
@ -568,9 +577,8 @@ public abstract class SurvivalGamesNew extends Game
|
|||
.addItem(new ItemStack(Material.EXP_BOTTLE), 1, 2)
|
||||
.addItem(new ItemStack(Material.STICK), 1, 2)
|
||||
.addItem(new ItemStack(Material.BOAT), 50)
|
||||
.addItem(new ItemStack(Material.FLINT), 1, 2)
|
||||
.addItem(new ItemStack(Material.STRING), 1, 2)
|
||||
.addItem(new ItemStack(Material.FEATHER), 1, 2)
|
||||
.addItem(new ItemStack(Material.FLINT), 1, 2, 70)
|
||||
.addItem(new ItemStack(Material.FEATHER), 1, 2, 70)
|
||||
.addItem(new ItemStack(Material.GOLD_INGOT), 1, 1, 80)
|
||||
.addItem(compassModule.getCompass(5))
|
||||
.addItem(new ItemStack(Material.DIAMOND), 50)
|
||||
|
@ -677,9 +685,7 @@ public abstract class SurvivalGamesNew extends Game
|
|||
return;
|
||||
}
|
||||
|
||||
ItemStack mapItem = getModule(WorldMapModule.class).getMapItem()
|
||||
.setTitle(C.cGreenB + "World Map")
|
||||
.build();
|
||||
ItemStack mapItem = getModule(WorldMapModule.class).getMapItem();
|
||||
|
||||
for (Player player : GetPlayers(true))
|
||||
{
|
||||
|
@ -866,14 +872,17 @@ public abstract class SurvivalGamesNew extends Game
|
|||
block.setType(Material.AIR);
|
||||
}
|
||||
|
||||
if (event.getBlock().getType() == Material.LEAVES && Math.random() < 0.05)
|
||||
if (event.getBlock().getType() == Material.LEAVES)
|
||||
{
|
||||
Location location = block.getLocation().add(0.5, 0.5, 0.5);
|
||||
|
||||
event.setCancelled(true);
|
||||
location.getWorld().playEffect(location, Effect.STEP_SOUND, block.getType());
|
||||
block.setType(Material.AIR);
|
||||
location.getWorld().dropItemNaturally(location, new ItemStack(Material.STICK));
|
||||
|
||||
if (Math.random() < 0.05)
|
||||
{
|
||||
location.getWorld().dropItemNaturally(location, new ItemStack(Material.STICK));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -887,7 +896,7 @@ public abstract class SurvivalGamesNew extends Game
|
|||
return;
|
||||
}
|
||||
|
||||
event.AddMod("Water Explosion", -event.GetDamage() / 2D);
|
||||
event.AddMod("Water Explosion", -event.GetDamage() * 0.4);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
|
@ -895,6 +904,13 @@ public abstract class SurvivalGamesNew extends Game
|
|||
{
|
||||
if (event.getEntity() instanceof Player)
|
||||
{
|
||||
Location location = event.getEntity().getLocation();
|
||||
|
||||
for (int i = 1; i <= 3; i++)
|
||||
{
|
||||
UtilFirework.launchFirework(location, DEATH_EFFECT, null, i);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -902,6 +918,20 @@ public abstract class SurvivalGamesNew extends Game
|
|||
event.getDrops().clear();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateEndDamage(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC || !IsLive() || !UtilTime.elapsed(GetStateTime(), END_DAMAGE_TIME))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : GetPlayers(true))
|
||||
{
|
||||
Manager.GetDamage().NewDamageEvent(player, null, null, DamageCause.CUSTOM, 2, false, true, true, GetName(), "End Game");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double GetKillsGems(Player killer, Player killed, boolean assist)
|
||||
{
|
||||
|
|
|
@ -29,9 +29,9 @@ public class KitArcher extends Kit
|
|||
new PerkQuickshot("Quick Shot", 2, 30000, true)
|
||||
};
|
||||
|
||||
private static final ItemStack IN_HAND = new ItemStack(Material.BOW);
|
||||
public static final ItemStack BOW = new ItemBuilder(Material.BOW)
|
||||
.setTitle(C.cYellow + "Archer's Bow")
|
||||
.setUnbreakable(true)
|
||||
.build();
|
||||
|
||||
public KitArcher(ArcadeManager manager)
|
||||
|
@ -53,6 +53,6 @@ public class KitArcher extends Kit
|
|||
return;
|
||||
}
|
||||
|
||||
event.getDrops().removeIf(itemStack -> itemStack.isSimilar(BOW));
|
||||
event.getDrops().removeIf(itemStack -> itemStack.equals(BOW));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
package nautilus.game.arcade.game.games.survivalgames.kit;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import mineplex.core.game.kit.GameKit;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
|
@ -30,4 +34,17 @@ public class KitBarbarian extends Kit
|
|||
{
|
||||
Recharge.Instance.useForce(player, GetName(), 45000);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
Player killer = event.getEntity().getKiller();
|
||||
|
||||
if (killer == null || !HasKit(killer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
killer.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 0));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|||
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
|
@ -120,4 +122,23 @@ public class BorderModule extends Module
|
|||
getGame().getArcadeManager().GetDamage().NewDamageEvent(event.GetDamageeEntity(), null, null, DamageCause.CUSTOM, 2, false, true, true, getGame().GetName(), "World Border");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateEndGame(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SEC || !getGame().IsLive() || _deathmatchSize != getGame().WorldData.World.getWorldBorder().getSize())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
double maxY = getGame().GetSpectatorLocation().getY() - 6;
|
||||
|
||||
for (Player player : getGame().GetPlayers(true))
|
||||
{
|
||||
if (player.getLocation().getY() > maxY)
|
||||
{
|
||||
getGame().GetTeam(player).SpawnTeleport(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ public class FurnaceLootModule extends Module
|
|||
}
|
||||
|
||||
FurnaceInventory inventory = furnace.getInventory();
|
||||
int random = UtilMath.r(9);
|
||||
int random = UtilMath.r(6);
|
||||
|
||||
if (random == 0)
|
||||
{
|
||||
|
|
|
@ -41,6 +41,9 @@ import mineplex.core.common.util.UtilEvent.ActionType;
|
|||
import mineplex.core.common.util.UtilFirework;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.treasure.util.TreasureUtil;
|
||||
|
@ -57,6 +60,7 @@ public class SupplyDropModule extends Module
|
|||
private static final int HEIGHT = 40;
|
||||
private static final int RADIUS = 8;
|
||||
private static final int POINTS = 80;
|
||||
private static final int MAX_DROPS = 3;
|
||||
private static final FireworkEffect FIREWORK_EFFECT = FireworkEffect.builder()
|
||||
.with(Type.BURST)
|
||||
.withColor(Color.YELLOW)
|
||||
|
@ -85,6 +89,7 @@ public class SupplyDropModule extends Module
|
|||
private SupplyDrop _supplyDrop;
|
||||
private Block _lastBlock;
|
||||
private boolean _firstOpening;
|
||||
private int _totalDrops;
|
||||
|
||||
public SupplyDropModule()
|
||||
{
|
||||
|
@ -131,7 +136,7 @@ public class SupplyDropModule extends Module
|
|||
|
||||
if (_supplyDrop == null)
|
||||
{
|
||||
if (getGame().WorldTimeSet > TIME && getGame().WorldTimeSet < TIME + 1000)
|
||||
if (_totalDrops < MAX_DROPS && getGame().WorldTimeSet > TIME && getGame().WorldTimeSet < TIME + 1000)
|
||||
{
|
||||
Location location = getRandom();
|
||||
|
||||
|
@ -161,6 +166,7 @@ public class SupplyDropModule extends Module
|
|||
getGame().Announce(C.cRedB + "A Supply Drop has appeared at " + C.cWhite + "(" + location.getBlockX() + ", " + location.getBlockZ() + ").");
|
||||
|
||||
_supplyDrop = new SupplyDrop(location, entity);
|
||||
_totalDrops++;
|
||||
}
|
||||
}
|
||||
else if (!_supplyDrop.Dropped)
|
||||
|
@ -187,7 +193,6 @@ public class SupplyDropModule extends Module
|
|||
block = block.getRelative(BlockFace.UP);
|
||||
done = true;
|
||||
_supplyDrop.Dragon.remove();
|
||||
_supplyDrop = null;
|
||||
_firstOpening = true;
|
||||
cancel();
|
||||
}
|
||||
|
@ -197,13 +202,14 @@ public class SupplyDropModule extends Module
|
|||
|
||||
if (done)
|
||||
{
|
||||
_supplyDrop.ChestSpawned = true;
|
||||
_lastBlock = block;
|
||||
populateChest();
|
||||
}
|
||||
}
|
||||
}, 0, 5);
|
||||
}
|
||||
else
|
||||
else if (!_supplyDrop.ChestSpawned)
|
||||
{
|
||||
Location center = _supplyDrop.Drop;
|
||||
double theta = Math.PI * 2 / POINTS * _supplyDrop.Point;
|
||||
|
@ -241,11 +247,23 @@ public class SupplyDropModule extends Module
|
|||
|
||||
if (_firstOpening)
|
||||
{
|
||||
_supplyDrop = null;
|
||||
_firstOpening = false;
|
||||
getGame().AddStat(player, "SupplyDropsOpened", 1, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateParticles(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTEST || _supplyDrop == null || !_supplyDrop.ChestSpawned)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UtilParticle.PlayParticleToAll(ParticleType.SPELL, _lastBlock.getLocation().add(0.5, 0.5, 0.5), 1, 1, 1, 0, 5, ViewDist.NORMAL);
|
||||
}
|
||||
|
||||
private void populateChest()
|
||||
{
|
||||
List<Integer> slots = new ArrayList<>(_chestInventory.getSize());
|
||||
|
@ -328,7 +346,7 @@ public class SupplyDropModule extends Module
|
|||
private class SupplyDrop
|
||||
{
|
||||
Location Drop;
|
||||
boolean Dropped;
|
||||
boolean Dropped, ChestSpawned;
|
||||
long Start;
|
||||
Entity Dragon;
|
||||
int Point;
|
||||
|
|
|
@ -68,8 +68,8 @@ public class TrackingCompassModule extends Module
|
|||
|
||||
player.setCompassTarget(nearby.getLocation());
|
||||
player.playSound(player.getLocation(), Sound.SUCCESSFUL_HIT, 1, 1);
|
||||
player.sendMessage(F.main("Game", F.name(nearby.getName()) + " is " + F.count((int) UtilMath.offset(player, nearby)) + " blocks away."));
|
||||
player.setItemInHand(getCompass(--uses));
|
||||
player.sendMessage(F.main("Game", F.name(nearby.getName()) + " is " + F.count((int) UtilMath.offset(player, nearby)) + " blocks away. Your compass has " + F.count(uses) + " use" + (uses == 1 ? "": "s") + " left."));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ public class ThrowableTNTModule extends Module
|
|||
}
|
||||
else
|
||||
{
|
||||
builder.setTitle(C.cYellowB + "Throwable TNT");
|
||||
builder.setTitle(C.cYellow + "Throwable TNT");
|
||||
}
|
||||
|
||||
_tntItem = builder.build();
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.bukkit.entity.Player;
|
|||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
|
||||
public class Generator
|
||||
|
@ -53,6 +54,7 @@ public class Generator
|
|||
_holder.remove();
|
||||
_holder = null;
|
||||
setLastCollect();
|
||||
UtilServer.CallEvent(new GeneratorCollectEvent(player, this));
|
||||
}
|
||||
|
||||
public void checkSpawn()
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.bukkit.entity.Player;
|
|||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.map.MapRenderer;
|
||||
import org.bukkit.map.MapView;
|
||||
|
@ -32,6 +33,9 @@ import com.google.common.collect.HashMultiset;
|
|||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Multisets;
|
||||
|
||||
import mineplex.core.account.permissions.Permission;
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
|
@ -46,6 +50,11 @@ import nautilus.game.arcade.world.WorldData;
|
|||
public class WorldMapModule extends Module
|
||||
{
|
||||
|
||||
public enum Perm implements Permission
|
||||
{
|
||||
MAP_COMMAND
|
||||
}
|
||||
|
||||
private static final int BLOCK_SCAN_INTERVAL = 16;
|
||||
|
||||
private int _halfMapSize;
|
||||
|
@ -175,6 +184,18 @@ public class WorldMapModule extends Module
|
|||
rebuildScan();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setup()
|
||||
{
|
||||
getGame().registerDebugCommand("map", Perm.MAP_COMMAND, PermissionGroup.PLAYER, (player, args) ->
|
||||
{
|
||||
Inventory inventory = player.getInventory();
|
||||
inventory.remove(Material.MAP);
|
||||
inventory.addItem(getMapItem());
|
||||
player.sendMessage(F.main("Game", "Here, have a " + F.name("Map") + "."));
|
||||
});
|
||||
}
|
||||
|
||||
private void setupRenderer(MapView view)
|
||||
{
|
||||
for (MapRenderer renderer : view.getRenderers())
|
||||
|
@ -511,18 +532,6 @@ public class WorldMapModule extends Module
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void dropItem(PlayerDropItemEvent event)
|
||||
{
|
||||
ItemStack itemStack = event.getItemDrop().getItemStack();
|
||||
|
||||
if (itemStack.getType() == Material.MAP)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().sendMessage(F.main("Game", "You cannot drop this map."));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void inventoryClick(InventoryClickEvent event)
|
||||
{
|
||||
|
@ -539,8 +548,10 @@ public class WorldMapModule extends Module
|
|||
}
|
||||
}
|
||||
|
||||
public ItemBuilder getMapItem()
|
||||
public ItemStack getMapItem()
|
||||
{
|
||||
return new ItemBuilder(Material.MAP, 1, _mapId);
|
||||
return new ItemBuilder(Material.MAP, 1, _mapId)
|
||||
.setTitle(C.cGreenB + "World Map")
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
package nautilus.game.arcade.kit.perks;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Item;
|
||||
|
@ -9,6 +11,7 @@ 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 mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
|
@ -19,6 +22,7 @@ import mineplex.core.common.util.UtilEvent;
|
|||
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.projectile.IThrown;
|
||||
import mineplex.core.projectile.ProjectileUser;
|
||||
|
@ -28,12 +32,23 @@ import nautilus.game.arcade.kit.Perk;
|
|||
|
||||
public class PerkAxeThrower extends Perk implements IThrown
|
||||
{
|
||||
|
||||
private final Map<LivingEntity, Long> _lastAxe;
|
||||
|
||||
public PerkAxeThrower()
|
||||
{
|
||||
super("Axe Thrower", new String[]
|
||||
{
|
||||
C.cYellow + "Right-Click" + C.cGray + " with Axes to " + C.cGreen + "Throw Axe",
|
||||
});
|
||||
|
||||
_lastAxe = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregisteredEvents()
|
||||
{
|
||||
_lastAxe.clear();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
@ -47,7 +62,7 @@ public class PerkAxeThrower extends Perk implements IThrown
|
|||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (!UtilItem.isAxe(player.getItemInHand()) || !Kit.HasKit(player) || !Recharge.Instance.use(player, GetName(), 1000, false, true))
|
||||
if (!UtilItem.isAxe(player.getItemInHand()) || !Kit.HasKit(player) || !Recharge.Instance.usable(player, GetName(), true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -70,16 +85,39 @@ public class PerkAxeThrower extends Perk implements IThrown
|
|||
return;
|
||||
|
||||
Item item = (Item) data.getThrown();
|
||||
LivingEntity thrower = data.getThrower();
|
||||
|
||||
int damage = 4;
|
||||
if (item.getItemStack().getType() == Material.STONE_AXE) damage = 5;
|
||||
else if (item.getItemStack().getType() == Material.IRON_AXE) damage = 6;
|
||||
else if (item.getItemStack().getType() == Material.DIAMOND_AXE) damage = 7;
|
||||
|
||||
switch (item.getItemStack().getType())
|
||||
{
|
||||
case STONE_AXE:
|
||||
damage = 5;
|
||||
break;
|
||||
case IRON_AXE:
|
||||
damage = 6;
|
||||
break;
|
||||
case DIAMOND_AXE:
|
||||
damage = 7;
|
||||
break;
|
||||
}
|
||||
|
||||
Long last = _lastAxe.get(thrower);
|
||||
|
||||
if (last == null)
|
||||
{
|
||||
_lastAxe.put(thrower, System.currentTimeMillis());
|
||||
}
|
||||
else
|
||||
{
|
||||
long delta = System.currentTimeMillis() - last;
|
||||
damage /= Math.max(1, (2000 - delta) / 500);
|
||||
}
|
||||
|
||||
//Damage Event
|
||||
Manager.GetDamage().NewDamageEvent(target, data.getThrower(), null,
|
||||
Manager.GetDamage().NewDamageEvent(target, thrower, null,
|
||||
DamageCause.CUSTOM, damage, true, true, false,
|
||||
UtilEnt.getName(data.getThrower()), GetName());
|
||||
UtilEnt.getName(thrower), GetName());
|
||||
|
||||
//Effect
|
||||
data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.ZOMBIE_WOOD, 1f, 1.6f);
|
||||
|
@ -112,4 +150,10 @@ public class PerkAxeThrower extends Perk implements IThrown
|
|||
{
|
||||
data.getThrown().remove();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
_lastAxe.remove(event.getPlayer());
|
||||
}
|
||||
}
|
|
@ -71,7 +71,7 @@ public class PerkBomberHG extends Perk
|
|||
continue;
|
||||
|
||||
//Add
|
||||
cur.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item(C.Bold + "Throwable TNT")));
|
||||
cur.getInventory().addItem(ItemStackFactory.Instance.CreateStack(Material.TNT, (byte)0, 1, F.item("Throwable TNT")));
|
||||
|
||||
cur.playSound(cur.getLocation(), Sound.ITEM_PICKUP, 2f, 1f);
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ public class PerkCleave extends Perk
|
|||
event.AddMod(damager.getName(), GetName(), 0, false);
|
||||
|
||||
//Splash
|
||||
for (Player other : UtilPlayer.getNearby(damagee.getLocation(), 3))
|
||||
for (Player other : UtilPlayer.getNearby(damagee.getLocation(), 4))
|
||||
{
|
||||
if (other.equals(damagee))
|
||||
continue;
|
||||
|
|
|
@ -74,7 +74,7 @@ public class PerkHiltSmash extends Perk
|
|||
|
||||
//Damage Event
|
||||
Manager.GetDamage().NewDamageEvent((LivingEntity)ent, player, null,
|
||||
DamageCause.ENTITY_ATTACK, 2, false, true, true,
|
||||
DamageCause.ENTITY_ATTACK, 1, false, true, true,
|
||||
player.getName(), GetName());
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,10 @@ public class PerkHorsePet extends Perk
|
|||
@Override
|
||||
public void Apply(Player player)
|
||||
{
|
||||
Manager.runSyncLater(() -> spawnHorse(player, false), 45 * 20);
|
||||
if (Manager.GetGame().InProgress())
|
||||
{
|
||||
Manager.runSyncLater(() -> spawnHorse(player, false), 45 * 20);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -183,7 +183,7 @@ public class PerkSkeletons extends Perk
|
|||
|
||||
UtilEnt.removeGoalSelectors(skel);
|
||||
|
||||
skel.setMaxHealth(30);
|
||||
skel.setMaxHealth(36);
|
||||
skel.setHealth(skel.getMaxHealth());
|
||||
|
||||
ItemStack inHand = killed.getItemInHand();
|
||||
|
|
|
@ -106,7 +106,7 @@ public class PerkTNTArrow extends Perk
|
|||
|
||||
Player player = (Player)event.getEntity();
|
||||
|
||||
if (!_active.remove(player) || !Recharge.Instance.use(player, GetName(), 8000, true, true))
|
||||
if (!_active.remove(player) || !Recharge.Instance.use(player, GetName(), 6000, true, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ public class PerkWolfPet extends Perk
|
|||
return;
|
||||
}
|
||||
|
||||
if (!Recharge.Instance.use(player, "Cub Strike", 10000, true, true))
|
||||
if (!Recharge.Instance.use(player, "Cub Strike", 8000, true, true))
|
||||
return;
|
||||
|
||||
Wolf wolf = _petMap.get(player).get(UtilMath.r(_petMap.get(player).size()));
|
||||
|
@ -398,11 +398,12 @@ public class PerkWolfPet extends Perk
|
|||
}
|
||||
else if (damager != null && isMinion(damager))
|
||||
{
|
||||
double damage = 3;
|
||||
if (event.GetDamageePlayer() != null)
|
||||
{
|
||||
event.GetDamageePlayer().playSound(event.GetDamageeEntity().getLocation(), Sound.SUCCESSFUL_HIT, 1, 1);
|
||||
}
|
||||
|
||||
event.GetDamageeEntity().getWorld().playSound(event.GetDamageeEntity().getLocation(), Sound.SUCCESSFUL_HIT, 1, 1);
|
||||
event.AddMod("Wolf Minion", "Negate", -event.GetDamageInitial(), false);
|
||||
event.AddMod("Wolf Minion", "Damage", damage, false);
|
||||
event.AddMod("Wolf Minion", "Damage", -event.GetDamageInitial() + 3, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue