Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.klein5.TowerDefense.utils;
- import java.lang.reflect.Field;
- import java.util.List;
- import java.util.Random;
- import java.util.UUID;
- import org.bukkit.Bukkit;
- import org.bukkit.Location;
- import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity;
- import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.LivingEntity;
- import org.bukkit.entity.Player;
- import de.klein5.TowerDefense.datawatcher.EnumDataWatcherObjects;
- import de.klein5.TowerDefense.datawatcher.NullDataWatcher;
- import net.minecraft.server.v1_9_R2.DataWatcher;
- import net.minecraft.server.v1_9_R2.Packet;
- import net.minecraft.server.v1_9_R2.PacketPlayOutEntityDestroy;
- import net.minecraft.server.v1_9_R2.PacketPlayOutEntityMetadata;
- import net.minecraft.server.v1_9_R2.PacketPlayOutSpawnEntityLiving;
- public class Laser {
- protected int entityId;
- protected NullDataWatcher dataWatcher;
- private Location location;
- private byte changeMask(byte bitMask, int bit, boolean state) {
- if (state) {
- return bitMask |= 1 << bit;
- } else {
- return bitMask &= ~(1 << bit);
- }
- }
- public Laser(Location location) {
- entityId = new Random().nextInt(Integer.MAX_VALUE);
- dataWatcher = new NullDataWatcher();
- byte status = 0;
- status = changeMask(status, 0, false); // FIRE
- status = changeMask(status, 1, false); // SNEAK
- status = changeMask(status, 2, false); // NOT_SET
- status = changeMask(status, 3, false); // SPRINT
- status = changeMask(status, 4, false); // USE_ITEM
- status = changeMask(status, 5, false); // INVISABLE
- dataWatcher.add(EnumDataWatcherObjects.LIVING_HEALTH_06, (float) 20F);
- dataWatcher.add(EnumDataWatcherObjects.LIVING_POITION_COLOR_07, 0);
- dataWatcher.add(EnumDataWatcherObjects.ENTITY_BITMASK_00, status);
- dataWatcher.add(EnumDataWatcherObjects.HUMAN_SKIN_12, (byte) 127);
- this.location = location;
- }
- private void sendPacket(Packet packet) {
- for (Player player : Bukkit.getOnlinePlayers()) {
- ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
- }
- }
- private void spawn() {
- try {
- PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving();
- set(packet, "a", entityId);
- set(packet, "b", UUID.randomUUID());
- set(packet, "c", org.bukkit.entity.EntityType.GUARDIAN.getTypeId());
- set(packet, "d", toFixedPointNumber(location.getX()));
- set(packet, "e", toFixedPointNumber(location.getY()));
- set(packet, "f", toFixedPointNumber(location.getZ()));
- set(packet, "g", (int) toPackedByte(location.getYaw()));
- set(packet, "h", (int) toPackedByte(location.getPitch()));
- set(packet, "i", (int) toPackedByte(location.getPitch()));
- set(packet, "j", (byte) 0);
- set(packet, "k", (byte) 0);
- set(packet, "l", (byte) 0);
- set(packet, "m", dataWatcher.toNMS());
- sendPacket(packet);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void setTarget(Entity en) {
- try {
- spawn();
- PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata();
- set(packet, "a", entityId);
- set(packet, "b", dataWatcher.toNMS().c());
- sendPacket(packet);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void despawn(Player show) {
- PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(new int[] { entityId });
- sendPacket(packet);
- }
- protected int calcData(int data, int id, boolean flag) {
- if (flag) {
- return Integer.valueOf(data | 1 << id);
- } else {
- return Integer.valueOf(data & ~(1 << id));
- }
- }
- protected int calcType(int type, int id, boolean flag) {
- if (flag) {
- return Integer.valueOf(type | id);
- } else {
- return Integer.valueOf(type & ~id);
- }
- }
- protected byte toPackedByte(float f) {
- return (byte) ((int) (f * 256.0F / 360.0F));
- }
- protected int toFixedPointNumber(Double d) {
- return (int) (d * 32D);
- }
- protected void set(Object instance, String name, Object value) throws Exception {
- Field field = instance.getClass().getDeclaredField(name);
- field.setAccessible(true);
- field.set(instance, value);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement