Add per-provider implementations of ItemData

This commit is contained in:
md678685 2018-08-27 11:23:47 +01:00
parent 05fcb7b1aa
commit 96c6c7b1ca
3 changed files with 76 additions and 52 deletions

View File

@ -1,12 +1,14 @@
package net.ess3.nms.flattened;
import com.google.gson.*;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.ess3.nms.ItemDbProvider;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionType;
import java.util.*;
import java.util.stream.Collectors;
@ -14,7 +16,7 @@ import java.util.stream.Collectors;
public class FlatItemDbProvider extends ItemDbProvider {
private static Gson gson = new Gson();
private final transient Map<String, ItemData> primaryNames = new HashMap<>();
private final transient Map<String, FlatItemData> primaryNames = new HashMap<>();
private final transient Map<String, List<String>> names = new HashMap<>();
@Override
@ -39,9 +41,9 @@ public class FlatItemDbProvider extends ItemDbProvider {
@Override
public String getPrimaryName(ItemStack item) {
ItemData itemData = new ItemData(null, item.getType(), null);
ItemData itemData = new FlatItemData(null, item.getType(), null);
for (Map.Entry<String, ItemData> entry : primaryNames.entrySet()) {
for (Map.Entry<String, FlatItemData> entry : primaryNames.entrySet()) {
if (entry.getValue().equals(itemData)) {
return entry.getKey();
}
@ -116,7 +118,7 @@ public class FlatItemDbProvider extends ItemDbProvider {
JsonElement element = entry.getValue();
if (element.isJsonObject()) {
ItemData data = gson.fromJson(element, ItemData.class);
FlatItemData data = gson.fromJson(element, FlatItemData.class);
primaryNames.put(key, data);
} else {
try {
@ -159,4 +161,30 @@ public class FlatItemDbProvider extends ItemDbProvider {
public String getHumanName() {
return "Post-1.13 item database provider";
}
public static class FlatItemData extends ItemData {
private FlatItemData(String itemName, Material material, PotionData potionData) {
this.itemName = itemName;
this.material = material;
this.potionData = potionData;
}
@Override
public int hashCode() {
return (31 * material.hashCode()) ^ potionData.hashCode();
}
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (!(o instanceof ItemData)) {
return false;
}
ItemData pairo = (ItemData) o;
return this.material == pairo.getMaterial() &&
(this.potionData == null && pairo.getPotionData() == null) || this.potionData.equals(pairo.getPotionData());
}
}
}

View File

@ -1,13 +1,10 @@
package net.ess3.nms.ids;
import net.ess3.nms.ItemDbProvider;
import net.ess3.nms.PotionMetaProvider;
import net.ess3.nms.SpawnEggProvider;
import net.ess3.nms.refl.ReflUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
@ -19,7 +16,7 @@ public class LegacyItemDbProvider extends ItemDbProvider {
private final transient Map<String, Integer> items = new HashMap<>();
private final transient Map<ItemData, List<String>> names = new HashMap<>();
private final transient Map<ItemData, String> primaryNames = new HashMap<>();
private final transient Map<Integer, ItemData> legacyIds = new HashMap<>();
private final transient Map<Integer, LegacyItemData> legacyIds = new HashMap<>();
private final transient Map<String, Short> durabilities = new HashMap<>();
private final transient Map<String, String> nbtData = new HashMap<>();
@ -147,10 +144,10 @@ public class LegacyItemDbProvider extends ItemDbProvider {
@Override
public String getPrimaryName(ItemStack item) {
ItemData itemData = new ItemData(null, item.getType(), item.getTypeId(), item.getDurability(), null);
ItemData itemData = new LegacyItemData(null, item.getType(), item.getTypeId(), item.getDurability(), null);
String name = primaryNames.get(itemData);
if (name == null) {
itemData = new ItemData(null, item.getType(), item.getTypeId(), (short) 0, null);
itemData = new LegacyItemData(null, item.getType(), item.getTypeId(), (short) 0, null);
name = primaryNames.get(itemData);
if (name == null) {
return null;
@ -161,10 +158,10 @@ public class LegacyItemDbProvider extends ItemDbProvider {
@Override
public List<String> getNames(ItemStack item) {
ItemData itemData = new ItemData(null, item.getType(), item.getTypeId(), item.getDurability(), null);
ItemData itemData = new LegacyItemData(null, item.getType(), item.getTypeId(), item.getDurability(), null);
List<String> nameList = names.get(itemData);
if (nameList == null) {
itemData = new ItemData(null, item.getType(), item.getTypeId(), (short) 0, null);
itemData = new LegacyItemData(null, item.getType(), item.getTypeId(), (short) 0, null);
nameList = names.get(itemData);
if (nameList == null) {
return null;
@ -200,7 +197,7 @@ public class LegacyItemDbProvider extends ItemDbProvider {
addFrom(lines);
}
private ItemData parseLine(String line) {
private LegacyItemData parseLine(String line) {
String itemName = null;
int numeric = -1;
short data = 0;
@ -242,10 +239,10 @@ public class LegacyItemDbProvider extends ItemDbProvider {
return null;
}
return new ItemData(itemName, material, numeric, data, nbt);
return new LegacyItemData(itemName, material, numeric, data, nbt);
}
private void addItem(ItemData itemData) {
private void addItem(LegacyItemData itemData) {
final String name = itemData.getItemName();
final int numeric = itemData.getItemNo();
final short data = itemData.getItemData();
@ -291,4 +288,31 @@ public class LegacyItemDbProvider extends ItemDbProvider {
return false;
}
}
public static class LegacyItemData extends ItemData {
private LegacyItemData(String itemName, Material material, final int legacyId, final short itemData, String nbt) {
this.itemName = itemName;
this.material = material;
this.legacyId = legacyId;
this.itemData = itemData;
this.nbt = nbt;
}
@Override
public int hashCode() {
return (31 * legacyId) ^ itemData;
}
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (!(o instanceof ItemData)) {
return false;
}
ItemData pairo = (ItemData) o;
return this.legacyId == pairo.getItemNo() && this.itemData == pairo.getItemData();
}
}
}

View File

@ -187,35 +187,13 @@ public abstract class ItemDbProvider implements Provider {
this.potionMetaProvider = potionMetaProvider;
}
public static class ItemData {
final private String itemName;
final private Material material;
private int legacyId;
private short itemData;
final private String nbt;
private PotionData potionData;
public ItemData(String itemName, Material material, String nbt) {
this.itemName = itemName;
this.material = material;
this.nbt = nbt;
}
public ItemData(String itemName, Material material, String nbt, PotionData potionData) {
this.itemName = itemName;
this.material = material;
this.nbt = nbt;
this.potionData = potionData;
}
@Deprecated
public ItemData(String itemName, Material material, final int legacyId, final short itemData, String nbt) {
this.itemName = itemName;
this.material = material;
this.legacyId = legacyId;
this.itemData = itemData;
this.nbt = nbt;
}
public abstract static class ItemData {
protected String itemName;
protected Material material;
protected int legacyId;
protected short itemData;
protected String nbt;
protected PotionData potionData;
public String getItemName() {
return itemName;
@ -225,7 +203,6 @@ public abstract class ItemDbProvider implements Provider {
return material;
}
@Deprecated
public int getItemNo() {
return legacyId;
}
@ -238,11 +215,6 @@ public abstract class ItemDbProvider implements Provider {
return nbt;
}
@Override
public int hashCode() {
return (31 * material.hashCode()) ^ itemData;
}
@Override
public boolean equals(Object o) {
if (o == null) {