+>Added the /vac, /equip_weapons, and /equip_armor commands. These

commands are toggles to turn on/off Vacuum Cube suction, Auto-Equipping
weapons, and Auto-Equipping armor functionality.
+>Base Regeneration Level for Defenders increased. Not Blocking:
Regeneration 1 -> Regeneration 2, Blocking: Regeneration 2 ->
Regeneration 4
>Sleep voting system now works for thunderstorm weather conditions.
>Armor Stands properly subtract health when taking damage now.
->Regen Pool is now hard capped to your maximum health.
->Arrow Quivers no longer equip to your off-hand when viewing other
inventories.
->Vendetta Stacks reset if revival is triggered.
This commit is contained in:
sigonasr2 2017-01-14 04:36:59 -06:00
parent d8f2edd51e
commit 37dbd8b417
12 changed files with 183 additions and 36 deletions

Binary file not shown.

View File

@ -1,6 +1,6 @@
name: TwosideKeeper name: TwosideKeeper
main: sig.plugin.TwosideKeeper.TwosideKeeper main: sig.plugin.TwosideKeeper.TwosideKeeper
version: 3.10.7 version: 3.10.7a
loadbefore: [aPlugin] loadbefore: [aPlugin]
commands: commands:
money: money:
@ -148,3 +148,18 @@ commands:
usage: /debugreport usage: /debugreport
permission: TwosideKeeper.fulldebugreport permission: TwosideKeeper.fulldebugreport
permission-message: No permissions! permission-message: No permissions!
vac:
description: Toggle Vacuum Cube suction
usage: /vac
permission: TwosideKeeper.money
permission-message: No permissions!
equip_weapon:
description: Toggle Automatic Equipping of Weapons
usage: /equip_weapon
permission: TwosideKeeper.money
permission-message: No permissions!
equip_armor:
description: Toggle Automatic Equipping of Armor
usage: /equip_armor
permission: TwosideKeeper.money
permission-message: No permissions!

View File

@ -60,6 +60,10 @@ public class EliteGuardian extends EliteMonster{
cutscenetimer++; cutscenetimer++;
if (cutscenetimer>100) { if (cutscenetimer>100) {
state=STATE.PASSIVE; state=STATE.PASSIVE;
//Play the cutscene for all of these players.
for (Player p : nearby2) {
p.setGameMode(GameMode.SURVIVAL);
}
} }
} }
m.setAI(false); m.setAI(false);

View File

