Package com.bergerkiller.bukkit.common.protocol

Source Code of com.bergerkiller.bukkit.common.protocol.PacketTypeClasses$NMSPacketPlayOutExperience

package com.bergerkiller.bukkit.common.protocol;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import net.minecraft.server.Vec3D;
import net.minecraft.util.com.mojang.authlib.GameProfile;

import org.bukkit.Chunk;
import org.bukkit.Difficulty;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.WorldType;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;

import com.bergerkiller.bukkit.common.bases.IntVector2;
import com.bergerkiller.bukkit.common.bases.IntVector3;
import com.bergerkiller.bukkit.common.conversion.Conversion;
import com.bergerkiller.bukkit.common.conversion.ConversionPairs;
import com.bergerkiller.bukkit.common.conversion.util.ConvertingList;
import com.bergerkiller.bukkit.common.reflection.FieldAccessor;
import com.bergerkiller.bukkit.common.reflection.SafeConstructor;
import com.bergerkiller.bukkit.common.reflection.TranslatorFieldAccessor;
import com.bergerkiller.bukkit.common.reflection.classes.DataWatcherRef;
import com.bergerkiller.bukkit.common.reflection.classes.EntityHumanRef;
import com.bergerkiller.bukkit.common.reflection.classes.EntityRef;
import com.bergerkiller.bukkit.common.reflection.classes.ItemStackRef;
import com.bergerkiller.bukkit.common.reflection.classes.PlayerAbilitiesRef;
import com.bergerkiller.bukkit.common.utils.CommonUtil;
import com.bergerkiller.bukkit.common.wrappers.DataWatcher;
import com.bergerkiller.bukkit.common.wrappers.PlayerAbilities;
import com.bergerkiller.bukkit.common.wrappers.UseAction;

public class PacketTypeClasses {
  public static class NMSPacket extends PacketType {
    private final SafeConstructor<CommonPacket> constructor0 = getPacketConstructor();

    protected SafeConstructor<CommonPacket> getPacketConstructor(Class<?>... args) {
      return getConstructor(args).translateOutput(Conversion.toCommonPacket);
    }

    @Override
    public CommonPacket newInstance() {
      return constructor0.newInstance();
    }
  }

  /*
   * ========================================================================================
   * ============================= Outgoing packets start ===================================
   * ========================================================================================
   */

  public static class NMSPacketPlayOutEntity extends NMSPacket {
    public final FieldAccessor<Integer> entityId = getField("a");
  }

  public static class NMSPacketPlayOutWindow extends NMSPacket {
    public final FieldAccessor<Integer> windowId = getField("a");
  }

  public static class NMSPacketPlayOutAbilities extends NMSPacket {
    public final FieldAccessor<Boolean> isInvulnerable = getField("a");
    public final FieldAccessor<Boolean> isFlying = getField("b");
    public final FieldAccessor<Boolean> canFly = getField("c");
    public final FieldAccessor<Boolean> canInstantlyBuild = getField("d");
    public final FieldAccessor<Float> flySpeed = getField("e");
    public final FieldAccessor<Float> walkSpeed = getField("f");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(PlayerAbilitiesRef.TEMPLATE.getType());

    public CommonPacket newInstance(PlayerAbilities abilities) {
      return constructor1.newInstance(abilities.getHandle());
    }
  }

