use of com.solinia.solinia.Interfaces.ISoliniaLivingEntity in project solinia3-core by mixxit.
the class SoliniaPlayer method increasePlayerMana.
@Override
public void increasePlayerMana(int mana) {
int currentmana = getMana();
int maxmp = 1;
try {
ISoliniaLivingEntity solentity = SoliniaLivingEntityAdapter.Adapt(this.getBukkitPlayer());
maxmp = solentity.getMaxMP();
} catch (CoreStateInitException e) {
// do nothing
}
if ((currentmana + mana) > maxmp) {
currentmana = maxmp;
} else {
currentmana = currentmana + mana;
}
setMana(currentmana);
}
use of com.solinia.solinia.Interfaces.ISoliniaLivingEntity in project solinia3-core by mixxit.
the class SoliniaPlayer method doCastSpellItem.
@Override
public void doCastSpellItem(Plugin plugin, ISoliniaSpell spell, Player player, ISoliniaItem spellSourceItem) {
if (spell.isAASpell()) {
player.sendMessage("You require the correct AA to use this spell");
return;
}
if (spell.getAllowedClasses().size() > 0) {
if (getClassObj() == null) {
player.sendMessage(ChatColor.GRAY + " * This item cannot be used by your profession");
return;
}
boolean foundprofession = false;
String professions = "";
int foundlevel = 0;
for (SoliniaSpellClass spellclass : spell.getAllowedClasses()) {
if (spellclass.getClassname().toUpperCase().equals(getClassObj().getName().toUpperCase())) {
foundprofession = true;
foundlevel = spellclass.getMinlevel();
break;
}
professions += spellclass.getClassname() + " ";
}
if (foundprofession == false) {
player.sendMessage(ChatColor.GRAY + " * This item can only be used by " + professions);
return;
} else {
if (foundlevel > 0) {
Double level = (double) getLevel();
if (level < foundlevel) {
player.sendMessage(ChatColor.GRAY + " * This item requires level " + foundlevel);
return;
}
}
}
}
try {
ISoliniaLivingEntity solentity = SoliniaLivingEntityAdapter.Adapt((LivingEntity) player);
if (solentity == null)
return;
if (spell.getActSpellCost(solentity) > SoliniaPlayerAdapter.Adapt(player).getMana()) {
player.sendMessage(ChatColor.GRAY + "Insufficient Mana [E] (Hold crouch or use /trance to meditate)");
return;
}
if (!checkDoesntFizzle(spell)) {
emote("* " + getFullName() + "'s spell fizzles");
SoliniaPlayerAdapter.Adapt(player).reducePlayerMana(spell.getActSpellCost(solentity));
return;
}
} catch (CoreStateInitException e) {
return;
}
// Reroute action depending on target
LivingEntity targetmob = Utils.getTargettedLivingEntity(player, spell.getRange());
try {
if (targetmob != null) {
boolean success = spellSourceItem.useItemOnEntity(plugin, player, targetmob, false);
if (success == true) {
tryIncreaseSkill(Utils.getSkillType(spell.getSkill()).name().toUpperCase(), 1);
}
return;
} else {
boolean success = spellSourceItem.useItemOnEntity(plugin, player, player, false);
if (success == true) {
tryIncreaseSkill(Utils.getSkillType(spell.getSkill()).name().toUpperCase(), 1);
}
return;
}
} catch (CoreStateInitException e) {
return;
}
}
use of com.solinia.solinia.Interfaces.ISoliniaLivingEntity in project solinia3-core by mixxit.
the class SoliniaPlayer method checkDoesntFizzle.
@Override
public boolean checkDoesntFizzle(ISoliniaSpell spell) {
if (getBukkitPlayer().isOp())
return true;
// todo fizzle free features
int no_fizzle_level = 0;
ISoliniaAAAbility aa = null;
int rank = 0;
try {
aa = StateManager.getInstance().getConfigurationManager().getFirstAAAbilityBySysname("SPELLCASTINGEXPERTISE");
} catch (CoreStateInitException e) {
}
if (aa != null) {
rank = Utils.getRankOfAAAbility(getBukkitPlayer(), aa);
switch(rank) {
case 1:
no_fizzle_level = 20;
break;
case 2:
no_fizzle_level += 35;
break;
case 3:
no_fizzle_level += 52;
break;
}
}
if (spell.getMinLevelClass(getClassObj().getName()) < no_fizzle_level) {
return true;
}
try {
ISoliniaLivingEntity entity = SoliniaLivingEntityAdapter.Adapt(getBukkitPlayer());
if (entity == null)
return false;
if (getClassObj() == null)
return false;
// TODO item/aa/spells fizzle bonus
int par_skill = 0;
int act_skill = 0;
int minLevel = 0;
for (SoliniaSpellClass spellClass : spell.getAllowedClasses()) {
if (!spellClass.getClassname().toUpperCase().equals(getClassObj().getName().toUpperCase()))
continue;
minLevel = spellClass.getMinlevel();
break;
}
par_skill = minLevel * 5 - 10;
if (par_skill > 235)
par_skill = 235;
par_skill += minLevel;
SoliniaPlayerSkill playerSkill = getSkill(Utils.getSkillType(spell.getSkill()).name().toUpperCase());
if (playerSkill != null)
act_skill = playerSkill.getValue();
act_skill += getLevel();
// todo: spell specialisation
int specialisation = 0;
float diff = par_skill + (float) (spell.getBasediff()) - act_skill;
if (getClassObj().getName().equals("BARD")) {
diff -= (entity.getCharisma() - 110) / 20.0;
} else if (Utils.getCasterClass(getClassObj().getName().toUpperCase()).equals("W")) {
diff -= (entity.getWisdom() - 125) / 20.0;
} else if (Utils.getCasterClass(getClassObj().getName().toUpperCase()).equals("I")) {
diff -= (entity.getIntelligence() - 125) / 20.0;
}
float basefizzle = 10;
float fizzlechance = (float) (basefizzle - specialisation + diff / 5.0);
// always at least 1% chance to fail or 5% to succeed
fizzlechance = fizzlechance < 1 ? 1 : (fizzlechance > 95 ? 95 : fizzlechance);
float fizzle_roll = Utils.RandomBetween(0, 100);
// fizzlechance);
if (fizzle_roll > fizzlechance)
return true;
} catch (CoreStateInitException e) {
return false;
}
return false;
}
use of com.solinia.solinia.Interfaces.ISoliniaLivingEntity in project solinia3-core by mixxit.
the class CommandAA method onCommand.
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Player))
return false;
Player player = (Player) sender;
try {
ISoliniaPlayer solplayer = SoliniaPlayerAdapter.Adapt(player);
player.sendMessage("Current AA Points: " + solplayer.getAAPoints());
if (args.length < 1) {
player.sendMessage(ChatColor.GRAY + "Insufficient arguments (list,buy)");
return true;
}
switch(args[0]) {
case "list":
int pageno = 1;
if (args.length > 1)
pageno = Integer.parseInt(args[1]);
pageno = pageno - 1;
int sizePerPage = 8;
List<ISoliniaAARank> fullaaranks = solplayer.getBuyableAARanks();
List<ISoliniaAARank> aaranks = fullaaranks.stream().skip(pageno * sizePerPage).limit(sizePerPage).collect(Collectors.toCollection(ArrayList::new));
for (ISoliniaAARank aarank : aaranks) {
ISoliniaAAAbility aaAbility = StateManager.getInstance().getConfigurationManager().getAAAbility(aarank.getAbilityid());
if (aaAbility != null)
if (!aaAbility.isEnabled())
continue;
if (aarank.getCost() <= solplayer.getAAPoints()) {
if (solplayer.canPurchaseAlternateAdvancementRank(aaAbility, aarank)) {
TextComponent tc = new TextComponent();
tc.setText(ChatColor.LIGHT_PURPLE + aaAbility.getName() + " Rank " + aarank.getPosition() + ChatColor.RESET + " Cost: " + ChatColor.YELLOW + aarank.getCost() + ChatColor.RESET + " AA points /aa buy " + aarank.getId());
String details = ChatColor.GOLD + aaAbility.getName() + " Rank: " + aarank.getPosition() + ChatColor.RESET + "\n" + aarank.getDescription() + ChatColor.RESET;
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(details).create()));
sender.spigot().sendMessage(tc);
} else {
TextComponent tc = new TextComponent();
tc.setText(ChatColor.GRAY + "[NB] " + aaAbility.getName() + " Rank " + aarank.getPosition() + ChatColor.GRAY + " Cost: " + ChatColor.GRAY + aarank.getCost() + ChatColor.GRAY + " Cannot purchase yet");
String details = ChatColor.GOLD + aaAbility.getName() + " Rank: " + aarank.getPosition() + ChatColor.RESET + "\n" + aarank.getDescription() + ChatColor.RESET;
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(details).create()));
sender.spigot().sendMessage(tc);
}
} else {
TextComponent tc = new TextComponent();
tc.setText(ChatColor.GRAY + "[NA] " + aaAbility.getName() + " Rank " + aarank.getPosition() + ChatColor.GRAY + " Cost: " + ChatColor.RED + aarank.getCost() + ChatColor.GRAY + " Insufficient AA points");
String details = ChatColor.GOLD + aaAbility.getName() + " Rank: " + aarank.getPosition() + ChatColor.RESET + "\n" + aarank.getDescription() + ChatColor.RESET;
tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(details).create()));
sender.spigot().sendMessage(tc);
}
}
player.sendMessage("Displayed Page " + ChatColor.GOLD + (pageno + 1) + ChatColor.RESET + "/" + ChatColor.GOLD + Math.ceil((float) fullaaranks.size() / (float) sizePerPage) + ChatColor.RESET + " (See /aa list <pageno>");
player.sendMessage("More items may appear when you have more AA points available to spend");
break;
case "give":
if (args.length < 3) {
player.sendMessage("That is not a valid player name and amount /aa give playername amount");
return true;
}
if (!player.isOp()) {
player.sendMessage("Op only command");
return true;
}
Player targetplayer = Bukkit.getPlayer(args[1]);
if (targetplayer == null) {
player.sendMessage("Cannot find player");
return true;
}
int newpoints = Integer.parseInt(args[2]);
if (newpoints < 1) {
player.sendMessage("Too few points never give them less than 1");
return true;
}
if (newpoints > 5) {
player.sendMessage("Too many points man.... never give them more than 5, its supposed to be hard to achieve");
return true;
}
ISoliniaPlayer targetsolplayer = SoliniaPlayerAdapter.Adapt(targetplayer);
targetsolplayer.setAAPoints(targetsolplayer.getAAPoints() + newpoints);
player.sendMessage("* Granted player " + newpoints + " aa points");
targetplayer.sendMessage("* You have been granted " + newpoints + " AA points by Operator " + player.getName());
break;
case "buy":
if (args.length < 2) {
player.sendMessage("That is not a valid AA rank id - /aa buy aaabilityrankid (see /aa list)");
return true;
}
int seekRankId = Integer.parseInt(args[1].toUpperCase());
ISoliniaAARank aarank = StateManager.getInstance().getConfigurationManager().getAARank(seekRankId);
if (aarank == null) {
player.sendMessage("That is not a valid AA rank id - /aa buy aaabilityrankid (see /aa list)");
return true;
}
ISoliniaAAAbility aa = StateManager.getInstance().getConfigurationManager().getAAAbility(aarank.getAbilityid());
if (aa == null) {
player.sendMessage("That is not a valid AA rank id - /aa buy aaabilityrankid (see /aa list)");
return true;
}
if (!solplayer.canPurchaseAlternateAdvancementRank(aa, aarank)) {
player.sendMessage("You cannot buy that AA");
return true;
}
solplayer.purchaseAlternateAdvancementRank(aa, aarank);
try {
ISoliniaLivingEntity solentity = SoliniaLivingEntityAdapter.Adapt(player);
if (player.getMaxHealth() < solentity.getMaxHP()) {
solplayer.updateMaxHp();
}
} catch (CoreStateInitException e) {
}
return true;
default:
player.sendMessage(ChatColor.GRAY + "Invalid arguments (list,buy)");
return true;
}
} catch (CoreStateInitException e) {
}
return true;
}
use of com.solinia.solinia.Interfaces.ISoliniaLivingEntity in project solinia3-core by mixxit.
the class SoliniaItem method useItemOnBlock.
@Override
public boolean useItemOnBlock(Player player, ISoliniaItem item, Block clickedBlock, boolean isConsumable) throws CoreStateInitException {
ISoliniaSpell spell = StateManager.getInstance().getConfigurationManager().getSpell(item.getAbilityid());
if (spell == null) {
return false;
}
ISoliniaLivingEntity solentity = SoliniaLivingEntityAdapter.Adapt((LivingEntity) player);
if (solentity == null)
return false;
if (!isConsumable)
if (spell.getActSpellCost(solentity) > SoliniaPlayerAdapter.Adapt(player).getMana()) {
player.sendMessage(ChatColor.GRAY + "Insufficient Mana [E] (Hold crouch or use /trance to meditate)");
return false;
}
boolean itemUseSuccess = false;
itemUseSuccess = spell.tryApplyOnBlock(player, clickedBlock);
if (itemUseSuccess) {
SoliniaPlayerAdapter.Adapt(player).reducePlayerMana(spell.getActSpellCost(solentity));
}
return itemUseSuccess;
}
Aggregations