@ -15,6 +15,7 @@ import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.entity.Blaze; import org.bukkit.entity.Blaze;
import org.bukkit.entity.CaveSpider; import org.bukkit.entity.CaveSpider;
@ -738,7 +739,7 @@ public class CustomDamage {
private static double modifyFateBasedOnHolidayTreats(Player p, double damage) { private static double modifyFateBasedOnHolidayTreats(Player p, double damage) {
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
boolean consumed=false; boolean consumed=false;
if (p.getHealth()-damage<=0 && pd.lastrevivecandyconsumed+200<TwosideKeeper.getServerTickTime()) { if (p.getHealth()-damage<=0 && pd.lastrevivecandyconsumed+400<TwosideKeeper.getServerTickTime()) {
for (int i=0;i<9;i++) { for (int i=0;i<9;i++) {
ItemStack item = p.getInventory().getItem(i); ItemStack item = p.getInventory().getItem(i);
if (item!=null) { if (item!=null) {
@ -755,7 +756,7 @@ public class CustomDamage {
GenericFunctions.RandomlyBreakBaubles(p, hotbar); GenericFunctions.RandomlyBreakBaubles(p, hotbar);
SoundUtils.playLocalSound(p, Sound.ENTITY_GENERIC_EAT, 1.0f, 1.0f); SoundUtils.playLocalSound(p, Sound.ENTITY_GENERIC_EAT, 1.0f, 1.0f);
pd.lastrevivecandyconsumed=TwosideKeeper.getServerTickTime(); pd.lastrevivecandyconsumed=TwosideKeeper.getServerTickTime();
aPlugin.API.sendCooldownPacket(p, Material.GOLDEN_APPLE, 200); aPlugin.API.sendCooldownPacket(p, Material.GOLDEN_APPLE, 400);
return 0; return 0;
} }
} }
@ -1254,6 +1255,9 @@ public class CustomDamage {
} else { } else {
pd.regenpool += lifestealamt; pd.regenpool += lifestealamt;
} }
if (pd.regenpool>p.getMaxHealth()) {
pd.regenpool=p.getMaxHealth();
}
DecimalFormat df = new DecimalFormat("0.00"); DecimalFormat df = new DecimalFormat("0.00");
GenericFunctions.sendActionBarMessage(p, ""); GenericFunctions.sendActionBarMessage(p, "");
TwosideKeeper.log(p.getName()+" healed "+df.format(lifestealamt)+" dmg from Lifesteal.", 5); TwosideKeeper.log(p.getName()+" healed "+df.format(lifestealamt)+" dmg from Lifesteal.", 5);
@ -2494,7 +2498,7 @@ public class CustomDamage {
TwosideKeeper.log("In here",5); TwosideKeeper.log("In here",5);
if (!PlayerMode.isDefender(p) && PlayerMode.isDefender(check) && if (!PlayerMode.isDefender(p) && PlayerMode.isDefender(check) &&
check.isBlocking() && check.isBlocking() &&
!p.equals(check) && (reason==null || !reason.equalsIgnoreCase("Cupid Set Tank"))) { !p.equals(check) && NotTankReason(reason)) {
//This is a defender. Transfer half the damage to them! //This is a defender. Transfer half the damage to them!
dmg = dmg/2; dmg = dmg/2;
//Send the rest of the damage to the defender. //Send the rest of the damage to the defender.
@ -2505,7 +2509,7 @@ public class CustomDamage {
break; break;
} else } else
if (!isCupidTank(p) && isCupidTank(check) && if (!isCupidTank(p) && isCupidTank(check) &&
!p.equals(check) && (reason==null || !reason.equalsIgnoreCase("Defender Tank"))) { !p.equals(check) && NotTankReason(reason)) {
//This is a defender. Transfer half the damage to them! //This is a defender. Transfer half the damage to them!
double origdmg = dmg; double origdmg = dmg;
dmg = origdmg-(origdmg*(ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(check), check, ItemSet.CUPID)/100d)); dmg = origdmg-(origdmg*(ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(check), check, ItemSet.CUPID)/100d));
@ -2524,6 +2528,10 @@ public class CustomDamage {
return dmg; return dmg;
} }
public static boolean NotTankReason(String reason) {
return reason==null || !reason.equalsIgnoreCase("Cupid Set Tank") || !reason.equalsIgnoreCase("Defender Tank");
}
private static boolean isCupidTank(Player p) { private static boolean isCupidTank(Player p) {
if (ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(p), p, ItemSet.CUPID)>0) { if (ItemSet.GetTotalBaseAmount(GenericFunctions.getEquipment(p), p, ItemSet.CUPID)>0) {
return true; return true;
@ -2655,7 +2663,7 @@ public class CustomDamage {
} }
private static void subtractHealth(double damage, LivingEntity target) { private static void subtractHealth(double damage, LivingEntity target) {
if (target instanceof Player) {TwosideKeeper.log("Going to subtract "+damage+" damage", 5);} //if (target instanceof ArmorStand) {TwosideKeeper.log("Going to subtract "+damage+" damage", 0);}
if (target.getHealth()>0) { if (target.getHealth()>0) {
if (target.getHealth()<damage) { if (target.getHealth()<damage) {
target.setHealth(0.00001); target.setHealth(0.00001);
@ -2701,7 +2709,7 @@ public class CustomDamage {
return finaldmg; return finaldmg;
} }
private static double calculateArmorPen(Entity pl, double dmg, ItemStack weapon) { public static double calculateArmorPen(Entity pl, double dmg, ItemStack weapon) {
double finaldmg = 0.0; double finaldmg = 0.0;
if (pl instanceof Player) { if (pl instanceof Player) {
Player p = (Player)pl; Player p = (Player)pl;

View File

@ -8,13 +8,19 @@ import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
public class DropRandomFirework extends Drop { public class DropRandomFirework extends Drop {
int min,max;
public DropRandomFirework(int min, int max, int weight) { public DropRandomFirework(int min, int max, int weight) {
super(min,max,weight,"Holiday Firework"); super(min,max,weight,"Holiday Firework");
this.min=min;
this.max=max;
} }
@Override @Override
public ItemStack getItemStack() { public ItemStack getItemStack() {
return ItemUtils.createRandomFirework(); ItemStack randomfirework = ItemUtils.createRandomFirework();
randomfirework.setAmount((int)(((Math.random()*(max-min))+min)));
return randomfirework;
} }
} }

View File

@ -163,7 +163,7 @@ public class EliteMonster {
} }
private void AnnounceFailedTakedown() { private void AnnounceFailedTakedown() {
if (dpslist.size()>0) { if (dpslist.size()>0 && !m.isDead()) {
Bukkit.getServer().broadcastMessage(GenericFunctions.getDisplayName(m)+" Takedown Failed..."); Bukkit.getServer().broadcastMessage(GenericFunctions.getDisplayName(m)+" Takedown Failed...");
Bukkit.getServer().broadcastMessage(ChatColor.YELLOW+"DPS Breakdown:"); Bukkit.getServer().broadcastMessage(ChatColor.YELLOW+"DPS Breakdown:");
Bukkit.getServer().broadcastMessage(generateDPSReport()); Bukkit.getServer().broadcastMessage(generateDPSReport());

View File

@ -3591,8 +3591,12 @@ public class GenericFunctions {
} }
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p); PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
pd.slayermodehp = Math.min(healdmg,p.getMaxHealth()); pd.slayermodehp = Math.min(healdmg,p.getMaxHealth());
pd.vendetta_amt=0;
pd.lastvendettastack=0;
pd.thorns_amt=0;
p.setFireTicks(0); p.setFireTicks(0);
CustomDamage.addIframe(40, p); CustomDamage.addIframe(40, p);
GenericFunctions.sendActionBarMessage(p, "");
//p.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING,20,0)); //p.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING,20,0));
//TwosideKeeper.log("Added "+20+" glowing ticks to "+p.getName()+" for reviving.",3); //TwosideKeeper.log("Added "+20+" glowing ticks to "+p.getName()+" for reviving.",3);
//p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,20,0)); //p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,20,0));

View File

@ -1,7 +1,11 @@
package sig.plugin.TwosideKeeper.HelperStructures.Utils; package sig.plugin.TwosideKeeper.HelperStructures.Utils;
import org.bukkit.Bukkit; import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import sig.plugin.TwosideKeeper.PartyManager;
import sig.plugin.TwosideKeeper.TwosideKeeper; import sig.plugin.TwosideKeeper.TwosideKeeper;
import sig.plugin.TwosideKeeper.HelperStructures.ServerType; import sig.plugin.TwosideKeeper.HelperStructures.ServerType;
@ -12,4 +16,11 @@ public class MessageUtils {
} }
Bukkit.broadcastMessage(msg); Bukkit.broadcastMessage(msg);
} }
public static void announceMessageToParty(Player p, String msg) {
List<Player> partymembers = PartyManager.getPartyMembers(p);
for (Player pl : partymembers) {
pl.sendMessage(msg);
}
}
} }

View File

@ -189,6 +189,9 @@ public class PlayerStructure {
public long lastActionBarMessageTime=0; public long lastActionBarMessageTime=0;
public long lastsantabox2; public long lastsantabox2;
public double regenpool=0; public double regenpool=0;
public boolean vacuumsuckup=true;
public boolean equipweapons=true;
public boolean equiparmor=true;
//Needs the instance of the player object to get all other info. Only to be called at the beginning. //Needs the instance of the player object to get all other info. Only to be called at the beginning.
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@ -243,6 +246,9 @@ public class PlayerStructure {
this.damagelogging=false; this.damagelogging=false;
this.isPlayingSpleef=false; this.isPlayingSpleef=false;
this.iframetime=TwosideKeeper.getServerTickTime(); this.iframetime=TwosideKeeper.getServerTickTime();
this.vacuumsuckup=true;
this.equipweapons=true;
this.equiparmor=true;
//Set defaults first, in case this is a new user. //Set defaults first, in case this is a new user.
loadConfig(); loadConfig();
p.getInventory().addItem(new ItemStack(Material.PORTAL)); p.getInventory().addItem(new ItemStack(Material.PORTAL));
@ -337,6 +343,9 @@ public class PlayerStructure {
workable.set("holidaychest3", holidaychest3); workable.set("holidaychest3", holidaychest3);
workable.set("holidaychest4", holidaychest4); workable.set("holidaychest4", holidaychest4);
workable.set("lastsantabox2", lastsantabox2); workable.set("lastsantabox2", lastsantabox2);
workable.set("vacuumsuckup", vacuumsuckup);
workable.set("equipweapons", equipweapons);
workable.set("equiparmor", equiparmor);
workable.set("playermode_on_death", playermode_on_death.name()); workable.set("playermode_on_death", playermode_on_death.name());
//ConfigurationSection deathlootlist = workable.createSection("deathloot"); //ConfigurationSection deathlootlist = workable.createSection("deathloot");
if (DeathManager.deathStructureExists(Bukkit.getPlayer(name))) { if (DeathManager.deathStructureExists(Bukkit.getPlayer(name))) {
@ -419,6 +428,9 @@ public class PlayerStructure {
workable.addDefault("holidaychest3", holidaychest3); workable.addDefault("holidaychest3", holidaychest3);
workable.addDefault("holidaychest4", holidaychest4); workable.addDefault("holidaychest4", holidaychest4);
workable.addDefault("lastsantabox2", lastsantabox2); workable.addDefault("lastsantabox2", lastsantabox2);
workable.addDefault("vacuumsuckup", vacuumsuckup);
workable.addDefault("equipweapons", equipweapons);
workable.addDefault("equiparmor", equiparmor);
workable.addDefault("playermode_on_death", playermode_on_death.name()); workable.addDefault("playermode_on_death", playermode_on_death.name());
workable.addDefault("COOLDOWN_deathmark", last_deathmark); workable.addDefault("COOLDOWN_deathmark", last_deathmark);
workable.addDefault("COOLDOWN_shovelspell", last_shovelspell); workable.addDefault("COOLDOWN_shovelspell", last_shovelspell);
@ -494,6 +506,9 @@ public class PlayerStructure {
this.last_mock = workable.getLong("COOLDOWN_lastmock"); this.last_mock = workable.getLong("COOLDOWN_lastmock");
this.lastassassinatetime = workable.getLong("COOLDOWN_lastassassinatetime"); this.lastassassinatetime = workable.getLong("COOLDOWN_lastassassinatetime");
this.lastlifesavertime = workable.getLong("COOLDOWN_lastlifesavertime"); this.lastlifesavertime = workable.getLong("COOLDOWN_lastlifesavertime");
this.vacuumsuckup = workable.getBoolean("vacuumsuckup");
this.equipweapons = workable.getBoolean("equipweapons");
this.equiparmor = workable.getBoolean("equiparmor");
if (this.hasDied) { if (this.hasDied) {
List<ItemStack> deathlootlist = new ArrayList<ItemStack>(); List<ItemStack> deathlootlist = new ArrayList<ItemStack>();

View File

@ -41,6 +41,7 @@ import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.AreaEffectCloud; import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.entity.Bat; import org.bukkit.entity.Bat;
import org.bukkit.entity.Blaze; import org.bukkit.entity.Blaze;
@ -127,6 +128,7 @@ import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerAchievementAwardedEvent; import org.bukkit.event.player.PlayerAchievementAwardedEvent;
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerExpChangeEvent;
@ -229,6 +231,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Utils.EntityUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.InventoryUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.InventoryUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils;
import sig.plugin.TwosideKeeper.HolidayEvents.Christmas; import sig.plugin.TwosideKeeper.HolidayEvents.Christmas;
@ -2023,26 +2026,26 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (CHRISTMASEVENT_ACTIVATED) { if (CHRISTMASEVENT_ACTIVATED) {
switch (InventoryUtils.onlyHoldingFiveDirtBlocks(p)) { switch (InventoryUtils.onlyHoldingFiveDirtBlocks(p)) {
case HOLDING5DIRT:{ case HOLDING5DIRT:{
Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.GREEN+"READY"+"."); MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.GREEN+"READY"+".");
}break; }break;
case NOTEMPTYINVENTORY: case NOTEMPTYINVENTORY:
Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.RED+"NOT READY"+".");
p.sendMessage(" You need to get rid of "+ChatColor.RED+"ALL ITEMS"+ChatColor.RESET+" to play."); p.sendMessage(" You need to get rid of "+ChatColor.RED+"ALL ITEMS"+ChatColor.RESET+" to play.");
break; break;
case NOTENOUGHDIRT: case NOTENOUGHDIRT:
Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.RED+"NOT READY"+".");
p.sendMessage(" You need to have exactly "+ChatColor.YELLOW+"5 DIRT BLOCKS"+ChatColor.RESET+" to play."); p.sendMessage(" You need to have exactly "+ChatColor.YELLOW+"5 DIRT BLOCKS"+ChatColor.RESET+" to play.");
break; break;
case TOOMUCHDIRT: case TOOMUCHDIRT:
Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.RED+"NOT READY"+"."); MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.RED+"NOT READY"+".");
p.sendMessage(" You need to have exactly "+ChatColor.YELLOW+"5 DIRT BLOCKS"+ChatColor.RESET+" to play."); p.sendMessage(" You need to have exactly "+ChatColor.YELLOW+"5 DIRT BLOCKS"+ChatColor.RESET+" to play.");
break; break;
} }
} else { } else {
if (args.length>0) { if (args.length>0) {
Bukkit.broadcastMessage(p.getName()+" has issued a ready check. Type "+ChatColor.YELLOW+"/ready"+ChatColor.RESET+" to announce when you are ready."); MessageUtils.announceMessageToParty(p,p.getName()+" has issued a ready check. Type "+ChatColor.YELLOW+"/ready"+ChatColor.RESET+" to announce when you are ready.");
} else { } else {
Bukkit.broadcastMessage(p.getName()+" is "+ChatColor.GREEN+"READY"+"."); MessageUtils.announceMessageToParty(p,p.getName()+" is "+ChatColor.GREEN+"READY"+".");
} }
} }
return true; return true;
@ -2063,6 +2066,27 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
Player p = (Player)sender; Player p = (Player)sender;
p.sendMessage(aPlugin.API.getHabitatMap(p, 7)); p.sendMessage(aPlugin.API.getHabitatMap(p, 7));
return true; return true;
} else
if (cmd.getName().equalsIgnoreCase("vac")) {
Player p = (Player)sender;
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
pd.vacuumsuckup=!pd.vacuumsuckup;
p.sendMessage("Vacuum Cube suction is now turned "+(pd.vacuumsuckup?ChatColor.GREEN+"ON":ChatColor.RED+"OFF")+ChatColor.RESET+".");
return true;
} else
if (cmd.getName().equalsIgnoreCase("equip_weapon")) {
Player p = (Player)sender;
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
pd.equipweapons=!pd.equipweapons;
p.sendMessage("Automatic Weapon Equipping is now turned "+(pd.equipweapons?ChatColor.GREEN+"ON":ChatColor.RED+"OFF")+ChatColor.RESET+".");
return true;
} else
if (cmd.getName().equalsIgnoreCase("equip_armor")) {
Player p = (Player)sender;
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
pd.equiparmor=!pd.equiparmor;
p.sendMessage("Automatic Armor Equipping is now turned "+(pd.equiparmor?ChatColor.GREEN+"ON":ChatColor.RED+"OFF")+ChatColor.RESET+".");
return true;
} }
} else { } else {
//Implement console/admin version later (Let's you check any name's money.) //Implement console/admin version later (Let's you check any name's money.)
@ -4865,6 +4889,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
if ((ev.getClick()==ClickType.SHIFT_LEFT || ev.getClick()==ClickType.SHIFT_RIGHT) && if ((ev.getClick()==ClickType.SHIFT_LEFT || ev.getClick()==ClickType.SHIFT_RIGHT) &&
ev.getInventory().getType()==InventoryType.CRAFTING &&
ev.getWhoClicked().getInventory().getExtraContents()[0]==null && GenericFunctions.AllowedToBeEquippedToOffHand((Player)ev.getWhoClicked(),ev.getCurrentItem(),ev.getRawSlot()) && ev.getWhoClicked().getInventory().getExtraContents()[0]==null && GenericFunctions.AllowedToBeEquippedToOffHand((Player)ev.getWhoClicked(),ev.getCurrentItem(),ev.getRawSlot()) &&
((ev.getInventory().getType()!=InventoryType.WORKBENCH && ev.getRawSlot()>=0) || ((ev.getInventory().getType()!=InventoryType.WORKBENCH && ev.getRawSlot()>=0) ||
(ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9))) { (ev.getInventory().getType()==InventoryType.WORKBENCH && ev.getRawSlot()>9))) {
@ -4907,7 +4932,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
return; return;
} }
if (ev.getClick()==ClickType.RIGHT && Artifact.isMalleableBase(ev.getCurrentItem())) { /*if (ev.getClick()==ClickType.RIGHT && Artifact.isMalleableBase(ev.getCurrentItem())) {
if (MalleableBaseQuest.getStatus(ev.getCurrentItem())==QuestStatus.UNFORMED) { if (MalleableBaseQuest.getStatus(ev.getCurrentItem())==QuestStatus.UNFORMED) {
StartMalleableBaseQuest((Player)ev.getWhoClicked()); StartMalleableBaseQuest((Player)ev.getWhoClicked());
ev.setCancelled(true); ev.setCancelled(true);
@ -4917,7 +4942,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ev.setCancelled(true); ev.setCancelled(true);
return; return;
} }
} }*/
//Left-Click for an Arrow Quiver. //Left-Click for an Arrow Quiver.
if (ev.getClick()==ClickType.LEFT && ev.getCursor()!=null && ev.getCursor().getAmount()>0 && if (ev.getClick()==ClickType.LEFT && ev.getCursor()!=null && ev.getCursor().getAmount()>0 &&
@ -5861,6 +5886,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
CustomDamage.setupTrueDamage(ev); CustomDamage.setupTrueDamage(ev);
ev.setDamage(DamageModifier.BASE, dmgdealt); ev.setDamage(DamageModifier.BASE, dmgdealt);
log("BASE damage: "+ev.getDamage(DamageModifier.BASE),5); log("BASE damage: "+ev.getDamage(DamageModifier.BASE),5);
if (ev.getEntity() instanceof ArmorStand) {
ArmorStand as = (ArmorStand)ev.getEntity();
if (as.isVisible() &&
!as.isInvulnerable()) {
as.setHealth(Math.max(as.getHealth()-dmgdealt, 0));
}
}
//Only a player can deal custom damage. //Only a player can deal custom damage.
LivingEntity l = CustomDamage.getDamagerEntity(ev.getDamager()); LivingEntity l = CustomDamage.getDamagerEntity(ev.getDamager());
if (l instanceof Player) { if (l instanceof Player) {
@ -6250,12 +6282,14 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
public void onLightningStrike(LightningStrikeEvent ev) { public void onLightningStrike(LightningStrikeEvent ev) {
LightningStrike lightning = ev.getLightning(); LightningStrike lightning = ev.getLightning();
if (!lightning.isEffect()) {
for (int i=0;i<4;i++) { for (int i=0;i<4;i++) {
Item it = lightning.getLocation().getWorld().dropItemNaturally(lightning.getLocation().add(0,2,0), Artifact.createArtifactItem(ArtifactItem.MYSTERIOUS_ESSENCE)); Item it = lightning.getLocation().getWorld().dropItemNaturally(lightning.getLocation().add(0,2,0), Artifact.createArtifactItem(ArtifactItem.MYSTERIOUS_ESSENCE));
it.setVelocity(new Vector(Math.random()*10-15,Math.random()*5,Math.random()*10-15)); it.setVelocity(new Vector(Math.random()*10-15,Math.random()*5,Math.random()*10-15));
//Make them move in a direction violently and spontaneously. //Make them move in a direction violently and spontaneously.
} }
} }
}
@EventHandler @EventHandler
public void witherBlockEatingCanceller(EntityChangeBlockEvent event) public void witherBlockEatingCanceller(EntityChangeBlockEvent event)
@ -7129,12 +7163,11 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
} }
} }
} }
@EventHandler(priority=EventPriority.LOW,ignoreCancelled = true) @EventHandler(priority=EventPriority.LOW,ignoreCancelled = true)
public void onaPluginPickupEvent(PlayerGainItemEvent ev) { public void onaPluginPickupEvent(PlayerGainItemEvent ev) {
TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 1); TwosideKeeper.log("["+TwosideKeeper.getServerTickTime()+"] PlayerGainItemEvent fired w/ "+ev.getItemStack(), 4);
Player p = ev.getPlayer(); Player p = ev.getPlayer();
ItemStack newstack = InventoryUtils.AttemptToFillPartialSlotsFirst(p,ev.getItemStack()); ItemStack newstack = InventoryUtils.AttemptToFillPartialSlotsFirst(p,ev.getItemStack());
if (newstack==null) { if (newstack==null) {
@ -7366,6 +7399,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} }
public boolean AutoEquipItem(ItemStack item, Player p) { public boolean AutoEquipItem(ItemStack item, Player p) {
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
if (item.getType().toString().contains("BOOTS") || if (item.getType().toString().contains("BOOTS") ||
item.getType().toString().contains("LEGGINGS") || item.getType().toString().contains("LEGGINGS") ||
item.getType().toString().contains("CHESTPLATE") || item.getType().toString().contains("CHESTPLATE") ||
@ -7378,7 +7412,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (armor.getType().toString().contains("BOOTS") && if (armor.getType().toString().contains("BOOTS") &&
p.getEquipment().getBoots()==null && p.getEquipment().getBoots()==null &&
(!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) &&
!PlayerMode.isSlayer(p)) { !PlayerMode.isSlayer(p) &&
pd.equiparmor) {
p.getEquipment().setBoots(armor); p.getEquipment().setBoots(armor);
p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item)));
SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor));
@ -7389,7 +7424,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (armor.getType().toString().contains("LEGGINGS") && if (armor.getType().toString().contains("LEGGINGS") &&
p.getEquipment().getLeggings()==null && p.getEquipment().getLeggings()==null &&
(!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) &&
!PlayerMode.isSlayer(p)) { !PlayerMode.isSlayer(p) &&
pd.equiparmor) {
p.getEquipment().setLeggings(armor); p.getEquipment().setLeggings(armor);
p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item)));
SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor));
@ -7400,7 +7436,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (armor.getType().toString().contains("CHESTPLATE") && if (armor.getType().toString().contains("CHESTPLATE") &&
p.getEquipment().getChestplate()==null && p.getEquipment().getChestplate()==null &&
(!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) &&
!PlayerMode.isSlayer(p)) { !PlayerMode.isSlayer(p) &&
pd.equiparmor) {
p.getEquipment().setChestplate(armor); p.getEquipment().setChestplate(armor);
p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item)));
SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor));
@ -7411,7 +7448,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (armor.getType().toString().contains("HELMET") && if (armor.getType().toString().contains("HELMET") &&
p.getEquipment().getHelmet()==null && p.getEquipment().getHelmet()==null &&
(!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) && (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) &&
!PlayerMode.isSlayer(p)) { !PlayerMode.isSlayer(p) &&
pd.equiparmor) {
p.getEquipment().setHelmet(armor); p.getEquipment().setHelmet(armor);
p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item)));
SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor));
@ -7422,7 +7460,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (armor.getType().toString().contains("SHIELD") && if (armor.getType().toString().contains("SHIELD") &&
(p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null) && (p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null) &&
!PlayerMode.isStriker(p) && !PlayerMode.isStriker(p) &&
(!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER")))) { (!PlayerMode.isRanger(p) || (armor.getType().toString().contains("LEATHER"))) &&
pd.equipweapons) {
if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) { if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) {
p.getEquipment().setItemInMainHand(armor); p.getEquipment().setItemInMainHand(armor);
} else { } else {
@ -7435,7 +7474,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
return true; return true;
} else } else
if (armor.getType().toString().contains("_AXE") && if (armor.getType().toString().contains("_AXE") &&
(p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null)) { (p.getEquipment().getItemInMainHand().getType()==Material.AIR || p.getInventory().getExtraContents()[0]==null) &&
pd.equipweapons) {
if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) { if (p.getEquipment().getItemInMainHand().getType()==Material.AIR) {
p.getEquipment().setItemInMainHand(armor); p.getEquipment().setItemInMainHand(armor);
} else { } else {
@ -7447,7 +7487,8 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
p.updateInventory(); p.updateInventory();
return true; return true;
} else } else
if (ArrowQuiver.isValidQuiver(armor) && p.getInventory().getExtraContents()[0]==null) { if (ArrowQuiver.isValidQuiver(armor) && p.getInventory().getExtraContents()[0]==null &&
pd.equipweapons) {
p.getInventory().setExtraContents(new ItemStack[]{armor}); p.getInventory().setExtraContents(new ItemStack[]{armor});
p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item))); p.sendMessage(ChatColor.DARK_AQUA+"Automatically equipped "+ChatColor.YELLOW+(item.getItemMeta().hasDisplayName()?item.getItemMeta().getDisplayName():GenericFunctions.UserFriendlyMaterialName(item)));
SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor)); SoundUtils.playLocalSound(p, Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(armor));
@ -8886,7 +8927,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (PlayerMode.isDefender(p)) { if (PlayerMode.isDefender(p)) {
hp+=10; hp+=10;
GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.REGENERATION,60,(p.isBlocking())?1:0,p,false); GenericFunctions.logAndApplyPotionEffectToEntity(PotionEffectType.REGENERATION,60,(p.isBlocking())?3:1,p,false);
} }
if (PlayerMode.isBarbarian(p)) { if (PlayerMode.isBarbarian(p)) {
double red = 1-CustomDamage.CalculateDamageReduction(1,p,null); double red = 1-CustomDamage.CalculateDamageReduction(1,p,null);
@ -9313,6 +9354,10 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
if (all || critchance>0) {receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Critical Strike Chance: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(critchance)+"%");} if (all || critchance>0) {receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Critical Strike Chance: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(critchance)+"%");}
double critdamage = CustomDamage.calculateCriticalStrikeMultiplier(p, p.getEquipment().getItemInMainHand())*100+100; double critdamage = CustomDamage.calculateCriticalStrikeMultiplier(p, p.getEquipment().getItemInMainHand())*100+100;
if (all || (critdamage>200 && critchance>0)) {receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Crit Damage: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(critdamage)+"%");} if (all || (critdamage>200 && critchance>0)) {receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Crit Damage: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(critdamage)+"%");}
double armorpen = CustomDamage.calculateArmorPen(p, 1.0, p.getEquipment().getItemInMainHand())/1.0d;
if (all || armorpen>0) {
receiver.sendMessage(ChatColor.GRAY+""+ChatColor.ITALIC+"Armor Penetration: "+ChatColor.RESET+""+ChatColor.DARK_AQUA+df.format(armorpen*100d)+"%");
}
if (PlayerMode.isDefender(p)) { if (PlayerMode.isDefender(p)) {
double dodgechance=0.0; double dodgechance=0.0;
if (!p.isBlocking()) { if (!p.isBlocking()) {

View File

@ -29,6 +29,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Common.ArrowQuiver;
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions; import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
import sig.plugin.TwosideKeeper.HolidayEvents.Christmas;
public final class TwosideKeeperAPI { public final class TwosideKeeperAPI {
//MONEY COMMANDS. //MONEY COMMANDS.
@ -101,6 +102,41 @@ public final class TwosideKeeperAPI {
return MonsterController.getLivingEntityDifficulty(m); return MonsterController.getLivingEntityDifficulty(m);
} }
//Christmas Commands.
public static ItemStack getSmallCandyItem() {
return Christmas.getSmallCandyItem();
}
public static ItemStack getLargeCandyItem() {
return Christmas.getLargeCandyItem();
}
public static ItemStack getSourCandyItem() {
return Christmas.getSourCandyItem();
}
public static ItemStack getSweetCandyItem() {
return Christmas.getSweetCandyItem();
}
public static ItemStack getMysteryFlavorLollipopItem() {
return Christmas.getMysteryFlavorLollipopItem();
}
public static ItemStack getHolidayRageCandyBarItem() {
return Christmas.getHolidayRageCandyBarItem();
}
public static ItemStack getChristmasEventToken() {
return Christmas.getChristmasEventToken();
}
public static ItemStack getFireworkShooterBox() {
return Christmas.getFireworkShooterBox();
}
public static ItemStack getRocketBoosterItem() {
return Christmas.getRocketBoosterItem();
}
public static ItemStack getSantaDimensionalBox() {
return Christmas.getSantaDimensionalBox();
}
public static ItemStack getWinterSolsticeAugury() {
return Christmas.getWinterSolsticeAugury();
}
//Artifact Commands. //Artifact Commands.
public static boolean isArtifactItem(ItemStack item) { public static boolean isArtifactItem(ItemStack item) {
return Artifact.isArtifact(item); return Artifact.isArtifact(item);

View File

@ -117,7 +117,7 @@ final class runServerHeartbeat implements Runnable {
TwosideKeeper.LASTSERVERCHECK=serverTickTime; TwosideKeeper.LASTSERVERCHECK=serverTickTime;
} }
if (Bukkit.getWorld("world").getTime()>=12000) { if (Bukkit.getWorld("world").getTime()>=12000 || Bukkit.getWorld("world").isThundering()) {
Collection<? extends Player> players = ServerHeartbeat.getServer().getOnlinePlayers(); Collection<? extends Player> players = ServerHeartbeat.getServer().getOnlinePlayers();
//Count the number of players sleeping. Compare to "sleepingplayers" count. //Count the number of players sleeping. Compare to "sleepingplayers" count.
TwosideKeeper.log("[DEBUG] Time: "+Bukkit.getWorld("world").getTime()+" Full Time: "+Bukkit.getWorld("world").getFullTime() + " SERVERTICKTIME: "+serverTickTime,4); TwosideKeeper.log("[DEBUG] Time: "+Bukkit.getWorld("world").getTime()+" Full Time: "+Bukkit.getWorld("world").getFullTime() + " SERVERTICKTIME: "+serverTickTime,4);
@ -605,6 +605,7 @@ final class runServerHeartbeat implements Runnable {
public static void runVacuumCubeSuckup(Player p) { public static void runVacuumCubeSuckup(Player p) {
if (InventoryUtils.isCarryingVacuumCube(p)) { if (InventoryUtils.isCarryingVacuumCube(p)) {
//Suck up nearby item entities. //Suck up nearby item entities.
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
List<Entity> ents = p.getNearbyEntities(6, 6, 6); List<Entity> ents = p.getNearbyEntities(6, 6, 6);
int count=0; int count=0;
for (Entity ent : ents) { for (Entity ent : ents) {
@ -658,8 +659,10 @@ final class runServerHeartbeat implements Runnable {
} }
} }
} else { } else {
if (pd.vacuumsuckup) {
ent.setVelocity(new Vector(xvel,yvel,zvel)); ent.setVelocity(new Vector(xvel,yvel,zvel));
} }
}
/*if (ent.getLocation().getX()<p.getLocation().getX()) { /*if (ent.getLocation().getX()<p.getLocation().getX()) {
ent.setVelocity(ent.getVelocity().setX(SPD*(10-Math.min(10,Math.abs())))); ent.setVelocity(ent.getVelocity().setX(SPD*(10-Math.min(10,Math.abs()))));
} else { } else {