版本更新至:3.78
调整:数据保存提示现在默认关闭了 新增:Language2.yml 新增 [book] 类型示范
This commit is contained in:
parent
bfb2015b20
commit
c89fcf4116
@ -11,6 +11,9 @@
|
|||||||
# 30: 大标题不兼容当前版本服务器
|
# 30: 大标题不兼容当前版本服务器
|
||||||
# 31: 动作栏不兼容当前版本服务器
|
# 31: 动作栏不兼容当前版本服务器
|
||||||
# 40: 语言文件类型异常
|
# 40: 语言文件类型异常
|
||||||
|
# 50: BOOK 语言类型指定 option 不存在
|
||||||
|
# 51: BOOK 语言类型识别异常
|
||||||
|
# 52: BOOK 语言类型 url 地址错误(http:// or https://)
|
||||||
|
|
||||||
# 正常提示
|
# 正常提示
|
||||||
TEXT: '&f正常的提示'
|
TEXT: '&f正常的提示'
|
||||||
@ -90,3 +93,22 @@ SOUND-TEXT:
|
|||||||
- '单行文本 - 2'
|
- '单行文本 - 2'
|
||||||
- '[sound]'
|
- '[sound]'
|
||||||
- 'BLOCK_ANVIL_USE-1-1'
|
- 'BLOCK_ANVIL_USE-1-1'
|
||||||
|
|
||||||
|
# 书本界面
|
||||||
|
BOOK-TEXT:
|
||||||
|
- '[book]'
|
||||||
|
- '书本单行文本'
|
||||||
|
- '&4书本单行文本'
|
||||||
|
- '&4&l书本单行文本'
|
||||||
|
- '[page]'
|
||||||
|
- '<@1>'
|
||||||
|
- '<@1> | <@1> 单行重复变量'
|
||||||
|
- '<@1> | <@2> 单行不同变量'
|
||||||
|
- '@option:1'
|
||||||
|
- ' text: 文本'
|
||||||
|
- ' command: 执行命令'
|
||||||
|
- ' showtext: 显示文本'
|
||||||
|
- '@option:2'
|
||||||
|
- ' text: 测试'
|
||||||
|
- ' command: 执行命令'
|
||||||
|
- ' showtext: 显示文本'
|
@ -35,7 +35,7 @@ DELETE-VARIABLE: false
|
|||||||
ENABLE-UUID: false
|
ENABLE-UUID: false
|
||||||
|
|
||||||
# 是否隐藏保存数据的提示
|
# 是否隐藏保存数据的提示
|
||||||
HIDE-NOTIFY: false
|
HIDE-NOTIFY: true
|
||||||
|
|
||||||
# 数据库信息
|
# 数据库信息
|
||||||
MYSQL:
|
MYSQL:
|
||||||
|
@ -6,7 +6,7 @@ website: http://www.15imc.com/index.html
|
|||||||
|
|
||||||
main: me.skymc.taboolib.Main
|
main: me.skymc.taboolib.Main
|
||||||
|
|
||||||
version: 3.77
|
version: 3.78
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
taboolib:
|
taboolib:
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +0,0 @@
|
|||||||
#Sat Mar 10 19:32:51 CST 2018
|
|
||||||
gradle.version=4.5
|
|
282
src/main/java/me/skymc/taboolib/entity/EntityTag.java
Normal file
282
src/main/java/me/skymc/taboolib/entity/EntityTag.java
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
package me.skymc.taboolib.entity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import me.skymc.taboolib.Main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 伪 - MetaData
|
||||||
|
*
|
||||||
|
* @author sky
|
||||||
|
* @since 2018-03-11 11:43:41
|
||||||
|
*/
|
||||||
|
public class EntityTag {
|
||||||
|
|
||||||
|
private static EntityTag inst;
|
||||||
|
private static ConcurrentHashMap<UUID, ConcurrentHashMap<String, Object>> entityData = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
private EntityTag() {
|
||||||
|
new BukkitRunnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (UUID uuid : entityData.keySet()) {
|
||||||
|
if (EntityUtils.getEntityWithUUID(uuid) == null) {
|
||||||
|
entityData.remove(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskTimerAsynchronously(Main.getInst(), 20 * 180, 20 * 180);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EntityTag getInst() {
|
||||||
|
if (inst == null) {
|
||||||
|
synchronized (EntityTag.class) {
|
||||||
|
if (inst == null) {
|
||||||
|
inst = new EntityTag();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置标签
|
||||||
|
*
|
||||||
|
* @param entity 实体
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
*/
|
||||||
|
public void set(String key, Object value, Entity entity) {
|
||||||
|
if (contains(entity)) {
|
||||||
|
entityData.get(entity.getUniqueId()).put(key, value);
|
||||||
|
} else {
|
||||||
|
ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
|
||||||
|
map.put(key, value);
|
||||||
|
entityData.put(entity.getUniqueId(), map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置标签
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
* @param entity 实体
|
||||||
|
*/
|
||||||
|
public void set(String key, Object value, Entity... entities) {
|
||||||
|
for (Entity entity : entities) set(key, value, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置标签
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
* @param entity 实体
|
||||||
|
*/
|
||||||
|
public void set(String key, Object value, List<Entity> entities) {
|
||||||
|
for (Entity entity : entities) set(key, value, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除标签
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
* @param entity 实体
|
||||||
|
*/
|
||||||
|
public void remove(String key, Object value, Entity entity) {
|
||||||
|
if (contains(entity)) {
|
||||||
|
entityData.get(entity.getUniqueId()).remove(key);
|
||||||
|
if (entityData.get(entity.getUniqueId()).size() == 0) {
|
||||||
|
entityData.remove(entity.getUniqueId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除标签
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
* @param entities 实体
|
||||||
|
*/
|
||||||
|
public void remove(String key, Object value, Entity... entities) {
|
||||||
|
for (Entity entity : entities) remove(key, value, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除标签
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param value 值
|
||||||
|
* @param entities 实体
|
||||||
|
*/
|
||||||
|
public void remove(String key, Object value, List<Entity> entities) {
|
||||||
|
for (Entity entity : entities) remove(key, value, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查数据
|
||||||
|
*
|
||||||
|
* @param entity 实体
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public boolean contains(Entity entity) {
|
||||||
|
return entityData.containsKey(entity.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查标签
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public boolean hasKey(String key, Entity entity) {
|
||||||
|
if (contains(entity)) {
|
||||||
|
return entityData.get(entity.getUniqueId()).containsKey(key);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return Object
|
||||||
|
*/
|
||||||
|
public Object get(String key, Entity entity) {
|
||||||
|
if (contains(entity)) {
|
||||||
|
return entityData.get(entity.getUniqueId()).get(key);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 值
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getString(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object instanceof String) {
|
||||||
|
return (String) object;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 值
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public int getInteger(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (int) object;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 值
|
||||||
|
* @return long
|
||||||
|
*/
|
||||||
|
public long getLong(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (long) object;
|
||||||
|
}
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public boolean getBoolean(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (boolean) object;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return double
|
||||||
|
*/
|
||||||
|
public double getDouble(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (double) object;
|
||||||
|
}
|
||||||
|
return 0D;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public double getFloat(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (float) object;
|
||||||
|
}
|
||||||
|
return 0F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return short
|
||||||
|
*/
|
||||||
|
public short getShort(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (short) object;
|
||||||
|
}
|
||||||
|
return (short) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param entity 实体
|
||||||
|
* @return byte
|
||||||
|
*/
|
||||||
|
public byte getByte(String key, Entity entity) {
|
||||||
|
Object object = get(key, entity);
|
||||||
|
if (object != null) {
|
||||||
|
return (byte) object;
|
||||||
|
}
|
||||||
|
return (byte) 0;
|
||||||
|
}
|
||||||
|
}
|
@ -16,17 +16,25 @@ import com.comphenix.protocol.ProtocolLibrary;
|
|||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||||
|
|
||||||
import me.skymc.taboolib.methods.MethodsUtils;
|
import lombok.Getter;
|
||||||
|
import me.skymc.taboolib.exception.PluginNotFoundException;
|
||||||
|
|
||||||
public class EntityUtils implements Listener {
|
public class EntityUtils implements Listener {
|
||||||
|
|
||||||
public static Entity lastSpawned = null;
|
@Getter
|
||||||
|
private static Entity lastSpawnedEntity = null;
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void spawn(EntitySpawnEvent e) {
|
public void spawn(EntitySpawnEvent e) {
|
||||||
lastSpawned = e.getEntity();
|
lastSpawnedEntity = e.getEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 UUID 获取生物
|
||||||
|
*
|
||||||
|
* @param u
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static Entity getEntityWithUUID(UUID u) {
|
public static Entity getEntityWithUUID(UUID u) {
|
||||||
for (World w : Bukkit.getWorlds()) {
|
for (World w : Bukkit.getWorlds()) {
|
||||||
for (Entity e : w.getLivingEntities()) {
|
for (Entity e : w.getLivingEntities()) {
|
||||||
@ -38,6 +46,13 @@ public class EntityUtils implements Listener{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据 UUID 获取生物(单世界)
|
||||||
|
*
|
||||||
|
* @param u
|
||||||
|
* @param world
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static Entity getEntityWithUUID_World(UUID u, World world) {
|
public static Entity getEntityWithUUID_World(UUID u, World world) {
|
||||||
for (Entity e : world.getLivingEntities()) {
|
for (Entity e : world.getLivingEntities()) {
|
||||||
if (e.getUniqueId().equals(u)) {
|
if (e.getUniqueId().equals(u)) {
|
||||||
@ -54,6 +69,14 @@ public class EntityUtils implements Listener{
|
|||||||
* @param entity
|
* @param entity
|
||||||
*/
|
*/
|
||||||
public static void addGlow(Player player,Entity entity) {
|
public static void addGlow(Player player,Entity entity) {
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) {
|
||||||
|
try {
|
||||||
|
throw new PluginNotFoundException("缺少前置插件 ProtocolLib");
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA);
|
PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA);
|
||||||
packet.getIntegers().write(0, entity.getEntityId());
|
packet.getIntegers().write(0, entity.getEntityId());
|
||||||
WrappedDataWatcher watcher = new WrappedDataWatcher();
|
WrappedDataWatcher watcher = new WrappedDataWatcher();
|
||||||
@ -75,6 +98,13 @@ public class EntityUtils implements Listener{
|
|||||||
* @param entity
|
* @param entity
|
||||||
*/
|
*/
|
||||||
public static void delGlow(Player player,Entity entity) {
|
public static void delGlow(Player player,Entity entity) {
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) {
|
||||||
|
try {
|
||||||
|
throw new PluginNotFoundException("缺少前置插件 ProtocolLib");
|
||||||
|
} catch (Exception e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA);
|
PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA);
|
||||||
packet.getIntegers().write(0, entity.getEntityId());
|
packet.getIntegers().write(0, entity.getEntityId());
|
||||||
WrappedDataWatcher watcher = new WrappedDataWatcher();
|
WrappedDataWatcher watcher = new WrappedDataWatcher();
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package me.skymc.taboolib.exception;
|
||||||
|
|
||||||
|
public class PluginNotFoundException extends Error {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -475540326950009346L;
|
||||||
|
|
||||||
|
public PluginNotFoundException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user