Another WIP

This commit is contained in:
nossr50 2011-04-22 17:28:15 -07:00
parent b38dcbe785
commit d1a7e5b661
12 changed files with 328 additions and 371 deletions

View File

@ -16,7 +16,9 @@ import org.bukkit.entity.Zombie;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageByProjectileEvent; import org.bukkit.event.entity.EntityDamageByProjectileEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.config.LoadProperties;
@ -26,17 +28,19 @@ import com.gmail.nossr50.skills.Acrobatics;
import com.gmail.nossr50.skills.Axes; import com.gmail.nossr50.skills.Axes;
import com.gmail.nossr50.skills.Skills; import com.gmail.nossr50.skills.Skills;
import com.gmail.nossr50.skills.Swords; import com.gmail.nossr50.skills.Swords;
import com.gmail.nossr50.skills.Taming;
import com.gmail.nossr50.skills.Unarmed;
public class Combat { public class Combat {
private static mcMMO plugin; private static mcMMO plugin;
public Combat(mcMMO instance) { public Combat(mcMMO instance) {
plugin = instance; plugin = instance;
} }
public static void combatChecks(EntityDamageEvent event){ public static void combatChecks(EntityDamageEvent event, Plugin pluginx){
if(event.isCancelled() || event.getDamage() == 0) if(event.isCancelled() || event.getDamage() == 0)
return; return;
/* /*
* OFFENSIVE CHECKS * OFFENSIVE CHECKS FOR PLAYERS VERSUS ENTITIES
*/ */
if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Player) if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Player)
{ {
@ -45,27 +49,114 @@ public class Combat {
Player attacker = (Player)((EntityDamageByEntityEvent) event).getDamager(); Player attacker = (Player)((EntityDamageByEntityEvent) event).getDamager();
PlayerProfile PPa = Users.getProfile(attacker); PlayerProfile PPa = Users.getProfile(attacker);
//Damage modifiers
if(mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0) //Unarmed
Unarmed.unarmedBonus(attacker, eventb);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker) && PPa.getAxesInt() >= 500)
event.setDamage(event.getDamage()+4);
//If there are any abilities to activate //If there are any abilities to activate
combatAbilityChecks(attacker, PPa); combatAbilityChecks(attacker, PPa);
//Check for offensive procs
Axes.axeCriticalCheck(attacker, eventb); //Axe Criticals
if(!Config.getInstance().isBleedTracked(event.getEntity())) //Swords Bleed
Swords.bleedCheck(attacker, event.getEntity());
//Modify the event damage if Attacker is Berserk //Modify the event damage if Attacker is Berserk
if(PPa.getBerserkMode()) if(PPa.getBerserkMode())
event.setDamage(event.getDamage() + (event.getDamage() / 2)); event.setDamage(event.getDamage() + (event.getDamage() / 2));
//Handle the combat interactions between the Player and the defending entity
if(event.getEntity() instanceof Player)
playerVersusPlayerChecks(eventb, attacker);
if(event.getEntity() instanceof Animals)
playerVersusAnimalsChecks(eventb, attacker);
if(event.getEntity() instanceof Monster)
playerVersusMonsterChecks(eventb, attacker);
if(event.getEntity() instanceof Squid)
playerVersusSquidChecks(eventb, attacker);
//Handle Ability Interactions //Handle Ability Interactions
if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand())) if(PPa.getSkullSplitterMode() && m.isAxes(attacker.getItemInHand()))
Axes.applyAoeDamage(attacker, eventb); Axes.applyAoeDamage(attacker, eventb);
if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand())) if(PPa.getSerratedStrikesMode() && m.isSwords(attacker.getItemInHand()))
Swords.applySerratedStrikes(attacker, eventb); Swords.applySerratedStrikes(attacker, eventb);
//Experience
if(event.getEntity() instanceof Player)
{
Player defender = (Player)event.getEntity();
PlayerProfile PPd = Users.getProfile(defender);
if(attacker != null && defender != null && LoadProperties.pvpxp)
{
if(System.currentTimeMillis() >= PPd.getRespawnATS() + 5000 && defender.getHealth() >= 1)
{
if(m.isAxes(attacker.getItemInHand()))
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(m.isSwords(attacker.getItemInHand()))
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(attacker.getItemInHand().getTypeId() == 0)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
}
}
}
if(event.getEntity() instanceof Monster)
{
int xp = 0;
if(event.getEntity() instanceof Creeper)
xp = (event.getDamage() * 4) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof Spider)
xp = (event.getDamage() * 3) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof Skeleton)
xp = (event.getDamage() * 2) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof Zombie)
xp = (event.getDamage() * 2) * LoadProperties.xpGainMultiplier;
if(event.getEntity() instanceof PigZombie)
xp = (event.getDamage() * 3) * LoadProperties.xpGainMultiplier;
if(m.isSwords(attacker.getItemInHand()) && mcPermissions.getInstance().swords(attacker))
PPa.addSwordsXP(xp);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker))
PPa.addAxesXP(xp);
if(attacker.getItemInHand().getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker))
PPa.addUnarmedXP(xp);
}
Skills.XpCheck(attacker);
//Taming Debug Stuff
if(event.getEntity() instanceof Wolf)
{
attacker.sendMessage("mcMMO Debug: Wolf Owner Name "+Taming.getOwnerName(event.getEntity()));
event.setCancelled(true);
}
}
/*
* OFFENSIVE CHECKS FOR WOLVES VERSUS ENTITIES
*/
if(event instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) event).getDamager() instanceof Wolf){
EntityDamageByEntityEvent eventb = (EntityDamageByEntityEvent) event;
if(Taming.hasOwner(eventb.getDamager(), pluginx)){
Player master = Taming.getOwner(eventb.getDamager(), pluginx);
PlayerProfile PPo = Users.getProfile(master);
//Sharpened Claws
if(PPo.getTamingInt() >= 750)
{
event.setDamage(event.getDamage() + 2);
}
//Gore
if(Math.random() * 1000 <= PPo.getTamingInt())
{
event.setDamage(event.getDamage() * 2);
if(event.getEntity() instanceof Player)
{
Player target = (Player)event.getEntity();
target.sendMessage(ChatColor.RED+"**STRUCK BY GORE**");
Users.getProfile(target).setBleedTicks(2);
}
else
Config.getInstance().addToBleedQue(event.getEntity());
master.sendMessage(ChatColor.GREEN+"**GORE**");
}
PPo.addTamingXP(event.getDamage() * 4);
master.sendMessage("mcMMO Debug: Event Damage "+event.getDamage());
Skills.XpCheck(master);
}
} }
//Another offensive check for Archery //Another offensive check for Archery
if(event instanceof EntityDamageByProjectileEvent) if(event instanceof EntityDamageByProjectileEvent)
@ -81,6 +172,27 @@ public class Combat {
Swords.counterAttackChecks(event); Swords.counterAttackChecks(event);
Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event); Acrobatics.dodgeChecks((EntityDamageByEntityEvent)event);
} }
/*
* DEFENSIVE CHECKS FOR WOLVES
*/
if(event.getEntity() instanceof Wolf){
if(Taming.hasOwner(event.getEntity(), pluginx))
{
Player master = Taming.getOwner(event.getEntity(), pluginx);
PlayerProfile PPo = Users.getProfile(master);
//Shock-Proof
if((event.getCause() == DamageCause.ENTITY_EXPLOSION || event.getCause() == DamageCause.BLOCK_EXPLOSION) && PPo.getTamingInt() >= 500)
{
event.setDamage(event.getDamage() / 6);
}
//Thick Fur
if(PPo.getTamingInt() >= 250)
event.setDamage(event.getDamage() / 2);
master.sendMessage("mcMMO Debug: Wolf Damage Taken "+event.getDamage());
}
}
} }
public static void combatAbilityChecks(Player attacker, PlayerProfile PPa){ public static void combatAbilityChecks(Player attacker, PlayerProfile PPa){
@ -92,239 +204,6 @@ public class Combat {
if(PPa.getFistsPreparationMode()) if(PPa.getFistsPreparationMode())
Skills.berserkActivationCheck(attacker, plugin); Skills.berserkActivationCheck(attacker, plugin);
} }
public static void playerVersusPlayerChecks(EntityDamageByEntityEvent event, Player attacker){
Entity x = event.getEntity();
if(x instanceof Player){
if(LoadProperties.pvp == false){
event.setCancelled(true);
return;
}
PlayerProfile PPa = Users.getProfile(attacker);
Player defender = (Player)x;
PlayerProfile PPd = Users.getProfile(defender);
/*
* COMPATABILITY CHECKS (Stuff that wouldn't happen normally in basically...)
*/
if(Users.getProfile(defender) == null)
Users.addUser(defender);
if(attacker != null && defender != null && Users.getProfile(attacker).inParty() && Users.getProfile(defender).inParty()){
if(Party.getInstance().inSameParty(defender, attacker)){
event.setCancelled(true);
return;
}
}
/*
* AXE CRITICAL CHECK
*/
axeCriticalCheck(attacker, event, x);
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
if(defender != null && mcPermissions.getInstance().unarmed(attacker) && attacker.getItemInHand().getTypeId() == 0){
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
//PROC
if(simulateUnarmedProc(attacker)){
Location loc = defender.getLocation();
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0){
attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
ItemStack item = defender.getItemInHand();
if(item != null){
loc.getWorld().dropItemNaturally(loc, item);
ItemStack itemx = null;
defender.setItemInHand(itemx);
}
}
}
}
/*
* PVP XP
*/
if(attacker != null && defender != null && LoadProperties.pvpxp){
if(PPd.inParty() && PPa.inParty() && Party.getInstance().inSameParty(attacker, defender))
return;
if(System.currentTimeMillis() >= PPd.getRespawnATS() + 5000 && defender.getHealth() >= 1){
if(m.isAxes(attacker.getItemInHand()))
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(m.isSwords(attacker.getItemInHand()))
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
if(attacker.getItemInHand().getTypeId() == 0)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.pvpxprewardmodifier);
}
}
/*
* CHECK FOR LEVEL UPS
*/
Skills.XpCheck(attacker);
}
}
public static void playerVersusSquidChecks(EntityDamageByEntityEvent event, Player attacker){
Entity x = event.getEntity();
PlayerProfile PPa = Users.getProfile(attacker);
int type = attacker.getItemInHand().getTypeId();
if(x instanceof Squid){
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
Squid defender = (Squid)event.getEntity();
if(m.isSwords(attacker.getItemInHand()) && defender.getHealth() > 0 && mcPermissions.getInstance().swords(attacker)){
PPa.addSwordsXP(10 * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
if(m.isAxes(attacker.getItemInHand())
&& defender.getHealth() > 0
&& mcPermissions.getInstance().axes(attacker)){
PPa.addAxesXP(10 * LoadProperties.xpGainMultiplier);
Skills.XpCheck(attacker);
}
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 500){
event.setDamage(calculateDamage(event, 4));
}
}
/*
* UNARMED VS SQUID
*/
if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
if(defender.getHealth() <= 0)
return;
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
//XP
if(defender.getHealth() != 0){
PPa.addUnarmedXP(10 * LoadProperties.xpGainMultiplier);
Skills.XpCheck(attacker);
}
}
}
}
public static void playerVersusAnimalsChecks(EntityDamageByEntityEvent event, Player attacker){
int type = attacker.getItemInHand().getTypeId();
Entity x = event.getEntity();
PlayerProfile PPa = Users.getProfile(attacker);
if(x instanceof Animals){
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
Animals defender = (Animals)event.getEntity();
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(defender.getHealth() <= 0)
return;
if(PPa.getAxesInt() >= 500){
event.setDamage(calculateDamage(event, 4));
}
}
if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
}
}
}
public static void playerVersusMonsterChecks(EntityDamageByEntityEvent event, Player attacker){
Entity x = event.getEntity();
int type = attacker.getItemInHand().getTypeId();
PlayerProfile PPa = Users.getProfile(attacker);
if(x instanceof Monster){
/*
* AXE PROC CHECKS
*/
axeCriticalCheck(attacker, event, x);
if(!Config.getInstance().isBleedTracked(x)){
Swords.bleedCheck(attacker, x);
}
Monster defender = (Monster)event.getEntity();
if(m.isSwords(attacker.getItemInHand())
&& defender.getHealth() > 0
&& mcPermissions.getInstance().swords(attacker)){
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
PPa.addSwordsXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
if(x instanceof Spider)
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
if(x instanceof Skeleton)
PPa.addSwordsXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof Zombie)
PPa.addSwordsXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof PigZombie)
PPa.addSwordsXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
}
if(m.isAxes(attacker.getItemInHand())
&& defender.getHealth() > 0
&& mcPermissions.getInstance().axes(attacker)){
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
PPa.addAxesXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
if(x instanceof Spider)
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
if(x instanceof Skeleton)
PPa.addAxesXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof Zombie)
PPa.addAxesXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof PigZombie)
PPa.addAxesXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
}
/*
* AXE DAMAGE SCALING && LOOT CHECKS
*/
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 500){
event.setDamage(calculateDamage(event, 4));
}
}
if(type == 0 && mcPermissions.getInstance().unarmed(attacker)){
if(defender.getHealth() <= 0)
return;
//Bonus just for having unarmed
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(calculateDamage(event, bonus));
//XP
if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper)
PPa.addUnarmedXP((event.getDamage() * 4) * LoadProperties.xpGainMultiplier);
if(x instanceof Spider)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
if(x instanceof Skeleton)
PPa.addUnarmedXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof Zombie)
PPa.addUnarmedXP((event.getDamage() * 2) * LoadProperties.xpGainMultiplier);
if(x instanceof PigZombie)
PPa.addUnarmedXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
}
Skills.XpCheck(attacker);
}
}
}
public static void archeryCheck(EntityDamageByProjectileEvent event){ public static void archeryCheck(EntityDamageByProjectileEvent event){
Entity y = event.getDamager(); Entity y = event.getDamager();
Entity x = event.getEntity(); Entity x = event.getEntity();
@ -370,6 +249,20 @@ public class Combat {
} }
} }
} }
/*
* DAMAGE MODIFIER
*/
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(event.getDamage()+1);
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(event.getDamage()+2);
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(event.getDamage()+3);
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(event.getDamage()+4);
if(PPa.getArcheryInt() >= 1000)
event.setDamage(event.getDamage()+5);
/* /*
* IGNITION * IGNITION
*/ */
@ -403,19 +296,6 @@ public class Combat {
* Defender is Monster * Defender is Monster
*/ */
if(x instanceof Monster){ if(x instanceof Monster){
/*
* TRACK ARROWS USED AGAINST THE ENTITY
*/
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
//XP //XP
if(!Config.getInstance().isMobSpawnTracked(x)){ if(!Config.getInstance().isMobSpawnTracked(x)){
if(x instanceof Creeper) if(x instanceof Creeper)
@ -430,36 +310,6 @@ public class Combat {
PPa.addArcheryXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier); PPa.addArcheryXP((event.getDamage() * 3) * LoadProperties.xpGainMultiplier);
} }
} }
/*
* Defender is Animals
*/
if(x instanceof Animals){
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
}
/*
* Defender is Squid
*/
if(x instanceof Squid){
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
}
/* /*
* Attacker is Player * Attacker is Player
*/ */
@ -505,38 +355,10 @@ public class Combat {
defender.sendMessage(ChatColor.DARK_RED+"Touched Fuzzy. Felt Dizzy."); defender.sendMessage(ChatColor.DARK_RED+"Touched Fuzzy. Felt Dizzy.");
attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed"); attacker.sendMessage("Target was "+ChatColor.DARK_RED+"Dazed");
} }
if(PPa.getArcheryInt() >= 50 && PPa.getArcheryInt() < 250)
event.setDamage(calculateDamage(event, 1));
if(PPa.getArcheryInt() >= 250 && PPa.getArcheryInt() < 575)
event.setDamage(calculateDamage(event, 2));
if(PPa.getArcheryInt() >= 575 && PPa.getArcheryInt() < 725)
event.setDamage(calculateDamage(event, 3));
if(PPa.getArcheryInt() >= 725 && PPa.getArcheryInt() < 1000)
event.setDamage(calculateDamage(event, 4));
if(PPa.getArcheryInt() >= 1000)
event.setDamage(calculateDamage(event, 5));
} }
} }
Skills.XpCheck(attacker); Skills.XpCheck(attacker);
} }
}
public static boolean simulateUnarmedProc(Player player){
PlayerProfile PP = Users.getProfile(player);
if(PP.getUnarmedInt() >= 1000){
if(Math.random() * 4000 <= 1000){
return true;
}
} else {
if(Math.random() * 4000 <= PP.getUnarmedInt()){
return true;
}
}
return false;
}
public static int calculateDamage(EntityDamageEvent event, int dmg){
return event.getDamage() + dmg;
} }
public static void dealDamage(Entity target, int dmg){ public static void dealDamage(Entity target, int dmg){
if(target instanceof Player){ if(target instanceof Player){
@ -549,38 +371,4 @@ public class Combat {
((Monster) target).damage(dmg); ((Monster) target).damage(dmg);
} }
} }
public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Entity x){
PlayerProfile PPa = Users.getProfile(attacker);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 750){
if(Math.random() * 1000 <= 750){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
} else if(Math.random() * 1000 <= PPa.getAxesInt()){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
}
}
} }