  public static class NMSPacketPlayOutAnimation extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> animation = getField("b");
  }

  public static class NMSPacketPlayOutAttachEntity extends NMSPacket {
    public final FieldAccessor<Integer> lead = getField("a");
    public final FieldAccessor<Integer> passengerId = getField("b");
    public final FieldAccessor<Integer> vehicleId = getField("c");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, EntityRef.TEMPLATE.getType(), EntityRef.TEMPLATE.getType());

    public CommonPacket newInstance(org.bukkit.entity.Entity passenger, org.bukkit.entity.Entity vehicle) {
      return newInstance(passenger, vehicle, 0);
    }

    public CommonPacket newInstance(org.bukkit.entity.Entity passenger, org.bukkit.entity.Entity vehicle, int lead) {
      return constructor1.newInstance(lead, Conversion.toEntityHandle.convert(passenger), Conversion.toEntityHandle.convert(vehicle));
    }
  }

  public static class NMSPacketPlayOutBed extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(EntityHumanRef.TEMPLATE.getType(), int.class, int.class, int.class);

    public CommonPacket newInstance(HumanEntity entity, int x, int y, int z) {
      return constructor1.newInstance(Conversion.toEntityHandle.convert(entity), x, y, z);
    }
  }

  public static class NMSPacketPlayOutBlockAction extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> y = getField("b");
    public final FieldAccessor<Integer> z = getField("c");
    public final FieldAccessor<Integer> arg1 = getField("d");
    public final FieldAccessor<Integer> arg2 = getField("e");
    public final FieldAccessor<Material> type = getField("f").translate(ConversionPairs.block);
  }

  public static class NMSPacketPlayOutChat extends NMSPacket {
    public final FieldAccessor<Object> chatComponent = getField("a");
    public final FieldAccessor<Boolean> isFromServer = getField("b");
  }

  public static class NMSPacketPlayOutCloseWindow extends NMSPacketPlayOutWindow {
  }

  public static class NMSPacketPlayOutCollect extends NMSPacket {
    public final FieldAccessor<Integer> collectedItemId = getField("a");
    public final FieldAccessor<Integer> collectorEntityId = getField("b");
  }

  public static class NMSPacketPlayOutWindowData extends NMSPacketPlayOutWindow {
    public final FieldAccessor<Integer> count = getField("b");
    public final FieldAccessor<Integer> data = getField("c");
  }

  public static class NMSPacketPlayOutCustomPayload extends NMSPacket {
    public final FieldAccessor<String> tag = getField("tag");
    public final FieldAccessor<byte[]> data = getField("data");
  }

  public static class NMSPacketPlayOutEntityDestroy extends NMSPacket {
    public final FieldAccessor<int[]> entityIds = getField("a");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int[].class);

    public CommonPacket newInstance(int... entityIds) {
      return constructor1.newInstance(entityIds);
    }
    public CommonPacket newInstance(Collection<Integer> entityIds) {
      return newInstance(Conversion.toIntArr.convert(entityIds));
    }
    public CommonPacket newInstance(org.bukkit.entity.Entity... entities) {
      int[] ids = new int[entities.length];
      for (int i = 0; i < ids.length; i++) {
        ids[i] = entities[i].getEntityId();
      }
      return newInstance(ids);
    }
  }

  public static class NMSPacketPlayOutEntityEffect extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> effectId = getField("b");
    public final FieldAccessor<Byte> effectAmplifier = getField("c");
    public final FieldAccessor<Short> effectDuration = getField("d");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, CommonUtil.getNMSClass("MobEffect"));

    public CommonPacket newInstance(int entityId, Object mobEffect) {
      return constructor1.newInstance(entityId, mobEffect);
    }
  }

  public static class NMSPacketPlayOutEntityEquipment extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> slot = getField("b");
    public final TranslatorFieldAccessor<ItemStack> item = getField("c").translate(ConversionPairs.itemStack);
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, int.class, ItemStackRef.TEMPLATE.getType());

    public CommonPacket newInstance(int entityId, int slotId, ItemStack item) {
      return constructor1.newInstance(entityId, slotId, Conversion.toItemStackHandle.convert(item));
    }
  }

  public static class NMSPacketPlayOutEntityHeadRotation extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> headYaw = getField("b");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(EntityRef.TEMPLATE.getType(), byte.class);

    public CommonPacket newInstance(org.bukkit.entity.Entity entity, byte headRotation) {
      return constructor1.newInstance(Conversion.toEntityHandle.convert(entity), headRotation);
    }
  }

  public static class NMSPacketPlayOutEntityLook extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> yaw = getField("e");
    public final FieldAccessor<Byte> pitch = getField("f");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, byte.class, byte.class);

    public CommonPacket newInstance(int entityId, byte dyaw, byte dpitch) {
      return constructor1.newInstance(entityId, dyaw, dpitch);
    }
  }

  public static class NMSPacketPlayOutEntityMetadata extends NMSPacketPlayOutEntity {
    /** CraftBukkit uses rawtypes for this, so do we */
    @SuppressWarnings("rawtypes")
    public final FieldAccessor<List> watchedObjects = getField("b");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, DataWatcherRef.TEMPLATE.getType(), boolean.class);

    public CommonPacket newInstance(int entityId, DataWatcher dataWatcher, boolean sendUnchangedData) {
      return constructor1.newInstance(entityId, dataWatcher.getHandle(), sendUnchangedData);
    }
  }

  public static class NMSPacketPlayOutEntityStatus extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> status = getField("b");
  }

  public static class NMSPacketPlayOutEntityTeleport extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    public final FieldAccessor<Byte> yaw = getField("e");
    public final FieldAccessor<Byte> pitch = getField("f");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(EntityRef.TEMPLATE.getType());
    private final SafeConstructor<CommonPacket> constructor2 = getPacketConstructor(int.class, int.class, int.class, int.class, byte.class, byte.class);

    public CommonPacket newInstance(org.bukkit.entity.Entity entity) {
      return constructor1.newInstance(Conversion.toEntityHandle.convert(entity));
    }
    public CommonPacket newInstance(int entityId, int x, int y, int z, byte yaw, byte pitch) {
      return constructor2.newInstance(entityId, x, y, z, yaw, pitch);
    }
  }

  public static class NMSPacketPlayOutEntityVelocity extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> motX = getField("b");
    public final FieldAccessor<Integer> motY = getField("c");
    public final FieldAccessor<Integer> motZ = getField("d");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(EntityRef.TEMPLATE.getType());
    private final SafeConstructor<CommonPacket> constructor2 = getPacketConstructor(int.class, double.class, double.class, double.class);

    public CommonPacket newInstance(org.bukkit.entity.Entity entity) {
      return constructor1.newInstance(Conversion.toEntityHandle.convert(entity));
    }
    public CommonPacket newInstance(int entityId, double motX, double motY, double motZ) {
      return constructor2.newInstance(entityId, motX, motY, motZ);
    }
    public CommonPacket newInstance(int entityId, Vector velocity) {
      return newInstance(entityId, velocity.getX(), velocity.getY(), velocity.getZ());
    }
  }

  public static class NMSPacketPlayOutExperience extends NMSPacket {
    public final FieldAccessor<Float> bar = getField("a");
    public final FieldAccessor<Integer> level = getField("b");
    public final FieldAccessor<Integer> totalXp = getField("c");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(float.class, int.class, int.class);
   
    public CommonPacket newInstance(float bar, int level, int totalXp) {
      return constructor1.newInstance(bar, level, totalXp);
    }
  }

  public static class NMSPacketPlayOutExplosion extends NMSPacket {
    public final FieldAccessor<Double> x = getField("a");
    public final FieldAccessor<Double> y = getField("b");
    public final FieldAccessor<Double> z = getField("c");
    public final FieldAccessor<Float> radius = getField("d");
    public final FieldAccessor<List<Object>> blocks = getField("e");
    public final FieldAccessor<Float> pushMotX = getField("f");
    public final FieldAccessor<Float> pushMotY = getField("g");
    public final FieldAccessor<Float> pushMotZ = getField("h");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(double.class, double.class, double.class, float.class, List.class, Vec3D.class);

    @SuppressWarnings("unchecked")
    public CommonPacket newInstance(double x, double y, double z, float radius) {
      return newInstance(x, y, z, radius, Collections.EMPTY_LIST);
    }

    public CommonPacket newInstance(double x, double y, double z, float radius, List<IntVector3> blocks) {
      return newInstance(x, y, z, radius, blocks, null);
    }

    public CommonPacket newInstance(double x, double y, double z, float radius, List<IntVector3> blocks, Vector pushedForce) {
      Vec3D vec = pushedForce == null ? null : Vec3D.a(pushedForce.getX(), pushedForce.getY(), pushedForce.getZ());
      return constructor1.newInstance(x, y, z, radius, blocks, vec);
    }
  }

  public static class NMSPacketPlayOutGameStateChange extends NMSPacket {
    public final FieldAccessor<Integer> UNKNOWN1 = getField("b");
    public final FieldAccessor<Float> UNKNOWN2 = getField("c");
  }

  public static class NMSPacketPlayOutHeldItemSlot extends NMSPacket {
    public final FieldAccessor<Integer> slot = getField("a");
  }

  public static class NMSPacketPlayOutKeepAlive extends NMSPacket {
    public final FieldAccessor<Integer> key = getField("a");
  }

  public static class NMSPacketPlayOutKickDisconnect extends NMSPacket {
    public final FieldAccessor<String> reason = getField("a");
  }

  public static class NMSPacketPlayOutLogin extends NMSPacket {
    public final FieldAccessor<Integer> playerId = getField("a");
    public final FieldAccessor<Boolean> hardcore = getField("b");
    public final TranslatorFieldAccessor<GameMode> gameMode = getField("c").translate(ConversionPairs.gameMode);
    public final FieldAccessor<Integer> dimension = getField("d");
    public final TranslatorFieldAccessor<Difficulty> difficulty = getField("e").translate(ConversionPairs.difficulty);
    public final FieldAccessor<Integer> maxPlayers = getField("f");
    public final TranslatorFieldAccessor<WorldType> worldType = getField("g").translate(ConversionPairs.worldType);
  }

  public static class NMSPacketPlayOutMap extends NMSPacket {
    public final FieldAccessor<Integer> itemId = getField("a");
    public final FieldAccessor<byte[]> text = getField("b");
  }

  public static class NMSPacketPlayOutMapChunk extends NMSPacket {
    public final FieldAccessor<Integer> size = getField("h");
    public final FieldAccessor<byte[]> buffer = getField("e");
    public final FieldAccessor<byte[]> inflatedBuffer = getField("f");
    public final FieldAccessor<Boolean> hasBiomeData = getField("g");
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> z = getField("b");
    public final FieldAccessor<Integer> chunkDataBitMap = getField("c");
    public final FieldAccessor<Integer> chunkBiomeBitMap = getField("d");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(CommonUtil.getNMSClass("Chunk"), boolean.class, int.class);

    public CommonPacket newInstance(Chunk chunk) {
      return newInstance(Conversion.toChunkHandle.convert(chunk));
    }
    public CommonPacket newInstance(Object chunk) {
      return newInstance(chunk, true, 0xFFFF);
    }
    public CommonPacket newInstance(Object chunk, boolean hasBiomeData, int sectionsMask) {
      return constructor1.newInstance(chunk, hasBiomeData, sectionsMask);
    }
  }

  public static class NMSPacketPlayOutMapChunkBulk extends NMSPacket {
    public final FieldAccessor<int[]> bulk_x = getField("a");
    public final FieldAccessor<int[]> bulk_z = getField("b");
    public final FieldAccessor<int[]> bulk_chunkDataBitMap = getField("c");
    public final FieldAccessor<int[]> bulk_chunkBiomeBitMap = getField("d");
    public final FieldAccessor<byte[][]> inflatedBuffers = getField("inflatedBuffers");
    public final FieldAccessor<byte[]> buildBuffer = getField("buildBuffer");
    public final FieldAccessor<byte[]> deflatedData = getField("buffer");
    public final FieldAccessor<Integer> deflatedSize = getField("size");
    public final FieldAccessor<Boolean> hasSkyLight = getField("h");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(List.class);

    public CommonPacket newInstance(List<Chunk> chunks) {
      return constructor1.newInstance(new ConvertingList<Object>(chunks, ConversionPairs.chunk.reverse()));
    }
  }

  public static class NMSPacketPlayOutMultiBlockChange extends NMSPacket {
    public final FieldAccessor<IntVector2> chunk = getField("b").translate(ConversionPairs.chunkIntPair);
    public final FieldAccessor<byte[]> blockData = getField("c");
    public final FieldAccessor<Integer> blockCount = getField("d");
  }

  public static class NMSPacketPlayOutNamedEntitySpawn extends NMSPacketPlayOutEntity {
    public final FieldAccessor<GameProfile> profile = getField("b");
    public final FieldAccessor<Integer> x = getField("c");
    public final FieldAccessor<Integer> y = getField("d");
    public final FieldAccessor<Integer> z = getField("e");
    public final FieldAccessor<Byte> yaw = getField("f");
    public final FieldAccessor<Byte> pitch = getField("g");
    public final FieldAccessor<Integer> heldItemId = getField("h");
    public final TranslatorFieldAccessor<DataWatcher> dataWatcher = getField("i").translate(ConversionPairs.dataWatcher);
  }

  public static class NMSPacketPlayOutNamedSoundEffect extends NMSPacket {
    public final FieldAccessor<String> soundName = getField("a");
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    public final FieldAccessor<Float> volume = getField("e");
    public final FieldAccessor<Integer> pitch = getField("f");
  }

  public static class NMSPacketPlayOutOpenSignEditor extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> y = getField("b");
    public final FieldAccessor<Integer> z = getField("c");
  }

  public static class NMSPacketPlayOutOpenWindow extends NMSPacketPlayOutWindow {
    public final FieldAccessor<Integer> type = getField("b");
    public final FieldAccessor<String> title = getField("c");
    public final FieldAccessor<Integer> slotCount = getField("d");
  }

  public static class NMSPacketPlayOutPlayerInfo extends NMSPacket {
    public final FieldAccessor<String> playerName = getField("a");
    public final FieldAccessor<Boolean> online = getField("b");
    public final FieldAccessor<Integer> ping = getField("c");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(String.class, boolean.class, int.class);

    public CommonPacket newInstance(String playerName, boolean online, int ping) {
      return constructor1.newInstance(playerName, online, ping);
    }
  }

  public static class NMSPacketPlayOutPosition extends NMSPacket {
    public final FieldAccessor<Double> x = getField("a");
    public final FieldAccessor<Double> y = getField("b");
    public final FieldAccessor<Double> z = getField("c");
    public final FieldAccessor<Float> yaw = getField("d");
    public final FieldAccessor<Float> pitch = getField("e");
    public final FieldAccessor<Boolean> UNKNOWN1 = getField("f");
  }

  public static class NMSPacketPlayOutRelEntityMove extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> dx = getField("b");
    public final FieldAccessor<Byte> dy = getField("c");
    public final FieldAccessor<Byte> dz = getField("d");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, byte.class, byte.class, byte.class);

    public CommonPacket newInstance(int entityId, byte dx, byte dy, byte dz) {
      return constructor1.newInstance(entityId, dx, dy, dz);
    }
  }

  public static class NMSPacketPlayOutRelEntityMoveLook extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> dx = getField("b");
    public final FieldAccessor<Byte> dy = getField("c");
    public final FieldAccessor<Byte> dz = getField("d");
    public final FieldAccessor<Byte> dyaw = getField("e");
    public final FieldAccessor<Byte> dpitch = getField("f");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, byte.class, byte.class, byte.class, byte.class, byte.class);

    public CommonPacket newInstance(int entityId, byte dx, byte dy, byte dz, byte dyaw, byte dpitch) {
      return constructor1.newInstance(entityId, dx, dy, dz, dyaw, dpitch);
    }
  }

  public static class NMSPacketPlayOutRemoveEntityEffect extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Byte> effectId = getField("b");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, CommonUtil.getNMSClass("MobEffect"));

    public CommonPacket newInstance(int entityId, Object mobEffect) {
      return constructor1.newInstance(entityId, mobEffect);
    }
  }

  public static class NMSPacketPlayOutRespawn extends NMSPacket {
    public final FieldAccessor<Integer> dimension = getField("a");
    public final FieldAccessor<Difficulty> difficulty = getField("b").translate(ConversionPairs.difficulty);
    public final TranslatorFieldAccessor<GameMode> gamemode = getField("c").translate(ConversionPairs.gameMode);
    public final TranslatorFieldAccessor<WorldType> worldType = getField("d").translate(ConversionPairs.worldType);
  }

  public static class NMSPacketPlayOutScoreboardDisplayObjective extends NMSPacket {
    public final FieldAccessor<Integer> display = getField("a");
    public final FieldAccessor<String> name = getField("b");
  }

  public static class NMSPacketPlayOutScoreboardObjective extends NMSPacket {
    public final FieldAccessor<String> name = getField("a");
    public final FieldAccessor<String> displayName = getField("b");
    public final FieldAccessor<Integer> action = getField("c");
  }

  public static class NMSPacketPlayOutScoreboardScore extends NMSPacket {
    public final FieldAccessor<String> name = getField("a");
    public final FieldAccessor<String> objName = getField("b");
    public final FieldAccessor<Integer> value = getField("c");
    public final FieldAccessor<Integer> action = getField("d");
  }

  public static class NMSPacketPlayOutScoreboardTeam extends NMSPacket {
    public final FieldAccessor<String> team = getField("a");
    public final FieldAccessor<String> display = getField("b");
    public final FieldAccessor<String> prefix = getField("c");
    public final FieldAccessor<String> suffix = getField("d");
    public final FieldAccessor<Collection<String>> players = getField("e");
    public final FieldAccessor<Integer> mode = getField("f");
    public final FieldAccessor<Integer> friendlyFire = getField("g");
  }

  public static class NMSPacketPlayOutSetSlot extends NMSPacketPlayOutWindow {
    public final FieldAccessor<Integer> slot = getField("b");
    public final FieldAccessor<ItemStack> item = getField("c").translate(ConversionPairs.itemStack);
  }

  public static class NMSPacketPlayOutSpawnEntity extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    public final FieldAccessor<Integer> motX = getField("e");
    public final FieldAccessor<Integer> motY = getField("f");
    public final FieldAccessor<Integer> motZ = getField("g");
    public final FieldAccessor<Byte> pitch = getField("h");
    public final FieldAccessor<Byte> yaw = getField("i");
    public final FieldAccessor<Integer> entityType = getField("j");
    public final FieldAccessor<Integer> extraData = getField("k");
  }

  public static class NMSPacketPlayOutSpawnEntityExperienceOrb extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    public final FieldAccessor<Integer> experience = getField("e");
  }

  public static class NMSPacketPlayOutSpawnEntityLiving extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> entityType = getField("b");
    public final FieldAccessor<Integer> x = getField("c");
    public final FieldAccessor<Integer> y = getField("d");
    public final FieldAccessor<Integer> z = getField("e");
    public final FieldAccessor<Integer> motX = getField("f");
    public final FieldAccessor<Integer> motY = getField("g");
    public final FieldAccessor<Integer> motZ = getField("h");
    public final FieldAccessor<Byte> yaw = getField("i");
    public final FieldAccessor<Byte> pitch = getField("j");
    public final FieldAccessor<Byte> headYaw = getField("k");
    public final TranslatorFieldAccessor<DataWatcher> dataWatcher = getField("l").translate(ConversionPairs.dataWatcher);
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(CommonUtil.getNMSClass("EntityLiving"));

    public CommonPacket newInstance(Object entityLiving) {
      return constructor1.newInstance(entityLiving);
    }
  }

  public static class NMSPacketPlayOutSpawnEntityPainting extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    public final FieldAccessor<BlockFace> facing = getField("e").translate(ConversionPairs.paintingFacing);
    public final FieldAccessor<String> art = getField("f");
  }

  public static class NMSPacketPlayOutSpawnEntityWeather extends NMSPacketPlayOutEntity {
    public final FieldAccessor<Integer> x = getField("b");
    public final FieldAccessor<Integer> y = getField("c");
    public final FieldAccessor<Integer> z = getField("d");
    public final FieldAccessor<Integer> type = getField("e");
  }

  public static class NMSPacketPlayOutSpawnPosition extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("x");
    public final FieldAccessor<Integer> y = getField("y");
    public final FieldAccessor<Integer> z = getField("z");
  }

  public static class NMSPacketPlayOutStatistic extends NMSPacket {
    public final FieldAccessor<Map<Object, Integer>> statsMap = getField("a");
  }

  public static class NMSPacketPlayOutTabComplete extends NMSPacket {
    public final FieldAccessor<String[]> response = getField("a");
  }

  public static class NMSPacketPlayOutTileEntityData extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> y = getField("b");
    public final FieldAccessor<Integer> z = getField("c");
    public final FieldAccessor<Integer> action = getField("d");
    public final FieldAccessor<Object> data = getField("e");
  }

  public static class NMSPacketPlayOutTransaction extends NMSPacketPlayOutWindow {
    public final FieldAccessor<Short> action = getField("b");
    public final FieldAccessor<Boolean> accepted = getField("c");
  }

  public static class NMSPacketPlayOutUpdateAttributes extends NMSPacketPlayOutEntity {
    /**
     * A list of NMS.Attribute elements - may require further API to work with.
     * For now, use reflection.
     */
    public final FieldAccessor<List<?>> attributeSnapshots = getField("b");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, Collection.class);

    public CommonPacket newInstance(int entityId, Collection<?> attributes) {
      return constructor1.newInstance(entityId, attributes);
    }
  }

  public static class NMSPacketPlayOutUpdateHealth extends NMSPacket {
    public final FieldAccessor<Short> health = getField("a");
    public final FieldAccessor<Short> food = getField("b");
    public final FieldAccessor<Short> foodSaturation = getField("c");
  }

  public static class NMSPacketPlayOutUpdateSign extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("x");
    public final FieldAccessor<Integer> y = getField("y");
    public final FieldAccessor<Integer> z = getField("z");
    public final FieldAccessor<String[]> lines = getField("lines");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(int.class, int.class, int.class, String[].class);

    public Block getBlock(Object packetInstance, World world) {
      return world.getBlockAt(x.get(packetInstance), y.get(packetInstance), z.get(packetInstance));
    }

    public void setBlock(Object packetInstance, Block block) {
      x.set(packetInstance, block.getX());
      y.set(packetInstance, block.getY());
      z.set(packetInstance, block.getZ());
    }

    public CommonPacket newInstance(int x, int y, int z, String[] lines) {
      return constructor1.newInstance(x, y, z, lines);
    }
  }

  public static class NMSPacketPlayOutUpdateTime extends NMSPacket {
    public final FieldAccessor<Long> age = getField("a");
    public final FieldAccessor<Long> timeOfDay = getField("b");
  }

  public static class NMSPacketPlayOutWindowItems extends NMSPacketPlayOutWindow {
    public final FieldAccessor<ItemStack[]> items = getField("b").translate(ConversionPairs.itemStackArr);
  }

  public static class NMSPacketPlayOutWorldEvent extends NMSPacket {
    public final FieldAccessor<Integer> effectId = getField("a");
    public final FieldAccessor<Integer> x = getField("c");
    public final FieldAccessor<Integer> y = getField("d");
    public final FieldAccessor<Integer> z = getField("e");
    public final FieldAccessor<Integer> data = getField("b");
    public final FieldAccessor<Boolean> noRelativeVolume = getField("f");
  }

  public static class NMSPacketPlayOutWorldParticles extends NMSPacket {
    public final FieldAccessor<String> effectName = getField("a");
    public final FieldAccessor<Float> x = getField("b");
    public final FieldAccessor<Float> y = getField("c");
    public final FieldAccessor<Float> z = getField("d");
    public final FieldAccessor<Float> randomX = getField("e");
    public final FieldAccessor<Float> randomY = getField("f");
    public final FieldAccessor<Float> randomZ = getField("g");
    public final FieldAccessor<Float> speed = getField("h");
    public final FieldAccessor<Integer> particleCount = getField("i");

    public CommonPacket newInstance(String name, int count, Location location, double randomness, double speed) {
      return newInstance(name, count, location.getX(), location.getY(), location.getZ(), randomness, randomness, randomness, speed);
    }

    public CommonPacket newInstance(String name, int count, double x, double y, double z, double rx, double ry, double rz, double speed) {
      final CommonPacket packet = newInstance();
      packet.write(this.effectName, name);
      packet.write(this.particleCount, count);
      packet.write(this.x, (float) x);
      packet.write(this.y, (float) y);
      packet.write(this.z, (float) z);
      packet.write(this.randomX, (float) rx);
      packet.write(this.randomY, (float) ry);
      packet.write(this.randomZ, (float) rz);
      packet.write(this.speed, (float) speed);
      return packet;
    }
  }

  /*
   * ========================================================================================
   * ============================= Incoming packets start ===================================
   * ========================================================================================
   */

  public static class NMSPacketPlayInWindow extends NMSPacket {
    public final FieldAccessor<Integer> windowId = getField("a");
  }

  public static class NMSPacketPlayInAbilities extends NMSPacket {
    public final FieldAccessor<Boolean> isInvulnerable = getField("a");
    public final FieldAccessor<Boolean> isFlying = getField("b");
    public final FieldAccessor<Boolean> canFly = getField("c");
    public final FieldAccessor<Boolean> canInstantlyBuild = getField("d");
    public final FieldAccessor<Float> flySpeed = getField("e");
    public final FieldAccessor<Float> walkSpeed = getField("f");
    private final SafeConstructor<CommonPacket> constructor1 = getPacketConstructor(PlayerAbilitiesRef.TEMPLATE.getType());

    public CommonPacket newInstance(PlayerAbilities abilities) {
      return constructor1.newInstance(abilities.getHandle());
    }
  }

  public static class NMSPacketPlayInArmAnimation extends NMSPacket {
    public final FieldAccessor<Integer> entityId = getField("a");
    public final FieldAccessor<Integer> animation = getField("b");
  }

  public static class NMSPacketPlayInBlockDig extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> y = getField("b");
    public final FieldAccessor<Integer> z = getField("c");
    public final FieldAccessor<Integer> face = getField("face");
    public final FieldAccessor<Integer> status = getField("e");
  }

  public static class NMSPacketPlayInBlockPlace extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> y = getField("b");
    public final FieldAccessor<Integer> z = getField("c");
    public final FieldAccessor<Integer> direction = getField("d");
    public final FieldAccessor<ItemStack> itemStack = getField("e").translate(ConversionPairs.itemStack);
    public final FieldAccessor<Float> cursorX = getField("f");
    public final FieldAccessor<Float> cursorY = getField("g");
    public final FieldAccessor<Float> cursorZ = getField("h");
  }

  public static class NMSPacketPlayInChat extends NMSPacket {
    public final FieldAccessor<String> message = getField("message");
  }

  public static class NMSPacketPlayInClientCommand extends NMSPacket {
    public final FieldAccessor<Object> command = getField("a");
  }

  public static class NMSPacketPlayInCloseWindow extends NMSPacketPlayInWindow {
  }

  public static class NMSPacketPlayInCustomPayload extends NMSPacket {
    public final FieldAccessor<String> tag = getField("tag");
    public final FieldAccessor<Integer> length = getField("length");
    public final FieldAccessor<byte[]> data = getField("data");
  }

  public static class NMSPacketPlayInEnchantItem extends NMSPacketPlayInWindow {
    public final FieldAccessor<Integer> enchantment = getField("b");
  }

  public static class NMSPacketPlayInEntityAction extends NMSPacket {
    public final FieldAccessor<Integer> playerId = getField("a");
    public final FieldAccessor<Integer> actionId = getField("animation");
    public final FieldAccessor<Integer> jumpBoost = getField("c");
  }

  public static class NMSPacketPlayInFlying extends NMSPacket {
    public final FieldAccessor<Double> x = getField("x");
    public final FieldAccessor<Double> y = getField("y");
    public final FieldAccessor<Double> z = getField("z");
    public final FieldAccessor<Double> stance = getField("stance");
    public final FieldAccessor<Float> yaw = getField("yaw");
    public final FieldAccessor<Float> pitch = getField("pitch");
    public final FieldAccessor<Boolean> hasPos = getField("hasPos");
    public final FieldAccessor<Boolean> hasLook = getField("hasLook");
    public final FieldAccessor<Boolean> onGround = getField("g");
  }

  public static class NMSPacketPlayInHeldItemSlot extends NMSPacket {
    public final FieldAccessor<Integer> slot = getField("itemInHandIndex");
  }

  public static class NMSPacketPlayInKeepAlive extends NMSPacket {
    public final FieldAccessor<Integer> key = getField("a");
  }

  public static class NMSPacketPlayInLook extends NMSPacket {
    public final FieldAccessor<Float> yaw = getField("yaw");
    public final FieldAccessor<Float> pitch = getField("pitch");
  }

  public static class NMSPacketPlayInPosition extends NMSPacket {
    public final FieldAccessor<Double> x = getField("x");
    public final FieldAccessor<Double> y = getField("y");
    public final FieldAccessor<Double> z = getField("z");
    public final FieldAccessor<Double> stance = getField("stance");
  }

  public static class NMSPacketPlayInPositionLook extends NMSPacket {
    public final FieldAccessor<Double> x = getField("x");
    public final FieldAccessor<Double> y = getField("y");
    public final FieldAccessor<Double> z = getField("z");
    public final FieldAccessor<Double> stance = getField("stance");
    public final FieldAccessor<Float> yaw = getField("yaw");
    public final FieldAccessor<Float> pitch = getField("pitch");
  }

  public static class NMSPacketPlayInSetCreativeSlot extends NMSPacket {
    public final FieldAccessor<Integer> slot = getField("slot");
    public final FieldAccessor<ItemStack> itemStack = getField("b").translate(ConversionPairs.itemStack);
  }

  public static class NMSPacketPlayInSettings extends NMSPacket {
    public final FieldAccessor<String> locale = getField("a");
    public final FieldAccessor<Integer> viewDistanceId = getField("b");
    public final FieldAccessor<Object> chatVisibility = getField("c");
    public final TranslatorFieldAccessor<Difficulty> difficulty = getField("e").translate(ConversionPairs.difficulty);
    public final FieldAccessor<Boolean> showCape = getField("f");
  }

  public static class NMSPacketPlayInSteerVehicle extends NMSPacket {
    public final FieldAccessor<Float> sideways = getField("a");
    public final FieldAccessor<Float> forwards = getField("b");
    public final FieldAccessor<Boolean> jump = getField("c");
    public final FieldAccessor<Boolean> unmount = getField("d");
  }

  public static class NMSPacketPlayInTabComplete extends NMSPacket {
    public final FieldAccessor<String> message = getField("a");
  }

  public static class NMSPacketPlayInTransaction extends NMSPacketPlayInWindow {
    public final FieldAccessor<Short> action = getField("b");
    public final FieldAccessor<Boolean> accepted = getField("c");
  }

  public static class NMSPacketPlayInUpdateSign extends NMSPacket {
    public final FieldAccessor<Integer> x = getField("a");
    public final FieldAccessor<Integer> y = getField("b");
    public final FieldAccessor<Integer> z = getField("c");
    public final FieldAccessor<String[]> lines = getField("d");

    public Block getBlock(Object packetInstance, World world) {
      return world.getBlockAt(x.get(packetInstance), y.get(packetInstance), z.get(packetInstance));
    }

    public void setBlock(Object packetInstance, Block block) {
      x.set(packetInstance, block.getX());
      y.set(packetInstance, block.getY());
      z.set(packetInstance, block.getZ());
    }
  }

  public static class NMSPacketPlayInUseEntity extends NMSPacket {
    public final FieldAccessor<Integer> clickedEntityId = getField("a");
    public final TranslatorFieldAccessor<UseAction> useAction = getField("action").translate(ConversionPairs.useAction);
  }

  public static class NMSPacketPlayInWindowClick extends NMSPacketPlayInWindow {
    public final FieldAccessor<Integer> windowId = getField("a");
    public final FieldAccessor<Integer> slot = getField("slot");
    public final FieldAccessor<Integer> button = getField("button");
    public final FieldAccessor<Short> action = getField("d");
    public final FieldAccessor<ItemStack> item = getField("item").translate(ConversionPairs.itemStack);
    public final FieldAccessor<Integer> shift = getField("shift");
  }
}
TOP

Related Classes of com.bergerkiller.bukkit.common.protocol.PacketTypeClasses$NMSPacketPlayOutExperience

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.