TabooLib/src/main/scala/io/izzel/taboolib/module/nms/NMS.java

117 lines
4.1 KiB
Java

package io.izzel.taboolib.module.nms;
import com.google.common.collect.Lists;
import io.izzel.taboolib.module.inject.TInject;
import io.izzel.taboolib.module.nms.impl.Type;
import io.izzel.taboolib.module.nms.impl.Position;
import io.izzel.taboolib.module.nms.nbt.Attribute;
import io.izzel.taboolib.module.nms.nbt.NBTAttribute;
import io.izzel.taboolib.module.nms.nbt.NBTCompound;
import io.izzel.taboolib.module.nms.nbt.NBTList;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
* @Author 坏黑
* @Since 2018-11-09 14:38
*/
public abstract class NMS {
@TInject(asm = "io.izzel.taboolib.module.nms.NMSImpl")
private static NMS impl;
public static NMS handle() {
return impl;
}
abstract public void openBook(Player player, ItemStack book);
abstract public boolean isRunning();
abstract public Object toPacketPlayOutWorldParticles(Particle var1, boolean var2, float var3, float var4, float var5, float var6, float var7, float var8, float var9, int var10, Object var11);
abstract public double[] getTPS();
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);
abstract public Object _NBT(ItemStack itemStack);
abstract public ItemStack _NBT(ItemStack itemStack, Object compound);
public NBTCompound loadNBT(ItemStack itemStack) {
return (NBTCompound) _NBT(itemStack);
}
public ItemStack saveNBT(ItemStack itemStack, NBTCompound compound) {
return _NBT(itemStack, compound);
}
public List<NBTAttribute> getAttribute(ItemStack item) {
NBTCompound nbt = loadNBT(item);
return !nbt.containsKey("AttributeModifiers") ? Lists.newCopyOnWriteArrayList() : nbt.get("AttributeModifiers").asList().stream().map(element -> NBTAttribute.fromNBT(element.asCompound())).collect(Collectors.toCollection(CopyOnWriteArrayList::new));
}
public ItemStack setAttribute(ItemStack item, List<NBTAttribute> attributes) {
NBTCompound nbt = loadNBT(item);
nbt.put("AttributeModifiers", attributes.stream().map(NBTAttribute::toNBT).collect(Collectors.toCollection(NBTList::new)));
return saveNBT(item, nbt);
}
abstract public List<NBTAttribute> getBaseAttribute(ItemStack item);
abstract public Object toNMS(Attribute attribute);
abstract public Entity getEntityById(int id);
abstract public Position fromBlockPosition(Object blockPosition);
abstract public void openSignEditor(Player player, Block block);
abstract public boolean inBoundingBox(Entity entity, Vector vector);
abstract public Location getLastLocation(ProjectileHitEvent event);
abstract public void sendPacketEntityDestroy(Player player, int entity);
abstract public void sendPacketEntityTeleport(Player player, int entity, Location location);
abstract public <T extends Entity> T spawn(Location location, Class<T> entity, Consumer<T> e);
abstract public Object ofChatComponentText(String source);
abstract public Class<?> asNMS(String name);
abstract public Object asEntityType(String name);
abstract public boolean createLight(Block block, Type lightType, int lightLevel);
abstract public boolean deleteLight(Block block, Type lightType);
abstract public void setRawLightLevel(Block block, Type lightType, int lightLevel);
abstract public int getRawLightLevel(Block block, Type lightType);
abstract public void recalculate(Block block, Type lightType);
abstract public void update(Chunk chunk);
}