diff --git a/config.yml b/config.yml
index a923dc04..322016c2 100644
--- a/config.yml
+++ b/config.yml
@@ -118,3 +118,13 @@ mysql:
show_health_as_percent: true
# Whether players are automatically put in reinforcement bypass mode on login
default_bypass_mode: true
+#uncomment below to make player-made reinforcements for the following materials
+#get multiplied by the provided numbers, on top of their normal reinforcement amount
+#For example, with these settings, if stone reinforcement normally provides 50 hitpoints,
+#now it would provide 250 for grass and dirt, 500 for glass, and 50 for everything else.
+#This is intended to allow some decorative, nice looking buildings to be stronger if
+#reinforced, so builders don't have to decide between security and aesthetics.
+#multipliers:
+# GRASS: 5.0
+# DIRT: 5.0
+# GLASS: 10.0
diff --git a/pom.xml b/pom.xml
index 33f2fc77..760afa3e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
vg.civcraft.mc.citadel
Citadel
jar
- 3.9.3
+ 3.9.4
Citadel
https://github.com/Devoted/Citadel
diff --git a/src/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/vg/civcraft/mc/citadel/CitadelConfigManager.java
index d91f84d9..7dd1162b 100644
--- a/src/vg/civcraft/mc/citadel/CitadelConfigManager.java
+++ b/src/vg/civcraft/mc/citadel/CitadelConfigManager.java
@@ -1,6 +1,7 @@
package vg.civcraft.mc.citadel;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -32,6 +33,20 @@ public static List getReinforceableMaterials(String mat){
}
return null;
}
+
+ public static HashMap getMatMultipliers(){
+ HashMap matMultipliers = new HashMap();
+ if (config.getConfigurationSection("multipliers") == null)
+ return matMultipliers;
+ for (String sect: config.getConfigurationSection("multipliers").getKeys(false)){
+ try {
+ matMultipliers.put(Material.getMaterial(sect), (Double)config.getConfigurationSection("multipliers").get(sect));
+ } catch (IllegalArgumentException e){
+ Citadel.getInstance().getLogger().warning("The specified multiplier material or multiplier number for " + sect + " could not be parsed");
+ }
+ }
+ return matMultipliers;
+ }
public static List getNonReinforceableMaterials(String mat){
if(config.getConfigurationSection("reinforcements." + mat).contains("non_reinforceables")) {
diff --git a/src/vg/civcraft/mc/citadel/ReinforcementManager.java b/src/vg/civcraft/mc/citadel/ReinforcementManager.java
index c3ad7113..51617afe 100644
--- a/src/vg/civcraft/mc/citadel/ReinforcementManager.java
+++ b/src/vg/civcraft/mc/citadel/ReinforcementManager.java
@@ -11,10 +11,12 @@
import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
+import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
+import org.bukkit.Material;
import org.bukkit.block.Block;
import vg.civcraft.mc.citadel.database.CitadelReinforcementData;
@@ -48,7 +50,8 @@ public class ReinforcementManager {
private CitadelReinforcementData db;
private long dayMultiplier;
-
+ public HashMap matMultipliers;
+
// This shit is cool
private RemovalListener removalListener = new RemovalListener() {
public void onRemoval(RemovalNotification removal) {
@@ -87,9 +90,18 @@ public Reinforcement load(Location loc) throws Exception {
public ReinforcementManager(CitadelReinforcementData db) {
this.db = db;
this.dayMultiplier = (long)CitadelConfigManager.getDayMultiplier();
+ this.matMultipliers = CitadelConfigManager.getMatMultipliers();
scheduleSave();
}
+
+ public double getMatMultiplier(Material mat){
+ if (mat == null || !matMultipliers.containsKey(mat)){
+ return 1;
+ } else {
+ return matMultipliers.get(mat);
+ }
+ }
public long getDayMultiplier(){
return dayMultiplier;
diff --git a/src/vg/civcraft/mc/citadel/Utility.java b/src/vg/civcraft/mc/citadel/Utility.java
index bc02acab..4ef47669 100644
--- a/src/vg/civcraft/mc/citadel/Utility.java
+++ b/src/vg/civcraft/mc/citadel/Utility.java
@@ -134,7 +134,8 @@ public static PlayerReinforcement createPlayerReinforcement(Player player, Group
}
// Fire the creation event
PlayerReinforcement rein = new PlayerReinforcement(block.getLocation(),
- type.getHitPoints(), getIntFormofMaturation(System.currentTimeMillis(),type.getItemStack()),
+ (int)(type.getHitPoints()*Citadel.getReinforcementManager().getMatMultiplier(block.getType())),
+ getIntFormofMaturation(System.currentTimeMillis(),type.getItemStack()),
getIntFormofAcidMaturation(System.currentTimeMillis(),type.getItemStack()),
g, type.getItemStack());
ReinforcementCreationEvent event = new ReinforcementCreationEvent(rein, block, player);
@@ -230,7 +231,8 @@ public static PlayerReinforcement createPlayerReinforcementWithoutMaterialConsum
return null;
}
PlayerReinforcement rein = new PlayerReinforcement(block.getLocation(),
- type.getHitPoints(), getIntFormofMaturation(System.currentTimeMillis(),type.getItemStack()),
+ (int)(type.getHitPoints()*Citadel.getReinforcementManager().getMatMultiplier(block.getType())),
+ getIntFormofMaturation(System.currentTimeMillis(),type.getItemStack()),
getIntFormofAcidMaturation(System.currentTimeMillis(),type.getItemStack()),
g, type.getItemStack());
ReinforcementCreationEvent event = new ReinforcementCreationEvent(rein, block, player);
diff --git a/src/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/vg/civcraft/mc/citadel/listener/BlockListener.java
index 33e79e8e..12060f2e 100644
--- a/src/vg/civcraft/mc/citadel/listener/BlockListener.java
+++ b/src/vg/civcraft/mc/citadel/listener/BlockListener.java
@@ -579,9 +579,8 @@ public void interact(PlayerInteractEvent pie) {
" Group%s Durability[%d/%d]",
groupName,
reinforcement.getDurability(),
- ReinforcementType.getReinforcementType(
- reinforcement.getStackRepresentation())
- .getHitPoints()));
+ (int)(Citadel.getReinforcementManager().getMatMultiplier(reinforcement.getLocation().getBlock().getType())*
+ ReinforcementType.getReinforcementType(reinforcement.getStackRepresentation()).getHitPoints())));
int maturationTime = timeUntilMature(reinforcement);
if (maturationTime != 0) {
sb.append(" Immature[");
diff --git a/src/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/vg/civcraft/mc/citadel/listener/EntityListener.java
index ab9dc90c..49c0ae25 100644
--- a/src/vg/civcraft/mc/citadel/listener/EntityListener.java
+++ b/src/vg/civcraft/mc/citadel/listener/EntityListener.java
@@ -237,8 +237,8 @@ public void hangingEntityBreakEvent(HangingBreakByEntityEvent event){
sb.append(String.format(" Group%s Durability[%d/%d]",
groupName,
pr.getDurability(),
- ReinforcementType.getReinforcementType
- (pr.getStackRepresentation()).getHitPoints()));
+ (int)(Citadel.getReinforcementManager().getMatMultiplier(pr.getLocation().getBlock().getType())*
+ ReinforcementType.getReinforcementType(pr.getStackRepresentation()).getHitPoints())));
int maturationTime = timeUntilMature(pr);
if (maturationTime != 0) {
sb.append(" Immature[");
diff --git a/src/vg/civcraft/mc/citadel/reinforcement/PlayerReinforcement.java b/src/vg/civcraft/mc/citadel/reinforcement/PlayerReinforcement.java
index 4a64b98b..93b542a9 100644
--- a/src/vg/civcraft/mc/citadel/reinforcement/PlayerReinforcement.java
+++ b/src/vg/civcraft/mc/citadel/reinforcement/PlayerReinforcement.java
@@ -145,7 +145,7 @@ public void setInsecure(boolean bool){
* @return Returns the percent of the reinforcement.
*/
public double getHealth() {
- return (double)getDurability() / ((double)ReinforcementType.
+ return (double)getDurability() / (Citadel.getReinforcementManager().getMatMultiplier(this.getLocation().getBlock().getType())*(double)ReinforcementType.
getReinforcementType(stack).getHitPoints());
}
/**