TabooLib v4.21

+ 修复 TellrawJson 的逻辑问题,导致 showItem 无法正常显示。
+ 删除了 SQLExample
This commit is contained in:
坏黑 2018-08-28 23:48:33 +08:00
parent e34fe8cd29
commit f8ace276ea
7 changed files with 58 additions and 82 deletions

View File

@ -6,7 +6,7 @@
<groupId>me.skymc</groupId> <groupId>me.skymc</groupId>
<artifactId>TabooLib</artifactId> <artifactId>TabooLib</artifactId>
<version>4.2</version> <version>4.21</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

View File

@ -4,33 +4,29 @@ import com.ilummc.tlib.bungee.api.chat.*;
import com.ilummc.tlib.bungee.chat.ComponentSerializer; import com.ilummc.tlib.bungee.chat.ComponentSerializer;
import com.ilummc.tlib.logger.TLogger; import com.ilummc.tlib.logger.TLogger;
import com.ilummc.tlib.resources.TLocale; import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.inventory.ItemUtils;
import me.skymc.taboolib.methods.ReflectionUtils; import me.skymc.taboolib.methods.ReflectionUtils;
import me.skymc.taboolib.nms.NMSUtils; import me.skymc.taboolib.nms.NMSUtils;
import me.skymc.taboolib.other.NumberUtils;
import me.skymc.taboolib.string.ArrayUtils; import me.skymc.taboolib.string.ArrayUtils;
import me.skymc.taboolib.string.VariableFormatter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Array;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Arrays; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Author sky * @Author sky
* @Since 2018-05-26 14:42json * @Since 2018-05-26 14:42json
* @BuilderLevel 1.2
*/ */
public class TellrawJson { public class TellrawJson {
private BaseComponent[] components = TextComponent.fromLegacyText(""); private List<BaseComponent> components = new ArrayList<>();
private final Class<?> craftItemStackClazz = NMSUtils.getOBCClass("inventory.CraftItemStack"); private List<BaseComponent> componentsLatest = new ArrayList<>();
private final Class<?> nmsItemStackClazz = NMSUtils.getNMSClass("ItemStack"); private static final Class<?> craftItemStackClazz = NMSUtils.getOBCClass("inventory.CraftItemStack");
private final Class<?> nbtTagCompoundClazz = NMSUtils.getNMSClass("NBTTagCompound"); private static final Class<?> nmsItemStackClazz = NMSUtils.getNMSClass("ItemStack");
private final String INVALID_ITEM = "{id:stone,tag:{display:{Name:§c* Invalid ItemStack *}}}"; private static final Class<?> nbtTagCompoundClazz = NMSUtils.getNMSClass("NBTTagCompound");
private static final String INVALID_ITEM = "{id:stone,tag:{display:{Name:§c* Invalid ItemStack *}}}";
TellrawJson() { TellrawJson() {
} }
@ -39,12 +35,16 @@ public class TellrawJson {
return new TellrawJson(); return new TellrawJson();
} }
public void send(CommandSender sender) {
TLocale.Tellraw.send(sender, toRawMessage());
}
public String toRawMessage() { public String toRawMessage() {
return ComponentSerializer.toString(components); return ComponentSerializer.toString(getComponentsAll());
} }
public String toLegacyText() { public String toLegacyText() {
return TextComponent.toLegacyText(components); return TextComponent.toLegacyText(getComponentsAll());
} }
public TellrawJson newLine() { public TellrawJson newLine() {
@ -52,52 +52,47 @@ public class TellrawJson {
} }
public TellrawJson append(String text) { public TellrawJson append(String text) {
Arrays.stream(TextComponent.fromLegacyText(text)).forEach(component -> this.components = ArrayUtils.arrayAppend(this.components, component)); appendComponents();
componentsLatest.addAll(ArrayUtils.asList(TextComponent.fromLegacyText(text)));
return this; return this;
} }
public TellrawJson append(TellrawJson json) { public TellrawJson append(TellrawJson json) {
BaseComponent[] newArray = new BaseComponent[components.length + json.components.length]; appendComponents();
System.arraycopy(components, 0, newArray, 0, components.length); componentsLatest.addAll(ArrayUtils.asList(json.getComponentsAll()));
System.arraycopy(json.components, 0, newArray, components.length, json.components.length);
components = newArray;
return this; return this;
} }
public TellrawJson hoverText(String text) { public TellrawJson hoverText(String text) {
getLatestComponent().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(text).create())); getLatestComponent().forEach(component -> component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(text).create())));
return this; return this;
} }
public TellrawJson hoverItem(ItemStack itemStack) { public TellrawJson hoverItem(ItemStack itemStack) {
getLatestComponent().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new ComponentBuilder(getItemComponent(itemStack)).create())); getLatestComponent().forEach(component -> component.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new ComponentBuilder(getItemComponent(itemStack)).create())));
return this; return this;
} }
public TellrawJson clickCommand(String command) { public TellrawJson clickCommand(String command) {
getLatestComponent().setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)); getLatestComponent().forEach(component -> component.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command)));
return this; return this;
} }
public TellrawJson clickSuggest(String command) { public TellrawJson clickSuggest(String command) {
getLatestComponent().setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command)); getLatestComponent().forEach(component -> component.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command)));
return this; return this;
} }
public TellrawJson clickOpenURL(String url) { public TellrawJson clickOpenURL(String url) {
getLatestComponent().setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)); getLatestComponent().forEach(component -> component.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)));
return this; return this;
} }
public TellrawJson clickChangePage(int page) { public TellrawJson clickChangePage(int page) {
getLatestComponent().setClickEvent(new ClickEvent(ClickEvent.Action.CHANGE_PAGE, String.valueOf(page))); getLatestComponent().forEach(component -> component.setClickEvent(new ClickEvent(ClickEvent.Action.CHANGE_PAGE, String.valueOf(page))));
return this; return this;
} }
public void send(CommandSender sender) {
TLocale.Tellraw.send(sender, toRawMessage());
}
public String getItemComponent(ItemStack itemStack) { public String getItemComponent(ItemStack itemStack) {
try { try {
Method asNMSCopyMethod = ReflectionUtils.getMethod(craftItemStackClazz, "asNMSCopy", ItemStack.class); Method asNMSCopyMethod = ReflectionUtils.getMethod(craftItemStackClazz, "asNMSCopy", ItemStack.class);
@ -106,7 +101,7 @@ public class TellrawJson {
Object nmsItemStackObj = asNMSCopyMethod.invoke(null, itemStack); Object nmsItemStackObj = asNMSCopyMethod.invoke(null, itemStack);
return saveNmsItemStackMethod.invoke(nmsItemStackObj, nmsNbtTagCompoundObj).toString(); return saveNmsItemStackMethod.invoke(nmsItemStackObj, nmsNbtTagCompoundObj).toString();
} catch (Throwable t) { } catch (Throwable t) {
TLogger.getGlobalLogger().error("failed to serialize itemstack to nms item: " + t.toString()); TLogger.getGlobalLogger().error("failed to serialize bukkit item to nms item: " + t.toString());
return INVALID_ITEM; return INVALID_ITEM;
} }
} }
@ -117,12 +112,17 @@ public class TellrawJson {
// //
// ********************************* // *********************************
private BaseComponent getLatestComponent() { private List<BaseComponent> getLatestComponent() {
return components[components.length - 1]; return componentsLatest;
} }
private void setLatestComponent(BaseComponent component) { private void setLatestComponent(BaseComponent... component) {
components[components.length - 1] = component; componentsLatest.addAll(ArrayUtils.asList(component));
}
private void appendComponents() {
components.addAll(componentsLatest);
componentsLatest.clear();
} }
// ********************************* // *********************************
@ -131,12 +131,17 @@ public class TellrawJson {
// //
// ********************************* // *********************************
public BaseComponent[] getComponents() {
return components;
}
public void setComponents(BaseComponent[] components) { public void setComponents(BaseComponent[] components) {
this.components = components; this.components = ArrayUtils.asList(components);
} }
public BaseComponent[] getComponents() {
return components.toArray(new BaseComponent[0]);
}
public BaseComponent[] getComponentsAll() {
List<BaseComponent> components = new ArrayList<>(this.components);
components.addAll(componentsLatest);
return components.toArray(new BaseComponent[0]);
}
} }

View File

@ -3,7 +3,9 @@ package me.skymc.taboolib.listener;
import me.skymc.taboolib.Main; import me.skymc.taboolib.Main;
import me.skymc.taboolib.TabooLib; import me.skymc.taboolib.TabooLib;
import me.skymc.taboolib.database.PlayerDataManager; import me.skymc.taboolib.database.PlayerDataManager;
import me.skymc.taboolib.inventory.ItemUtils;
import me.skymc.taboolib.itemnbtapi.NBTItem; import me.skymc.taboolib.itemnbtapi.NBTItem;
import me.skymc.taboolib.json.tellraw.TellrawJson;
import me.skymc.taboolib.message.MsgUtils; import me.skymc.taboolib.message.MsgUtils;
import me.skymc.taboolib.permission.PermissionUtils; import me.skymc.taboolib.permission.PermissionUtils;
import me.skymc.taboolib.playerdata.DataUtils; import me.skymc.taboolib.playerdata.DataUtils;
@ -30,14 +32,19 @@ public class ListenerPlayerCommand implements Listener {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@EventHandler @EventHandler
public void cmd(PlayerCommandPreprocessEvent e) { public void cmd(PlayerCommandPreprocessEvent e) {
if ("/unbreakable".equals(e.getMessage()) && PermissionUtils.hasPermission(e.getPlayer(), "taboolib.unbreakable")) { if (e.getMessage().equals("/unbreakable") && PermissionUtils.hasPermission(e.getPlayer(), "taboolib.unbreakable")) {
e.setCancelled(true); e.setCancelled(true);
NBTItem nbt = new NBTItem(e.getPlayer().getItemInHand());
NBTItem nbti = new NBTItem(e.getPlayer().getItemInHand()); nbt.setInteger("Unbreakable", 1);
nbti.setInteger("Unbreakable", 1); e.getPlayer().setItemInHand(nbt.getItem());
e.getPlayer().setItemInHand(nbti.getItem());
MsgUtils.send(e.getPlayer(), "Success!"); MsgUtils.send(e.getPlayer(), "Success!");
} else if (e.getMessage().equals("/tellrawTest") && PermissionUtils.hasPermission(e.getPlayer(), "taboolib.tellraw")) {
e.setCancelled(true);
TellrawJson.create()
.append("§8[§3§lTabooLib§8] §7TellrawJson Test: §f[")
.append(ItemUtils.getCustomName(e.getPlayer().getItemInHand())).hoverItem(e.getPlayer().getItemInHand())
.append("§f]")
.send(e.getPlayer());
} }
} }
} }

