package tc.oc.commons.bukkit.localization;
import java.util.Optional;
import javax.annotation.Nullable;
import javax.inject.Inject;
import org.bukkit.Material;
import org.bukkit.material.MaterialData;
import tc.oc.commons.bukkit.util.NMSHacks;
import tc.oc.commons.core.util.Optionals;
public class BukkitTranslatorImpl implements BukkitTranslator {
private enum Substance {
GRASS("tile.tallgrass.name"),
COAL("item.coal.name"),
BRICK("item.brick.name"),
IRON("material.iron"),
QUARTZ("material.quartz"),
GOLD("material.gold"),
DIAMOND("item.diamond.name"),
EMERALD("item.emerald.name"),
REDSTONE("item.redstone.name"),
;
final String key;
String key() { return key; }
Substance(String key) {
this.key = key;
}
}
private final Translator translator;
@Inject BukkitTranslatorImpl(Translator translator) {
this.translator = translator;
}
private @Nullable Substance substance(Material material) {
switch(material) {
case GRASS:
return Substance.GRASS;
case COAL_BLOCK:
return Substance.COAL;
case BRICK:
case CLAY_BRICK:
return Substance.BRICK;
case IRON_NUGGET:
case IRON_INGOT:
case IRON_BLOCK:
return Substance.IRON;
case QUARTZ:
case QUARTZ_BLOCK:
return Substance.QUARTZ;
case GOLD_NUGGET:
case GOLD_INGOT:
case GOLD_BLOCK:
return Substance.GOLD;
case DIAMOND:
case DIAMOND_BLOCK:
return Substance.DIAMOND;
case EMERALD:
case EMERALD_BLOCK:
return Substance.EMERALD;
case REDSTONE:
case REDSTONE_BLOCK:
case REDSTONE_WIRE:
return Substance.REDSTONE;
default:
return null;
}
}
@Override
public Optional<String> materialKey(Material material) {
return Optionals.first(
Optional.ofNullable(substance(material))
.map(Substance::key),
Optional.ofNullable(NMSHacks.getTranslationKey(material))
);
}
@Override
public Optional<String> materialKey(MaterialData material) {
return Optionals.first(
Optional.ofNullable(substance(material.getItemType()))
.map(Substance::key),
Optional.ofNullable(NMSHacks.getTranslationKey(material))
);
}
}