Modify MaterialDb.load()

This commit is contained in:
Diego Arias 2018-10-12 13:29:45 -03:00
parent 3f5fbd7882
commit cbe0f3a55d
4 changed files with 30 additions and 19 deletions

View File

@ -83,7 +83,7 @@ public class P extends MPlugin {
saveDefaultConfig();
// Load Material database
new MaterialDb();
MaterialDb.load();
// Load Conf from disk
Conf.load();
MaterialDb.getInstance().testMaterials();

View File

@ -2,8 +2,6 @@ package com.massivecraft.factions.util.material;
import org.bukkit.Material;
import java.util.Objects;
public class FactionMaterial {
private String name;
@ -13,7 +11,12 @@ public class FactionMaterial {
}
public FactionMaterial(Material material) {
this.name = material.name();
// If we are using Legacy we need to change the name to the 1.13 equivalent
if (MaterialDb.getInstance().legacy) {
this.name = MaterialDb.getInstance().provider.fromLegacy(material.name());
} else {
this.name = material.name();
}
}
public Material get() {
@ -34,12 +37,13 @@ public class FactionMaterial {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FactionMaterial that = (FactionMaterial) o;
return Objects.equals(name, that.name);
// Compare provided Materials instead of the name as different names might provide same materials
return get() == that.get();
}
@Override
public int hashCode() {
return Objects.hash(name);
// Use material hashCode instead of name
return get().hashCode();
}
}

View File

@ -29,36 +29,34 @@ public class MaterialDb {
private static MaterialDb instance;
public boolean legacy = true;
private MaterialProvider provider;
public MaterialProvider provider;
public MaterialDb() {
instance = this;
load();
}
private MaterialDb() {}
public Material get(String name) {
return provider.resolve(name);
}
public void load() {
public static void load() {
instance = new MaterialDb();
try {
String versionString = Bukkit.getVersion();
String version = versionString.substring(versionString.indexOf('.') + 1, versionString.lastIndexOf('.'));
legacy = Integer.parseInt(version) < 13;
instance.legacy = Integer.parseInt(version) < 13;
} catch (NumberFormatException e) {
// Issue formatting major version integer... uhm
legacy = true;
instance.legacy = true;
}
InputStreamReader reader = new InputStreamReader(P.p.getResource("materials.json"));
Type typeToken = new TypeToken<HashMap<String, MaterialProvider.MaterialData>>(){}.getType();
HashMap<String, MaterialProvider.MaterialData> materialData = P.p.gson.fromJson(reader, typeToken);
provider = new MaterialProvider(materialData);
instance.provider = new MaterialProvider(materialData);
}
public void testMaterials() {
P.p.log(Conf.territoryProtectedMaterials);
// TODO: Do some Material tests
}
public static MaterialDb getInstance() {

View File

@ -9,9 +9,9 @@ import java.util.logging.Level;
public class MaterialProvider {
protected HashMap<String, MaterialData> materialData;
private HashMap<String, MaterialData> materialData;
public MaterialProvider(HashMap<String, MaterialData> materialData) {
MaterialProvider(HashMap<String, MaterialData> materialData) {
this.materialData = materialData;
}
@ -24,6 +24,15 @@ public class MaterialProvider {
return material;
}
public String fromLegacy(String legacy) {
for (MaterialData data : materialData.values()) {
if (data.legacy.equalsIgnoreCase(legacy)) {
return data.name;
}
}
return null;
}
public class MaterialData {
@SerializedName("material")