Add in custom poison functionality to allow all mobs to be poisoned via

mob heads.
dev
sigonasr2 11 years ago
parent 8eadef2e35
commit 56bcfde492
  1. 47
      BankEconomyMod/src/me/kaZep/Base/Main.java
  2. 61
      BankEconomyMod/src/me/kaZep/Base/MobManager.java
  3. 197
      BankEconomyMod/src/me/kaZep/Base/PlayerListener.java
  4. 2
      BankEconomyMod/src/me/kaZep/Commands/commandBankEconomy.java

@ -203,6 +203,7 @@ public class Main extends JavaPlugin
public List<ReviveInventory> revive_inventory_list = null;
public List<PoweredMob> powered_mob_list = null;
public List<Chunk> chunk_queue_list = null;
public List<MobManager> mob_list = null;
public static List<RecyclingCenterNode> recycling_center_list = null;
public static List<BonusEnchantment> bonus_enchantment_list = null;
public DamageAPI DMGCALC = null;
@ -355,6 +356,7 @@ public class Main extends JavaPlugin
chunk_queue_list = new ArrayList<Chunk>();
bonus_enchantment_list = new ArrayList<BonusEnchantment>();
powered_mob_list = new ArrayList<PoweredMob>();
mob_list = new ArrayList<MobManager>();
recycling_center_list = new ArrayList<RecyclingCenterNode>();
@ -1863,6 +1865,14 @@ public void runTick() {
}
}
if (Main.SERVER_TICK_TIME%20==0) {
List<MobHead> playerheads = getMobHeads(p);
int creeperrareheads = getMobHeadAmt(new MobHead(MobHeadType.CREEPER,true,MobHeadRareType.RARE_TYPE_B), playerheads);
int creeperpoweredheads = getMobHeadAmt(new MobHead(MobHeadType.CREEPER,false,true), playerheads);
int creeperpoweredrareheads = getMobHeadAmt(new MobHead(MobHeadType.CREEPER,true,true), playerheads);
int aoedmg = 0;
aoedmg+=creeperrareheads;
aoedmg+=creeperpoweredheads;
aoedmg+=creeperpoweredrareheads*3;
for (int j=0;j<powered_mob_list.size();j++) {
if (powered_mob_list.get(j).power_time+1200<Main.SERVER_TICK_TIME) {
powered_mob_list.remove(j);
@ -2119,8 +2129,38 @@ public void runTick() {
for (int i=0;i<nearby.size();i++) {
//EntityType allowedtypes[] = {EntityType.BAT,EntityType.BLAZE,EntityType.CAVE_SPIDER,EntityType.ENDERMAN,EntityType.GHAST,EntityType.MAGMA_CUBE,EntityType.PIG_ZOMBIE,EntityType.SILVERFISH,EntityType.SLIME,EntityType.SPIDER,EntityType.ZOMBIE,EntityType.SKELETON,EntityType.CREEPER};
boolean contains=nearby.get(i) instanceof LivingEntity;
boolean containsmonster=nearby.get(i) instanceof Monster;
if (containsmonster && aoedmg>0) {
if (nearby.get(i).getLocation().distance(p.getLocation())<=9) {
//p.sendMessage("AOE Damage is "+aoedmg);
LivingEntity l = (LivingEntity)nearby.get(i);
l.damage(aoedmg);
}
}
if (contains) {
LivingEntity l = (LivingEntity)nearby.get(i);
/*
if (l.hasPotionEffect(PotionEffectType.POISON)) {
Collection<PotionEffect> pots = l.getActivePotionEffects();
int poison_power=0;
for (PotionEffect effect : pots) {
if (effect.getType().getName().equalsIgnoreCase("poison")) {
poison_power = effect.getAmplifier();
break;
}
}
l.damage(poison_power+1);
}*/
for (int j=0;j<mob_list.size();j++) {
if (mob_list.get(j).id.compareTo(l.getUniqueId())==0) {
if (mob_list.get(j).getPoisonTicks()>0) {
l.damage(1);
} else {
mob_list.remove(j);
j--;
}
}
}
if (l.getCustomName()!=null && l.hasLineOfSight(p)) {
if (!lineofsight_check.contains(l.getUniqueId())) {
l.setCustomNameVisible(true);
@ -2320,6 +2360,10 @@ public void runTick() {
}
}
}
if (Main.SERVER_TICK_TIME%36000==0) {
//Every 30 minutes, clear out the list of poisoned mobs, in case some are non-existent now.
mob_list.clear();
}
if (Main.SERVER_TICK_TIME%600==0) {
saveAccountsConfig(); //Save account data once every 30 seconds.
if (turnedon==false && Bukkit.getWorld("world").getTime()>13000) {
@ -6271,6 +6315,7 @@ public void payDay(int time)
public static void playFirework(Location loc)
{
Random gen = new Random();
try
{
Firework fw = loc.getWorld().spawn(loc, Firework.class);
@ -6509,7 +6554,7 @@ public void payDay(int time)
//Check the lore for a valid mob head.
if (getMobHead(item)!=null) {
mobheadlist.add(getMobHead(item));
Bukkit.getLogger().info("Mob head "+getMobHead(item).toString()+" added.");
//Bukkit.getLogger().info("Mob head "+getMobHead(item).toString()+" added.");
}
}
}

@ -0,0 +1,61 @@
package me.kaZep.Base;
import java.util.UUID;
/**
* The MobManager class handles a certain mob in the game.
* It will allow you to define new properties for mobs
* to keep track of. This is similar to the PlayerData
* class for players.
*/
public class MobManager {
UUID id;
long poison_time;
/**
* Adds a new mob to be tracked.
* @param id The UUID of the mob.
*/
public MobManager(UUID id) {
this.id=id;
this.poison_time=Main.SERVER_TICK_TIME;
}
/**
* If there are already poison ticks on this mob,
* adds to the duration in ticks for the poison
* to last. Otherwise works just like setPoison().
* @param ticks
*/
public void addPoison(long ticks) {
if (poison_time>=Main.SERVER_TICK_TIME) {
poison_time+=ticks;
} else {
setPoison(ticks);
}
}
/**
* Sets the poison ticks directly, overwriting
* any previous poison tick data.
* @param ticks
*/
public void setPoison(long ticks) {
poison_time=Main.SERVER_TICK_TIME+ticks;
}
/**
* Removes the poison ticks from this mob.
*/
public void removePoison() {
poison_time=Main.SERVER_TICK_TIME;
}
/**
* Returns the number of ticks of poison
* left on this mob.
* @return
*/
public long getPoisonTicks() {
if (poison_time>=Main.SERVER_TICK_TIME) {
return poison_time-Main.SERVER_TICK_TIME;
} else {
return 0; //0 ticks, since the stored time is smaller.
}
}
}

@ -10155,7 +10155,7 @@ implements Listener
l2.setHealth(l2.getHealth()-dmg);
if (l2 instanceof Player) {
Player p = (Player)l2;
p.playSound(p.getLocation(), Sound.HURT, 0.5f, 1.0f);
p.playSound(p.getLocation(), Sound.HURT_FLESH, 0.5f, 1.0f);
DecimalFormat df = new DecimalFormat("#0.0");
DecimalFormat df2 = new DecimalFormat("#0");
if (this.plugin.getAccountsConfig().getBoolean(p.getName().toLowerCase()+".settings.notify5")) {
@ -10955,10 +10955,74 @@ implements Listener
final Player p = (Player) e.getDamager();
if (e.getEntity() instanceof Monster) {
Monster m = (Monster)e.getEntity();
List<MobHead> playerheads = this.plugin.getMobHeads(p);
int creeperheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER), playerheads);
int creeperrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER,true), playerheads);
int creeperpoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER,false,true), playerheads);
int creeperpoweredrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER,true,true), playerheads);
int aoedmg = 0;
aoedmg+=creeperheads*5;
aoedmg+=creeperrareheads*20;
aoedmg+=creeperpoweredheads*5;
aoedmg+=creeperpoweredrareheads*30;
int spiderheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER), playerheads);
int spiderrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,true), playerheads);
int spiderpoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,false,true), playerheads);
int spiderpoweredrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,true,true), playerheads);
int slowdownpct = 0;
slowdownpct+=spiderheads*5;
slowdownpct+=spiderrareheads*15;
slowdownpct+=spiderpoweredheads*5;
slowdownpct+=spiderpoweredrareheads*30;
spiderrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,true,MobHeadRareType.RARE_TYPE_B), playerheads);
int poisondur = 0; //Amount of poison duration (seconds) to add to the current poison amount.
poisondur+=spiderrareheads*2;
poisondur+=spiderpoweredheads*1;
poisondur+=spiderpoweredrareheads*5;
m.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,60,slowdownpct/15,true));
int poisonduration=0;
//First see if the mob is already a poisoned mob.
boolean found=false;
for (int i=0;i<this.plugin.mob_list.size();i++) {
if (this.plugin.mob_list.get(i).id.compareTo(m.getUniqueId())==0) {
//We found it. Add onto current poison duration.
this.plugin.mob_list.get(i).addPoison(poisondur*20);
found=true;
break;
}
}
if (!found) {
//We didn't find it, so add a new entry to the poison list.
MobManager newm = new MobManager(m.getUniqueId());
newm.addPoison(poisondur*20);
this.plugin.mob_list.add(newm);
}
List<Entity> nearby_mobs = m.getNearbyEntities(2, 2, 2);
for (int i=0;i<nearby_mobs.size();i++) {
if (!(nearby_mobs.get(i) instanceof Monster)) {
nearby_mobs.remove(i);
i--;
}
}
for (int i=0;i<nearby_mobs.size();i++) {
if (!nearby_mobs.get(i).getUniqueId().equals(m)) {
LivingEntity m2 = (LivingEntity)nearby_mobs.get(i);
m2.damage(e.getDamage()*(aoedmg/100.0d));
}
}
/*if (m.hasPotionEffect(PotionEffectType.SLOW) && Main.SERVER_TICK_TIME-this.plugin.getPlayerData(p).lastsneaktime<=60) {
m.removePotionEffect(PotionEffectType.SLOW);
}*/
List<MobHead> playerheads = this.plugin.getMobHeads(p);
int witherskeletonheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON), playerheads);
int witherskeletonrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON,true), playerheads);
int witherskeletonpoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON,false,true), playerheads);
@ -11061,13 +11125,13 @@ implements Listener
//int zombierarebheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.ZOMBIE,true,MobHeadRareType.RARE_TYPE_B), playerheads);
int zombiepoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.ZOMBIE,false,true), playerheads);
int zombiepoweredrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.ZOMBIE,true,true), playerheads);
Bukkit.getLogger().info("Head counts are "+zombieheads+", "+zombierareaheads+", "+zombiepoweredheads+", "+zombiepoweredrareheads);
Bukkit.getLogger().info("Life Steal is "+life_steal+"%");
//Bukkit.getLogger().info("Head counts are "+zombieheads+", "+zombierareaheads+", "+zombiepoweredheads+", "+zombiepoweredrareheads);
//Bukkit.getLogger().info("Life Steal is "+life_steal+"%");
life_steal+=zombieheads;
life_steal+=zombiepoweredheads;
life_steal+=zombierareaheads*3;
life_steal+=zombiepoweredrareheads*5;
Bukkit.getLogger().info("Life Steal is "+life_steal+"%");
//Bukkit.getLogger().info("Life Steal is "+life_steal+"%");
if (this.plugin.getPlayerData(p).furytime!=0) {
attack_speed+=this.plugin.getPlayerData(p).furyamt;
}
@ -11199,11 +11263,124 @@ implements Listener
p.getScoreboard().getTeam(p.getName().toLowerCase()).setSuffix(healthbar(p.getHealth(),p.getMaxHealth(),p.getFoodLevel()));
ItemStack item = p.getItemInHand();
double critical_chance=0,armor_pen=0,life_steal=0,attack_speed=0,dmg=0,armor_pen_dmg=0;
List<MobHead> player_mobheads = this.plugin.getMobHeads(p);
int skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON), player_mobheads);
int powered_skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON, false, true), player_mobheads);
int rare_skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON, true, MobHeadRareType.RARE_TYPE_A), player_mobheads);
int powered_rare_skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON, true, MobHeadRareType.RARE_TYPE_A, true), player_mobheads);
List<MobHead> playerheads = this.plugin.getMobHeads(p);
if (e.getEntity() instanceof Monster) {
Monster m = (Monster)e.getEntity();
int creeperheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER), playerheads);
int creeperrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER,true), playerheads);
int creeperpoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER,false,true), playerheads);
int creeperpoweredrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.CREEPER,true,true), playerheads);
int aoedmg = 0;
aoedmg+=creeperheads*5;
aoedmg+=creeperrareheads*20;
aoedmg+=creeperpoweredheads*5;
aoedmg+=creeperpoweredrareheads*30;
int spiderheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER), playerheads);
int spiderrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,true), playerheads);
int spiderpoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,false,true), playerheads);
int spiderpoweredrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,true,true), playerheads);
int slowdownpct = 0;
slowdownpct+=spiderheads*5;
slowdownpct+=spiderrareheads*15;
slowdownpct+=spiderpoweredheads*5;
slowdownpct+=spiderpoweredrareheads*30;
spiderrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SPIDER,true,MobHeadRareType.RARE_TYPE_B), playerheads);
int poisondur = 0; //Amount of poison duration (seconds) to add to the current poison amount.
poisondur+=spiderrareheads*2;
poisondur+=spiderpoweredheads*1;
poisondur+=spiderpoweredrareheads*5;
m.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,60,slowdownpct/15,true));
int poisonduration=0;
//First see if the mob is already a poisoned mob.
boolean found=false;
for (int i=0;i<this.plugin.mob_list.size();i++) {
if (this.plugin.mob_list.get(i).id.compareTo(m.getUniqueId())==0) {
//We found it. Add onto current poison duration.
this.plugin.mob_list.get(i).addPoison(poisondur*20);
found=true;
break;
}
}
if (!found) {
//We didn't find it, so add a new entry to the poison list.
MobManager newm = new MobManager(m.getUniqueId());
newm.addPoison(poisondur*20);
this.plugin.mob_list.add(newm);
}
List<Entity> nearby_mobs = m.getNearbyEntities(2, 2, 2);
for (int i=0;i<nearby_mobs.size();i++) {
if (!(nearby_mobs.get(i) instanceof Monster)) {
nearby_mobs.remove(i);
i--;
}
}
for (int i=0;i<nearby_mobs.size();i++) {
if (!nearby_mobs.get(i).getUniqueId().equals(m)) {
LivingEntity m2 = (LivingEntity)nearby_mobs.get(i);
m2.damage(e.getDamage()*(aoedmg/100.0d));
}
}
int witherskeletonheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON), playerheads);
int witherskeletonrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON,true), playerheads);
int witherskeletonpoweredheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON,false,true), playerheads);
int witherskeletonpoweredrareheads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.WITHER_SKELETON,true,true), playerheads);
int witherduration = 0, witheramplifier = 0;
try {
Iterator<PotionEffect> effects = m.getActivePotionEffects().iterator();
//Figure out potion effects when player joins.
while (effects.hasNext()) {
PotionEffect nexteffect = effects.next();
//Bukkit.getLogger().info("Effect Type is "+nexteffect.getType().getName()+", amplifier is "+nexteffect.getAmplifier()+", duration is "+nexteffect.getDuration());
if (witherskeletonheads+witherskeletonrareheads+witherskeletonpoweredheads+witherskeletonpoweredrareheads>0 && nexteffect.getType().getName().compareTo(PotionEffectType.WITHER.getName())==0) {
witherduration=nexteffect.getDuration();
witheramplifier=nexteffect.getAmplifier();
}
if (nexteffect.getType().getName().compareTo(PotionEffectType.SLOW.getName())==0 && nexteffect.getAmplifier()==6 && nexteffect.getDuration()<=60) {
m.removePotionEffect(PotionEffectType.SLOW);
//Bukkit.getLogger().info("Removed slow.");
//p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 200, nexteffect.getAmplifier()+1, true));
break;
}
/*if (nexteffect.getType().getName().compareTo(PotionEffectType.JUMP.getName())==0) {
p.removePotionEffect(PotionEffectType.JUMP);
p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 360000, nexteffect.getAmplifier()+2, true));
}*/
effects.remove();
}
} catch (ConcurrentModificationException ex_e) {
Bukkit.getLogger().warning("Potion Effect Collection not accessible while trying to remove slow debuff.");
}
if (witherskeletonpoweredrareheads>0) {
if (witherduration==0) {witherduration=400;}
Bukkit.getLogger().info("Adding potion effect WITHER with amplifier "+(witheramplifier+2*witherskeletonpoweredrareheads)+" + duration "+witherduration);
m.addPotionEffect(new PotionEffect(PotionEffectType.WITHER,witherduration,witheramplifier+2*witherskeletonpoweredrareheads),true);
} else if (witherskeletonpoweredheads>0) {
if (witherduration==0) {witherduration=100;}
Bukkit.getLogger().info("Adding potion effect WITHER with amplifier "+(witheramplifier+1*witherskeletonpoweredrareheads)+" + duration "+witherduration);
m.addPotionEffect(new PotionEffect(PotionEffectType.WITHER,witherduration,witheramplifier+1*witherskeletonpoweredrareheads),true);
} else if (witherskeletonrareheads>0) {
Bukkit.getLogger().info("Adding potion effect WITHER with amplifier 2 + duration "+(witherduration+300*witherskeletonrareheads));
m.addPotionEffect(new PotionEffect(PotionEffectType.WITHER,witherduration+300*witherskeletonrareheads,2),true);
} else if (witherskeletonheads>0) {
Bukkit.getLogger().info("Adding potion effect WITHER with amplifier 0 + duration "+(witherduration+100*witherskeletonrareheads));
m.addPotionEffect(new PotionEffect(PotionEffectType.WITHER,witherduration+100*witherskeletonrareheads,0),true);
}
}
int skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON), playerheads);
int powered_skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON, false, true), playerheads);
int rare_skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON, true, MobHeadRareType.RARE_TYPE_A), playerheads);
int powered_rare_skeleton_heads = this.plugin.getMobHeadAmt(new MobHead(MobHeadType.SKELETON, true, MobHeadRareType.RARE_TYPE_A, true), playerheads);
/*if (skeleton_heads>0) {
Bukkit.getLogger().info("Found "+skeleton_heads+" skeleton mob heads.");
}

@ -1025,7 +1025,7 @@ public String convertToItemName(String val) {
f.getInventory().addItem(i);
}
if (args[0].equalsIgnoreCase("regen_chunk")) {
if (args[0].equalsIgnoreCase("regen_chunk") && 0==1 /*DISABLED to prevent accidental execution.*/) {
if (p.hasPermission("maintenance-mode-admin")) {
//boolean result=p.getWorld().regenerateChunk(p.getLocation().getBlockX()/16, p.getLocation().getBlockZ()/16);
//Bukkit.getLogger().info("Chunk regenerated: "+result+" ("+p.getLocation().getBlockX()/16+","+p.getLocation().getBlockZ()/16+")");

Loading…
Cancel
Save