Update several perks to support vanilla damage system and kit progression

This commit is contained in:
AlexTheCoder 2017-05-04 18:59:41 -04:00
parent 7b70695e12
commit ac98213d28
4 changed files with 152 additions and 24 deletions

View File

@ -1,6 +1,16 @@
package nautilus.game.arcade.kit.perks; package nautilus.game.arcade.kit.perks;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
@ -13,20 +23,18 @@ import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.Perk;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
public class PerkBomberHG extends Perk public class PerkBomberHG extends Perk
{ {
private int _spawnRate; private int _spawnRate;
private int _max; private int _max;
private boolean _onlyRestrictNamed;
public PerkBomberHG(int spawnRate, int max) public PerkBomberHG(int spawnRate, int max)
{
this(spawnRate, max, false);
}
public PerkBomberHG(int spawnRate, int max, boolean onlyRestrictNamed)
{ {
super("Explosives", new String[] super("Explosives", new String[]
{ {
@ -35,6 +43,7 @@ public class PerkBomberHG extends Perk
_spawnRate = spawnRate; _spawnRate = spawnRate;
_max = max; _max = max;
_onlyRestrictNamed = onlyRestrictNamed;
} }
public void Apply(Player player) public void Apply(Player player)
@ -53,13 +62,19 @@ public class PerkBomberHG extends Perk
if (!Kit.HasKit(cur)) if (!Kit.HasKit(cur))
continue; continue;
if (!hasPerk(cur))
continue;
if (!Manager.GetGame().IsAlive(cur)) if (!Manager.GetGame().IsAlive(cur))
continue; continue;
if (!Recharge.Instance.use(cur, GetName(), _spawnRate*1000, false, false)) if (!Recharge.Instance.use(cur, GetName(), _spawnRate*1000, false, false))
continue; continue;
if (UtilInv.contains(cur, Material.TNT, (byte)0, _max)) if (_onlyRestrictNamed ? UtilInv.contains(cur, F.item("Throwing TNT"), Material.TNT, (byte)0, _max) : UtilInv.contains(cur, Material.TNT, (byte)0, _max))
continue;
if (UtilPlayer.isSpectator(cur))
continue; continue;
//Add //Add
@ -75,7 +90,13 @@ public class PerkBomberHG extends Perk
if (event.isCancelled()) if (event.isCancelled())
return; return;
if (!UtilInv.IsItem(event.getItemDrop().getItemStack(), Material.TNT, (byte)0)) if (_onlyRestrictNamed ? !UtilInv.IsItem(event.getItemDrop().getItemStack(), F.item("Throwing TNT"), Material.TNT, (byte)0) : !UtilInv.IsItem(event.getItemDrop().getItemStack(), Material.TNT, (byte)0))
return;
if (!Kit.HasKit(event.getPlayer()))
return;
if (!hasPerk(event.getPlayer()))
return; return;
//Cancel //Cancel
@ -91,23 +112,33 @@ public class PerkBomberHG extends Perk
//boolean containerOpen = !(event.getView().getTopInventory().getHolder() instanceof Player); //boolean containerOpen = !(event.getView().getTopInventory().getHolder() instanceof Player);
boolean clickInContainer = event.getClickedInventory() != null && !(event.getClickedInventory().getHolder() instanceof Player); boolean clickInContainer = event.getClickedInventory() != null && !(event.getClickedInventory().getHolder() instanceof Player);
if(clickInContainer) if (clickInContainer)
{ {
return; return;
} }
if (!(event.getWhoClicked() instanceof Player))
return;
if (!Kit.HasKit((Player)event.getWhoClicked()))
return;
if (!hasPerk((Player)event.getWhoClicked()))
return;
UtilInv.DisallowMovementOf(event, "Throwing TNT", Material.TNT, (byte) 0, true); UtilInv.DisallowMovementOf(event, "Throwing TNT", Material.TNT, (byte) 0, true);
} }
@EventHandler @EventHandler
public void TNTDeathRemove(PlayerDeathEvent event) public void TNTDeathRemove(PlayerDeathEvent event)
{ {
HashSet<org.bukkit.inventory.ItemStack> remove = new HashSet<org.bukkit.inventory.ItemStack>(); Set<ItemStack> remove = new HashSet<>();
for (org.bukkit.inventory.ItemStack item : event.getDrops()) for (ItemStack item : event.getDrops())
if (UtilInv.IsItem(item, Material.TNT, (byte)0)) if (_onlyRestrictNamed ? UtilInv.IsItem(item, "Throwing TNT", Material.TNT, (byte)0) : UtilInv.IsItem(item, Material.TNT, (byte)0))
remove.add(item); remove.add(item);
for (org.bukkit.inventory.ItemStack item : remove) for (ItemStack item : remove)
event.getDrops().remove(item); event.getDrops().remove(item);
} }
} }

View File

@ -1,13 +1,16 @@
package nautilus.game.arcade.kit.perks; package nautilus.game.arcade.kit.perks;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import nautilus.game.arcade.kit.Perk;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import mineplex.core.Managers;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import mineplex.minecraft.game.core.damage.DamageManager;
import nautilus.game.arcade.kit.Perk;
public class PerkFallModifier extends Perk public class PerkFallModifier extends Perk
{ {
private double _fall; private double _fall;
@ -41,4 +44,28 @@ public class PerkFallModifier extends Perk
event.AddMod("Fall Modifier", "Reduce damage", _fall, false); event.AddMod("Fall Modifier", "Reduce damage", _fall, false);
} }
@EventHandler(priority = EventPriority.HIGH)
public void handle(EntityDamageEvent event)
{
if (Managers.get(DamageManager.class).IsEnabled())
{
return;
}
if (event.getCause() != DamageCause.FALL)
return;
if (!(event.getEntity() instanceof Player))
return;
Player player = (Player) event.getEntity();
if (!Kit.HasKit(player))
return;
if (!Manager.IsAlive(player))
return;
event.setDamage(event.getDamage() * _fall);
}
} }

