From 5b3933e90bbd08214f83d5ee9ea9a819b201cff4 Mon Sep 17 00:00:00 2001 From: Skyler Manzanares Date: Sun, 31 Jul 2016 18:28:43 -0600 Subject: [PATCH] Lots of in place bug fixes during official playtesting and debugging --- .../questmanager/QuestManagerPlugin.java | 10 +- .../magic/spell/effect/DamageEffect.java | 4 +- .../magic/spell/effect/FireEffect.java | 2 +- .../magic/spell/effect/StatusEffect.java | 7 +- .../questmanager/player/PlayerOptions.java | 4 +- .../questmanager/player/skill/FoodItem.java | 4 + .../questmanager/player/skill/Skill.java | 1 + .../player/skill/defaults/CookingSkill.java | 11 +- .../questmanager/player/utils/QuestLog.java | 4 + .../questmanager/ui/menu/InventoryMenu.java | 8 +- .../ui/menu/action/ForgeAction.java | 4 +- .../ui/menu/action/PurchaseAction.java | 3 +- .../ui/menu/action/PurchaseSpellAction.java | 3 +- .../ui/menu/action/ShowSpellsMenuAction.java | 154 ++++++++++++++++++ .../ui/menu/inventory/BasicInventory.java | 3 +- .../menu/inventory/ContributionInventory.java | 3 +- .../ui/menu/inventory/GuiInventory.java | 4 +- .../ui/menu/inventory/ServiceInventory.java | 3 +- .../ui/menu/inventory/ShopInventory.java | 3 +- .../ui/menu/inventory/ShopItem.java | 2 +- .../inventory/minigames/CombiningGui.java | 3 +- .../menu/inventory/minigames/CookingGui.java | 26 ++- .../inventory/minigames/FashioningGui.java | 3 +- .../menu/inventory/minigames/FishingGui.java | 3 +- .../menu/inventory/minigames/MiningGui.java | 3 +- .../menu/inventory/minigames/SmeltingGui.java | 3 +- 26 files changed, 248 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/skyisland/questmanager/ui/menu/action/ShowSpellsMenuAction.java diff --git a/src/main/java/com/skyisland/questmanager/QuestManagerPlugin.java b/src/main/java/com/skyisland/questmanager/QuestManagerPlugin.java index 1604a5b2..50f4d009 100644 --- a/src/main/java/com/skyisland/questmanager/QuestManagerPlugin.java +++ b/src/main/java/com/skyisland/questmanager/QuestManagerPlugin.java @@ -138,6 +138,7 @@ import com.skyisland.questmanager.ui.menu.action.PartyInviteAction; import com.skyisland.questmanager.ui.menu.action.ShowSkillMenuAction; import com.skyisland.questmanager.ui.menu.action.ShowSkillRecipesAction; +import com.skyisland.questmanager.ui.menu.action.ShowSpellsMenuAction; import com.skyisland.questmanager.ui.menu.inventory.ServiceInventory; import com.skyisland.questmanager.ui.menu.inventory.ShopInventory; import com.skyisland.questmanager.ui.menu.message.BioptionMessage; @@ -375,7 +376,10 @@ public void onDisable() { //unregister our scheduler Bukkit.getScheduler().cancelTasks(this); - playerManager.getParties().forEach(Party::disband); + //playerManager.getParties().forEach(Party::disband); + while (!playerManager.getParties().isEmpty()) { + playerManager.getParties().iterator().next().disband(); + } //save user database playerManager.save(new File(getDataFolder(), playerConfigFileName)); @@ -828,6 +832,10 @@ public boolean onCommand(CommandSender sender, Command cmd, String label, String return true; } + if (args[0].equals("spells")) { + new ShowSpellsMenuAction(qp).onAction(); + } + if (args[0].equals("recipe")) { String skillName = args[1]; diff --git a/src/main/java/com/skyisland/questmanager/magic/spell/effect/DamageEffect.java b/src/main/java/com/skyisland/questmanager/magic/spell/effect/DamageEffect.java index 413f819e..510aaef7 100644 --- a/src/main/java/com/skyisland/questmanager/magic/spell/effect/DamageEffect.java +++ b/src/main/java/com/skyisland/questmanager/magic/spell/effect/DamageEffect.java @@ -130,14 +130,14 @@ public void apply(Entity e, MagicUser cause) { targ.damage(curDamage, cause.getEntity()); // targ.damage(0.0, cause.getEntity()); // targ.setHealth(Math.max(0.0, Math.min(targ.getMaxHealth(), targ.getHealth() - curDamage))); - targ.setMetadata(DAMAGE_META_KEY, new FixedMetadataValue - (QuestManagerPlugin.questManagerPlugin, true)); //make sure they didn't invincible their way out damage if (invi && Math.abs(snapshot - targ.getHealth()) < .0001) { //targ.setHealth(targ.getHealth() - curDamage); targ.setHealth(Math.max(0.0, Math.min(targ.getMaxHealth(), targ.getHealth() - curDamage))); } + targ.setMetadata(DAMAGE_META_KEY, new FixedMetadataValue + (QuestManagerPlugin.questManagerPlugin, false)); if (cause instanceof QuestPlayer) { QuestPlayer qp = (QuestPlayer) cause; diff --git a/src/main/java/com/skyisland/questmanager/magic/spell/effect/FireEffect.java b/src/main/java/com/skyisland/questmanager/magic/spell/effect/FireEffect.java index abf0ac50..0574158f 100644 --- a/src/main/java/com/skyisland/questmanager/magic/spell/effect/FireEffect.java +++ b/src/main/java/com/skyisland/questmanager/magic/spell/effect/FireEffect.java @@ -100,7 +100,7 @@ public void apply(Entity e, MagicUser cause) { (QuestManagerPlugin.questManagerPlugin, true)); targ.damage(0.0, cause.getEntity()); targ.setMetadata(DamageEffect.DAMAGE_META_KEY, new FixedMetadataValue - (QuestManagerPlugin.questManagerPlugin, true)); + (QuestManagerPlugin.questManagerPlugin, false)); } } diff --git a/src/main/java/com/skyisland/questmanager/magic/spell/effect/StatusEffect.java b/src/main/java/com/skyisland/questmanager/magic/spell/effect/StatusEffect.java index ba12b23c..035c6390 100644 --- a/src/main/java/com/skyisland/questmanager/magic/spell/effect/StatusEffect.java +++ b/src/main/java/com/skyisland/questmanager/magic/spell/effect/StatusEffect.java @@ -119,10 +119,13 @@ public void apply(Entity e, MagicUser cause) { msg = ChatColor.DARK_GRAY + "You gained the effect "; } else { String name = cause.getEntity().getCustomName(); + if (cause.getEntity() instanceof Player) { + name = ((Player) cause.getEntity()).getName(); + } if (name == null) { name = cause.getEntity().getType().toString(); } - msg = ChatColor.GRAY + cause.getEntity().getCustomName() + ChatColor.DARK_GRAY + msg = ChatColor.GRAY + name + ChatColor.DARK_GRAY + " gave you the effect "; } @@ -144,7 +147,7 @@ public void apply(Entity e, MagicUser cause) { (QuestManagerPlugin.questManagerPlugin, true)); targ.damage(0.0, cause.getEntity()); targ.setMetadata(DamageEffect.DAMAGE_META_KEY, new FixedMetadataValue - (QuestManagerPlugin.questManagerPlugin, true)); + (QuestManagerPlugin.questManagerPlugin, false)); } } diff --git a/src/main/java/com/skyisland/questmanager/player/PlayerOptions.java b/src/main/java/com/skyisland/questmanager/player/PlayerOptions.java index 455f73c3..ec07c442 100644 --- a/src/main/java/com/skyisland/questmanager/player/PlayerOptions.java +++ b/src/main/java/com/skyisland/questmanager/player/PlayerOptions.java @@ -49,7 +49,9 @@ public enum Key { SKILL_LIST("skill.inLog", new ItemStack(Material.WRITTEN_BOOK), Lists.newArrayList("Display skill levels in", "the questlog. If off, you", "can still use the command", "/player skills", "to see your skill levels"), true), SKILL_RECIPES_ALL("skill.recipes.all", new ItemStack(Material.SHEARS), - Lists.newArrayList("Shows all recipes for", "a skill even if it is", "way more difficult than", "what you could achieve")); + Lists.newArrayList("Shows all recipes for", "a skill even if it is", "way more difficult than", "what you could achieve")), + SHOW_PLAYER_MENU("player.menu", new ItemStack(Material.SKULL_ITEM), + Lists.newArrayList("Right click players to see", "a player menu")); private String key; diff --git a/src/main/java/com/skyisland/questmanager/player/skill/FoodItem.java b/src/main/java/com/skyisland/questmanager/player/skill/FoodItem.java index b29ba342..959e1f33 100644 --- a/src/main/java/com/skyisland/questmanager/player/skill/FoodItem.java +++ b/src/main/java/com/skyisland/questmanager/player/skill/FoodItem.java @@ -113,4 +113,8 @@ public FoodItem clone() { ret.setQuality(this.getQuality()); return ret; } + + public int setFoodLevel(double calculateFoodLevel) { + return foodLevel; + } } diff --git a/src/main/java/com/skyisland/questmanager/player/skill/Skill.java b/src/main/java/com/skyisland/questmanager/player/skill/Skill.java index 05f24fe2..fc753767 100644 --- a/src/main/java/com/skyisland/questmanager/player/skill/Skill.java +++ b/src/main/java/com/skyisland/questmanager/player/skill/Skill.java @@ -85,6 +85,7 @@ public void perform(QuestPlayer participant, int actionLevel, boolean fail) { //every level difference between skill and player decreases xp. Each level differene is //1/[cutoff] reduction. That way, we get a nice approach towards 0 at the cutoff float xp = (float) (base * (1-(Math.abs((double) levelDifference) / (double) config.getSkillCutoff()))); + xp = Math.max(0, xp); //lulz now just add it to player xp participant.setSkillExperience(this, participant.getSkillExperience(this) + xp); diff --git a/src/main/java/com/skyisland/questmanager/player/skill/defaults/CookingSkill.java b/src/main/java/com/skyisland/questmanager/player/skill/defaults/CookingSkill.java index 4757d0fa..b263724b 100644 --- a/src/main/java/com/skyisland/questmanager/player/skill/defaults/CookingSkill.java +++ b/src/main/java/com/skyisland/questmanager/player/skill/defaults/CookingSkill.java @@ -700,7 +700,8 @@ else if (line.toLowerCase().contains("food level:")) double qualityDifference = food.getQuality() - 1.0; qualityDifference = qualityDifference * hungerRate; int newLevel = Math.min(20, e.getPlayer().getFoodLevel() - + (int) Math.round(food.getFoodLevel() * (1 + qualityDifference))); + // + (int) Math.round(food.getFoodLevel() * (1 + qualityDifference))); + + (int) Math.round(food.getFoodLevel())); FoodLevelChangeEvent event = new FoodLevelChangeEvent(e.getPlayer(), newLevel); Bukkit.getPluginManager().callEvent(event); @@ -726,5 +727,11 @@ public List getRecipes() { return list; } - + public double calculateFoodLevel(int initialFoodLevel, double quality) { + double additional = Math.max(0, quality - 1); + additional *= hungerRate; + + return initialFoodLevel + additional; + + } } diff --git a/src/main/java/com/skyisland/questmanager/player/utils/QuestLog.java b/src/main/java/com/skyisland/questmanager/player/utils/QuestLog.java index 9e667a73..75986b79 100644 --- a/src/main/java/com/skyisland/questmanager/player/utils/QuestLog.java +++ b/src/main/java/com/skyisland/questmanager/player/utils/QuestLog.java @@ -41,6 +41,7 @@ import com.skyisland.questmanager.player.QuestPlayer; import com.skyisland.questmanager.player.skill.CraftingSkill; import com.skyisland.questmanager.player.skill.Skill; +import com.skyisland.questmanager.player.skill.defaults.MagerySkill; import com.skyisland.questmanager.quest.Quest; /** @@ -261,6 +262,9 @@ public static void updateQuestlog(QuestPlayer qp, boolean silent) { if (s instanceof CraftingSkill) { title.tooltip(desc + "\n\n" + ChatColor.BLUE + "Click here for recipes") .command("/player recipe " + s.getName()); + } else if (s instanceof MagerySkill) { + title.tooltip(desc + "\n\n" + ChatColor.BLUE + "Click here to see your spells") + .command("/player spells"); } else { title.tooltip(desc); } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/InventoryMenu.java b/src/main/java/com/skyisland/questmanager/ui/menu/InventoryMenu.java index 6023dfc2..40aca09e 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/InventoryMenu.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/InventoryMenu.java @@ -87,15 +87,19 @@ public void onInventoryInteract(InventoryClickEvent e) { return; } + if (!e.getWhoClicked().getUniqueId().equals(player.getPlayer().getUniqueId())) { + return; + } + //our inventory event! int pos = e.getRawSlot(); e.setCancelled(true); - if (gui.getItem(pos) == null || gui.getItem(pos).getAction(player) == null) { + if (gui.getItem(pos, e.getAction()) == null || gui.getItem(pos, e.getAction()).getAction(player) == null) { return; } - gui.getItem(pos).getAction(player).onAction(); + gui.getItem(pos, e.getAction()).getAction(player).onAction(); } @EventHandler diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/action/ForgeAction.java b/src/main/java/com/skyisland/questmanager/ui/menu/action/ForgeAction.java index 23f50e17..f67bef6e 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/action/ForgeAction.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/action/ForgeAction.java @@ -50,7 +50,9 @@ public enum Repairable { CHESTPLATE, LEGGINGS, HELMET, - BOOTS; + BOOTS, + SHIELD, + ROD; public static boolean isRepairable(Material mat) { diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseAction.java b/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseAction.java index 5d07fadf..0953398c 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseAction.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseAction.java @@ -64,7 +64,8 @@ public void onAction() { Player p = player.getPlayer().getPlayer(); - if (player.getFame() < fameCheck) { + //if (player.getFame() < fameCheck) { + if (player.getAlphaFame() < fameCheck) { p.sendMessage(DENIAL_FAME); return; } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseSpellAction.java b/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseSpellAction.java index c6312e5a..21e62a84 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseSpellAction.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/action/PurchaseSpellAction.java @@ -63,7 +63,8 @@ public void onAction() { Player p = player.getPlayer().getPlayer(); - if (player.getFame() < fameCheck) { + //if (player.getFame() < fameCheck) { + if (player.getAlphaFame() < fameCheck) { p.sendMessage(DENIAL_FAME); return; } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/action/ShowSpellsMenuAction.java b/src/main/java/com/skyisland/questmanager/ui/menu/action/ShowSpellsMenuAction.java new file mode 100644 index 00000000..3e12720a --- /dev/null +++ b/src/main/java/com/skyisland/questmanager/ui/menu/action/ShowSpellsMenuAction.java @@ -0,0 +1,154 @@ +/* + * QuestManager: An RPG plugin for the Bukkit API. + * Copyright (C) 2015-2016 Github Contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.skyisland.questmanager.ui.menu.action; + +import java.util.LinkedList; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import com.skyisland.questmanager.QuestManagerPlugin; +import com.skyisland.questmanager.magic.spell.SimpleTargetSpell; +import com.skyisland.questmanager.magic.spell.Spell; +import com.skyisland.questmanager.player.QuestPlayer; +import com.skyisland.questmanager.ui.menu.InventoryMenu; +import com.skyisland.questmanager.ui.menu.inventory.BasicInventory; +import com.skyisland.questmanager.ui.menu.inventory.BasicInventoryItem; + +public class ShowSpellsMenuAction implements MenuAction { + + private QuestPlayer player; + + public ShowSpellsMenuAction(QuestPlayer player) { + this.player = player; + } + + @Override + public void onAction() { + BasicInventory inv = new BasicInventory(); +// List descList; +// for (Skill.Type type : Skill.Type.values()) { +// +// boolean spoil = player.getOptions().getOption(PlayerOptions.Key.SKILL_REVEAL); +// for (Skill s : QuestManagerPlugin.questManagerPlugin.getSkillManager().getSkills(type)) { +// //get a formatted description. (Code from QuestPlayer's magic menu) +// +// if (!spoil && player.getSkillLevel(s) <= 0 && player.getSkillExperience(s) <= 0) { +// continue; +// } +// +// descList = formatDescription(s.getDescription(player)); +// +// descList.add(0, ChatColor.DARK_GREEN + "" + player.getSkillLevel(s) + "." +// + ((int) (player.getSkillExperience(s)*100)) + ""); +// +// descList.add(0, s.getName()); +// +// MenuAction responseAction = null; +// +// +// if (s instanceof CraftingSkill) { +// descList.add(" "); +// descList.add(ChatColor.BLUE + "Click here for recipes"); +// responseAction = new ShowSkillRecipesAction(player, (CraftingSkill) s); +// } +// +// inv.addInventoryItem(new BasicInventoryItem( +// s.getIcon(), descList, responseAction +// )); +// +// +// } +// } + + if (player.getSpells() == null || player.getSpells().isEmpty()) { + player.getPlayer().getPlayer().sendMessage( + ChatColor.RED + "You do not know any spells"); + return; + } + + for (String t : player.getSpells()) { + List descList = new LinkedList<>(); + Spell sp = QuestManagerPlugin.questManagerPlugin.getSpellManager().getSpell(t); + if (sp != null) { + + descList.add(ChatColor.RED + sp.getName()); + descList.add(ChatColor.GOLD + "Difficulty: " + sp.getDifficulty()); + descList.add(ChatColor.BLUE + "Mana Cost: " + sp.getCost()); + if (sp instanceof SimpleTargetSpell) { + SimpleTargetSpell spell = (SimpleTargetSpell) sp; + descList.add(ChatColor.DARK_GREEN + "Range: " + spell.getMaxDistance()); + descList.add(ChatColor.DARK_PURPLE + "Speed: " + spell.getSpeed()); + } + + String desc; + desc = sp.getDescription(); + + String mid; + int pos; + while (desc.length() > 30) { + + desc = desc.trim(); + + //find first space before 30 + mid = desc.substring(0, 30); + pos = mid.lastIndexOf(" "); + if (pos == -1) { + descList.add(mid); + desc = desc.substring(30); + continue; + } + //else we found a space + descList.add(mid.substring(0, pos)); + desc = desc.substring(pos); + } + + descList.add(desc.trim()); + } else { + descList.add("No Description"); + } + +// String desc = ""; +// for (int i = 0; i < descList.size() - 1; i++) { +// desc += descList.get(i) + "\n"; +// } +// desc += descList.get(descList.size() - 1); +// opts.add(new ChatMenuOption( +// new PlainMessage(t), +// new ChangeSpellHolderAction(this, holder, t), +// new FancyMessage("").then(desc))); + ItemStack icon = new ItemStack(Material.EMPTY_MAP); + ItemMeta meta = icon.getItemMeta(); + meta.setDisplayName(sp.getName()); + icon.setItemMeta(meta); + inv.addInventoryItem(new BasicInventoryItem( + icon, descList, null + )); + } + + + InventoryMenu menu = new InventoryMenu(player, inv); + QuestManagerPlugin.questManagerPlugin.getInventoryGuiHandler().showMenu( + player.getPlayer().getPlayer(), menu); + } + +} diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/BasicInventory.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/BasicInventory.java index b6653fce..e30e9356 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/BasicInventory.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/BasicInventory.java @@ -28,6 +28,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -209,7 +210,7 @@ public static BasicInventory valueOf(Map configMap) { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { return items.get(pos); } } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ContributionInventory.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ContributionInventory.java index dbcea1eb..f1cac80b 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ContributionInventory.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ContributionInventory.java @@ -25,6 +25,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -127,7 +128,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { //real logic is here /* * Check slot. If in player's inventory, try to take. If in top inventory, try and put back. diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/GuiInventory.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/GuiInventory.java index 6f01cf0e..22facf9c 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/GuiInventory.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/GuiInventory.java @@ -19,6 +19,7 @@ package com.skyisland.questmanager.ui.menu.inventory; import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import com.skyisland.questmanager.player.QuestPlayer; @@ -31,8 +32,7 @@ */ public abstract class GuiInventory implements ConfigurationSerializable { - - public abstract InventoryItem getItem(int pos); + public abstract InventoryItem getItem(int pos, InventoryAction action); public abstract Inventory getFormattedInventory(QuestPlayer player); } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ServiceInventory.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ServiceInventory.java index 0576d0fb..4a5f672f 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ServiceInventory.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ServiceInventory.java @@ -27,6 +27,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import com.skyisland.questmanager.npc.utils.Service; @@ -178,7 +179,7 @@ public static ServiceInventory valueOf(Map configMap) { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { return items.get(pos); } } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopInventory.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopInventory.java index c8fc0135..0d9f8ec1 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopInventory.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopInventory.java @@ -27,6 +27,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -204,7 +205,7 @@ public static ShopInventory valueOf(Map configMap) { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { return items.get(pos); } } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopItem.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopItem.java index 9db68362..e1f79157 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopItem.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/ShopItem.java @@ -66,7 +66,7 @@ public ItemStack getDisplay(QuestPlayer player) { meta.setLore(Arrays.asList( (cost <= player.getMoney() ? ChatColor.DARK_GREEN : ChatColor.DARK_RED) + "Cost: " + cost, - (famecost <= player.getFame() ? ChatColor.DARK_GREEN : ChatColor.DARK_RED) + + (famecost <= player.getAlphaFame() ? ChatColor.DARK_GREEN : ChatColor.DARK_RED) + "Fame Required: " + famecost)); ret.setItemMeta(meta); diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CombiningGui.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CombiningGui.java index 7aa4ebc6..11e331da 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CombiningGui.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CombiningGui.java @@ -30,6 +30,7 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -101,7 +102,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { if (skillLink == null) return null; if (pos < 0) diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CookingGui.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CookingGui.java index 32e0ea8d..706df47c 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CookingGui.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/CookingGui.java @@ -36,6 +36,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.FurnaceBurnEvent; import org.bukkit.event.inventory.FurnaceSmeltEvent; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -155,6 +156,8 @@ private enum Fuel { private double cooldown; + private int inputAmount; + public CookingGui(Player player, Furnace furnace, double bonusQuality, boolean useInputQuality) { this.player = player; this.furnace = furnace; @@ -182,7 +185,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { //0 is top slot, 1 is bottom, 2 is result if (pos > 2) { int slot = pos + 6; @@ -203,15 +206,20 @@ public InventoryItem getItem(int pos) { return null; } + inputAmount = 1; + if (action == InventoryAction.PICKUP_HALF) { + inputAmount = currentTarget.getAmount(); + } + ItemStack replace = null; - if (currentTarget.getAmount() > 1) { + if (currentTarget.getAmount() > inputAmount) { replace = currentTarget.clone(); - replace.setAmount(currentTarget.getAmount() - 1); + replace.setAmount(currentTarget.getAmount() - inputAmount); } player.getInventory().setItem(slot, replace); - currentTarget.setAmount(1); + currentTarget.setAmount(inputAmount); furnace.getInventory().setResult(currentTarget); QuestPlayer qp = QuestManagerPlugin.questManagerPlugin.getPlayerManager().getPlayer(player); @@ -349,6 +357,7 @@ private void loseGame() { if (furnace.getBurnTime() > 200) { ItemStack ash = new ItemStack(Material.SULPHUR); + ash.setAmount(inputAmount); ItemMeta meta = ash.getItemMeta(); meta.setDisplayName("Ash"); ash.setItemMeta(meta); @@ -385,6 +394,7 @@ private void winGame() { OvenRecipe recipe = skillLink.getOvenRecipe(currentTarget); FoodItem result = recipe.output.clone(); + result.getUnderlyingItem().setAmount(inputAmount * result.getUnderlyingItem().getAmount()); if (useInputQuality) { result.setQuality((new QualityItem(currentTarget)).getQuality()); @@ -397,6 +407,10 @@ private void winGame() { this.bottomFuel = null; this.currentTarget = null; + if (inputAmount > 1) { + skillLevel += 3; + } + CraftEvent event = new CraftEvent(qp, CraftEvent.CraftingType.COOKING, skillLevel, result); Bukkit.getPluginManager().callEvent(event); @@ -416,6 +430,10 @@ private void winGame() { result.setQuality(result.getQuality() * ((1 - missIndex) + bonusQuality)); + //factor in bonus food points + result.setFoodLevel(skillLink.calculateFoodLevel + (result.getFoodLevel(), result.getQuality())); + String name; if (result.getItem().getItemMeta() == null || result.getItem().getItemMeta().getDisplayName() == null) { diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FashioningGui.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FashioningGui.java index db5237e1..a8b7c94a 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FashioningGui.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FashioningGui.java @@ -29,6 +29,7 @@ import org.bukkit.Effect; import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -93,7 +94,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { if (skillLink == null) return null; diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FishingGui.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FishingGui.java index 87a68a64..a76ed34a 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FishingGui.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/FishingGui.java @@ -32,6 +32,7 @@ import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -292,7 +293,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { if (this.phase != GamePhase.RUNNING) { return null; } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/MiningGui.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/MiningGui.java index ffcb9dd0..1c963714 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/MiningGui.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/MiningGui.java @@ -39,6 +39,7 @@ import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -219,7 +220,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { if (this.backend == null) { return null; } diff --git a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/SmeltingGui.java b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/SmeltingGui.java index a7bd4eb3..aaf5acac 100644 --- a/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/SmeltingGui.java +++ b/src/main/java/com/skyisland/questmanager/ui/menu/inventory/minigames/SmeltingGui.java @@ -35,6 +35,7 @@ import org.bukkit.boss.BossBar; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryAction; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -205,7 +206,7 @@ public Map serialize() { } @Override - public InventoryItem getItem(int pos) { + public InventoryItem getItem(int pos, InventoryAction action) { if (!player.isOnline()) { Alarm.getScheduler().unregister(this); loseGame();