ParticleSpawnerGroup class

Пакет: com.hypixel.hytale.protocol

Файл: com/hypixel/hytale/protocol/ParticleSpawnerGroup.java

Поля (60)

МодификаторыТипИмя
final int NULLABLE_BIT_FIELD_SIZE
int var1
ParticleSpawnerGroup var1
int var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
int var10
int var11
ParticleAttractor[] var13
var13
int var14
ParticleSpawnerGroup var16
long var2
int var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
long var3
int var3
byte var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
int var4
int var4
var4
int var4
int var5
int var5
String var5
var5
int var5
int var6
int var6
ParticleAttractor[] var7
long var7
long var8

Методы (78)

МодификаторыВозвратСигнатура
public ParticleSpawnerGroup cloneParticleSpawnerGroup clone()
public int computeSizeint computeSize()
for for(int var8 = 0; var8 < var5; var8++)
for for(int var12 = 0; var12 < var10; var12++)
for for(int var6 = 0; var6 < this.attractors.length; var6++)
abstract return getAttractorsreturn getAttractors(var0, 0)
abstract return getEmitOffsetreturn getEmitOffset(var0, 0)
static boolean getFixedRotationboolean getFixedRotation(MemorySegment var0)
static boolean getFixedRotationboolean getFixedRotation(MemorySegment var0, int var1)
abstract return getFixedRotationreturn getFixedRotation(var0, 0)
abstract return getInitialVelocityreturn getInitialVelocity(var0, 0)
abstract return getLifeSpanreturn getLifeSpan(var0, 0)
static int getMaxConcurrentint getMaxConcurrent(MemorySegment var0)
static int getMaxConcurrentint getMaxConcurrent(MemorySegment var0, int var1)
abstract return getMaxConcurrentreturn getMaxConcurrent(var0, 0)
abstract return getPositionOffsetreturn getPositionOffset(var0, 0)
abstract return getRotationOffsetreturn getRotationOffset(var0, 0)
abstract return getSpawnRatereturn getSpawnRate(var0, 0)
abstract return getSpawnerIdreturn getSpawnerId(var0, 0)
static float getStartDelayfloat getStartDelay(MemorySegment var0)
static float getStartDelayfloat getStartDelay(MemorySegment var0, int var1)
abstract return getStartDelayreturn getStartDelay(var0, 0)
static int getTotalSpawnersint getTotalSpawners(MemorySegment var0)
static int getTotalSpawnersint getTotalSpawners(MemorySegment var0, int var1)
abstract return getTotalSpawnersreturn getTotalSpawners(var0, 0)
static int getValidatedOffsetint getValidatedOffset(MemorySegment var0, int var1, int var2, int var3, String var4)
abstract return getWaveDelayreturn getWaveDelay(var0, 0)
static boolean hasAttractorsboolean hasAttractors(MemorySegment var0, int var1)
static boolean hasEmitOffsetboolean hasEmitOffset(MemorySegment var0, int var1)
static boolean hasInitialVelocityboolean hasInitialVelocity(MemorySegment var0, int var1)
static boolean hasLifeSpanboolean hasLifeSpan(MemorySegment var0, int var1)
static boolean hasPositionOffsetboolean hasPositionOffset(MemorySegment var0, int var1)
static boolean hasRotationOffsetboolean hasRotationOffset(MemorySegment var0, int var1)
static boolean hasSpawnRateboolean hasSpawnRate(MemorySegment var0, int var1)
static boolean hasSpawnerIdboolean hasSpawnerId(MemorySegment var0, int var1)
static boolean hasWaveDelayboolean hasWaveDelay(MemorySegment var0, int var1)
if if(var1 < 0)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var4 != var2)
if if(var8 == -1L)
if if(var10 > 4096000)
if if(var2 != null)
if if(this.positionOffset != null)
if if(this.rotationOffset != null)
if if(this.spawnRate != null)
if if(this.waveDelay != null)
if if(this.initialVelocity != null)
if if(this.emitOffset != null)
if if(this.lifeSpan != null)
if if(this.spawnerId != null)
if if(this.attractors != null)
if if(this.positionOffset != null)
if if(this.rotationOffset != null)
if if(this.spawnRate != null)
if if(this.waveDelay != null)
if if(this.initialVelocity != null)
if if(this.emitOffset != null)
if if(this.lifeSpan != null)
if if(this.spawnerId != null)
if if(this.attractors != null)
if if(this.attractors.length > 4096000)
if if(this.spawnerId != null)
if if(this.attractors != null)
if if(this == var1)
static void requireBoundsvoid requireBounds(MemorySegment var0, int var1)
abstract requireBounds requireBounds(var0, var1)
static void requireSlotvoid requireSlot(MemorySegment var0, int var1, int var2, String var3)
abstract requireSlot requireSlot(var0, var1 + 113, var4, "SpawnerId")
abstract requireSlot requireSlot(var0, var1 + 113, -1, "SpawnerId")
abstract requireSlot requireSlot(var0, var1 + 117, var4, "Attractors")
abstract requireSlot requireSlot(var0, var1 + 117, -1, "Attractors")
public int serializeint serialize(@Nonnull MemorySegment var1, int var2)
static ParticleSpawnerGroup toObjectParticleSpawnerGroup toObject(MemorySegment var0)
static ParticleSpawnerGroup toObjectParticleSpawnerGroup toObject(MemorySegment var0, int var1)
static ParticleSpawnerGroup toObjectParticleSpawnerGroup toObject(MemorySegment var0, int var1, @Nullable ReadCursor var2)
abstract return toObjectreturn toObject(var0, 0, null)
abstract return toObjectreturn toObject(var0, var1, null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.protocol;

class="kw">import com.hypixel.hytale.protocol.io.PacketIO;
class="kw">import com.hypixel.hytale.protocol.io.ProtocolException;
class="kw">import com.hypixel.hytale.protocol.io.ReadCursor;
class="kw">import com.hypixel.hytale.protocol.io.VarInt;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.util.Arrays;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3fc;

class="kw">public class ParticleSpawnerGroup {
   class="kw">public class="kw">static class="kw">final int NULLABLE_BIT_FIELD_SIZE = 2;
   class="kw">public class="kw">static class="kw">final int FIXED_BLOCK_SIZE = 113;
   class="kw">public class="kw">static class="kw">final int VARIABLE_FIELD_COUNT = 2;
   class="kw">public class="kw">static class="kw">final int VARIABLE_BLOCK_START = 121;
   class="kw">public class="kw">static class="kw">final int MAX_SIZE = 364544131;
   @Nullable
   class="kw">public String spawnerId;
   @Nullable
   class="kw">public Vector3fc positionOffset;
   @Nullable
   class="kw">public Direction rotationOffset;
   class="kw">public boolean fixedRotation;
   class="kw">public float startDelay;
   @Nullable
   class="kw">public Rangef spawnRate;
   @Nullable
   class="kw">public Rangef waveDelay;
   class="kw">public int totalSpawners;
   class="kw">public int maxConcurrent;
   @Nullable
   class="kw">public InitialVelocity initialVelocity;
   @Nullable
   class="kw">public RangeVector3f emitOffset;
   @Nullable
   class="kw">public Rangef lifeSpan;
   @Nullable
   class="kw">public ParticleAttractor[] attractors;

   class="kw">public ParticleSpawnerGroup() {
   }

   class="kw">public ParticleSpawnerGroup(
      @Nullable String var1,
      @Nullable Vector3fc var2,
      @Nullable Direction var3,
      boolean var4,
      float var5,
      @Nullable Rangef var6,
      @Nullable Rangef var7,
      int var8,
      int var9,
      @Nullable InitialVelocity var10,
      @Nullable RangeVector3f var11,
      @Nullable Rangef var12,
      @Nullable ParticleAttractor[] var13
   ) {
      this.spawnerId = var1;
      this.positionOffset = var2;
      this.rotationOffset = var3;
      this.fixedRotation = var4;
      this.startDelay = var5;
      this.spawnRate = var6;
      this.waveDelay = var7;
      this.totalSpawners = var8;
      this.maxConcurrent = var9;
      this.initialVelocity = var10;
      this.emitOffset = var11;
      this.lifeSpan = var12;
      this.attractors = var13;
   }

   class="kw">public ParticleSpawnerGroup(@Nonnull ParticleSpawnerGroup var1) {
      this.spawnerId = var1.spawnerId;
      this.positionOffset = var1.positionOffset;
      this.rotationOffset = var1.rotationOffset;
      this.fixedRotation = var1.fixedRotation;
      this.startDelay = var1.startDelay;
      this.spawnRate = var1.spawnRate;
      this.waveDelay = var1.waveDelay;
      this.totalSpawners = var1.totalSpawners;
      this.maxConcurrent = var1.maxConcurrent;
      this.initialVelocity = var1.initialVelocity;
      this.emitOffset = var1.emitOffset;
      this.lifeSpan = var1.lifeSpan;
      this.attractors = var1.attractors;
   }

   class="kw">public class="kw">static void requireBounds(MemorySegment var0, int var1) {
      if (var1 < 0) {
         throw ProtocolException.invalidOffset("ParticleSpawnerGroup", var1, (int)var0.byteSize());
      }

      long var2 = var1 + 121L;
      if (var2 > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("ParticleSpawnerGroup", (int)Math.min(var2, 2147483647L), (int)var0.byteSize());
      }
   }

   @Nullable
   class="kw">public class="kw">static String getSpawnerId(MemorySegment var0) {
      class="kw">return getSpawnerId(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static String getSpawnerId(MemorySegment var0, int var1) {
      class="kw">return hasSpawnerId(var0, var1) ? PacketIO.readVarString("SpawnerId", var0, var1 + getValidatedOffset(var0, var1, 113, 121, "SpawnerId"), 4096000) : null;
   }

   @Nullable
   class="kw">public class="kw">static Vector3fc getPositionOffset(MemorySegment var0) {
      class="kw">return getPositionOffset(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Vector3fc getPositionOffset(MemorySegment var0, int var1) {
      class="kw">return hasPositionOffset(var0, var1) ? PacketIO.requireFinite(PacketIO.readVector3f(var0, var1 + 2), "PositionOffset") : null;
   }

   @Nullable
   class="kw">public class="kw">static Direction getRotationOffset(MemorySegment var0) {
      class="kw">return getRotationOffset(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Direction getRotationOffset(MemorySegment var0, int var1) {
      class="kw">return hasRotationOffset(var0, var1) ? Direction.toObject(var0, var1 + 14) : null;
   }

   class="kw">public class="kw">static boolean getFixedRotation(MemorySegment var0) {
      class="kw">return getFixedRotation(var0, 0);
   }

   class="kw">public class="kw">static boolean getFixedRotation(MemorySegment var0, int var1) {
      class="kw">return var0.get(PacketIO.PROTO_BOOL, var1 + 26);
   }

   class="kw">public class="kw">static float getStartDelay(MemorySegment var0) {
      class="kw">return getStartDelay(var0, 0);
   }

   class="kw">public class="kw">static float getStartDelay(MemorySegment var0, int var1) {
      class="kw">return PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 27), "StartDelay");
   }

   @Nullable
   class="kw">public class="kw">static Rangef getSpawnRate(MemorySegment var0) {
      class="kw">return getSpawnRate(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Rangef getSpawnRate(MemorySegment var0, int var1) {
      class="kw">return hasSpawnRate(var0, var1) ? Rangef.toObject(var0, var1 + 31) : null;
   }

   @Nullable
   class="kw">public class="kw">static Rangef getWaveDelay(MemorySegment var0) {
      class="kw">return getWaveDelay(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Rangef getWaveDelay(MemorySegment var0, int var1) {
      class="kw">return hasWaveDelay(var0, var1) ? Rangef.toObject(var0, var1 + 39) : null;
   }

   class="kw">public class="kw">static int getTotalSpawners(MemorySegment var0) {
      class="kw">return getTotalSpawners(var0, 0);
   }

   class="kw">public class="kw">static int getTotalSpawners(MemorySegment var0, int var1) {
      class="kw">return var0.get(PacketIO.PROTO_INT, var1 + 47);
   }

   class="kw">public class="kw">static int getMaxConcurrent(MemorySegment var0) {
      class="kw">return getMaxConcurrent(var0, 0);
   }

   class="kw">public class="kw">static int getMaxConcurrent(MemorySegment var0, int var1) {
      class="kw">return var0.get(PacketIO.PROTO_INT, var1 + 51);
   }

   @Nullable
   class="kw">public class="kw">static InitialVelocity getInitialVelocity(MemorySegment var0) {
      class="kw">return getInitialVelocity(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static InitialVelocity getInitialVelocity(MemorySegment var0, int var1) {
      class="kw">return hasInitialVelocity(var0, var1) ? InitialVelocity.toObject(var0, var1 + 55) : null;
   }

   @Nullable
   class="kw">public class="kw">static RangeVector3f getEmitOffset(MemorySegment var0) {
      class="kw">return getEmitOffset(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static RangeVector3f getEmitOffset(MemorySegment var0, int var1) {
      class="kw">return hasEmitOffset(var0, var1) ? RangeVector3f.toObject(var0, var1 + 80) : null;
   }

   @Nullable
   class="kw">public class="kw">static Rangef getLifeSpan(MemorySegment var0) {
      class="kw">return getLifeSpan(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Rangef getLifeSpan(MemorySegment var0, int var1) {
      class="kw">return hasLifeSpan(var0, var1) ? Rangef.toObject(var0, var1 + 105) : null;
   }

   @Nullable
   class="kw">public class="kw">static ParticleAttractor[] getAttractors(MemorySegment var0) {
      class="kw">return getAttractors(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static ParticleAttractor[] getAttractors(MemorySegment var0, int var1) {
      if (!hasAttractors(var0, var1)) {
         class="kw">return null;
      }

      int var2 = var1 + getValidatedOffset(var0, var1, 117, 121, "Attractors");
      long var3 = VarInt.getWithLength(var0, var2);
      if (var3 == -1L) {
         throw ProtocolException.invalidVarInt("Attractors");
      }

      int var5 = (int)var3;
      if (var5 > 4096000) {
         throw ProtocolException.arrayTooLong("Attractors", var5, 4096000);
      }

      int var6 = (int)(var3 >>> 32);
      if (var2 + var6 + var5 * 85L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Attractors", (int)Math.min(var2 + var6 + var5 * 85L, 2147483647L), (int)var0.byteSize());
      }

      var2 += var6;
      ParticleAttractor[] var7 = new ParticleAttractor[var5];

      for (int var8 = 0; var8 < var5; var8++) {
         var7[var8] = ParticleAttractor.toObject(var0, var2 + var8 * 85);
      }

      class="kw">return var7;
   }

   class="kw">public class="kw">static boolean hasPositionOffset(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 1) != 0;
   }

   class="kw">public class="kw">static boolean hasRotationOffset(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 2) != 0;
   }

   class="kw">public class="kw">static boolean hasSpawnRate(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 4) != 0;
   }

   class="kw">public class="kw">static boolean hasWaveDelay(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 8) != 0;
   }

   class="kw">public class="kw">static boolean hasInitialVelocity(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 16) != 0;
   }

   class="kw">public class="kw">static boolean hasEmitOffset(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 32) != 0;
   }

   class="kw">public class="kw">static boolean hasLifeSpan(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 64) != 0;
   }

   class="kw">public class="kw">static boolean hasSpawnerId(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 0);
      class="kw">return (var2 & 128) != 0;
   }

   class="kw">public class="kw">static boolean hasAttractors(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 1) != 0;
   }

   class="kw">private class="kw">static int getValidatedOffset(MemorySegment var0, int var1, int var2, int var3, String var4) {
      int var5 = var0.get(PacketIO.PROTO_INT, var1 + var2);
      if (var5 >= 0 && var5 <= var0.byteSize() - var1 - var3) {
         class="kw">return var3 + var5;
      } else {
         throw ProtocolException.invalidOffset(var4, var5, (int)var0.byteSize());
      }
   }

   class="kw">private class="kw">static void requireSlot(MemorySegment var0, int var1, int var2, String var3) {
      int var4 = var0.get(PacketIO.PROTO_INT, var1);
      if (var4 != var2) {
         throw ProtocolException.nonCanonicalLayout(var3, var4, var2);
      }
   }

   class="kw">public class="kw">static ParticleSpawnerGroup toObject(MemorySegment var0) {
      class="kw">return toObject(var0, 0, null);
   }

   class="kw">public class="kw">static ParticleSpawnerGroup toObject(MemorySegment var0, int var1) {
      class="kw">return toObject(var0, var1, null);
   }

   class="kw">public class="kw">static ParticleSpawnerGroup toObject(MemorySegment var0, int var1, @Nullable ReadCursor var2) {
      requireBounds(var0, var1);
      int var3 = var1 + 121;
      int var4 = 0;
      String var5 = null;
      if (hasSpawnerId(var0, var1)) {
         requireSlot(var0, var1 + 113, var4, "SpawnerId");
         int var6 = var3 + var4;
         long var7 = VarInt.getWithLength(var0, var6);
         var5 = PacketIO.readVarString("SpawnerId", var0, var6, 0, 4096000, var7);
         var4 += (int)var7 + (int)(var7 >>> 32);
      } else {
         requireSlot(var0, var1 + 113, -1, "SpawnerId");
      }

      ParticleAttractor[] var13 = null;
      if (hasAttractors(var0, var1)) {
         requireSlot(var0, var1 + 117, var4, "Attractors");
         int var14 = var3 + var4;
         long var8 = VarInt.getWithLength(var0, var14);
         if (var8 == -1L) {
            throw ProtocolException.invalidVarInt("Attractors");
         }

         int var10 = (int)var8;
         if (var10 > 4096000) {
            throw ProtocolException.arrayTooLong("Attractors", var10, 4096000);
         }

         int var11 = (int)(var8 >>> 32);
         if (var14 + var11 + var10 * 85L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Attractors", (int)Math.min(var14 + var11 + var10 * 85L, 2147483647L), (int)var0.byteSize());
         }

         var14 += var11;
         var13 = new ParticleAttractor[var10];

         for (int var12 = 0; var12 < var10; var12++) {
            var13[var12] = ParticleAttractor.toObject(var0, var14 + var12 * 85);
         }

         var4 = var14 + var10 * 85 - var3;
      } else {
         requireSlot(var0, var1 + 117, -1, "Attractors");
      }

      ParticleSpawnerGroup var16 = new ParticleSpawnerGroup(
         var5,
         hasPositionOffset(var0, var1) ? PacketIO.requireFinite(PacketIO.readVector3f(var0, var1 + 2), "PositionOffset") : null,
         hasRotationOffset(var0, var1) ? Direction.toObject(var0, var1 + 14) : null,
         var0.get(PacketIO.PROTO_BOOL, var1 + 26),
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 27), "StartDelay"),
         hasSpawnRate(var0, var1) ? Rangef.toObject(var0, var1 + 31) : null,
         hasWaveDelay(var0, var1) ? Rangef.toObject(var0, var1 + 39) : null,
         var0.get(PacketIO.PROTO_INT, var1 + 47),
         var0.get(PacketIO.PROTO_INT, var1 + 51),
         hasInitialVelocity(var0, var1) ? InitialVelocity.toObject(var0, var1 + 55) : null,
         hasEmitOffset(var0, var1) ? RangeVector3f.toObject(var0, var1 + 80) : null,
         hasLifeSpan(var0, var1) ? Rangef.toObject(var0, var1 + 105) : null,
         var13
      );
      if (var2 != null) {
         var2.position = var3 + var4;
      }

      class="kw">return var16;
   }

   class="kw">public int serialize(@Nonnull MemorySegment var1, int var2) {
      byte var3 = 0;
      if (this.positionOffset != null) {
         var3 = (byte)(var3 | 1);
      }

      if (this.rotationOffset != null) {
         var3 = (byte)(var3 | 2);
      }

      if (this.spawnRate != null) {
         var3 = (byte)(var3 | 4);
      }

      if (this.waveDelay != null) {
         var3 = (byte)(var3 | 8);
      }

      if (this.initialVelocity != null) {
         var3 = (byte)(var3 | 16);
      }

      if (this.emitOffset != null) {
         var3 = (byte)(var3 | 32);
      }

      if (this.lifeSpan != null) {
         var3 = (byte)(var3 | 64);
      }

      if (this.spawnerId != null) {
         var3 = (byte)(var3 | 128);
      }

      var1.set(PacketIO.PROTO_BYTE, var2 + 0, var3);
      var3 = 0;
      if (this.attractors != null) {
         var3 = (byte)(var3 | 1);
      }

      var1.set(PacketIO.PROTO_BYTE, var2 + 1, var3);
      if (this.positionOffset != null) {
         PacketIO.requireFinite(this.positionOffset, "PositionOffset");
         PacketIO.writeVector3f(var1, var2 + 2, this.positionOffset);
      } else {
         var1.asSlice(var2 + 2, 12L).fill((byte)0);
      }

      if (this.rotationOffset != null) {
         this.rotationOffset.serialize(var1, var2 + 14);
      } else {
         var1.asSlice(var2 + 14, 12L).fill((byte)0);
      }

      var1.set(PacketIO.PROTO_BOOL, var2 + 26, this.fixedRotation);
      PacketIO.requireFinite(this.startDelay, "StartDelay");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 27, this.startDelay);
      if (this.spawnRate != null) {
         this.spawnRate.serialize(var1, var2 + 31);
      } else {
         var1.asSlice(var2 + 31, 8L).fill((byte)0);
      }

      if (this.waveDelay != null) {
         this.waveDelay.serialize(var1, var2 + 39);
      } else {
         var1.asSlice(var2 + 39, 8L).fill((byte)0);
      }

      var1.set(PacketIO.PROTO_INT, var2 + 47, this.totalSpawners);
      var1.set(PacketIO.PROTO_INT, var2 + 51, this.maxConcurrent);
      if (this.initialVelocity != null) {
         this.initialVelocity.serialize(var1, var2 + 55);
      } else {
         var1.asSlice(var2 + 55, 25L).fill((byte)0);
      }

      if (this.emitOffset != null) {
         this.emitOffset.serialize(var1, var2 + 80);
      } else {
         var1.asSlice(var2 + 80, 25L).fill((byte)0);
      }

      if (this.lifeSpan != null) {
         this.lifeSpan.serialize(var1, var2 + 105);
      } else {
         var1.asSlice(var2 + 105, 8L).fill((byte)0);
      }

      int var4 = var2 + 121;
      if (this.spawnerId != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 113, var4 - var2 - 121);
         var4 += PacketIO.writeVarString(var1, var4, this.spawnerId, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 113, -1);
      }

      if (this.attractors != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 117, var4 - var2 - 121);
         if (this.attractors.length > 4096000) {
            throw ProtocolException.arrayTooLong("Attractors", this.attractors.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.attractors.length);
         int var5 = 0;

         for (int var6 = 0; var6 < this.attractors.length; var6++) {
            var5 += this.attractors[var6].serialize(var1, var4 + var5);
         }

         var4 += var5;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 117, -1);
      }

      class="kw">return var4 - var2;
   }

   class="kw">public int computeSize() {
      int var1 = 121;
      if (this.spawnerId != null) {
         var1 += PacketIO.stringSize(this.spawnerId);
      }

      if (this.attractors != null) {
         var1 += VarInt.size(this.attractors.length) + this.attractors.length * 85;
      }

      class="kw">return var1;
   }

   class="kw">public ParticleSpawnerGroup clone() {
      ParticleSpawnerGroup var1 = new ParticleSpawnerGroup();
      var1.spawnerId = this.spawnerId;
      var1.positionOffset = this.positionOffset;
      var1.rotationOffset = this.rotationOffset != null ? this.rotationOffset.clone() : null;
      var1.fixedRotation = this.fixedRotation;
      var1.startDelay = this.startDelay;
      var1.spawnRate = this.spawnRate != null ? this.spawnRate.clone() : null;
      var1.waveDelay = this.waveDelay != null ? this.waveDelay.clone() : null;
      var1.totalSpawners = this.totalSpawners;
      var1.maxConcurrent = this.maxConcurrent;
      var1.initialVelocity = this.initialVelocity != null ? this.initialVelocity.clone() : null;
      var1.emitOffset = this.emitOffset != null ? this.emitOffset.clone() : null;
      var1.lifeSpan = this.lifeSpan != null ? this.lifeSpan.clone() : null;
      var1.attractors = this.attractors != null ? Arrays.stream(this.attractors).map(var0 -> var0.clone()).toArray(ParticleAttractor[]::new) : null;
      class="kw">return var1;
   }

   @Override
   class="kw">public boolean equals(Object var1) {
      if (this == var1) {
         class="kw">return true;
      } else {
         class="kw">return !(var1 class="kw">instanceof ParticleSpawnerGroup var2)
            ? false
            : Objects.equals(this.spawnerId, var2.spawnerId)
               && Objects.equals(this.positionOffset, var2.positionOffset)
               && Objects.equals(this.rotationOffset, var2.rotationOffset)
               && this.fixedRotation == var2.fixedRotation
               && this.startDelay == var2.startDelay
               && Objects.equals(this.spawnRate, var2.spawnRate)
               && Objects.equals(this.waveDelay, var2.waveDelay)
               && this.totalSpawners == var2.totalSpawners
               && this.maxConcurrent == var2.maxConcurrent
               && Objects.equals(this.initialVelocity, var2.initialVelocity)
               && Objects.equals(this.emitOffset, var2.emitOffset)
               && Objects.equals(this.lifeSpan, var2.lifeSpan)
               && Arrays.equals(this.attractors, var2.attractors);
      }
   }

   @Override
   class="kw">public int hashCode() {
      int var1 = 1;
      var1 = 31 * var1 + Objects.hashCode(this.spawnerId);
      var1 = 31 * var1 + Objects.hashCode(this.positionOffset);
      var1 = 31 * var1 + Objects.hashCode(this.rotationOffset);
      var1 = 31 * var1 + Boolean.hashCode(this.fixedRotation);
      var1 = 31 * var1 + Float.hashCode(this.startDelay);
      var1 = 31 * var1 + Objects.hashCode(this.spawnRate);
      var1 = 31 * var1 + Objects.hashCode(this.waveDelay);
      var1 = 31 * var1 + Integer.hashCode(this.totalSpawners);
      var1 = 31 * var1 + Integer.hashCode(this.maxConcurrent);
      var1 = 31 * var1 + Objects.hashCode(this.initialVelocity);
      var1 = 31 * var1 + Objects.hashCode(this.emitOffset);
      var1 = 31 * var1 + Objects.hashCode(this.lifeSpan);
      class="kw">return 31 * var1 + Arrays.hashCode(this.attractors);
   }
}