+ SimpleI18n

+ fixed iteminfo command
This commit is contained in:
坏黑
2019-05-22 08:41:34 +08:00
parent 47d481bbfc
commit 0d8e9f60f2
12 changed files with 3468 additions and 721 deletions

View File

@@ -102,7 +102,7 @@ public class Main extends JavaPlugin {
// 载入完成
TLocale.Logger.info("NOTIFY.SUCCESS-LOADED", getDescription().getAuthors().toString(), getDescription().getVersion(), String.valueOf(TabooLib.getVersion()));
// 文件保存
Bukkit.getScheduler().runTaskTimerAsynchronously(this, DataUtils::saveAllCaches, 20, 20 * 120);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> DataUtils.saveAllCaches(), 20, 20 * 120);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> PlayerDataManager.saveAllCaches(true, false), 20, 20 * 60);
// 文件监控
TLib.getTLib().getConfigWatcher().addSimpleListener(new File(getDataFolder(), "config.yml"), () -> {

View File

@@ -161,6 +161,8 @@ public class TabooLib {
return 11200;
} else if (version.startsWith("v1_13")) {
return 11300;
} else if (version.startsWith("v1_14")) {
return 11400;
}
return 0;
}

View File

@@ -202,7 +202,6 @@ public class TabooLibMainCommand extends BaseMainCommand {
@Override
public void onCommand(CommandSender sender, Command command, String label, String[] args) {
ItemUtils.reloadItemCache();
ItemUtils.reloadItemName();
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.ITEMRELOAD.SUCCESS-RELOAD");
}
};

View File

@@ -2,7 +2,9 @@ package me.skymc.taboolib.common.nms;
import me.skymc.taboolib.common.function.TFunction;
import me.skymc.taboolib.common.versioncontrol.SimpleVersionControl;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
/**
* @Author 坏黑
@@ -21,6 +23,10 @@ public abstract class NMSHandler {
}
}
abstract public String getName(ItemStack itemStack);
abstract public String getName(Entity entity);
abstract public void sendTitle(Player player, String title, int titleFadein, int titleStay, int titleFadeout, String subtitle, int subtitleFadein, int subtitleStay, int subtitleFadeout);
abstract public void sendActionBar(Player player, String text);

View File

@@ -2,12 +2,24 @@ package me.skymc.taboolib.common.nms;
import me.skymc.taboolib.TabooLib;
import me.skymc.taboolib.common.packet.TPacketHandler;
import me.skymc.taboolib.nms.NMSUtils;
import net.minecraft.server.v1_12_R1.ChatMessageType;
import net.minecraft.server.v1_12_R1.EntityVillager;
import net.minecraft.server.v1_12_R1.MinecraftServer;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_13_R2.IRegistry;
import net.minecraft.server.v1_8_R3.ChatComponentText;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftVillager;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Villager;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import java.lang.reflect.Field;
/**
* @Author 坏黑
@@ -15,6 +27,114 @@ import org.bukkit.entity.Player;
*/
public class NMSHandlerImpl extends NMSHandler {
private Field entityTypesField;
public NMSHandlerImpl() {
if (TabooLib.getVersionNumber() >= 11300) {
for (Field declaredField : NMSUtils.getNMSClass("Entity").getDeclaredFields()) {
if (declaredField.getType().getSimpleName().equals("EntityTypes")) {
declaredField.setAccessible(true);
entityTypesField = declaredField;
break;
}
}
}
}
@Override
public String getName(ItemStack itemStack) {
Object nmsItem = CraftItemStack.asNMSCopy(itemStack);
if (TabooLib.getVersionNumber() >= 11300) {
String name = ((net.minecraft.server.v1_8_R3.ItemStack) nmsItem).getItem().getName();
if (itemStack.getItemMeta() instanceof PotionMeta) {
name += ".effect." + ((net.minecraft.server.v1_8_R3.ItemStack) nmsItem).getTag().getString("Potion").replaceAll("minecraft:(strong_|long_)?", "");
}
return name;
} else {
String name = ((net.minecraft.server.v1_12_R1.ItemStack) nmsItem).getItem().a((net.minecraft.server.v1_12_R1.ItemStack) nmsItem);
if (itemStack.getItemMeta() instanceof PotionMeta) {
return name.replace("item.", "") + ".effect." + ((net.minecraft.server.v1_8_R3.ItemStack) nmsItem).getTag().getString("Potion").replaceAll("minecraft:(strong_|long_)?", "");
}
return name + ".name";
}
}
@Override
public String getName(Entity entity) {
if (TabooLib.getVersionNumber() < 11300) {
try {
if (entity instanceof Player) {
return "entity.Player.name";
}
if (entity instanceof Villager) {
String name = "name";
Object villager = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftVillager) entity).getHandle();
Object export = new NBTTagCompound();
((EntityVillager) villager).b((NBTTagCompound) export);
int career = ((NBTTagCompound) export).getInt("Career");
switch (((EntityVillager) villager).getProfession()) {
case 0:
if (career == 1) {
name = "farmer";
} else if (career == 2) {
name = "fisherman";
} else if (career == 3) {
name = "shepherd";
} else if (career == 4) {
name = "fletcher";
}
break;
case 1:
if (career == 1) {
name = "librarian";
} else if (career == 2) {
name = "cartographer";
}
break;
case 2:
name = "cleric";
break;
case 3:
if (career == 1) {
name = "armor";
} else if (career == 2) {
name = "weapon";
} else if (career == 3) {
name = "tool";
}
break;
case 4:
if (career == 1) {
name = "butcher";
} else if (career == 2) {
name = "leather";
}
break;
case 5:
name = "nitwit";
break;
}
return "entity.Villager." + name;
}
return "entity." + entity.getType().getEntityClass().getSimpleName() + ".name";
} catch (Throwable t) {
t.printStackTrace();
}
return "entity.null";
} else {
try {
String name = "entity.minecraft." + IRegistry.ENTITY_TYPE.getKey((net.minecraft.server.v1_13_R2.EntityTypes<?>) entityTypesField.get(((org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity) entity).getHandle())).getKey();
if (entity instanceof Villager && ((CraftVillager) entity).getCareer() != null) {
name += "." + String.valueOf(((CraftVillager) entity).getCareer()).toLowerCase();
}
return name;
} catch (Throwable t) {
t.printStackTrace();
}
return "entity.null";
}
}
@Override
public void sendTitle(Player player, String title, int titleFadein, int titleStay, int titleFadeout, String subtitle, int subtitleFadein, int subtitleStay, int subtitleFadeout) {
TPacketHandler.sendPacket(player, new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.TIMES, new ChatComponentText(String.valueOf(title)), titleFadein, titleStay, titleFadeout));

