Skip to content

Commit

Permalink
Added McMMOPlayerRepairCheckEvent for API usage - fires before repair
Browse files Browse the repository at this point in the history
process begins, can be cancelled.
  • Loading branch information
gmcferrin committed Mar 27, 2012
1 parent 3fc5a16 commit af4ba97
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 32 deletions.
1 change: 1 addition & 0 deletions Changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Key:

Version 1.3.04-dev
+ Added McMMOPlayerRepairEvent for API usage - fires after completion of a repair.
+ Added McMMOPlayerRepairCheckEvent for API usage - fires before repair process begins, can be cancelled.
+ Added ability to get skill level from McMMOPlayerExperience events
= Fixed Shake ability dropping bonemeal instead of ink for squids.
= Fixed Green Terra & Super Breaker awarding 4x drops at high levels.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.gmail.nossr50.events;

import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.inventory.ItemStack;

import com.gmail.nossr50.datatypes.SkillType;

public class McMMOPlayerRepairCheckEvent extends McMMOPlayerSkillEvent implements Cancellable{

private int repairAmount;
private ItemStack repairMaterial;
private ItemStack repairedObject;
private boolean cancelled;

public McMMOPlayerRepairCheckEvent(Player player, int repairAmount, ItemStack repairMaterial, ItemStack repairedObject) {
super(player, SkillType.REPAIR);
this.repairAmount = repairAmount;
this.repairMaterial = repairMaterial;
this.repairedObject = repairedObject;
this.cancelled = false;
}

public int getRepairAmount() {
return repairAmount;
}

public ItemStack getRepairMaterial() {
return repairMaterial;
}

public ItemStack getRepairedObject() {
return repairedObject;
}

/** Following are required for Cancellable **/
@Override
public boolean isCancelled() {
return cancelled;
}

@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
}
5 changes: 2 additions & 3 deletions src/main/java/com/gmail/nossr50/m.java
Original file line number Diff line number Diff line change
Expand Up @@ -262,9 +262,8 @@ public static void mcDropItem(Location location, ItemStack itemStack) {
if (event.isCancelled()) {
return;
}
else {
location.getWorld().dropItemNaturally(location, itemStack);
}

location.getWorld().dropItemNaturally(location, itemStack);
}

