This commit is contained in:
坏黑
2018-05-07 14:43:57 +08:00
parent 7181c487f9
commit 6f34cbc2e0
152 changed files with 9256 additions and 9003 deletions

View File

@@ -1,272 +1,271 @@
package me.skymc.taboolib.entity;
import me.skymc.taboolib.Main;
import org.bukkit.entity.Entity;
import org.bukkit.scheduler.BukkitRunnable;
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 值
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... entities) {
for (Entity entity : entities) set(key, value, 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 值
*/
public void set(String key, Object value, List<Entity> entities) {
for (Entity entity : entities) set(key, value, entity);
}
/**
* 移除标签
*
* @param key 键
* @param entity 实体
*/
public Object remove(String key, Entity entity) {
if (contains(entity)) {
entityData.get(entity.getUniqueId()).remove(key);
if (entityData.get(entity.getUniqueId()).size() == 0) {
return entityData.remove(entity.getUniqueId());
}
}
return null;
}
/**
* 移除标签
*
* @param key 键
* @param entities 实体
*/
public void remove(String key, Entity... entities) {
for (Entity entity : entities) remove(key, entity);
}
/**
* 移除标签
*
* @param key 键
* @param entities 实体
*/
public void remove(String key, List<Entity> entities) {
for (Entity entity : entities) remove(key, 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) {
public void set(String key, Object value, Entity... entities) {
for (Entity entity : entities) set(key, value, entity);
}
/**
* 设置标签
*
* @param key
* @param value 值
*/
public void set(String key, Object value, List<Entity> entities) {
for (Entity entity : entities) set(key, value, entity);
}
/**
* 移除标签
*
* @param key 键
* @param entity 实体
*/
public Object remove(String key, Entity entity) {
if (contains(entity)) {
entityData.get(entity.getUniqueId()).remove(key);
if (entityData.get(entity.getUniqueId()).size() == 0) {
return entityData.remove(entity.getUniqueId());
}
}
return null;
}
/**
* 移除标签
*
* @param key
* @param entities 实体
*/
public void remove(String key, Entity... entities) {
for (Entity entity : entities) remove(key, entity);
}
/**
* 移除标签
*
* @param key 键
* @param entities 实体
*/
public void remove(String key, List<Entity> entities) {
for (Entity entity : entities) remove(key, 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) {
return contains(entity) && entityData.get(entity.getUniqueId()).containsKey(key);
}
/**
* 获取数据
*
* @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) {
/**
* 获取数据
*
* @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);
return object != null && (boolean) object;
}
/**
* 获取数据
*
* @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;
}
/**
* 获取数据
*
* @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;
}
}

View File

@@ -1,8 +1,10 @@
package me.skymc.taboolib.entity;
import java.lang.reflect.InvocationTargetException;
import java.util.UUID;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import me.skymc.taboolib.exception.PluginNotFoundException;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Entity;
@@ -11,72 +13,69 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntitySpawnEvent;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import lombok.Getter;
import me.skymc.taboolib.exception.PluginNotFoundException;
import java.lang.reflect.InvocationTargetException;
import java.util.UUID;
public class EntityUtils implements Listener {
@Getter
private static Entity lastSpawnedEntity = null;
@EventHandler
public void spawn(EntitySpawnEvent e) {
lastSpawnedEntity = e.getEntity();
}
/**
* 根据 UUID 获取生物
*
* @param u
* @return
*/
public static Entity getEntityWithUUID(UUID u) {
for (World w : Bukkit.getWorlds()) {
for (Entity e : w.getLivingEntities()) {
if (e.getUniqueId().equals(u)) {
return e;
}
}
}
return null;
}
/**
* 根据 UUID 获取生物(单世界)
*
* @param u
* @param world
* @return
*/
public static Entity getEntityWithUUID_World(UUID u, World world) {
for (Entity e : world.getLivingEntities()) {
if (e.getUniqueId().equals(u)) {
return e;
}
}
return null;
}
/**
* 设置生物发光ProcotolLib
*
* @param player
* @param entity
*/
public static void addGlow(Player player,Entity entity) {
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) {
try {
throw new PluginNotFoundException("缺少前置插件 ProtocolLib");
}
catch (Exception e) {
//
}
}
private static Entity lastSpawnedEntity = null;
public static Entity getLastSpawnedEntity() {
return lastSpawnedEntity;
}
@EventHandler
public void spawn(EntitySpawnEvent e) {
lastSpawnedEntity = e.getEntity();
}
/**
* 根据 UUID 获取生物
*
* @param u
* @return
*/
public static Entity getEntityWithUUID(UUID u) {
for (World w : Bukkit.getWorlds()) {
for (Entity e : w.getLivingEntities()) {
if (e.getUniqueId().equals(u)) {
return e;
}
}
}
return null;
}
/**
* 根据 UUID 获取生物(单世界)
*
* @param u
* @param world
* @return
*/
public static Entity getEntityWithUUID_World(UUID u, World world) {
for (Entity e : world.getLivingEntities()) {
if (e.getUniqueId().equals(u)) {
return e;
}
}
return null;
}
/**
* 设置生物发光ProcotolLib
*
* @param player
* @param 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);
packet.getIntegers().write(0, entity.getEntityId());
WrappedDataWatcher watcher = new WrappedDataWatcher();
@@ -85,26 +84,26 @@ public class EntityUtils implements Listener {
watcher.setObject(0, serializer, (byte) (0x40));
packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
/**
* 取消生物发光ProcotolLib
*
* @param player
* @param entity
*/
public static void delGlow(Player player,Entity entity) {
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) {
try {
throw new PluginNotFoundException("缺少前置插件 ProtocolLib");
} catch (Exception e) {
//
}
}
/**
* 取消生物发光ProcotolLib
*
* @param player
* @param 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);
packet.getIntegers().write(0, entity.getEntityId());
WrappedDataWatcher watcher = new WrappedDataWatcher();
@@ -113,7 +112,7 @@ public class EntityUtils implements Listener {
watcher.setObject(0, serializer, (byte) (0x0));
packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects());
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
} catch (InvocationTargetException e) {
e.printStackTrace();
}