View File

@@ -0,0 +1,81 @@
package me.skymc.taboolib.common.util;
import com.ilummc.tlib.resources.TLocaleLoader;
import me.skymc.taboolib.TabooLib;
import me.skymc.taboolib.common.function.TFunction;
import me.skymc.taboolib.common.nms.NMSHandler;
import me.skymc.taboolib.fileutils.ConfigUtils;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SpawnEggMeta;
import org.bukkit.plugin.Plugin;
import java.io.File;
import java.util.Optional;
/**
* @Author 坏黑
* @Since 2019-05-22 1:16
*/
@TFunction(enable = "init")
public class SimpleI18n {
private static FileConfiguration lang;
static void init() {
File localeFile = getLocaleFile(TabooLib.instance());
if (localeFile == null) {
lang = new YamlConfiguration();
} else {
lang = ConfigUtils.load(TabooLib.instance(), localeFile);
}
}
public static String getCustomName(Entity entity) {
return entity != null ? Optional.ofNullable(entity.getCustomName()).orElse(getName(entity)) : getName(entity);
}
public static String getCustomName(ItemStack item) {
if (item != null) {
ItemMeta itemMeta = item.getItemMeta();
return itemMeta != null && itemMeta.hasDisplayName() ? itemMeta.getDisplayName() : getName(item);
}
return getName(item);
}
public static String getName(Entity entity) {
return entity == null ? "-" : lang.getString(NMSHandler.getHandler().getName(entity), entity.getName());
}
public static String getName(ItemStack item) {
if (item == null) {
return "-";
}
if (TabooLib.getVersionNumber() < 11300) {
ItemMeta itemMeta = item.getItemMeta();
if (itemMeta instanceof SpawnEggMeta) {
String spawnEggType = lang.getString("entity." + ((SpawnEggMeta) itemMeta).getSpawnedType().getEntityClass().getSimpleName() + ".name");
if (spawnEggType != null) {
return lang.getString(NMSHandler.getHandler().getName(item), item.getType().name().toLowerCase().replace("_", "")) + " " + spawnEggType;
}
}
}
return lang.getString(NMSHandler.getHandler().getName(item), item.getType().name().toLowerCase().replace("_", ""));
}
private static void releaseLocales(Plugin plugin) {
TLocaleLoader.getLocalePriority().stream().filter(localeName -> !new File(plugin.getDataFolder(), "simpleI18n/" + getVersion() + "/" + localeName + ".yml").exists() && plugin.getResource("simpleI18n/" + getVersion() + "/" + localeName + ".yml") != null).forEach(localeName -> plugin.saveResource("simpleI18n/" + getVersion() + "/" + localeName + ".yml", true));
}
private static File getLocaleFile(Plugin plugin) {
releaseLocales(plugin);
return TLocaleLoader.getLocalePriority().stream().map(localeName -> new File(plugin.getDataFolder(), "simpleI18n/" + getVersion() + "/" + localeName + ".yml")).filter(File::exists).findFirst().orElse(null);
}
private static String getVersion() {
return TabooLib.getVersionNumber() < 11300 ? "low" : "high";
}
}