View File

@ -184,6 +184,9 @@ public class PerkFletcher extends Perk
if (!isFletchedArrow(event.getItemDrop().getItemStack())) if (!isFletchedArrow(event.getItemDrop().getItemStack()))
return; return;
if (!hasPerk(event.getPlayer()))
return;
//Cancel //Cancel
event.setCancelled(true); event.setCancelled(true);
@ -207,6 +210,15 @@ public class PerkFletcher extends Perk
@EventHandler @EventHandler
public void FletchInvClick(InventoryClickEvent event) public void FletchInvClick(InventoryClickEvent event)
{ {
if (!(event.getWhoClicked() instanceof Player))
{
return;
}
if (!hasPerk((Player)event.getWhoClicked()))
{
return;
}
UtilInv.DisallowMovementOf(event, _name, Material.ARROW, (byte)0, true); UtilInv.DisallowMovementOf(event, _name, Material.ARROW, (byte)0, true);
} }

View File

@ -3,23 +3,33 @@ package nautilus.game.arcade.kit.perks;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import mineplex.core.Managers;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import mineplex.minecraft.game.core.damage.DamageManager;
import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.Perk;
public class PerkIronSkin extends Perk public class PerkIronSkin extends Perk
{ {
private double _reduction; private double _reduction;
private boolean _percentage;
public PerkIronSkin(double d) public PerkIronSkin(double d)
{
this(d, false);
}
public PerkIronSkin(double d, boolean percentage)
{ {
super("Iron Skin", new String[] super("Iron Skin", new String[]
{ {
"You take " + d + " less damage from attacks", "You take " + (d * (percentage ? 100 : 1)) + (percentage ? "%" : "") + " less damage from attacks",
}); });
_reduction = d; _reduction = d;
_percentage = percentage;
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
@ -40,6 +50,54 @@ public class PerkIronSkin extends Perk
if (!Kit.HasKit(damagee)) if (!Kit.HasKit(damagee))
return; return;
event.AddMod(damagee.getName(), GetName(), -_reduction, false); if (!hasPerk(damagee))
return;
if (_percentage)
{
event.AddMult(damagee.getName(), GetName(), _reduction, false);
}
else
{
event.AddMod(damagee.getName(), GetName(), -_reduction, false);
}
}
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void damageDecrease(EntityDamageEvent event)
{
if (Managers.get(DamageManager.class).IsEnabled())
{
return;
}
if (event.getCause() == DamageCause.FIRE_TICK)
return;
if (event.getDamage() <= 1)
return;
if (!(event.getEntity() instanceof Player))
return;
Player damagee = (Player) event.getEntity();
if (!Kit.HasKit(damagee))
return;
if (!hasPerk(damagee))
return;
if (!Manager.IsAlive(damagee))
return;
if (_percentage)
{
event.setDamage(event.getDamage() * _reduction);
}
else
{
event.setDamage(event.getDamage() - _reduction);
}
} }
} }