View File

@ -1,31 +0,0 @@
package me.skymc.taboolib.mysql.builder;
import com.zaxxer.hikari.HikariDataSource;
import org.bukkit.plugin.java.JavaPlugin;
/**
* @Author sky
* @Since 2018-07-02 23:43
*/
public class SQLExample extends JavaPlugin {
private SQLHost sqlHost;
private SQLTable sqlTable;
private HikariDataSource dataSource;
@Override
public void onEnable() {
int value = sqlTable.executeQuery("select * from table where username = ?")
.dataSource(dataSource)
.statement(statement -> statement.setString(1, "BlackSKY"))
.resultNext(result -> result.getInt("value"))
.run(0, 0);
sqlTable.executeUpdate("statement table set value = ? where username = ?")
.dataSource(dataSource)
.statement(statement -> {
statement.setInt(1, 999);
statement.setString(2, "BlackSKY");
}).run();
}
}

View File

@ -4,7 +4,6 @@ import com.ilummc.tlib.util.Strings;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import java.text.MessageFormat;
import java.util.Objects; import java.util.Objects;
/** /**

View File

@ -5,8 +5,6 @@ import me.skymc.taboolib.mysql.builder.query.RunnableQuery;
import me.skymc.taboolib.mysql.builder.query.RunnableUpdate; import me.skymc.taboolib.mysql.builder.query.RunnableUpdate;
import me.skymc.taboolib.string.ArrayUtils; import me.skymc.taboolib.string.ArrayUtils;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Arrays; import java.util.Arrays;
/** /**

View File

@ -6,10 +6,8 @@ import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import me.skymc.taboolib.Main; import me.skymc.taboolib.Main;
import me.skymc.taboolib.fileutils.ConfigUtils; import me.skymc.taboolib.fileutils.ConfigUtils;
import me.skymc.taboolib.fileutils.FileUtils;
import me.skymc.taboolib.mysql.builder.SQLHost; import me.skymc.taboolib.mysql.builder.SQLHost;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;