View File

@@ -4,8 +4,8 @@ import com.ilummc.tlib.resources.TLocale;
import me.clip.placeholderapi.PlaceholderAPI;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.TabooLib;
import me.skymc.taboolib.common.configuration.TConfiguration;
import me.skymc.taboolib.common.function.TFunction;
import me.skymc.taboolib.common.util.SimpleI18n;
import me.skymc.taboolib.fileutils.ConfigUtils;
import me.skymc.taboolib.itemnbtapi.NBTItem;
import me.skymc.taboolib.itemnbtapi.NBTList;
@@ -44,7 +44,6 @@ public class ItemUtils {
private static File finalItemsFolder;
private static FileConfiguration itemDir;
private static FileConfiguration itemCache;
private static TConfiguration itemName;
private static LinkedHashMap<String, String> itemLib = new LinkedHashMap<>();
private static LinkedHashMap<String, ItemStack> itemCaches = new LinkedHashMap<>();
private static LinkedHashMap<String, ItemStack> itemCachesFinal = new LinkedHashMap<>();
@@ -52,7 +51,6 @@ public class ItemUtils {
public static void init() {
try {
reloadItemDir();
reloadItemName();
reloadItemCache();
} catch (Exception e) {
TLocale.Logger.error("ITEM-UTILS.FAIL-LOAD-ITEMS", e.toString());
@@ -66,15 +64,6 @@ public class ItemUtils {
}
}
public static void reloadItemName() {
itemName = TConfiguration.createInResource(Main.getInst(), "Language/ITEM_NAME.yml");
itemName.listener(() -> {
itemName.getConfigurationSection("").getKeys(false).forEach(a -> itemLib.put(a, itemName.getString(a)));
TabooLib.debug("Loaded " + itemLib.size() + " items name.");
// TLocale.Logger.info("ITEM-UTILS.SUCCESS-LOAD-NAMES", String.valueOf(itemLib.size()));
}).runListener();
}
public static void reloadItemCache() {
itemCaches.clear();
itemCachesFinal.clear();
@@ -128,11 +117,7 @@ public class ItemUtils {
}
public static String getCustomName(ItemStack item) {
if (item == null || item.getType().equals(Material.AIR)) {
return TLocale.asString("ITEM-UTILS.EMPTY-ITEM");
}
int data = item.getType().getMaxDurability() == 0 ? item.getDurability() : 0;
return item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : itemLib.get(item.getType() + ":" + data) == null ? item.getType().toString() : itemLib.get(item.getType() + ":" + data);
return SimpleI18n.getCustomName(item);
}
public static ItemStack setName(ItemStack i, String n) {
@@ -157,7 +142,7 @@ public class ItemUtils {
}
public static boolean isNull(ItemStack item) {
return item == null || item.getType().equals(Material.AIR);
return item == null || item.getType() == Material.AIR;
}
public static boolean isName(ItemStack i, String a) {