View File

@ -38,7 +38,47 @@ public class Database {
System.out.println("VendorError: " + ex.getErrorCode()); System.out.println("VendorError: " + ex.getErrorCode());
} }
} }
//Create the DB structure
public void createStructure(){
Write("CREATE TABLE IF NOT EXISTS `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT," +
"`user` varchar(30) NOT NULL," +
"`lastlogin` int(10) unsigned NOT NULL," +
"`party` varchar(100) NOT NULL DEFAULT ''," +
"PRIMARY KEY (`id`)," +
"UNIQUE KEY `user` (`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;");
Write("CREATE TABLE IF NOT EXISTS `skills` (`user_id` int(10) unsigned NOT NULL," +
"`taming` int(10) unsigned NOT NULL DEFAULT '0'," +
"`mining` int(10) unsigned NOT NULL DEFAULT '0'," +
"`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," +
"`repair` int(10) unsigned NOT NULL DEFAULT '0'," +
"`unarmed` int(10) unsigned NOT NULL DEFAULT '0'," +
"`herbalism` int(10) unsigned NOT NULL DEFAULT '0'," +
"`excavation` int(10) unsigned NOT NULL DEFAULT '0'," +
"`archery` int(10) unsigned NOT NULL DEFAULT '0'," +
"`swords` int(10) unsigned NOT NULL DEFAULT '0'," +
"`axes` int(10) unsigned NOT NULL DEFAULT '0'," +
"`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," +
"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
Write("CREATE TABLE IF NOT EXISTS `experience` (`user_id` int(10) unsigned NOT NULL," +
"`taming` int(10) unsigned NOT NULL DEFAULT '0'," +
"`mining` int(10) unsigned NOT NULL DEFAULT '0'," +
"`woodcutting` int(10) unsigned NOT NULL DEFAULT '0'," +
"`repair` int(10) unsigned NOT NULL DEFAULT '0'," +
"`unarmed` int(10) unsigned NOT NULL DEFAULT '0'," +
"`herbalism` int(10) unsigned NOT NULL DEFAULT '0'," +
"`excavation` int(10) unsigned NOT NULL DEFAULT '0'," +
"`archery` int(10) unsigned NOT NULL DEFAULT '0'," +
"`swords` int(10) unsigned NOT NULL DEFAULT '0'," +
"`axes` int(10) unsigned NOT NULL DEFAULT '0'," +
"`acrobatics` int(10) unsigned NOT NULL DEFAULT '0'," +
"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
Write("CREATE TABLE IF NOT EXISTS `spawn` (`user_id` int(10) NOT NULL," +
"`x` int(11) NOT NULL DEFAULT '0'," +
"`y` int(11) NOT NULL DEFAULT '0'," +
"`z` int(11) NOT NULL DEFAULT '0'," +
"`world` varchar(50) NOT NULL DEFAULT ''," +
"PRIMARY KEY (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
}
// write query // write query
public boolean Write(String sql) { public boolean Write(String sql) {
try { try {

View File

@ -700,12 +700,12 @@ public class PlayerProfile
public void skillUpTaming(int newskill){ public void skillUpTaming(int newskill){
int x = 0; int x = 0;
if(taming != null){ if(taming != null){
if(isInt(taming)){ if(isInt(taming)){
x = Integer.parseInt(taming); x = Integer.parseInt(taming);
}else { }else {
taming = "0"; taming = "0";
x = Integer.parseInt(taming); x = Integer.parseInt(taming);
} }
} }
x += newskill; x += newskill;
taming = Integer.toString(x); taming = Integer.toString(x);
@ -1053,7 +1053,7 @@ public class PlayerProfile
x = Integer.parseInt(tamingXP); x = Integer.parseInt(tamingXP);
} }
x += newXP; x += newXP;
acrobaticsXP = String.valueOf(x); tamingXP = String.valueOf(x);
save(); save();
} }
public void addAcrobaticsXP(int newXP) public void addAcrobaticsXP(int newXP)

View File

@ -26,7 +26,6 @@ public class m {
* I'm storing my functions/methods in here in an unorganized manner. Spheal with it. * I'm storing my functions/methods in here in an unorganized manner. Spheal with it.
*/ */
private static mcMMO plugin; private static mcMMO plugin;
private static mcMMO pluginx;
public m(mcMMO instance) { public m(mcMMO instance) {
plugin = instance; plugin = instance;
} }
@ -172,7 +171,6 @@ public class m {
for (int cy = -radius; cy <= radius; cy++) { for (int cy = -radius; cy <= radius; cy++) {
for (int cz = -radius; cz <= radius; cz++) { for (int cz = -radius; cz <= radius; cz++) {
Block block = loc.getWorld().getBlockAt(ox + cx, oy + cy, oz + cz); Block block = loc.getWorld().getBlockAt(ox + cx, oy + cy, oz + cz);
//If block is block
if (block.getTypeId() == typeid) { if (block.getTypeId() == typeid) {
return true; return true;
} }
@ -181,6 +179,7 @@ public class m {
} }
return false; return false;
} }
public static boolean isPvpEnabled(){ public static boolean isPvpEnabled(){
String propertyName = "pvp"; String propertyName = "pvp";
FileReader fr = null; FileReader fr = null;
@ -304,6 +303,35 @@ public class m {
} }
public static void mmoHelpCheck(String[] split, Player player, PlayerChatEvent event){ public static void mmoHelpCheck(String[] split, Player player, PlayerChatEvent event){
PlayerProfile PP = Users.getProfile(player); PlayerProfile PP = Users.getProfile(player);
if(split[0].equalsIgnoreCase("/taming")){
event.setCancelled(true);
float skillvalue = (float)PP.getTamingInt();
String percentage = String.valueOf((skillvalue / 1000) * 100);
player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"TAMING"+ChatColor.RED+"[]-----");
player.sendMessage(ChatColor.DARK_GRAY+"XP GAIN: "+ChatColor.WHITE+"Fighting with your wolves");
player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"EFFECTS"+ChatColor.RED+"[]---");
//player.sendMessage(ChatColor.DARK_AQUA+"Tree Feller (ABILITY): "+ChatColor.GREEN+"Make trees explode");
player.sendMessage(ChatColor.DARK_AQUA+"Gore: "+ChatColor.YELLOW+ChatColor.GREEN+"Critical Strike that applies Bleed");
player.sendMessage(ChatColor.DARK_AQUA+"Sharpened Claws: "+ChatColor.YELLOW+ChatColor.GREEN+"Damage Bonus");
player.sendMessage(ChatColor.DARK_AQUA+"Thick Fur: "+ChatColor.YELLOW+ChatColor.GREEN+"Damage Reduction");
player.sendMessage(ChatColor.DARK_AQUA+"Shock Proof: "+ChatColor.YELLOW+ChatColor.GREEN+"Explosive Damage Reduction");
player.sendMessage(ChatColor.RED+"---[]"+ChatColor.GREEN+"YOUR STATS"+ChatColor.RED+"[]---");
if(PP.getTamingInt() < 250)
player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 250+ SKILL (THICK FUR)");
else
player.sendMessage(ChatColor.RED+"Thick Fur: "+ChatColor.YELLOW+"Halved Damage");
if(PP.getTamingInt() < 500)
player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 500+ SKILL (SHOCK PROOF)");
else
player.sendMessage(ChatColor.RED+"Shock Proof: "+ChatColor.YELLOW+"Explosives do 1/6 normal damage");
if(PP.getTamingInt() < 750)
player.sendMessage(ChatColor.GRAY+"LOCKED UNTIL 750+ SKILL (SHARPENED CLAWS)");
else
player.sendMessage(ChatColor.RED+"Sharpened Claws: "+ChatColor.YELLOW+"+2 Damage");
player.sendMessage(ChatColor.RED+"Gore Chance: "+ChatColor.YELLOW+percentage+"%");
//player.sendMessage(ChatColor.RED+"Tree Feller Length: "+ChatColor.YELLOW+ticks+"s");
}
if(split[0].equalsIgnoreCase("/woodcutting")){ if(split[0].equalsIgnoreCase("/woodcutting")){
event.setCancelled(true); event.setCancelled(true);
float skillvalue = (float)PP.getWoodCuttingInt(); float skillvalue = (float)PP.getWoodCuttingInt();

View File

@ -99,7 +99,7 @@ public class mcEntityListener extends EntityListener {
if(Party.getInstance().inSameParty(defender, attacker)) if(Party.getInstance().inSameParty(defender, attacker))
event.setCancelled(true); event.setCancelled(true);
} }
Combat.combatChecks(event); Combat.combatChecks(event, plugin);
} }
/* /*
* Check to see if the defender took damage so we can apply recently hurt * Check to see if the defender took damage so we can apply recently hurt

View File

@ -101,6 +101,7 @@ public class mcMMO extends JavaPlugin {
PluginDescriptionFile pdfFile = this.getDescription(); PluginDescriptionFile pdfFile = this.getDescription();
mcPermissions.initialize(getServer()); mcPermissions.initialize(getServer());
mcLoadMySQL(); mcLoadMySQL();
database.createStructure(); //Make Structure
Leaderboard.makeLeaderboards(); //Make the leaderboards Leaderboard.makeLeaderboards(); //Make the leaderboards
System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" ); System.out.println( pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );

View File

@ -7,7 +7,9 @@ import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
@ -26,6 +28,7 @@ import com.gmail.nossr50.party.Party;
import com.gmail.nossr50.skills.Herbalism; import com.gmail.nossr50.skills.Herbalism;
import com.gmail.nossr50.skills.Repair; import com.gmail.nossr50.skills.Repair;
import com.gmail.nossr50.skills.Skills; import com.gmail.nossr50.skills.Skills;
import com.gmail.nossr50.skills.Taming;
public class mcPlayerListener extends PlayerListener { public class mcPlayerListener extends PlayerListener {
@ -82,7 +85,6 @@ public class mcPlayerListener extends PlayerListener {
if(mcPermissions.getInstance().motd(player)){ if(mcPermissions.getInstance().motd(player)){
player.sendMessage(ChatColor.BLUE +"This server is running MMO "+plugin.getDescription().getVersion()+" type /"+ChatColor.YELLOW+LoadProperties.mcmmo+ChatColor.BLUE+ " for help."); player.sendMessage(ChatColor.BLUE +"This server is running MMO "+plugin.getDescription().getVersion()+" type /"+ChatColor.YELLOW+LoadProperties.mcmmo+ChatColor.BLUE+ " for help.");
player.sendMessage(ChatColor.GREEN+"http://mmo.wikia.com"+ChatColor.BLUE+" - MMO Wiki"); player.sendMessage(ChatColor.GREEN+"http://mmo.wikia.com"+ChatColor.BLUE+" - MMO Wiki");
player.sendMessage(ChatColor.DARK_RED+"ATTN: YOUR STATS WILL BE BACK TO NORMAL SHORTLY, WE ARE USING MySQL NOW AND I HAVE TO WRITE A MYSQL QUERY TO UPDATE YOUR STATS!");
} }
} }
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
@ -91,6 +93,14 @@ public class mcPlayerListener extends PlayerListener {
Action action = event.getAction(); Action action = event.getAction();
Block block = event.getClickedBlock(); Block block = event.getClickedBlock();
//Archery Nerf //Archery Nerf
if(action == Action.LEFT_CLICK_AIR)
{
if(player.getItemInHand().getTypeId() == 352)
{
Block targetBlock = player.getTargetBlock(null, 20);
player.sendMessage("Target Block TypeID = "+targetBlock.getTypeId());
}
}
if(player.getItemInHand().getTypeId() == 261 && LoadProperties.archeryFireRateLimit){ if(player.getItemInHand().getTypeId() == 261 && LoadProperties.archeryFireRateLimit){
if(System.currentTimeMillis() < PP.getArcheryShotATS() + 1000){ if(System.currentTimeMillis() < PP.getArcheryShotATS() + 1000){
/* /*

View File

@ -8,10 +8,46 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import com.gmail.nossr50.Users;
import com.gmail.nossr50.m; import com.gmail.nossr50.m;
import com.gmail.nossr50.mcPermissions;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.party.Party; import com.gmail.nossr50.party.Party;
public class Axes { public class Axes {
public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event){
Entity x = event.getEntity();
PlayerProfile PPa = Users.getProfile(attacker);
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
if(PPa.getAxesInt() >= 750){
if(Math.random() * 1000 <= 750){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
} else if(Math.random() * 1000 <= PPa.getAxesInt()){
if(x instanceof Player){
Player player = (Player)x;
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
}
if(x instanceof Player){
event.setDamage(event.getDamage() * 2 - event.getDamage() / 2);
} else {
event.setDamage(event.getDamage() * 2);
}
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
}
}
}
public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event){ public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event){
int targets = 0; int targets = 0;
Entity x = event.getEntity(); Entity x = event.getEntity();

View File

@ -121,6 +121,8 @@ public class Swords {
{ {
Player defender = (Player)event.getEntity(); Player defender = (Player)event.getEntity();
PlayerProfile PPd = Users.getProfile(defender); PlayerProfile PPd = Users.getProfile(defender);
if(m.isSwords(defender.getItemInHand())&& mcPermissions.getInstance().swords(defender))
{
if(PPd.getSwordsInt() >= 600) if(PPd.getSwordsInt() >= 600)
{ {
if(Math.random() * 2000 <= 600) if(Math.random() * 2000 <= 600)
@ -138,6 +140,7 @@ public class Swords {
if(f instanceof Player) if(f instanceof Player)
((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
} }
}
} }
} }
} }

View File

@ -12,7 +12,7 @@ public class Taming {
CraftWolf cWolf = (CraftWolf)theWolf; CraftWolf cWolf = (CraftWolf)theWolf;
EntityWolf eWolf = (EntityWolf)cWolf.getHandle(); EntityWolf eWolf = (EntityWolf)cWolf.getHandle();
String playerName = eWolf.v(); String playerName = eWolf.x();
return playerName; return playerName;
} }
public static boolean hasOwner(Entity theWolf, Plugin pluginx){ public static boolean hasOwner(Entity theWolf, Plugin pluginx){
@ -23,7 +23,7 @@ public class Taming {
} }
return false; return false;
} }
public Player getOwner(Entity theWolf, Plugin pluginx){ public static Player getOwner(Entity theWolf, Plugin pluginx){
for(Player x : pluginx.getServer().getOnlinePlayers()){ for(Player x : pluginx.getServer().getOnlinePlayers()){
if(x != null && x.getName().equals(getOwnerName(theWolf))){ if(x != null && x.getName().equals(getOwnerName(theWolf))){
return x; return x;
@ -31,8 +31,4 @@ public class Taming {
} }
return null; return null;
} }
public static Taming getInstance() {
// TODO Auto-generated method stub
return null;
}
} }

View File

@ -1,5 +1,60 @@
package com.gmail.nossr50.skills; package com.gmail.nossr50.skills;
public class Unarmed { import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.Users;
import com.gmail.nossr50.datatypes.PlayerProfile;
public class Unarmed {
public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
{
PlayerProfile PPa = Users.getProfile(attacker);
int bonus = 2;
if (PPa.getUnarmedInt() >= 250)
bonus++;
if (PPa.getUnarmedInt() >= 500)
bonus++;
event.setDamage(event.getDamage()+bonus);
}
public static void disarmProcCheck(Player attacker, Player defender)
{
PlayerProfile PP = Users.getProfile(attacker);
if(PP.getUnarmedInt() >= 1000){
if(Math.random() * 4000 <= 1000){
Location loc = defender.getLocation();
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
{
attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
ItemStack item = defender.getItemInHand();
if(item != null)
{
loc.getWorld().dropItemNaturally(loc, item);
ItemStack itemx = null;
defender.setItemInHand(itemx);
}
}
}
} else {
if(Math.random() * 4000 <= PP.getUnarmedInt()){
Location loc = defender.getLocation();
if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0)
{
attacker.sendMessage(ChatColor.DARK_RED+"You have hit with great force.");
defender.sendMessage(ChatColor.DARK_RED+"You have been disarmed!");
ItemStack item = defender.getItemInHand();
if(item != null)
{
loc.getWorld().dropItemNaturally(loc, item);
ItemStack itemx = null;
defender.setItemInHand(itemx);
}
}
}
}
}
} }