From 4bc7a61b725b3a10890cf0e7a91418d2afa83d35 Mon Sep 17 00:00:00 2001 From: Gavin Asus Date: Fri, 17 Nov 2017 02:19:07 -0800 Subject: [PATCH 1/2] Initial Commit --- config.yml | 10 ++++++++++ pom.xml | 2 +- .../civcraft/mc/citadel/CitadelConfigManager.java | 15 +++++++++++++++ .../civcraft/mc/citadel/ReinforcementManager.java | 14 +++++++++++++- src/vg/civcraft/mc/citadel/Utility.java | 6 ++++-- .../mc/citadel/listener/BlockListener.java | 5 ++--- .../mc/citadel/listener/EntityListener.java | 4 ++-- .../reinforcement/PlayerReinforcement.java | 2 +- 8 files changed, 48 insertions(+), 10 deletions(-) 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..6f4ef24b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ vg.civcraft.mc.citadel Citadel jar - 3.9.3 + 3.9.3.2 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()); } /** From 381b7358c87c4d54a3f0fd51b846ab815cad84d1 Mon Sep 17 00:00:00 2001 From: Gavin Asus Date: Fri, 17 Nov 2017 02:22:50 -0800 Subject: [PATCH 2/2] Allows for configs to add additional multiplier for reinforced block type, so glass for instance can be given a 5x multiplier, and it will get 5x the reinforcement strength from any reinforcer versus default. Allows decorative blocks to become more secure options, don't need to use obby for EVERYTHING. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6f4ef24b..760afa3e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ vg.civcraft.mc.citadel Citadel jar - 3.9.3.2 + 3.9.4 Citadel https://github.com/Devoted/Citadel