/**
Expand Down
60 changes: 31 additions & 29 deletions src/main/java/com/gmail/nossr50/skills/Repair.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.gmail.nossr50.spout.SpoutSounds;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.events.McMMOPlayerRepairCheckEvent;
import com.gmail.nossr50.events.McMMOPlayerRepairEvent;
import com.gmail.nossr50.locale.mcLocale;

Expand All @@ -48,23 +49,19 @@ public static void repairCheck(Player player, ItemStack is) {
*/
if (ItemChecks.isArmor(is) && LoadProperties.repairArmor && mcPermissions.getInstance().armorRepair(player)) {
if (ItemChecks.isDiamondArmor(is) && inventory.contains(LoadProperties.rDiamond) && skillLevel >= LoadProperties.repairdiamondlevel && mcPermissions.getInstance().diamondRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rDiamond));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rDiamond));
xpHandler(player, PP, is, durabilityBefore, 6, true);
}
else if (ItemChecks.isIronArmor(is) && inventory.contains(LoadProperties.rIron) && skillLevel >= LoadProperties.repairIronLevel && mcPermissions.getInstance().ironRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rIron));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rIron));
xpHandler(player, PP, is, durabilityBefore, 2, true);
}
else if (ItemChecks.isGoldArmor(is) && inventory.contains(LoadProperties.rGold) && skillLevel >= LoadProperties.repairGoldLevel && mcPermissions.getInstance().goldRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rGold));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rGold));
xpHandler(player, PP, is, durabilityBefore, 4, true);
}
else if (ItemChecks.isLeatherArmor(is) && inventory.contains(LoadProperties.rLeather)) {
inventory.removeItem(new ItemStack(LoadProperties.rLeather));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rLeather));
xpHandler(player, PP, is, durabilityBefore, 1, true);
}
else {
Expand All @@ -77,33 +74,27 @@ else if (ItemChecks.isLeatherArmor(is) && inventory.contains(LoadProperties.rLea
*/
else if (ItemChecks.isTool(is) && LoadProperties.repairTools && mcPermissions.getInstance().toolRepair(player)) {
if (ItemChecks.isStoneTool(is) && inventory.contains(LoadProperties.rStone) && skillLevel >= LoadProperties.repairStoneLevel && mcPermissions.getInstance().stoneRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rStone));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rStone));
xpHandler(player, PP, is, durabilityBefore, 2, false);
}
else if (ItemChecks.isWoodTool(is) && inventory.contains(LoadProperties.rWood)) {
inventory.removeItem(new ItemStack(LoadProperties.rWood));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rWood));
xpHandler(player, PP, is, durabilityBefore, 2, false);
}
else if (ItemChecks.isIronTool(is) && inventory.contains(LoadProperties.rIron) && skillLevel >= LoadProperties.repairIronLevel && mcPermissions.getInstance().ironRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rIron));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rIron));
xpHandler(player, PP, is, durabilityBefore, 1, true);
}
else if (ItemChecks.isDiamondTool(is) && inventory.contains(LoadProperties.rDiamond) && skillLevel >= LoadProperties.repairdiamondlevel && mcPermissions.getInstance().diamondRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rDiamond));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rDiamond));
xpHandler(player, PP, is, durabilityBefore, 1, true);
}
else if (ItemChecks.isGoldTool(is) && inventory.contains(LoadProperties.rGold) && skillLevel >= LoadProperties.repairGoldLevel && mcPermissions.getInstance().goldRepair(player)) {
inventory.removeItem(new ItemStack(LoadProperties.rGold));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rGold));
xpHandler(player, PP, is, durabilityBefore, 8, true);
}
else if (is.getType().equals(Material.BOW) && inventory.contains(LoadProperties.rString)){
inventory.removeItem(new ItemStack(LoadProperties.rString));
repairItem(player, is);
repairItem(player, is, new ItemStack(LoadProperties.rString));
xpHandler(player, PP, is, durabilityBefore, 2, false);
}
else {
Expand Down Expand Up @@ -147,7 +138,7 @@ else if(ItemChecks.isHoe(is)) {
dif = (short) (dif / 2);
}

PP.addXP(SkillType.REPAIR, dif*10, player);
PP.addXP(SkillType.REPAIR, dif * 10, player);
Skills.XpCheckSkill(SkillType.REPAIR, player);

//CLANG CLANG
Expand Down Expand Up @@ -429,21 +420,32 @@ public static boolean checkPlayerProcRepair(Player player) {
* Repairs an item.
*
* @param player The player repairing an item
* @param enchants The enchantments on the item
* @param enchantsLevel The level of the enchantments on the item
* @param item The item being repaired
* @param repairMaterial The repair reagent
*/
public static void repairItem(Player player, ItemStack is) {
short initialDurability = is.getDurability();
public static void repairItem(Player player, ItemStack item, ItemStack repairMaterial) {
short initialDurability = item.getDurability();
short newDurability = getRepairAmount(item, player);

McMMOPlayerRepairCheckEvent preEvent = new McMMOPlayerRepairCheckEvent(player, (short) (initialDurability - newDurability), repairMaterial, item);
Bukkit.getPluginManager().callEvent(preEvent);

if (preEvent.isCancelled()) {
return;
}

player.getInventory().removeItem(repairMaterial);

/* Handle the enchants */
if (LoadProperties.mayLoseEnchants && !mcPermissions.getInstance().arcaneBypass(player)) {
addEnchants(player, is);
addEnchants(player, item);
}

is.setDurability(getRepairAmount(is, player));
item.setDurability(newDurability);

McMMOPlayerRepairEvent event = new McMMOPlayerRepairEvent(player, is, (short) (initialDurability - is.getDurability()));
Bukkit.getPluginManager().callEvent(event);
/* Post-repair Event */
McMMOPlayerRepairEvent postEvent = new McMMOPlayerRepairEvent(player, item, (short) (initialDurability - newDurability));
Bukkit.getPluginManager().callEvent(postEvent);
}

/**
Expand Down

0 comments on commit af4ba97

Please sign in to comment.