Skip to content

Commit bb3e3aa

Browse files
authored
Make config loading less scary when mismatches due to legacy materials. (#86)
* Add API function to get durability of a material type Change server to use api-version 1.14 as default * Make config loading less scary when mismatches due to legacy materials.. Changes to debug output; Hide failure if material not enabled. * Version 4.4.17
1 parent 2cb1bc7 commit bb3e3aa

File tree

5 files changed

+48
-14
lines changed

5 files changed

+48
-14
lines changed

obsidiandestroyer/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<artifactId>ObsidianDestroyer</artifactId>
66
<name>ObsidianDestroyer</name>
77
<url>https://github.com/drtshock/ObsidianDestroyer</url>
8-
<version>4.4.16</version>
8+
<version>4.4.17</version>
99

1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

obsidiandestroyer/src/main/java/com/drtshock/obsidiandestroyer/ObsidianDestroyer.java

+18-5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.drtshock.obsidiandestroyer.managers.HookManager;
99
import com.drtshock.obsidiandestroyer.managers.MaterialManager;
1010
import org.bukkit.Location;
11+
import org.bukkit.Material;
1112
import org.bukkit.entity.Entity;
1213
import org.bukkit.entity.EntityType;
1314
import org.bukkit.plugin.PluginManager;
@@ -59,10 +60,26 @@ public static int getDurability(Location location) {
5960
if (!instance.isEnabled()) {
6061
return 0;
6162
}
62-
6363
return ChunkManager.getInstance().getMaterialDurability(location);
6464
}
6565

66+
/**
67+
* Gets the durability of a material type
68+
*
69+
* @param material the material to check
70+
* @param data optional byte data for legacy material support.
71+
* @return the durability amount
72+
*/
73+
public static int getDurability(Material material, byte data) {
74+
if (instance == null || MaterialManager.getInstance() == null) {
75+
return 0;
76+
}
77+
if (!instance.isEnabled()) {
78+
return 0;
79+
}
80+
return MaterialManager.getInstance().getDurability(material.name(), data);
81+
}
82+
6683
/**
6784
* Raw damage to a block at a location. Can specify amount.
6885
*
@@ -80,7 +97,6 @@ public static DamageResult damageBlock(Location location, int damageAmount) {
8097
if (damageAmount <= 0) {
8198
return DamageResult.NONE;
8299
}
83-
84100
return ChunkManager.getInstance().damageBlock(location, damageAmount);
85101
}
86102

@@ -98,7 +114,6 @@ public static DamageResult damageBlock(Location location, EntityType entityType)
98114
if (!instance.isEnabled()) {
99115
return DamageResult.ERROR;
100116
}
101-
102117
return ChunkManager.getInstance().damageBlock(location, entityType);
103118
}
104119

@@ -116,11 +131,9 @@ public static DamageResult damageBlock(Location location, Entity entity) {
116131
if (!instance.isEnabled()) {
117132
return DamageResult.ERROR;
118133
}
119-
120134
if (entity == null) {
121135
return DamageResult.ERROR;
122136
}
123-
124137
return ChunkManager.getInstance().damageBlock(location, entity);
125138
}
126139

obsidiandestroyer/src/main/java/com/drtshock/obsidiandestroyer/datatypes/DurabilityMaterial.java

+9
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ public DurabilityMaterial(Material type, int typeData, ConfigurationSection sect
8888
this.tallyKittens();
8989
}
9090

91+
public static boolean isEnabled(ConfigurationSection section) {
92+
if (section.contains("Durability")) {
93+
if (section.contains("Durability.Enabled") && section.contains("Durability.Amount")) {
94+
return section.getBoolean("Durability.Enabled") && section.getInt("Durability.Amount") > 0;
95+
}
96+
}
97+
return false;
98+
}
99+
91100
private void tallyKittens() {
92101
if (blastRadius < 0) {
93102
blastRadius = 1;

obsidiandestroyer/src/main/java/com/drtshock/obsidiandestroyer/managers/ConfigManager.java

+19-7
Original file line numberDiff line numberDiff line change
@@ -205,23 +205,31 @@ public List<String> getDisabledWorlds() {
205205
* @return map of materials keys and material durability data
206206
*/
207207
public Map<String, DurabilityMaterial> getDurabilityMaterials() {
208-
ConfigurationSection section = materials.getConfigurationSection("HandledMaterials");
209-
Map<String, DurabilityMaterial> durabilityMaterials = new HashMap<String, DurabilityMaterial>();
208+
final long time = System.currentTimeMillis();
209+
final ConfigurationSection section = materials.getConfigurationSection("HandledMaterials");
210+
int errorDuraCount = 0;
211+
int invalidDuraCount = 0;
212+
int disabledDuraCount = 0;
213+
Map<String, DurabilityMaterial> durabilityMaterials = new HashMap<>();
210214
for (String durabilityMaterial : section.getKeys(false)) {
211215
try {
212-
ConfigurationSection materialSection = section.getConfigurationSection(durabilityMaterial);
216+
final ConfigurationSection materialSection = section.getConfigurationSection(durabilityMaterial);
213217
Material material = Material.matchMaterial(durabilityMaterial);
214218
if (material == null) {
215-
if (Material.getMaterial(durabilityMaterial) == null) {
216-
ObsidianDestroyer.LOG.log(Level.SEVERE, "Invalid Material Type: Unable to load ''{0}''", durabilityMaterial);
219+
material = Material.matchMaterial(durabilityMaterial, true);
220+
if (material == null) {
221+
if (DurabilityMaterial.isEnabled(materialSection)) {
222+
ObsidianDestroyer.LOG.log(Level.WARNING, "Invalid Material Type: Unable to load ''{0}''", durabilityMaterial);
223+
}
224+
invalidDuraCount++;
217225
continue;
218226
} else {
219-
material = Material.getMaterial(durabilityMaterial);
220-
ObsidianDestroyer.LOG.log(Level.SEVERE, "Semi-Valid Material Type: Loaded as ''{0}''", material.name());
227+
ObsidianDestroyer.LOG.log(Level.WARNING, "Semi-Valid Material Type: Loaded as ''{0}''", material.name());
221228
}
222229
}
223230
if (!Util.isSolid(material) && !materialSection.contains("HandleNonSolid") && !materialSection.getBoolean("HandleNonSolid")) {
224231
ObsidianDestroyer.LOG.log(Level.WARNING, "Non-Solid Material Type: Did not load ''{0}''", durabilityMaterial);
232+
invalidDuraCount++;
225233
continue;
226234
}
227235
final DurabilityMaterial durablock;
@@ -237,11 +245,15 @@ public Map<String, DurabilityMaterial> getDurabilityMaterials() {
237245
durabilityMaterials.put(durablock.toString(), durablock);
238246
} else if (getDebug()) {
239247
ObsidianDestroyer.debug("Disabled durability of '" + durablock.getDurability() + "' for '" + durablock.toString() + "'");
248+
disabledDuraCount++;
240249
}
241250
} catch (Exception e) {
242251
ObsidianDestroyer.LOG.log(Level.SEVERE, "Failed loading material ''{0}''", durabilityMaterial);
252+
errorDuraCount++;
243253
}
244254
}
255+
ObsidianDestroyer.LOG.log(Level.INFO, "Loaded and enabled ''{0}'' material durabilities from config in ''{1}'' ms.", new Object[]{durabilityMaterials.size(), (System.currentTimeMillis() - time)});
256+
ObsidianDestroyer.LOG.log(Level.INFO, "Material in Error: ''{0}'' Invalid: ''{1}'' Disabled: ''{2}''", new Object[]{errorDuraCount, invalidDuraCount, disabledDuraCount});
245257
return durabilityMaterials;
246258
}
247259

obsidiandestroyer/src/main/resources/plugin.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main: com.drtshock.obsidiandestroyer.ObsidianDestroyer
33
version: ${project.version}
44
authors: [drtshock, squidicuz]
55
softdepend: [mcore, MassiveCore, Factions]
6-
api-version: "1.13"
6+
api-version: "1.14"
77

88
commands:
99
od:

0 commit comments

Comments
 (0)