diff --git a/src/com/untamedears/citadel/Utility.java b/src/com/untamedears/citadel/Utility.java index c1f4de38..0da40f22 100644 --- a/src/com/untamedears/citadel/Utility.java +++ b/src/com/untamedears/citadel/Utility.java @@ -196,9 +196,9 @@ public static boolean maybeReinforcementDamaged(Block block) { } public static boolean reinforcementDamaged(IReinforcement reinforcement) { - reinforcement.setDurability(reinforcement.getDurability() - 1); - boolean cancelled = reinforcement.getDurability() > 0; - if (reinforcement.getDurability() <= 0) { + boolean isBroken = reinforcement.breakOnce(); + boolean cancelled = !isBroken; + if (!cancelled) { cancelled = reinforcementBroken(reinforcement); } else { if (reinforcement instanceof PlayerReinforcement) { diff --git a/src/com/untamedears/citadel/dao/CitadelCachingDao.java b/src/com/untamedears/citadel/dao/CitadelCachingDao.java index 7bd45e2d..bf4e8e44 100644 --- a/src/com/untamedears/citadel/dao/CitadelCachingDao.java +++ b/src/com/untamedears/citadel/dao/CitadelCachingDao.java @@ -345,7 +345,7 @@ public IReinforcement findReinforcement( Block block ){ } public IReinforcement save( IReinforcement r ){ - if (r.getDurability() <= 0) + if (r.isBroken()) { delete(r); return null; diff --git a/src/com/untamedears/citadel/entity/IReinforcement.java b/src/com/untamedears/citadel/entity/IReinforcement.java index ad4cd8dd..33854f72 100644 --- a/src/com/untamedears/citadel/entity/IReinforcement.java +++ b/src/com/untamedears/citadel/entity/IReinforcement.java @@ -7,9 +7,9 @@ public abstract interface IReinforcement extends public ReinforcementKey getId(); public void setId(ReinforcementKey id); public Block getBlock(); - public int getDurability(); - public void setDurability(int durability); public double getHealth(); public String getHealthText(); public String getStatus(); + public boolean isBroken(); + public boolean breakOnce(); } diff --git a/src/com/untamedears/citadel/entity/NaturalReinforcement.java b/src/com/untamedears/citadel/entity/NaturalReinforcement.java index 671e14d4..6b2747c9 100644 --- a/src/com/untamedears/citadel/entity/NaturalReinforcement.java +++ b/src/com/untamedears/citadel/entity/NaturalReinforcement.java @@ -1,6 +1,7 @@ package com.untamedears.citadel.entity; import java.util.HashMap; +import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.block.Block; @@ -16,15 +17,18 @@ public class NaturalReinforcement implements IReinforcement { new HashMap(); private ReinforcementKey id_; - private int durability_; + private boolean broken_; private int max_durability_; + private Random random; - public NaturalReinforcement() {} + public NaturalReinforcement() { + this.random = new Random(); + } - public NaturalReinforcement(Block block, int breakCount) { + public NaturalReinforcement(Block block, int max_durability) { this.id_ = new ReinforcementKey(block); - this.durability_ = breakCount; - this.max_durability_ = breakCount; + this.max_durability_ = max_durability; + this.random = new Random(); } public ReinforcementKey getId() { return id_; } @@ -41,34 +45,22 @@ public Block getBlock() { } } - public int getDurability() { return durability_; } - public void setDurability(int durability) { durability_ = durability; } - public int getMaxDurability() { return max_durability_; } public void setMaxDurability(int max_durability) { this.max_durability_ = max_durability; } public double getHealth() { - return (double) durability_ / (double) max_durability_; + return 1.0; } public String getHealthText() { - double health = getHealth(); - if (health > 0.75) { - return "excellently"; - } else if (health > 0.50) { - return "well"; - } else if (health > 0.25) { - return "decently"; - } else { - return "poorly"; - } + return "naturally"; } public String getStatus() { return getHealthText(); } @Override public String toString() { - return String.format("%s, durability: %d of %d", id_, durability_, max_durability_); + return String.format("%s, hardness %d", id_, max_durability_); } @Override @@ -88,4 +80,18 @@ public int compareTo(IReinforcement r) { public int hashCode() { return this.id_.hashCode(); } + + @Override + public boolean isBroken() { + return broken_; + } + + @Override + public boolean breakOnce() { + if (broken_) return true; + if (random.nextInt(max_durability_) == 0) { + broken_ = true; + } + return broken_; + } } diff --git a/src/com/untamedears/citadel/entity/PlayerReinforcement.java b/src/com/untamedears/citadel/entity/PlayerReinforcement.java index f3885e27..b51c08c0 100644 --- a/src/com/untamedears/citadel/entity/PlayerReinforcement.java +++ b/src/com/untamedears/citadel/entity/PlayerReinforcement.java @@ -253,6 +253,19 @@ public int hashCode() { return this.id.hashCode(); } + @Override + public boolean isBroken() { + return this.durability <= 0; + } + + @Override + public boolean breakOnce() { + if (!isBroken()) { + this.durability--; + } + return isBroken(); + } + public DbUpdateAction getDbAction() { return this.dbAction; } public void setDbAction(DbUpdateAction value) { this.dbAction = value; } }