BlockType class

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

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

Поля (366)

МодификаторыТипИмя
final int NULLABLE_BIT_FIELD_SIZE
int var1
BlockType var1
int var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
var1
long var10
long var10
String var10
long var10
int var10
int var100
String var102
var102
int var103
long var105
int var106
BlockGathering var107
var107
BlockFaceSupport[] var108
long var109
int var11
long var11
int var11
ModelDisplay var110
var110
int var111
RailConfig var112
var112
Map var113
var113
Map var116
var116
int var117
int var12
int var12
int var12
int[] var120
var120
int var121
Bench var123
var123
long var124
ConnectedBlockRuleSet var125
var125
int var126
BlockType var127
int var129
int var13
int var13
int var13
long var130
int var131
RequiredBlockFaceSupport[] var14
BlockFaceSupport[] var14
int var15
BlockNeighbor var18
long var19
long var2
int var2
ReadCursor var2
ReadCursor var2
ReadCursor var2
ReadCursor var2
int var2
ReadCursor var2
int var2
int var2
int var2
int var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
byte var2
int var2
Map var2
long var20
int var21
int var22
RequiredBlockFaceSupport[] var23
int var25
int var26
int var27
long var28
int var28
long var29
int var29
long var3
int var3
var3
int var3
var3
int var3
var3
int var3
var3
long var3
int var3
var3
long var3
long var3
long var3
long var3
int var3
byte var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
var3
int var30
int var30
InteractionType var32
int var33
String var35
int var36
String var37
var37
int var38
ShaderType[] var39
var39
long var4
long var4
long var4
long var4
long var4
int var4
int var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
var4
int var4
var4
var4
int var40
String var42
var42
int var43
ModelTexture[] var44
var44
int var45
var45
String var47
var47
long var48
int var49
int var5
int var5
int var5
int var5
int var5
int var5
int var5
ReadCursor var5
Map var5
Map var50
var50
long var51
int var52
var52
Map var55
var55
int var56
long var57
int var58
var58
int var6
int var6
int var6
int var6
int var6
int var6
int var6
int var6
Map var6
Map var6
int var6
String var6
var6
BlockTextures[] var61
var61
long var62
int var63
var63
String var65
var65
int var66
long var67
int var68
ConditionalBlockSound[] var69
var69
ShaderType[] var7
int var7
Map var7
Map var7
int var7
ConditionalBlockSound[] var7
int var7
int[] var7
int[] var7
int var7
int var7
int var70
long var71
int var72
ModelParticle[] var74
var74
int var76
long var77
int var78
var78
ModelTexture[] var8
BlockTextures[] var8
ModelParticle[] var8
InteractionType var8
long var8
long var8
int var8
String var80
var80
BlockNeighbor var81
int var82
long var83
int var84
String var85
var85
int var87
long var88
int var89
BlockNeighbor var9
BlockNeighbor var9
int var9
long var9
int var9
String var90
var90
int var91
int var92
long var93
int var94
int[] var95
var95
int var96
int var98
long var99

Методы (378)

МодификаторыВозвратСигнатура
public BlockType cloneBlockType clone()
public int computeSizeint computeSize()
for for(int var8 = 0; var8 < var5; var8++)
for for(int var9 = 0; var9 < var6; var9++)
for for(int var8 = 0; var8 < var6; var8++)
for for(int var15 = 0; var15 < var12; var15++)
for for(int var8 = 0; var8 < var6; var8++)
for for(int var15 = 0; var15 < var12; var15++)
for for(int var9 = 0; var9 < var6; var9++)
for for(int var8 = 0; var8 < var5; var8++)
for for(int var9 = 0; var9 < var6; var9++)
for for(int var7 = 0; var7 < var5; var7++)
for for(int var7 = 0; var7 < var5; var7++)
for for(int var14 = 0; var14 < var12; var14++)
for for(int var16 = 0; var16 < var56; var16++)
for for(int var17 = 0; var17 < var66; var17++)
for for(int var24 = 0; var24 < var21; var24++)
for for(int var75 = 0; var75 < var70; var75++)
for for(int var25 = 0; var25 < var96; var25++)
for for(int var86 = 0; var86 < var76; var86++)
for for(int var97 = 0; var97 < var87; var97++)
for for(int var104 = 0; var104 < var92; var104++)
for for(int var31 = 0; var31 < var30; var31++)
for for(int var128 = 0; var128 < var126; var128++)
for for(int var5 = 0; var5 < this.shaderEffect.length; var5++)
for for(int var6 = 0; var6 < this.modelTexture.length; var6++)
for for(int var35 = 0; var35 < this.cubeTextures.length; var35++)
for for(int var36 = 0; var36 < this.conditionalSounds.length; var36++)
for for(int var37 = 0; var37 < this.particles.length; var37++)
for for(ModelTexture var6 : this.modelTexture)
for for(BlockTextures var24 : this.cubeTextures)
for for(ModelParticle var25 : this.particles)
static int getAmbientSoundEventIndexint getAmbientSoundEventIndex(MemorySegment var0)
static int getAmbientSoundEventIndexint getAmbientSoundEventIndex(MemorySegment var0, int var1)
abstract return getAmbientSoundEventIndexreturn getAmbientSoundEventIndex(var0, 0)
abstract return getBenchreturn getBench(var0, 0)
abstract return getBiomeTintreturn getBiomeTint(var0, 0)
abstract return getBlockBreakingDecalIdreturn getBlockBreakingDecalId(var0, 0)
abstract return getBlockParticleSetIdreturn getBlockParticleSetId(var0, 0)
static int getBlockSoundSetIndexint getBlockSoundSetIndex(MemorySegment var0)
static int getBlockSoundSetIndexint getBlockSoundSetIndex(MemorySegment var0, int var1)
abstract return getBlockSoundSetIndexreturn getBlockSoundSetIndex(var0, 0)
static BlockSupportsRequiredForType getBlockSupportsRequiredForBlockSupportsRequiredForType getBlockSupportsRequiredFor(MemorySegment var0)
static BlockSupportsRequiredForType getBlockSupportsRequiredForBlockSupportsRequiredForType getBlockSupportsRequiredFor(MemorySegment var0, int var1)
abstract return getBlockSupportsRequiredForreturn getBlockSupportsRequiredFor(var0, 0)
abstract return getConditionalSoundsreturn getConditionalSounds(var0, 0)
abstract return getConnectedBlockRuleSetreturn getConnectedBlockRuleSet(var0, 0)
static ShadingMode getCubeShadingModeShadingMode getCubeShadingMode(MemorySegment var0)
static ShadingMode getCubeShadingModeShadingMode getCubeShadingMode(MemorySegment var0, int var1)
abstract return getCubeShadingModereturn getCubeShadingMode(var0, 0)
abstract return getCubeSideMaskTexturereturn getCubeSideMaskTexture(var0, 0)
abstract return getCubeTexturesreturn getCubeTextures(var0, 0)
abstract return getDisplayreturn getDisplay(var0, 0)
static DrawType getDrawTypeDrawType getDrawType(MemorySegment var0)
static DrawType getDrawTypeDrawType getDrawType(MemorySegment var0, int var1)
abstract return getDrawTypereturn getDrawType(var0, 0)
abstract return getGatheringreturn getGathering(var0, 0)
static int getGroupint getGroup(MemorySegment var0)
static int getGroupint getGroup(MemorySegment var0, int var1)
abstract return getGroupreturn getGroup(var0, 0)
static int getHitboxint getHitbox(MemorySegment var0)
static int getHitboxint getHitbox(MemorySegment var0, int var1)
abstract return getHitboxreturn getHitbox(var0, 0)
static boolean getIgnoreSupportWhenPlacedboolean getIgnoreSupportWhenPlaced(MemorySegment var0)
static boolean getIgnoreSupportWhenPlacedboolean getIgnoreSupportWhenPlaced(MemorySegment var0, int var1)
abstract return getIgnoreSupportWhenPlacedreturn getIgnoreSupportWhenPlaced(var0, 0)
abstract return getInteractionHintreturn getInteractionHint(var0, 0)
static int getInteractionHitboxint getInteractionHitbox(MemorySegment var0)
static int getInteractionHitboxint getInteractionHitbox(MemorySegment var0, int var1)
abstract return getInteractionHitboxreturn getInteractionHitbox(var0, 0)
abstract return getInteractionsreturn getInteractions(var0, 0)
abstract return getItemreturn getItem(var0, 0)
abstract return getLightreturn getLight(var0, 0)
static boolean getLoopingboolean getLooping(MemorySegment var0)
static boolean getLoopingboolean getLooping(MemorySegment var0, int var1)
abstract return getLoopingreturn getLooping(var0, 0)
static BlockMaterial getMaterialBlockMaterial getMaterial(MemorySegment var0)
static BlockMaterial getMaterialBlockMaterial getMaterial(MemorySegment var0, int var1)
abstract return getMaterialreturn getMaterial(var0, 0)
static int getMaxSupportDistanceint getMaxSupportDistance(MemorySegment var0)
static int getMaxSupportDistanceint getMaxSupportDistance(MemorySegment var0, int var1)
abstract return getMaxSupportDistancereturn getMaxSupportDistance(var0, 0)
abstract return getModelreturn getModel(var0, 0)
abstract return getModelAnimationreturn getModelAnimation(var0, 0)
static float getModelAnimationSpeedfloat getModelAnimationSpeed(MemorySegment var0)
static float getModelAnimationSpeedfloat getModelAnimationSpeed(MemorySegment var0, int var1)
abstract return getModelAnimationSpeedreturn getModelAnimationSpeed(var0, 0)
static float getModelScalefloat getModelScale(MemorySegment var0)
static float getModelScalefloat getModelScale(MemorySegment var0, int var1)
abstract return getModelScalereturn getModelScale(var0, 0)
abstract return getModelTexturereturn getModelTexture(var0, 0)
static BlockMovementSettings getMovementSettingsBlockMovementSettings getMovementSettings(MemorySegment var0)
static BlockMovementSettings getMovementSettingsBlockMovementSettings getMovementSettings(MemorySegment var0, int var1)
abstract return getMovementSettingsreturn getMovementSettings(var0, 0)
abstract return getNamereturn getName(var0, 0)
static Opacity getOpacityOpacity getOpacity(MemorySegment var0)
static Opacity getOpacityOpacity getOpacity(MemorySegment var0, int var1)
abstract return getOpacityreturn getOpacity(var0, 0)
abstract return getParticleColorreturn getParticleColor(var0, 0)
abstract return getParticlesreturn getParticles(var0, 0)
static int getPhysicalMaterialIndexint getPhysicalMaterialIndex(MemorySegment var0)
static int getPhysicalMaterialIndexint getPhysicalMaterialIndex(MemorySegment var0, int var1)
abstract return getPhysicalMaterialIndexreturn getPhysicalMaterialIndex(var0, 0)
abstract return getPlacementSettingsreturn getPlacementSettings(var0, 0)
abstract return getRailreturn getRail(var0, 0)
static RandomRotation getRandomRotationRandomRotation getRandomRotation(MemorySegment var0)
static RandomRotation getRandomRotationRandomRotation getRandomRotation(MemorySegment var0, int var1)
abstract return getRandomRotationreturn getRandomRotation(var0, 0)
static boolean getRequiresAlphaBlendingboolean getRequiresAlphaBlending(MemorySegment var0)
static boolean getRequiresAlphaBlendingboolean getRequiresAlphaBlending(MemorySegment var0, int var1)
abstract return getRequiresAlphaBlendingreturn getRequiresAlphaBlending(var0, 0)
static Rotation getRotationYawPlacementOffsetRotation getRotationYawPlacementOffset(MemorySegment var0)
static Rotation getRotationYawPlacementOffsetRotation getRotationYawPlacementOffset(MemorySegment var0, int var1)
abstract return getRotationYawPlacementOffsetreturn getRotationYawPlacementOffset(var0, 0)
abstract return getShaderEffectreturn getShaderEffect(var0, 0)
static float getSoundOcclusionOpacityfloat getSoundOcclusionOpacity(MemorySegment var0)
static float getSoundOcclusionOpacityfloat getSoundOcclusionOpacity(MemorySegment var0, int var1)
abstract return getSoundOcclusionOpacityreturn getSoundOcclusionOpacity(var0, 0)
abstract return getStatesreturn getStates(var0, 0)
abstract return getSupportreturn getSupport(var0, 0)
abstract return getSupportingreturn getSupporting(var0, 0)
abstract return getTagIndexesreturn getTagIndexes(var0, 0)
abstract return getTextureComputedColorreturn getTextureComputedColor(var0, 0)
abstract return getTintreturn getTint(var0, 0)
abstract return getTransitionTexturereturn getTransitionTexture(var0, 0)
abstract return getTransitionToGroupsreturn getTransitionToGroups(var0, 0)
static int getTransitionToTagint getTransitionToTag(MemorySegment var0)
static int getTransitionToTagint getTransitionToTag(MemorySegment var0, int var1)
abstract return getTransitionToTagreturn getTransitionToTag(var0, 0)
static boolean getUnknownboolean getUnknown(MemorySegment var0)
static boolean getUnknownboolean getUnknown(MemorySegment var0, int var1)
abstract return getUnknownreturn getUnknown(var0, 0)
static int getValidatedOffsetint getValidatedOffset(MemorySegment var0, int var1, int var2, int var3, String var4)
static VariantRotation getVariantRotationVariantRotation getVariantRotation(MemorySegment var0)
static VariantRotation getVariantRotationVariantRotation getVariantRotation(MemorySegment var0, int var1)
abstract return getVariantRotationreturn getVariantRotation(var0, 0)
static boolean hasBenchboolean hasBench(MemorySegment var0, int var1)
static boolean hasBiomeTintboolean hasBiomeTint(MemorySegment var0, int var1)
static boolean hasBlockBreakingDecalIdboolean hasBlockBreakingDecalId(MemorySegment var0, int var1)
static boolean hasBlockParticleSetIdboolean hasBlockParticleSetId(MemorySegment var0, int var1)
static boolean hasConditionalSoundsboolean hasConditionalSounds(MemorySegment var0, int var1)
static boolean hasConnectedBlockRuleSetboolean hasConnectedBlockRuleSet(MemorySegment var0, int var1)
static boolean hasCubeSideMaskTextureboolean hasCubeSideMaskTexture(MemorySegment var0, int var1)
static boolean hasCubeTexturesboolean hasCubeTextures(MemorySegment var0, int var1)
static boolean hasDisplayboolean hasDisplay(MemorySegment var0, int var1)
static boolean hasGatheringboolean hasGathering(MemorySegment var0, int var1)
static boolean hasInteractionHintboolean hasInteractionHint(MemorySegment var0, int var1)
static boolean hasInteractionsboolean hasInteractions(MemorySegment var0, int var1)
static boolean hasItemboolean hasItem(MemorySegment var0, int var1)
static boolean hasLightboolean hasLight(MemorySegment var0, int var1)
static boolean hasModelboolean hasModel(MemorySegment var0, int var1)
static boolean hasModelAnimationboolean hasModelAnimation(MemorySegment var0, int var1)
static boolean hasModelTextureboolean hasModelTexture(MemorySegment var0, int var1)
static boolean hasNameboolean hasName(MemorySegment var0, int var1)
static boolean hasParticleColorboolean hasParticleColor(MemorySegment var0, int var1)
static boolean hasParticlesboolean hasParticles(MemorySegment var0, int var1)
static boolean hasPlacementSettingsboolean hasPlacementSettings(MemorySegment var0, int var1)
static boolean hasRailboolean hasRail(MemorySegment var0, int var1)
static boolean hasShaderEffectboolean hasShaderEffect(MemorySegment var0, int var1)
static boolean hasStatesboolean hasStates(MemorySegment var0, int var1)
static boolean hasSupportboolean hasSupport(MemorySegment var0, int var1)
static boolean hasSupportingboolean hasSupporting(MemorySegment var0, int var1)
static boolean hasTagIndexesboolean hasTagIndexes(MemorySegment var0, int var1)
static boolean hasTextureComputedColorboolean hasTextureComputedColor(MemorySegment var0, int var1)
static boolean hasTintboolean hasTint(MemorySegment var0, int var1)
static boolean hasTransitionTextureboolean hasTransitionTexture(MemorySegment var0, int var1)
static boolean hasTransitionToGroupsboolean hasTransitionToGroups(MemorySegment var0, int var1)
if if(var1 < 0)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var10 == -1L)
if if(var12 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var10 == -1L)
if if(var12 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var4 == -1L)
if if(var6 > 4096000)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var3 == -1L)
if if(var5 > 4096000)
if if(var4 != var2)
if if(var10 == -1L)
if if(var12 > 4096000)
if if(var48 == -1L)
if if(var56 > 4096000)
if if(var57 == -1L)
if if(var66 > 4096000)
if if(var19 == -1L)
if if(var21 > 4096000)
if if(var62 == -1L)
if if(var70 > 4096000)
if if(var20 == -1L)
if if(var96 > 4096000)
if if(var67 == -1L)
if if(var76 > 4096000)
if if(var77 == -1L)
if if(var87 > 4096000)
if if(var83 == -1L)
if if(var92 > 4096000)
if if(var105 == -1L)
if if(var111 > 4096000)
if if(var28 == -1L)
if if(var30 > 4096000)
if if(var29 == -1L)
if if(var126 > 4096000)
if if(var124 == -1L)
if if(var129 > 4096000)
if if(var2 != null)
if if(this.particleColor != null)
if if(this.textureComputedColor != null)
if if(this.light != null)
if if(this.tint != null)
if if(this.biomeTint != null)
if if(this.placementSettings != null)
if if(this.item != null)
if if(this.name != null)
if if(this.shaderEffect != null)
if if(this.model != null)
if if(this.modelTexture != null)
if if(this.modelAnimation != null)
if if(this.support != null)
if if(this.supporting != null)
if if(this.cubeTextures != null)
if if(this.cubeSideMaskTexture != null)
if if(this.conditionalSounds != null)
if if(this.particles != null)
if if(this.blockParticleSetId != null)
if if(this.blockBreakingDecalId != null)
if if(this.transitionTexture != null)
if if(this.transitionToGroups != null)
if if(this.interactionHint != null)
if if(this.gathering != null)
if if(this.display != null)
if if(this.rail != null)
if if(this.interactions != null)
if if(this.states != null)
if if(this.tagIndexes != null)
if if(this.bench != null)
if if(this.connectedBlockRuleSet != null)
if if(this.particleColor != null)
if if(this.textureComputedColor != null)
if if(this.light != null)
if if(this.tint != null)
if if(this.biomeTint != null)
if if(this.placementSettings != null)
if if(this.item != null)
if if(this.name != null)
if if(this.shaderEffect != null)
if if(this.shaderEffect.length > 4096000)
if if(this.model != null)
if if(this.modelTexture != null)
if if(this.modelTexture.length > 4096000)
if if(this.modelAnimation != null)
if if(this.support != null)
if if(this.supporting != null)
if if(this.cubeTextures != null)
if if(this.cubeTextures.length > 4096000)
if if(this.cubeSideMaskTexture != null)
if if(this.conditionalSounds != null)
if if(this.conditionalSounds.length > 4096000)
if if(this.particles != null)
if if(this.particles.length > 4096000)
if if(this.blockParticleSetId != null)
if if(this.blockBreakingDecalId != null)
if if(this.transitionTexture != null)
if if(this.transitionToGroups != null)
if if(this.transitionToGroups.length > 4096000)
if if(this.interactionHint != null)
if if(this.gathering != null)
if if(this.display != null)
if if(this.rail != null)
if if(this.interactions != null)
if if(this.states != null)
if if(this.tagIndexes != null)
if if(this.tagIndexes.length > 4096000)
if if(this.bench != null)
if if(this.connectedBlockRuleSet != null)
if if(this.item != null)
if if(this.name != null)
if if(this.shaderEffect != null)
if if(this.model != null)
if if(this.modelTexture != null)
if if(this.modelAnimation != null)
if if(this.support != null)
if if(this.supporting != null)
if if(this.cubeTextures != null)
if if(this.cubeSideMaskTexture != null)
if if(this.conditionalSounds != null)
if if(this.particles != null)
if if(this.blockParticleSetId != null)
if if(this.blockBreakingDecalId != null)
if if(this.transitionTexture != null)
if if(this.transitionToGroups != null)
if if(this.interactionHint != null)
if if(this.gathering != null)
if if(this.display != null)
if if(this.rail != null)
if if(this.interactions != null)
if if(this.states != null)
if if(this.tagIndexes != null)
if if(this.bench != null)
if if(this.connectedBlockRuleSet != null)
if if(this.support != null)
if if(this.supporting != 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 + 177, var4, "Item")
abstract requireSlot requireSlot(var0, var1 + 177, -1, "Item")
abstract requireSlot requireSlot(var0, var1 + 181, var4, "Name")
abstract requireSlot requireSlot(var0, var1 + 181, -1, "Name")
abstract requireSlot requireSlot(var0, var1 + 185, var4, "ShaderEffect")
abstract requireSlot requireSlot(var0, var1 + 185, -1, "ShaderEffect")
abstract requireSlot requireSlot(var0, var1 + 189, var4, "Model")
abstract requireSlot requireSlot(var0, var1 + 189, -1, "Model")
abstract requireSlot requireSlot(var0, var1 + 193, var4, "ModelTexture")
abstract requireSlot requireSlot(var0, var1 + 193, -1, "ModelTexture")
abstract requireSlot requireSlot(var0, var1 + 197, var4, "ModelAnimation")
abstract requireSlot requireSlot(var0, var1 + 197, -1, "ModelAnimation")
abstract requireSlot requireSlot(var0, var1 + 201, var4, "Support")
abstract requireSlot requireSlot(var0, var1 + 201, -1, "Support")
abstract requireSlot requireSlot(var0, var1 + 205, var4, "Supporting")
abstract requireSlot requireSlot(var0, var1 + 205, -1, "Supporting")
abstract requireSlot requireSlot(var0, var1 + 209, var4, "CubeTextures")
abstract requireSlot requireSlot(var0, var1 + 209, -1, "CubeTextures")
abstract requireSlot requireSlot(var0, var1 + 213, var4, "CubeSideMaskTexture")
abstract requireSlot requireSlot(var0, var1 + 213, -1, "CubeSideMaskTexture")
abstract requireSlot requireSlot(var0, var1 + 217, var4, "ConditionalSounds")
abstract requireSlot requireSlot(var0, var1 + 217, -1, "ConditionalSounds")
abstract requireSlot requireSlot(var0, var1 + 221, var4, "Particles")
abstract requireSlot requireSlot(var0, var1 + 221, -1, "Particles")
abstract requireSlot requireSlot(var0, var1 + 225, var4, "BlockParticleSetId")
abstract requireSlot requireSlot(var0, var1 + 225, -1, "BlockParticleSetId")
abstract requireSlot requireSlot(var0, var1 + 229, var4, "BlockBreakingDecalId")
abstract requireSlot requireSlot(var0, var1 + 229, -1, "BlockBreakingDecalId")
abstract requireSlot requireSlot(var0, var1 + 233, var4, "TransitionTexture")
abstract requireSlot requireSlot(var0, var1 + 233, -1, "TransitionTexture")
abstract requireSlot requireSlot(var0, var1 + 237, var4, "TransitionToGroups")
abstract requireSlot requireSlot(var0, var1 + 237, -1, "TransitionToGroups")
abstract requireSlot requireSlot(var0, var1 + 241, var4, "InteractionHint")
abstract requireSlot requireSlot(var0, var1 + 241, -1, "InteractionHint")
abstract requireSlot requireSlot(var0, var1 + 245, var4, "Gathering")
abstract requireSlot requireSlot(var0, var1 + 245, -1, "Gathering")
abstract requireSlot requireSlot(var0, var1 + 249, var4, "Display")
abstract requireSlot requireSlot(var0, var1 + 249, -1, "Display")
abstract requireSlot requireSlot(var0, var1 + 253, var4, "Rail")
abstract requireSlot requireSlot(var0, var1 + 253, -1, "Rail")
abstract requireSlot requireSlot(var0, var1 + 257, var4, "Interactions")
abstract requireSlot requireSlot(var0, var1 + 257, -1, "Interactions")
abstract requireSlot requireSlot(var0, var1 + 261, var4, "States")
abstract requireSlot requireSlot(var0, var1 + 261, -1, "States")
abstract requireSlot requireSlot(var0, var1 + 265, var4, "TagIndexes")
abstract requireSlot requireSlot(var0, var1 + 265, -1, "TagIndexes")
abstract requireSlot requireSlot(var0, var1 + 269, var4, "Bench")
abstract requireSlot requireSlot(var0, var1 + 269, -1, "Bench")
abstract requireSlot requireSlot(var0, var1 + 273, var4, "ConnectedBlockRuleSet")
abstract requireSlot requireSlot(var0, var1 + 273, -1, "ConnectedBlockRuleSet")
public int serializeint serialize(@Nonnull MemorySegment var1, int var2)
static BlockType toObjectBlockType toObject(MemorySegment var0)
static BlockType toObjectBlockType toObject(MemorySegment var0, int var1)
static BlockType toObjectBlockType 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.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Objects;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class BlockType {
   class="kw">public class="kw">static class="kw">final int NULLABLE_BIT_FIELD_SIZE = 4;
   class="kw">public class="kw">static class="kw">final int FIXED_BLOCK_SIZE = 177;
   class="kw">public class="kw">static class="kw">final int VARIABLE_FIELD_COUNT = 25;
   class="kw">public class="kw">static class="kw">final int VARIABLE_BLOCK_START = 277;
   class="kw">public class="kw">static class="kw">final int MAX_SIZE = 1677721600;
   @Nullable
   class="kw">public String item;
   @Nullable
   class="kw">public String name;
   class="kw">public boolean unknown;
   @Nonnull
   class="kw">public DrawType drawType = DrawType.Empty;
   @Nonnull
   class="kw">public BlockMaterial material = BlockMaterial.Empty;
   @Nonnull
   class="kw">public Opacity opacity = Opacity.Solid;
   @Nullable
   class="kw">public ShaderType[] shaderEffect;
   class="kw">public int hitbox;
   class="kw">public int interactionHitbox;
   @Nullable
   class="kw">public String model;
   @Nullable
   class="kw">public ModelTexture[] modelTexture;
   class="kw">public float modelScale;
   @Nullable
   class="kw">public String modelAnimation;
   class="kw">public float modelAnimationSpeed = 1.0F;
   class="kw">public boolean looping;
   class="kw">public int maxSupportDistance;
   @Nonnull
   class="kw">public BlockSupportsRequiredForType blockSupportsRequiredFor = BlockSupportsRequiredForType.Any;
   @Nullable
   class="kw">public Map<BlockNeighbor, RequiredBlockFaceSupport[]> support;
   @Nullable
   class="kw">public Map<BlockNeighbor, BlockFaceSupport[]> supporting;
   class="kw">public boolean requiresAlphaBlending;
   @Nullable
   class="kw">public BlockTextures[] cubeTextures;
   @Nullable
   class="kw">public String cubeSideMaskTexture;
   @Nonnull
   class="kw">public ShadingMode cubeShadingMode = ShadingMode.Standard;
   @Nonnull
   class="kw">public RandomRotation randomRotation = RandomRotation.None;
   @Nonnull
   class="kw">public VariantRotation variantRotation = VariantRotation.None;
   @Nonnull
   class="kw">public Rotation rotationYawPlacementOffset = Rotation.None;
   class="kw">public int blockSoundSetIndex;
   class="kw">public int physicalMaterialIndex;
   class="kw">public float soundOcclusionOpacity;
   class="kw">public int ambientSoundEventIndex;
   @Nullable
   class="kw">public ConditionalBlockSound[] conditionalSounds;
   @Nullable
   class="kw">public ModelParticle[] particles;
   @Nullable
   class="kw">public String blockParticleSetId;
   @Nullable
   class="kw">public String blockBreakingDecalId;
   @Nullable
   class="kw">public Color particleColor;
   @Nullable
   class="kw">public Color textureComputedColor;
   @Nullable
   class="kw">public ColorLight light;
   @Nullable
   class="kw">public Tint tint;
   @Nullable
   class="kw">public Tint biomeTint;
   class="kw">public int group;
   @Nullable
   class="kw">public String transitionTexture;
   @Nullable
   class="kw">public int[] transitionToGroups;
   @Nonnull
   class="kw">public BlockMovementSettings movementSettings = new BlockMovementSettings();
   @Nullable
   class="kw">public String interactionHint;
   @Nullable
   class="kw">public BlockGathering gathering;
   @Nullable
   class="kw">public BlockPlacementSettings placementSettings;
   @Nullable
   class="kw">public ModelDisplay display;
   @Nullable
   class="kw">public RailConfig rail;
   class="kw">public boolean ignoreSupportWhenPlaced;
   @Nullable
   class="kw">public Map<InteractionType, Integer> interactions;
   @Nullable
   class="kw">public Map<String, Integer> states;
   class="kw">public int transitionToTag;
   @Nullable
   class="kw">public int[] tagIndexes;
   @Nullable
   class="kw">public Bench bench;
   @Nullable
   class="kw">public ConnectedBlockRuleSet connectedBlockRuleSet;

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

   class="kw">public BlockType(
      @Nullable String var1,
      @Nullable String var2,
      boolean var3,
      @Nonnull DrawType var4,
      @Nonnull BlockMaterial var5,
      @Nonnull Opacity var6,
      @Nullable ShaderType[] var7,
      int var8,
      int var9,
      @Nullable String var10,
      @Nullable ModelTexture[] var11,
      float var12,
      @Nullable String var13,
      float var14,
      boolean var15,
      int var16,
      @Nonnull BlockSupportsRequiredForType var17,
      @Nullable Map<BlockNeighbor, RequiredBlockFaceSupport[]> var18,
      @Nullable Map<BlockNeighbor, BlockFaceSupport[]> var19,
      boolean var20,
      @Nullable BlockTextures[] var21,
      @Nullable String var22,
      @Nonnull ShadingMode var23,
      @Nonnull RandomRotation var24,
      @Nonnull VariantRotation var25,
      @Nonnull Rotation var26,
      int var27,
      int var28,
      float var29,
      int var30,
      @Nullable ConditionalBlockSound[] var31,
      @Nullable ModelParticle[] var32,
      @Nullable String var33,
      @Nullable String var34,
      @Nullable Color var35,
      @Nullable Color var36,
      @Nullable ColorLight var37,
      @Nullable Tint var38,
      @Nullable Tint var39,
      int var40,
      @Nullable String var41,
      @Nullable int[] var42,
      @Nonnull BlockMovementSettings var43,
      @Nullable String var44,
      @Nullable BlockGathering var45,
      @Nullable BlockPlacementSettings var46,
      @Nullable ModelDisplay var47,
      @Nullable RailConfig var48,
      boolean var49,
      @Nullable Map<InteractionType, Integer> var50,
      @Nullable Map<String, Integer> var51,
      int var52,
      @Nullable int[] var53,
      @Nullable Bench var54,
      @Nullable ConnectedBlockRuleSet var55
   ) {
      this.item = var1;
      this.name = var2;
      this.unknown = var3;
      this.drawType = var4;
      this.material = var5;
      this.opacity = var6;
      this.shaderEffect = var7;
      this.hitbox = var8;
      this.interactionHitbox = var9;
      this.model = var10;
      this.modelTexture = var11;
      this.modelScale = var12;
      this.modelAnimation = var13;
      this.modelAnimationSpeed = var14;
      this.looping = var15;
      this.maxSupportDistance = var16;
      this.blockSupportsRequiredFor = var17;
      this.support = var18;
      this.supporting = var19;
      this.requiresAlphaBlending = var20;
      this.cubeTextures = var21;
      this.cubeSideMaskTexture = var22;
      this.cubeShadingMode = var23;
      this.randomRotation = var24;
      this.variantRotation = var25;
      this.rotationYawPlacementOffset = var26;
      this.blockSoundSetIndex = var27;
      this.physicalMaterialIndex = var28;
      this.soundOcclusionOpacity = var29;
      this.ambientSoundEventIndex = var30;
      this.conditionalSounds = var31;
      this.particles = var32;
      this.blockParticleSetId = var33;
      this.blockBreakingDecalId = var34;
      this.particleColor = var35;
      this.textureComputedColor = var36;
      this.light = var37;
      this.tint = var38;
      this.biomeTint = var39;
      this.group = var40;
      this.transitionTexture = var41;
      this.transitionToGroups = var42;
      this.movementSettings = var43;
      this.interactionHint = var44;
      this.gathering = var45;
      this.placementSettings = var46;
      this.display = var47;
      this.rail = var48;
      this.ignoreSupportWhenPlaced = var49;
      this.interactions = var50;
      this.states = var51;
      this.transitionToTag = var52;
      this.tagIndexes = var53;
      this.bench = var54;
      this.connectedBlockRuleSet = var55;
   }

   class="kw">public BlockType(@Nonnull BlockType var1) {
      this.item = var1.item;
      this.name = var1.name;
      this.unknown = var1.unknown;
      this.drawType = var1.drawType;
      this.material = var1.material;
      this.opacity = var1.opacity;
      this.shaderEffect = var1.shaderEffect;
      this.hitbox = var1.hitbox;
      this.interactionHitbox = var1.interactionHitbox;
      this.model = var1.model;
      this.modelTexture = var1.modelTexture;
      this.modelScale = var1.modelScale;
      this.modelAnimation = var1.modelAnimation;
      this.modelAnimationSpeed = var1.modelAnimationSpeed;
      this.looping = var1.looping;
      this.maxSupportDistance = var1.maxSupportDistance;
      this.blockSupportsRequiredFor = var1.blockSupportsRequiredFor;
      this.support = var1.support;
      this.supporting = var1.supporting;
      this.requiresAlphaBlending = var1.requiresAlphaBlending;
      this.cubeTextures = var1.cubeTextures;
      this.cubeSideMaskTexture = var1.cubeSideMaskTexture;
      this.cubeShadingMode = var1.cubeShadingMode;
      this.randomRotation = var1.randomRotation;
      this.variantRotation = var1.variantRotation;
      this.rotationYawPlacementOffset = var1.rotationYawPlacementOffset;
      this.blockSoundSetIndex = var1.blockSoundSetIndex;
      this.physicalMaterialIndex = var1.physicalMaterialIndex;
      this.soundOcclusionOpacity = var1.soundOcclusionOpacity;
      this.ambientSoundEventIndex = var1.ambientSoundEventIndex;
      this.conditionalSounds = var1.conditionalSounds;
      this.particles = var1.particles;
      this.blockParticleSetId = var1.blockParticleSetId;
      this.blockBreakingDecalId = var1.blockBreakingDecalId;
      this.particleColor = var1.particleColor;
      this.textureComputedColor = var1.textureComputedColor;
      this.light = var1.light;
      this.tint = var1.tint;
      this.biomeTint = var1.biomeTint;
      this.group = var1.group;
      this.transitionTexture = var1.transitionTexture;
      this.transitionToGroups = var1.transitionToGroups;
      this.movementSettings = var1.movementSettings;
      this.interactionHint = var1.interactionHint;
      this.gathering = var1.gathering;
      this.placementSettings = var1.placementSettings;
      this.display = var1.display;
      this.rail = var1.rail;
      this.ignoreSupportWhenPlaced = var1.ignoreSupportWhenPlaced;
      this.interactions = var1.interactions;
      this.states = var1.states;
      this.transitionToTag = var1.transitionToTag;
      this.tagIndexes = var1.tagIndexes;
      this.bench = var1.bench;
      this.connectedBlockRuleSet = var1.connectedBlockRuleSet;
   }

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

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

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

   @Nullable
   class="kw">public class="kw">static String getItem(MemorySegment var0, int var1) {
      class="kw">return hasItem(var0, var1) ? PacketIO.readVarString("Item", var0, var1 + getValidatedOffset(var0, var1, 177, 277, "Item"), 4096000) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static String getName(MemorySegment var0, int var1) {
      class="kw">return hasName(var0, var1) ? PacketIO.readVarString("Name", var0, var1 + getValidatedOffset(var0, var1, 181, 277, "Name"), 4096000) : null;
   }

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

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

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

   class="kw">public class="kw">static DrawType getDrawType(MemorySegment var0, int var1) {
      class="kw">return DrawType.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 5));
   }

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

   class="kw">public class="kw">static BlockMaterial getMaterial(MemorySegment var0, int var1) {
      class="kw">return BlockMaterial.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 6));
   }

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

   class="kw">public class="kw">static Opacity getOpacity(MemorySegment var0, int var1) {
      class="kw">return Opacity.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 7));
   }

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

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

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

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

      int var6 = (int)(var3 >>> 32);
      if (var2 + var6 + var5 > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("ShaderEffect", Math.min(var2 + var6 + var5, Integer.MAX_VALUE), (int)var0.byteSize());
      }

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

      for (int var8 = 0; var8 < var5; var8++) {
         var7[var8] = ShaderType.fromValue(var0.get(PacketIO.PROTO_BYTE, var2 + var8 * 1));
      }

      class="kw">return var7;
   }

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

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

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

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

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

   @Nullable
   class="kw">public class="kw">static String getModel(MemorySegment var0, int var1) {
      class="kw">return hasModel(var0, var1) ? PacketIO.readVarString("Model", var0, var1 + getValidatedOffset(var0, var1, 189, 277, "Model"), 4096000) : null;
   }

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

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

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 193, 277, "ModelTexture");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("ModelTexture");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.arrayTooLong("ModelTexture", var6, 4096000);
      }

      int var7 = (int)(var4 >>> 32);
      if (var3 + var7 + var6 * 5L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("ModelTexture", (int)Math.min(var3 + var7 + var6 * 5L, 2147483647L), (int)var0.byteSize());
      }

      var3 += var7;
      ModelTexture[] var8 = new ModelTexture[var6];

      for (int var9 = 0; var9 < var6; var9++) {
         var8[var9] = ModelTexture.toObject(var0, var3, var2);
         var3 = var2.position;
      }

      class="kw">return var8;
   }

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

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

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

   @Nullable
   class="kw">public class="kw">static String getModelAnimation(MemorySegment var0, int var1) {
      class="kw">return hasModelAnimation(var0, var1)
         ? PacketIO.readVarString("ModelAnimation", var0, var1 + getValidatedOffset(var0, var1, 197, 277, "ModelAnimation"), 4096000)
         : null;
   }

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

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

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

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

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

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

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

   class="kw">public class="kw">static BlockSupportsRequiredForType getBlockSupportsRequiredFor(MemorySegment var0, int var1) {
      class="kw">return BlockSupportsRequiredForType.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 29));
   }

   @Nullable
   class="kw">public class="kw">static Map<BlockNeighbor, RequiredBlockFaceSupport[]> getSupport(MemorySegment var0) {
      class="kw">return getSupport(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Map<BlockNeighbor, RequiredBlockFaceSupport[]> getSupport(MemorySegment var0, int var1) {
      if (!hasSupport(var0, var1)) {
         class="kw">return null;
      }

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 201, 277, "Support");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("Support");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.dictionaryTooLarge("Support", var6, 4096000);
      }

      var3 += (int)(var4 >>> 32);
      if (var3 + var6 * 2L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Support", (int)Math.min(var3 + var6 * 2L, 2147483647L), (int)var0.byteSize());
      }

      Map var7 = new HashMap<>(var6);

      for (int var8 = 0; var8 < var6; var8++) {
         BlockNeighbor var9 = BlockNeighbor.fromValue(var0.get(PacketIO.PROTO_BYTE, var3));
         long var10 = VarInt.getWithLength(var0, ++var3);
         if (var10 == -1L) {
            throw ProtocolException.invalidVarInt("value");
         }

         int var12 = (int)var10;
         int var13 = (int)(var10 >>> 32);
         if (var12 > 4096000) {
            throw ProtocolException.arrayTooLong("value", var12, 4096000);
         }

         if (var3 + var13 + var12 * 32L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("value", var3 + var13 + var12 * 32, (int)var0.byteSize());
         }

         var3 += var13;
         RequiredBlockFaceSupport[] var14 = new RequiredBlockFaceSupport[var12];

         for (int var15 = 0; var15 < var12; var15++) {
            var14[var15] = RequiredBlockFaceSupport.toObject(var0, var3, var2);
            var3 = var2.position;
         }

         if (var7.put(var9, var14) != null) {
            throw ProtocolException.duplicateKey("Support", var9);
         }
      }

      class="kw">return var7;
   }

   @Nullable
   class="kw">public class="kw">static Map<BlockNeighbor, BlockFaceSupport[]> getSupporting(MemorySegment var0) {
      class="kw">return getSupporting(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Map<BlockNeighbor, BlockFaceSupport[]> getSupporting(MemorySegment var0, int var1) {
      if (!hasSupporting(var0, var1)) {
         class="kw">return null;
      }

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 205, 277, "Supporting");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("Supporting");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.dictionaryTooLarge("Supporting", var6, 4096000);
      }

      var3 += (int)(var4 >>> 32);
      if (var3 + var6 * 2L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Supporting", (int)Math.min(var3 + var6 * 2L, 2147483647L), (int)var0.byteSize());
      }

      Map var7 = new HashMap<>(var6);

      for (int var8 = 0; var8 < var6; var8++) {
         BlockNeighbor var9 = BlockNeighbor.fromValue(var0.get(PacketIO.PROTO_BYTE, var3));
         long var10 = VarInt.getWithLength(var0, ++var3);
         if (var10 == -1L) {
            throw ProtocolException.invalidVarInt("value");
         }

         int var12 = (int)var10;
         int var13 = (int)(var10 >>> 32);
         if (var12 > 4096000) {
            throw ProtocolException.arrayTooLong("value", var12, 4096000);
         }

         if (var3 + var13 + var12 * 9L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("value", var3 + var13 + var12 * 9, (int)var0.byteSize());
         }

         var3 += var13;
         BlockFaceSupport[] var14 = new BlockFaceSupport[var12];

         for (int var15 = 0; var15 < var12; var15++) {
            var14[var15] = BlockFaceSupport.toObject(var0, var3, var2);
            var3 = var2.position;
         }

         if (var7.put(var9, var14) != null) {
            throw ProtocolException.duplicateKey("Supporting", var9);
         }
      }

      class="kw">return var7;
   }

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

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

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

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

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 209, 277, "CubeTextures");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("CubeTextures");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.arrayTooLong("CubeTextures", var6, 4096000);
      }

      int var7 = (int)(var4 >>> 32);
      if (var3 + var7 + var6 * 29L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("CubeTextures", (int)Math.min(var3 + var7 + var6 * 29L, 2147483647L), (int)var0.byteSize());
      }

      var3 += var7;
      BlockTextures[] var8 = new BlockTextures[var6];

      for (int var9 = 0; var9 < var6; var9++) {
         var8[var9] = BlockTextures.toObject(var0, var3, var2);
         var3 = var2.position;
      }

      class="kw">return var8;
   }

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

   @Nullable
   class="kw">public class="kw">static String getCubeSideMaskTexture(MemorySegment var0, int var1) {
      class="kw">return hasCubeSideMaskTexture(var0, var1)
         ? PacketIO.readVarString("CubeSideMaskTexture", var0, var1 + getValidatedOffset(var0, var1, 213, 277, "CubeSideMaskTexture"), 4096000)
         : null;
   }

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

   class="kw">public class="kw">static ShadingMode getCubeShadingMode(MemorySegment var0, int var1) {
      class="kw">return ShadingMode.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 31));
   }

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

   class="kw">public class="kw">static RandomRotation getRandomRotation(MemorySegment var0, int var1) {
      class="kw">return RandomRotation.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 32));
   }

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

   class="kw">public class="kw">static VariantRotation getVariantRotation(MemorySegment var0, int var1) {
      class="kw">return VariantRotation.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 33));
   }

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

   class="kw">public class="kw">static Rotation getRotationYawPlacementOffset(MemorySegment var0, int var1) {
      class="kw">return Rotation.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 34));
   }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      class="kw">return var7;
   }

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

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

      ReadCursor var2 = new ReadCursor();
      int var3 = var1 + getValidatedOffset(var0, var1, 221, 277, "Particles");
      long var4 = VarInt.getWithLength(var0, var3);
      if (var4 == -1L) {
         throw ProtocolException.invalidVarInt("Particles");
      }

      int var6 = (int)var4;
      if (var6 > 4096000) {
         throw ProtocolException.arrayTooLong("Particles", var6, 4096000);
      }

      int var7 = (int)(var4 >>> 32);
      if (var3 + var7 + var6 * 42L > var0.byteSize()) {
         throw ProtocolException.bufferTooSmall("Particles", (int)Math.min(var3 + var7 + var6 * 42L, 2147483647L), (int)var0.byteSize());
      }

      var3 += var7;
      ModelParticle[] var8 = new ModelParticle[var6];

      for (int var9 = 0; var9 < var6; var9++) {
         var8[var9] = ModelParticle.toObject(var0, var3, var2);
         var3 = var2.position;
      }

      class="kw">return var8;
   }

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

   @Nullable
   class="kw">public class="kw">static String getBlockParticleSetId(MemorySegment var0, int var1) {
      class="kw">return hasBlockParticleSetId(var0, var1)
         ? PacketIO.readVarString("BlockParticleSetId", var0, var1 + getValidatedOffset(var0, var1, 225, 277, "BlockParticleSetId"), 4096000)
         : null;
   }

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

   @Nullable
   class="kw">public class="kw">static String getBlockBreakingDecalId(MemorySegment var0, int var1) {
      class="kw">return hasBlockBreakingDecalId(var0, var1)
         ? PacketIO.readVarString("BlockBreakingDecalId", var0, var1 + getValidatedOffset(var0, var1, 229, 277, "BlockBreakingDecalId"), 4096000)
         : null;
   }

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

   @Nullable
   class="kw">public class="kw">static Color getParticleColor(MemorySegment var0, int var1) {
      class="kw">return hasParticleColor(var0, var1) ? Color.toObject(var0, var1 + 51) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static Color getTextureComputedColor(MemorySegment var0, int var1) {
      class="kw">return hasTextureComputedColor(var0, var1) ? Color.toObject(var0, var1 + 54) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static ColorLight getLight(MemorySegment var0, int var1) {
      class="kw">return hasLight(var0, var1) ? ColorLight.toObject(var0, var1 + 57) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static Tint getTint(MemorySegment var0, int var1) {
      class="kw">return hasTint(var0, var1) ? Tint.toObject(var0, var1 + 61) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static Tint getBiomeTint(MemorySegment var0, int var1) {
      class="kw">return hasBiomeTint(var0, var1) ? Tint.toObject(var0, var1 + 85) : null;
   }

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

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

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

   @Nullable
   class="kw">public class="kw">static String getTransitionTexture(MemorySegment var0, int var1) {
      class="kw">return hasTransitionTexture(var0, var1)
         ? PacketIO.readVarString("TransitionTexture", var0, var1 + getValidatedOffset(var0, var1, 233, 277, "TransitionTexture"), 4096000)
         : null;
   }

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

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

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

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

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

      var2 += var6;
      int[] var7 = new int[var5];
      MemorySegment.copy(var0, PacketIO.PROTO_INT, var2, var7, 0, var5);
      class="kw">return var7;
   }

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

   class="kw">public class="kw">static BlockMovementSettings getMovementSettings(MemorySegment var0, int var1) {
      class="kw">return BlockMovementSettings.toObject(var0, var1 + 113);
   }

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

   @Nullable
   class="kw">public class="kw">static String getInteractionHint(MemorySegment var0, int var1) {
      class="kw">return hasInteractionHint(var0, var1)
         ? PacketIO.readVarString("InteractionHint", var0, var1 + getValidatedOffset(var0, var1, 241, 277, "InteractionHint"), 4096000)
         : null;
   }

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

   @Nullable
   class="kw">public class="kw">static BlockGathering getGathering(MemorySegment var0, int var1) {
      class="kw">return hasGathering(var0, var1) ? BlockGathering.toObject(var0, var1 + getValidatedOffset(var0, var1, 245, 277, "Gathering")) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static BlockPlacementSettings getPlacementSettings(MemorySegment var0, int var1) {
      class="kw">return hasPlacementSettings(var0, var1) ? BlockPlacementSettings.toObject(var0, var1 + 156) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static ModelDisplay getDisplay(MemorySegment var0, int var1) {
      class="kw">return hasDisplay(var0, var1) ? ModelDisplay.toObject(var0, var1 + getValidatedOffset(var0, var1, 249, 277, "Display")) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static RailConfig getRail(MemorySegment var0, int var1) {
      class="kw">return hasRail(var0, var1) ? RailConfig.toObject(var0, var1 + getValidatedOffset(var0, var1, 253, 277, "Rail")) : null;
   }

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

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

   @Nullable
   class="kw">public class="kw">static Map<InteractionType, Integer> getInteractions(MemorySegment var0) {
      class="kw">return getInteractions(var0, 0);
   }

   @Nullable
   class="kw">public class="kw">static Map<InteractionType, Integer> getInteractions(MemorySegment var0, int var1) {
      if (!hasInteractions(var0, var1)) {
         class="kw">return null;
      }

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

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

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

      Map var6 = new HashMap<>(var5);

      for (int var7 = 0; var7 < var5; var7++) {
         InteractionType var8 = InteractionType.fromValue(var0.get(PacketIO.PROTO_BYTE, var2));
         int var9 = var0.get(PacketIO.PROTO_INT, ++var2);
         var2 += 4;
         if (var6.put(var8, var9) != null) {
            throw ProtocolException.duplicateKey("Interactions", var8);
         }
      }

      class="kw">return var6;
   }

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

   @Nullable
   class="kw">public class="kw">static Map<String, Integer> getStates(MemorySegment var0, int var1) {
      if (!hasStates(var0, var1)) {
         class="kw">return null;
      }

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

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

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

      Map var6 = new HashMap<>(var5);

      for (int var7 = 0; var7 < var5; var7++) {
         long var8 = VarInt.getWithLength(var0, var2);
         String var10 = PacketIO.readVarString("key", var0, var2, 0, 4096000, var8);
         var2 += (int)var8 + (int)(var8 >>> 32);
         int var11 = var0.get(PacketIO.PROTO_INT, var2);
         var2 += 4;
         if (var6.put(var10, var11) != null) {
            throw ProtocolException.duplicateKey("States", var10);
         }
      }

      class="kw">return var6;
   }

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

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

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

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

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

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

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

      var2 += var6;
      int[] var7 = new int[var5];
      MemorySegment.copy(var0, PacketIO.PROTO_INT, var2, var7, 0, var5);
      class="kw">return var7;
   }

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

   @Nullable
   class="kw">public class="kw">static Bench getBench(MemorySegment var0, int var1) {
      class="kw">return hasBench(var0, var1) ? Bench.toObject(var0, var1 + getValidatedOffset(var0, var1, 269, 277, "Bench")) : null;
   }

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

   @Nullable
   class="kw">public class="kw">static ConnectedBlockRuleSet getConnectedBlockRuleSet(MemorySegment var0, int var1) {
      class="kw">return hasConnectedBlockRuleSet(var0, var1)
         ? ConnectedBlockRuleSet.toObject(var0, var1 + getValidatedOffset(var0, var1, 273, 277, "ConnectedBlockRuleSet"))
         : null;
   }

   class="kw">public class="kw">static boolean hasParticleColor(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 hasTextureComputedColor(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 hasLight(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 hasTint(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 hasBiomeTint(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 hasPlacementSettings(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 hasItem(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 hasName(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 hasShaderEffect(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 1);
      class="kw">return (var2 & 1) != 0;
   }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   class="kw">public class="kw">static boolean hasConnectedBlockRuleSet(MemorySegment var0, int var1) {
      byte var2 = var0.get(PacketIO.PROTO_BYTE, var1 + 3);
      class="kw">return (var2 & 64) != 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 BlockType toObject(MemorySegment var0) {
      class="kw">return toObject(var0, 0, null);
   }

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

   class="kw">public class="kw">static BlockType toObject(MemorySegment var0, int var1, @Nullable ReadCursor var2) {
      requireBounds(var0, var1);
      int var3 = var1 + 277;
      int var4 = 0;
      ReadCursor var5 = var2 != null ? var2 : new ReadCursor();
      String var6 = null;
      if (hasItem(var0, var1)) {
         requireSlot(var0, var1 + 177, var4, "Item");
         int var7 = var3 + var4;
         long var8 = VarInt.getWithLength(var0, var7);
         var6 = PacketIO.readVarString("Item", var0, var7, 0, 4096000, var8);
         var4 += (int)var8 + (int)(var8 >>> 32);
      } else {
         requireSlot(var0, var1 + 177, -1, "Item");
      }

      String var37 = null;
      if (hasName(var0, var1)) {
         requireSlot(var0, var1 + 181, var4, "Name");
         int var38 = var3 + var4;
         long var9 = VarInt.getWithLength(var0, var38);
         var37 = PacketIO.readVarString("Name", var0, var38, 0, 4096000, var9);
         var4 += (int)var9 + (int)(var9 >>> 32);
      } else {
         requireSlot(var0, var1 + 181, -1, "Name");
      }

      ShaderType[] var39 = null;
      if (hasShaderEffect(var0, var1)) {
         requireSlot(var0, var1 + 185, var4, "ShaderEffect");
         int var40 = var3 + var4;
         long var10 = VarInt.getWithLength(var0, var40);
         if (var10 == -1L) {
            throw ProtocolException.invalidVarInt("ShaderEffect");
         }

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

         int var13 = (int)(var10 >>> 32);
         if (var40 + var13 + var12 > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("ShaderEffect", Math.min(var40 + var13 + var12, Integer.MAX_VALUE), (int)var0.byteSize());
         }

         var40 += var13;
         var39 = new ShaderType[var12];

         for (int var14 = 0; var14 < var12; var14++) {
            var39[var14] = ShaderType.fromValue(var0.get(PacketIO.PROTO_BYTE, var40 + var14 * 1));
         }

         var4 = var40 + var12 - var3;
      } else {
         requireSlot(var0, var1 + 185, -1, "ShaderEffect");
      }

      String var42 = null;
      if (hasModel(var0, var1)) {
         requireSlot(var0, var1 + 189, var4, "Model");
         int var43 = var3 + var4;
         long var11 = VarInt.getWithLength(var0, var43);
         var42 = PacketIO.readVarString("Model", var0, var43, 0, 4096000, var11);
         var4 += (int)var11 + (int)(var11 >>> 32);
      } else {
         requireSlot(var0, var1 + 189, -1, "Model");
      }

      ModelTexture[] var44 = null;
      if (hasModelTexture(var0, var1)) {
         requireSlot(var0, var1 + 193, var4, "ModelTexture");
         int var45 = var3 + var4;
         long var48 = VarInt.getWithLength(var0, var45);
         if (var48 == -1L) {
            throw ProtocolException.invalidVarInt("ModelTexture");
         }

         int var56 = (int)var48;
         if (var56 > 4096000) {
            throw ProtocolException.arrayTooLong("ModelTexture", var56, 4096000);
         }

         int var15 = (int)(var48 >>> 32);
         if (var45 + var15 + var56 * 5L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("ModelTexture", (int)Math.min(var45 + var15 + var56 * 5L, 2147483647L), (int)var0.byteSize());
         }

         var45 += var15;
         var44 = new ModelTexture[var56];

         for (int var16 = 0; var16 < var56; var16++) {
            var44[var16] = ModelTexture.toObject(var0, var45, var5);
            var45 = var5.position;
         }

         var4 = var45 - var3;
      } else {
         requireSlot(var0, var1 + 193, -1, "ModelTexture");
      }

      String var47 = null;
      if (hasModelAnimation(var0, var1)) {
         requireSlot(var0, var1 + 197, var4, "ModelAnimation");
         int var49 = var3 + var4;
         long var51 = VarInt.getWithLength(var0, var49);
         var47 = PacketIO.readVarString("ModelAnimation", var0, var49, 0, 4096000, var51);
         var4 += (int)var51 + (int)(var51 >>> 32);
      } else {
         requireSlot(var0, var1 + 197, -1, "ModelAnimation");
      }

      Map var50 = null;
      if (hasSupport(var0, var1)) {
         requireSlot(var0, var1 + 201, var4, "Support");
         int var52 = var3 + var4;
         long var57 = VarInt.getWithLength(var0, var52);
         if (var57 == -1L) {
            throw ProtocolException.invalidVarInt("Support");
         }

         int var66 = (int)var57;
         if (var66 > 4096000) {
            throw ProtocolException.dictionaryTooLarge("Support", var66, 4096000);
         }

         var52 += (int)(var57 >>> 32);
         if (var52 + var66 * 2L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Support", (int)Math.min(var52 + var66 * 2L, 2147483647L), (int)var0.byteSize());
         }

         var50 = new HashMap<>(var66);

         for (int var17 = 0; var17 < var66; var17++) {
            BlockNeighbor var18 = BlockNeighbor.fromValue(var0.get(PacketIO.PROTO_BYTE, var52));
            long var19 = VarInt.getWithLength(var0, ++var52);
            if (var19 == -1L) {
               throw ProtocolException.invalidVarInt("value");
            }

            int var21 = (int)var19;
            int var22 = (int)(var19 >>> 32);
            if (var21 > 4096000) {
               throw ProtocolException.arrayTooLong("value", var21, 4096000);
            }

            if (var52 + var22 + var21 * 32L > var0.byteSize()) {
               throw ProtocolException.bufferTooSmall("value", var52 + var22 + var21 * 32, (int)var0.byteSize());
            }

            var52 += var22;
            RequiredBlockFaceSupport[] var23 = new RequiredBlockFaceSupport[var21];

            for (int var24 = 0; var24 < var21; var24++) {
               var23[var24] = RequiredBlockFaceSupport.toObject(var0, var52, var5);
               var52 = var5.position;
            }

            if (var50.put(var18, var23) != null) {
               throw ProtocolException.duplicateKey("Support", var18);
            }
         }

         var4 = var52 - var3;
      } else {
         requireSlot(var0, var1 + 201, -1, "Support");
      }

      Map var55 = null;
      if (hasSupporting(var0, var1)) {
         requireSlot(var0, var1 + 205, var4, "Supporting");
         int var58 = var3 + var4;
         long var62 = VarInt.getWithLength(var0, var58);
         if (var62 == -1L) {
            throw ProtocolException.invalidVarInt("Supporting");
         }

         int var70 = (int)var62;
         if (var70 > 4096000) {
            throw ProtocolException.dictionaryTooLarge("Supporting", var70, 4096000);
         }

         var58 += (int)(var62 >>> 32);
         if (var58 + var70 * 2L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Supporting", (int)Math.min(var58 + var70 * 2L, 2147483647L), (int)var0.byteSize());
         }

         var55 = new HashMap<>(var70);

         for (int var75 = 0; var75 < var70; var75++) {
            BlockNeighbor var81 = BlockNeighbor.fromValue(var0.get(PacketIO.PROTO_BYTE, var58));
            long var20 = VarInt.getWithLength(var0, ++var58);
            if (var20 == -1L) {
               throw ProtocolException.invalidVarInt("value");
            }

            int var96 = (int)var20;
            int var103 = (int)(var20 >>> 32);
            if (var96 > 4096000) {
               throw ProtocolException.arrayTooLong("value", var96, 4096000);
            }

            if (var58 + var103 + var96 * 9L > var0.byteSize()) {
               throw ProtocolException.bufferTooSmall("value", var58 + var103 + var96 * 9, (int)var0.byteSize());
            }

            var58 += var103;
            BlockFaceSupport[] var108 = new BlockFaceSupport[var96];

            for (int var25 = 0; var25 < var96; var25++) {
               var108[var25] = BlockFaceSupport.toObject(var0, var58, var5);
               var58 = var5.position;
            }

            if (var55.put(var81, var108) != null) {
               throw ProtocolException.duplicateKey("Supporting", var81);
            }
         }

         var4 = var58 - var3;
      } else {
         requireSlot(var0, var1 + 205, -1, "Supporting");
      }

      BlockTextures[] var61 = null;
      if (hasCubeTextures(var0, var1)) {
         requireSlot(var0, var1 + 209, var4, "CubeTextures");
         int var63 = var3 + var4;
         long var67 = VarInt.getWithLength(var0, var63);
         if (var67 == -1L) {
            throw ProtocolException.invalidVarInt("CubeTextures");
         }

         int var76 = (int)var67;
         if (var76 > 4096000) {
            throw ProtocolException.arrayTooLong("CubeTextures", var76, 4096000);
         }

         int var82 = (int)(var67 >>> 32);
         if (var63 + var82 + var76 * 29L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("CubeTextures", (int)Math.min(var63 + var82 + var76 * 29L, 2147483647L), (int)var0.byteSize());
         }

         var63 += var82;
         var61 = new BlockTextures[var76];

         for (int var86 = 0; var86 < var76; var86++) {
            var61[var86] = BlockTextures.toObject(var0, var63, var5);
            var63 = var5.position;
         }

         var4 = var63 - var3;
      } else {
         requireSlot(var0, var1 + 209, -1, "CubeTextures");
      }

      String var65 = null;
      if (hasCubeSideMaskTexture(var0, var1)) {
         requireSlot(var0, var1 + 213, var4, "CubeSideMaskTexture");
         int var68 = var3 + var4;
         long var71 = VarInt.getWithLength(var0, var68);
         var65 = PacketIO.readVarString("CubeSideMaskTexture", var0, var68, 0, 4096000, var71);
         var4 += (int)var71 + (int)(var71 >>> 32);
      } else {
         requireSlot(var0, var1 + 213, -1, "CubeSideMaskTexture");
      }

      ConditionalBlockSound[] var69 = null;
      if (hasConditionalSounds(var0, var1)) {
         requireSlot(var0, var1 + 217, var4, "ConditionalSounds");
         int var72 = var3 + var4;
         long var77 = VarInt.getWithLength(var0, var72);
         if (var77 == -1L) {
            throw ProtocolException.invalidVarInt("ConditionalSounds");
         }

         int var87 = (int)var77;
         if (var87 > 4096000) {
            throw ProtocolException.arrayTooLong("ConditionalSounds", var87, 4096000);
         }

         int var91 = (int)(var77 >>> 32);
         if (var72 + var91 + var87 * 8L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("ConditionalSounds", (int)Math.min(var72 + var91 + var87 * 8L, 2147483647L), (int)var0.byteSize());
         }

         var72 += var91;
         var69 = new ConditionalBlockSound[var87];

         for (int var97 = 0; var97 < var87; var97++) {
            var69[var97] = ConditionalBlockSound.toObject(var0, var72 + var97 * 8);
         }

         var4 = var72 + var87 * 8 - var3;
      } else {
         requireSlot(var0, var1 + 217, -1, "ConditionalSounds");
      }

      ModelParticle[] var74 = null;
      if (hasParticles(var0, var1)) {
         requireSlot(var0, var1 + 221, var4, "Particles");
         int var78 = var3 + var4;
         long var83 = VarInt.getWithLength(var0, var78);
         if (var83 == -1L) {
            throw ProtocolException.invalidVarInt("Particles");
         }

         int var92 = (int)var83;
         if (var92 > 4096000) {
            throw ProtocolException.arrayTooLong("Particles", var92, 4096000);
         }

         int var98 = (int)(var83 >>> 32);
         if (var78 + var98 + var92 * 42L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Particles", (int)Math.min(var78 + var98 + var92 * 42L, 2147483647L), (int)var0.byteSize());
         }

         var78 += var98;
         var74 = new ModelParticle[var92];

         for (int var104 = 0; var104 < var92; var104++) {
            var74[var104] = ModelParticle.toObject(var0, var78, var5);
            var78 = var5.position;
         }

         var4 = var78 - var3;
      } else {
         requireSlot(var0, var1 + 221, -1, "Particles");
      }

      String var80 = null;
      if (hasBlockParticleSetId(var0, var1)) {
         requireSlot(var0, var1 + 225, var4, "BlockParticleSetId");
         int var84 = var3 + var4;
         long var88 = VarInt.getWithLength(var0, var84);
         var80 = PacketIO.readVarString("BlockParticleSetId", var0, var84, 0, 4096000, var88);
         var4 += (int)var88 + (int)(var88 >>> 32);
      } else {
         requireSlot(var0, var1 + 225, -1, "BlockParticleSetId");
      }

      String var85 = null;
      if (hasBlockBreakingDecalId(var0, var1)) {
         requireSlot(var0, var1 + 229, var4, "BlockBreakingDecalId");
         int var89 = var3 + var4;
         long var93 = VarInt.getWithLength(var0, var89);
         var85 = PacketIO.readVarString("BlockBreakingDecalId", var0, var89, 0, 4096000, var93);
         var4 += (int)var93 + (int)(var93 >>> 32);
      } else {
         requireSlot(var0, var1 + 229, -1, "BlockBreakingDecalId");
      }

      String var90 = null;
      if (hasTransitionTexture(var0, var1)) {
         requireSlot(var0, var1 + 233, var4, "TransitionTexture");
         int var94 = var3 + var4;
         long var99 = VarInt.getWithLength(var0, var94);
         var90 = PacketIO.readVarString("TransitionTexture", var0, var94, 0, 4096000, var99);
         var4 += (int)var99 + (int)(var99 >>> 32);
      } else {
         requireSlot(var0, var1 + 233, -1, "TransitionTexture");
      }

      int[] var95 = null;
      if (hasTransitionToGroups(var0, var1)) {
         requireSlot(var0, var1 + 237, var4, "TransitionToGroups");
         int var100 = var3 + var4;
         long var105 = VarInt.getWithLength(var0, var100);
         if (var105 == -1L) {
            throw ProtocolException.invalidVarInt("TransitionToGroups");
         }

         int var111 = (int)var105;
         if (var111 > 4096000) {
            throw ProtocolException.arrayTooLong("TransitionToGroups", var111, 4096000);
         }

         int var26 = (int)(var105 >>> 32);
         if (var100 + var26 + var111 * 4L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("TransitionToGroups", (int)Math.min(var100 + var26 + var111 * 4L, 2147483647L), (int)var0.byteSize());
         }

         var100 += var26;
         var95 = new int[var111];
         MemorySegment.copy(var0, PacketIO.PROTO_INT, var100, var95, 0, var111);
         var4 = var100 + var111 * 4 - var3;
      } else {
         requireSlot(var0, var1 + 237, -1, "TransitionToGroups");
      }

      String var102 = null;
      if (hasInteractionHint(var0, var1)) {
         requireSlot(var0, var1 + 241, var4, "InteractionHint");
         int var106 = var3 + var4;
         long var109 = VarInt.getWithLength(var0, var106);
         var102 = PacketIO.readVarString("InteractionHint", var0, var106, 0, 4096000, var109);
         var4 += (int)var109 + (int)(var109 >>> 32);
      } else {
         requireSlot(var0, var1 + 241, -1, "InteractionHint");
      }

      BlockGathering var107 = null;
      if (hasGathering(var0, var1)) {
         requireSlot(var0, var1 + 245, var4, "Gathering");
         var107 = BlockGathering.toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 245, -1, "Gathering");
      }

      ModelDisplay var110 = null;
      if (hasDisplay(var0, var1)) {
         requireSlot(var0, var1 + 249, var4, "Display");
         var110 = ModelDisplay.toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 249, -1, "Display");
      }

      RailConfig var112 = null;
      if (hasRail(var0, var1)) {
         requireSlot(var0, var1 + 253, var4, "Rail");
         var112 = RailConfig.toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 253, -1, "Rail");
      }

      Map var113 = null;
      if (hasInteractions(var0, var1)) {
         requireSlot(var0, var1 + 257, var4, "Interactions");
         int var27 = var3 + var4;
         long var28 = VarInt.getWithLength(var0, var27);
         if (var28 == -1L) {
            throw ProtocolException.invalidVarInt("Interactions");
         }

         int var30 = (int)var28;
         if (var30 > 4096000) {
            throw ProtocolException.dictionaryTooLarge("Interactions", var30, 4096000);
         }

         var27 += (int)(var28 >>> 32);
         if (var27 + var30 * 5L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("Interactions", (int)Math.min(var27 + var30 * 5L, 2147483647L), (int)var0.byteSize());
         }

         var113 = new HashMap<>(var30);

         for (int var31 = 0; var31 < var30; var31++) {
            InteractionType var32 = InteractionType.fromValue(var0.get(PacketIO.PROTO_BYTE, var27));
            int var33 = var0.get(PacketIO.PROTO_INT, ++var27);
            var27 += 4;
            if (var113.put(var32, var33) != null) {
               throw ProtocolException.duplicateKey("Interactions", var32);
            }
         }

         var4 = var27 - var3;
      } else {
         requireSlot(var0, var1 + 257, -1, "Interactions");
      }

      Map var116 = null;
      if (hasStates(var0, var1)) {
         requireSlot(var0, var1 + 261, var4, "States");
         int var117 = var3 + var4;
         long var29 = VarInt.getWithLength(var0, var117);
         if (var29 == -1L) {
            throw ProtocolException.invalidVarInt("States");
         }

         int var126 = (int)var29;
         if (var126 > 4096000) {
            throw ProtocolException.dictionaryTooLarge("States", var126, 4096000);
         }

         var117 += (int)(var29 >>> 32);
         if (var117 + var126 * 5L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("States", (int)Math.min(var117 + var126 * 5L, 2147483647L), (int)var0.byteSize());
         }

         var116 = new HashMap<>(var126);

         for (int var128 = 0; var128 < var126; var128++) {
            long var130 = VarInt.getWithLength(var0, var117);
            String var35 = PacketIO.readVarString("key", var0, var117, 0, 4096000, var130);
            var117 += (int)var130 + (int)(var130 >>> 32);
            int var36 = var0.get(PacketIO.PROTO_INT, var117);
            var117 += 4;
            if (var116.put(var35, var36) != null) {
               throw ProtocolException.duplicateKey("States", var35);
            }
         }

         var4 = var117 - var3;
      } else {
         requireSlot(var0, var1 + 261, -1, "States");
      }

      int[] var120 = null;
      if (hasTagIndexes(var0, var1)) {
         requireSlot(var0, var1 + 265, var4, "TagIndexes");
         int var121 = var3 + var4;
         long var124 = VarInt.getWithLength(var0, var121);
         if (var124 == -1L) {
            throw ProtocolException.invalidVarInt("TagIndexes");
         }

         int var129 = (int)var124;
         if (var129 > 4096000) {
            throw ProtocolException.arrayTooLong("TagIndexes", var129, 4096000);
         }

         int var131 = (int)(var124 >>> 32);
         if (var121 + var131 + var129 * 4L > var0.byteSize()) {
            throw ProtocolException.bufferTooSmall("TagIndexes", (int)Math.min(var121 + var131 + var129 * 4L, 2147483647L), (int)var0.byteSize());
         }

         var121 += var131;
         var120 = new int[var129];
         MemorySegment.copy(var0, PacketIO.PROTO_INT, var121, var120, 0, var129);
         var4 = var121 + var129 * 4 - var3;
      } else {
         requireSlot(var0, var1 + 265, -1, "TagIndexes");
      }

      Bench var123 = null;
      if (hasBench(var0, var1)) {
         requireSlot(var0, var1 + 269, var4, "Bench");
         var123 = Bench.toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 269, -1, "Bench");
      }

      ConnectedBlockRuleSet var125 = null;
      if (hasConnectedBlockRuleSet(var0, var1)) {
         requireSlot(var0, var1 + 273, var4, "ConnectedBlockRuleSet");
         var125 = ConnectedBlockRuleSet.toObject(var0, var3 + var4, var5);
         var4 = var5.position - var3;
      } else {
         requireSlot(var0, var1 + 273, -1, "ConnectedBlockRuleSet");
      }

      BlockType var127 = new BlockType(
         var6,
         var37,
         var0.get(PacketIO.PROTO_BOOL, var1 + 4),
         DrawType.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 5)),
         BlockMaterial.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 6)),
         Opacity.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 7)),
         var39,
         var0.get(PacketIO.PROTO_INT, var1 + 8),
         var0.get(PacketIO.PROTO_INT, var1 + 12),
         var42,
         var44,
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 16), "ModelScale"),
         var47,
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 20), "ModelAnimationSpeed"),
         var0.get(PacketIO.PROTO_BOOL, var1 + 24),
         var0.get(PacketIO.PROTO_INT, var1 + 25),
         BlockSupportsRequiredForType.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 29)),
         var50,
         var55,
         var0.get(PacketIO.PROTO_BOOL, var1 + 30),
         var61,
         var65,
         ShadingMode.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 31)),
         RandomRotation.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 32)),
         VariantRotation.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 33)),
         Rotation.fromValue(var0.get(PacketIO.PROTO_BYTE, var1 + 34)),
         var0.get(PacketIO.PROTO_INT, var1 + 35),
         var0.get(PacketIO.PROTO_INT, var1 + 39),
         PacketIO.requireFinite(var0.get(PacketIO.PROTO_FLOAT, var1 + 43), "SoundOcclusionOpacity"),
         var0.get(PacketIO.PROTO_INT, var1 + 47),
         var69,
         var74,
         var80,
         var85,
         hasParticleColor(var0, var1) ? Color.toObject(var0, var1 + 51) : null,
         hasTextureComputedColor(var0, var1) ? Color.toObject(var0, var1 + 54) : null,
         hasLight(var0, var1) ? ColorLight.toObject(var0, var1 + 57) : null,
         hasTint(var0, var1) ? Tint.toObject(var0, var1 + 61) : null,
         hasBiomeTint(var0, var1) ? Tint.toObject(var0, var1 + 85) : null,
         var0.get(PacketIO.PROTO_INT, var1 + 109),
         var90,
         var95,
         BlockMovementSettings.toObject(var0, var1 + 113),
         var102,
         var107,
         hasPlacementSettings(var0, var1) ? BlockPlacementSettings.toObject(var0, var1 + 156) : null,
         var110,
         var112,
         var0.get(PacketIO.PROTO_BOOL, var1 + 172),
         var113,
         var116,
         var0.get(PacketIO.PROTO_INT, var1 + 173),
         var120,
         var123,
         var125
      );
      if (var2 != null) {
         var2.position = var3 + var4;
      }

      class="kw">return var127;
   }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      var1.set(PacketIO.PROTO_BYTE, var2 + 3, var3);
      var1.set(PacketIO.PROTO_BOOL, var2 + 4, this.unknown);
      var1.set(PacketIO.PROTO_BYTE, var2 + 5, (byte)this.drawType.getValue());
      var1.set(PacketIO.PROTO_BYTE, var2 + 6, (byte)this.material.getValue());
      var1.set(PacketIO.PROTO_BYTE, var2 + 7, (byte)this.opacity.getValue());
      var1.set(PacketIO.PROTO_INT, var2 + 8, this.hitbox);
      var1.set(PacketIO.PROTO_INT, var2 + 12, this.interactionHitbox);
      PacketIO.requireFinite(this.modelScale, "ModelScale");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 16, this.modelScale);
      PacketIO.requireFinite(this.modelAnimationSpeed, "ModelAnimationSpeed");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 20, this.modelAnimationSpeed);
      var1.set(PacketIO.PROTO_BOOL, var2 + 24, this.looping);
      var1.set(PacketIO.PROTO_INT, var2 + 25, this.maxSupportDistance);
      var1.set(PacketIO.PROTO_BYTE, var2 + 29, (byte)this.blockSupportsRequiredFor.getValue());
      var1.set(PacketIO.PROTO_BOOL, var2 + 30, this.requiresAlphaBlending);
      var1.set(PacketIO.PROTO_BYTE, var2 + 31, (byte)this.cubeShadingMode.getValue());
      var1.set(PacketIO.PROTO_BYTE, var2 + 32, (byte)this.randomRotation.getValue());
      var1.set(PacketIO.PROTO_BYTE, var2 + 33, (byte)this.variantRotation.getValue());
      var1.set(PacketIO.PROTO_BYTE, var2 + 34, (byte)this.rotationYawPlacementOffset.getValue());
      var1.set(PacketIO.PROTO_INT, var2 + 35, this.blockSoundSetIndex);
      var1.set(PacketIO.PROTO_INT, var2 + 39, this.physicalMaterialIndex);
      PacketIO.requireFinite(this.soundOcclusionOpacity, "SoundOcclusionOpacity");
      var1.set(PacketIO.PROTO_FLOAT, var2 + 43, this.soundOcclusionOpacity);
      var1.set(PacketIO.PROTO_INT, var2 + 47, this.ambientSoundEventIndex);
      if (this.particleColor != null) {
         this.particleColor.serialize(var1, var2 + 51);
      } else {
         var1.asSlice(var2 + 51, 3L).fill((byte)0);
      }

      if (this.textureComputedColor != null) {
         this.textureComputedColor.serialize(var1, var2 + 54);
      } else {
         var1.asSlice(var2 + 54, 3L).fill((byte)0);
      }

      if (this.light != null) {
         this.light.serialize(var1, var2 + 57);
      } else {
         var1.asSlice(var2 + 57, 4L).fill((byte)0);
      }

      if (this.tint != null) {
         this.tint.serialize(var1, var2 + 61);
      } else {
         var1.asSlice(var2 + 61, 24L).fill((byte)0);
      }

      if (this.biomeTint != null) {
         this.biomeTint.serialize(var1, var2 + 85);
      } else {
         var1.asSlice(var2 + 85, 24L).fill((byte)0);
      }

      var1.set(PacketIO.PROTO_INT, var2 + 109, this.group);
      this.movementSettings.serialize(var1, var2 + 113);
      if (this.placementSettings != null) {
         this.placementSettings.serialize(var1, var2 + 156);
      } else {
         var1.asSlice(var2 + 156, 16L).fill((byte)0);
      }

      var1.set(PacketIO.PROTO_BOOL, var2 + 172, this.ignoreSupportWhenPlaced);
      var1.set(PacketIO.PROTO_INT, var2 + 173, this.transitionToTag);
      int var4 = var2 + 277;
      if (this.item != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 177, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.item, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 177, -1);
      }

      if (this.name != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 181, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.name, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 181, -1);
      }

      if (this.shaderEffect != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 185, var4 - var2 - 277);
         if (this.shaderEffect.length > 4096000) {
            throw ProtocolException.arrayTooLong("ShaderEffect", this.shaderEffect.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.shaderEffect.length);

         for (int var5 = 0; var5 < this.shaderEffect.length; var5++) {
            var1.set(PacketIO.PROTO_BYTE, var4 + var5 * 1, (byte)this.shaderEffect[var5].getValue());
         }

         var4 += this.shaderEffect.length * 1;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 185, -1);
      }

      if (this.model != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 189, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.model, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 189, -1);
      }

      if (this.modelTexture != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 193, var4 - var2 - 277);
         if (this.modelTexture.length > 4096000) {
            throw ProtocolException.arrayTooLong("ModelTexture", this.modelTexture.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.modelTexture.length);
         int var25 = 0;

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

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

      if (this.modelAnimation != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 197, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.modelAnimation, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 197, -1);
      }

      if (this.support != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 201, var4 - var2 - 277);
         if (this.support.size() > 4096000) {
            throw ProtocolException.dictionaryTooLarge("Support", this.support.size(), 4096000);
         }

         var4 += VarInt.set(var1, var4, this.support.size());

         for (Entry var33 : this.support.entrySet()) {
            var1.set(PacketIO.PROTO_BYTE, var4, (byte)var33.getKey().getValue());
            var4 = ++var4 + VarInt.set(var1, var4, var33.getValue().length);

            for (RequiredBlockFaceSupport var10 : var33.getValue()) {
               var4 += var10.serialize(var1, var4);
            }
         }
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 201, -1);
      }

      if (this.supporting != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 205, var4 - var2 - 277);
         if (this.supporting.size() > 4096000) {
            throw ProtocolException.dictionaryTooLarge("Supporting", this.supporting.size(), 4096000);
         }

         var4 += VarInt.set(var1, var4, this.supporting.size());

         for (Entry var34 : this.supporting.entrySet()) {
            var1.set(PacketIO.PROTO_BYTE, var4, (byte)var34.getKey().getValue());
            var4 = ++var4 + VarInt.set(var1, var4, var34.getValue().length);

            for (BlockFaceSupport var43 : var34.getValue()) {
               var4 += var43.serialize(var1, var4);
            }
         }
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 205, -1);
      }

      if (this.cubeTextures != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 209, var4 - var2 - 277);
         if (this.cubeTextures.length > 4096000) {
            throw ProtocolException.arrayTooLong("CubeTextures", this.cubeTextures.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.cubeTextures.length);
         int var28 = 0;

         for (int var35 = 0; var35 < this.cubeTextures.length; var35++) {
            var28 += this.cubeTextures[var35].serialize(var1, var4 + var28);
         }

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

      if (this.cubeSideMaskTexture != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 213, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.cubeSideMaskTexture, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 213, -1);
      }

      if (this.conditionalSounds != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 217, var4 - var2 - 277);
         if (this.conditionalSounds.length > 4096000) {
            throw ProtocolException.arrayTooLong("ConditionalSounds", this.conditionalSounds.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.conditionalSounds.length);
         int var29 = 0;

         for (int var36 = 0; var36 < this.conditionalSounds.length; var36++) {
            var29 += this.conditionalSounds[var36].serialize(var1, var4 + var29);
         }

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

      if (this.particles != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 221, var4 - var2 - 277);
         if (this.particles.length > 4096000) {
            throw ProtocolException.arrayTooLong("Particles", this.particles.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.particles.length);
         int var30 = 0;

         for (int var37 = 0; var37 < this.particles.length; var37++) {
            var30 += this.particles[var37].serialize(var1, var4 + var30);
         }

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

      if (this.blockParticleSetId != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 225, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.blockParticleSetId, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 225, -1);
      }

      if (this.blockBreakingDecalId != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 229, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.blockBreakingDecalId, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 229, -1);
      }

      if (this.transitionTexture != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 233, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.transitionTexture, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 233, -1);
      }

      if (this.transitionToGroups != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 237, var4 - var2 - 277);
         if (this.transitionToGroups.length > 4096000) {
            throw ProtocolException.arrayTooLong("TransitionToGroups", this.transitionToGroups.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.transitionToGroups.length);
         MemorySegment.copy(this.transitionToGroups, 0, var1, PacketIO.PROTO_INT, var4, this.transitionToGroups.length);
         var4 += this.transitionToGroups.length * 4;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 237, -1);
      }

      if (this.interactionHint != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 241, var4 - var2 - 277);
         var4 += PacketIO.writeVarString(var1, var4, this.interactionHint, 4096000);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 241, -1);
      }

      if (this.gathering != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 245, var4 - var2 - 277);
         var4 += this.gathering.serialize(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 245, -1);
      }

      if (this.display != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 249, var4 - var2 - 277);
         var4 += this.display.serialize(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 249, -1);
      }

      if (this.rail != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 253, var4 - var2 - 277);
         var4 += this.rail.serialize(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 253, -1);
      }

      if (this.interactions != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 257, var4 - var2 - 277);
         if (this.interactions.size() > 4096000) {
            throw ProtocolException.dictionaryTooLarge("Interactions", this.interactions.size(), 4096000);
         }

         var4 += VarInt.set(var1, var4, this.interactions.size());

         for (Entry var38 : this.interactions.entrySet()) {
            var1.set(PacketIO.PROTO_BYTE, var4, (byte)var38.getKey().getValue());
            var1.set(PacketIO.PROTO_INT, ++var4, var38.getValue());
            var4 += 4;
         }
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 257, -1);
      }

      if (this.states != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 261, var4 - var2 - 277);
         if (this.states.size() > 4096000) {
            throw ProtocolException.dictionaryTooLarge("States", this.states.size(), 4096000);
         }

         var4 += VarInt.set(var1, var4, this.states.size());

         for (Entry var39 : this.states.entrySet()) {
            var4 += PacketIO.writeVarString(var1, var4, var39.getKey(), 4096000);
            var1.set(PacketIO.PROTO_INT, var4, var39.getValue());
            var4 += 4;
         }
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 261, -1);
      }

      if (this.tagIndexes != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 265, var4 - var2 - 277);
         if (this.tagIndexes.length > 4096000) {
            throw ProtocolException.arrayTooLong("TagIndexes", this.tagIndexes.length, 4096000);
         }

         var4 += VarInt.set(var1, var4, this.tagIndexes.length);
         MemorySegment.copy(this.tagIndexes, 0, var1, PacketIO.PROTO_INT, var4, this.tagIndexes.length);
         var4 += this.tagIndexes.length * 4;
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 265, -1);
      }

      if (this.bench != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 269, var4 - var2 - 277);
         var4 += this.bench.serialize(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 269, -1);
      }

      if (this.connectedBlockRuleSet != null) {
         var1.set(PacketIO.PROTO_INT, var2 + 273, var4 - var2 - 277);
         var4 += this.connectedBlockRuleSet.serializeWithTypeId(var1, var4);
      } else {
         var1.set(PacketIO.PROTO_INT, var2 + 273, -1);
      }

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

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

      if (this.name != null) {
         var1 += PacketIO.stringSize(this.name);
      }

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

      if (this.model != null) {
         var1 += PacketIO.stringSize(this.model);
      }

      if (this.modelTexture != null) {
         int var2 = 0;

         for (ModelTexture var6 : this.modelTexture) {
            var2 += var6.computeSize();
         }

         var1 += VarInt.size(this.modelTexture.length) + var2;
      }

      if (this.modelAnimation != null) {
         var1 += PacketIO.stringSize(this.modelAnimation);
      }

      if (this.support != null) {
         int var7 = 0;

         for (Entry var17 : this.support.entrySet()) {
            var7 += 1 + VarInt.size(var17.getValue().length) + Arrays.stream(var17.getValue()).mapToInt(var0 -> var0.computeSize()).sum();
         }

         var1 += VarInt.size(this.support.size()) + var7;
      }

      if (this.supporting != null) {
         int var8 = 0;

         for (Entry var18 : this.supporting.entrySet()) {
            var8 += 1 + VarInt.size(var18.getValue().length) + Arrays.stream(var18.getValue()).mapToInt(var0 -> var0.computeSize()).sum();
         }

         var1 += VarInt.size(this.supporting.size()) + var8;
      }

      if (this.cubeTextures != null) {
         int var9 = 0;

         for (BlockTextures var24 : this.cubeTextures) {
            var9 += var24.computeSize();
         }

         var1 += VarInt.size(this.cubeTextures.length) + var9;
      }

      if (this.cubeSideMaskTexture != null) {
         var1 += PacketIO.stringSize(this.cubeSideMaskTexture);
      }

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

      if (this.particles != null) {
         int var10 = 0;

         for (ModelParticle var25 : this.particles) {
            var10 += var25.computeSize();
         }

         var1 += VarInt.size(this.particles.length) + var10;
      }

      if (this.blockParticleSetId != null) {
         var1 += PacketIO.stringSize(this.blockParticleSetId);
      }

      if (this.blockBreakingDecalId != null) {
         var1 += PacketIO.stringSize(this.blockBreakingDecalId);
      }

      if (this.transitionTexture != null) {
         var1 += PacketIO.stringSize(this.transitionTexture);
      }

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

      if (this.interactionHint != null) {
         var1 += PacketIO.stringSize(this.interactionHint);
      }

      if (this.gathering != null) {
         var1 += this.gathering.computeSize();
      }

      if (this.display != null) {
         var1 += this.display.computeSize();
      }

      if (this.rail != null) {
         var1 += this.rail.computeSize();
      }

      if (this.interactions != null) {
         var1 += VarInt.size(this.interactions.size()) + this.interactions.size() * 5;
      }

      if (this.states != null) {
         int var11 = 0;

         for (Entry var21 : this.states.entrySet()) {
            var11 += PacketIO.stringSize(var21.getKey()) + 4;
         }

         var1 += VarInt.size(this.states.size()) + var11;
      }

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

      if (this.bench != null) {
         var1 += this.bench.computeSize();
      }

      if (this.connectedBlockRuleSet != null) {
         var1 += this.connectedBlockRuleSet.computeSizeWithTypeId();
      }

      class="kw">return var1;
   }

   class="kw">public BlockType clone() {
      BlockType var1 = new BlockType();
      var1.item = this.item;
      var1.name = this.name;
      var1.unknown = this.unknown;
      var1.drawType = this.drawType;
      var1.material = this.material;
      var1.opacity = this.opacity;
      var1.shaderEffect = this.shaderEffect != null ? Arrays.copyOf(this.shaderEffect, this.shaderEffect.length) : null;
      var1.hitbox = this.hitbox;
      var1.interactionHitbox = this.interactionHitbox;
      var1.model = this.model;
      var1.modelTexture = this.modelTexture != null ? Arrays.stream(this.modelTexture).map(var0 -> var0.clone()).toArray(ModelTexture[]::new) : null;
      var1.modelScale = this.modelScale;
      var1.modelAnimation = this.modelAnimation;
      var1.modelAnimationSpeed = this.modelAnimationSpeed;
      var1.looping = this.looping;
      var1.maxSupportDistance = this.maxSupportDistance;
      var1.blockSupportsRequiredFor = this.blockSupportsRequiredFor;
      if (this.support != null) {
         Map var2 = new HashMap<>();

         for (Entry var4 : this.support.entrySet()) {
            var2.put(var4.getKey(), Arrays.stream(var4.getValue()).map(var0 -> var0.clone()).toArray(RequiredBlockFaceSupport[]::new));
         }

         var1.support = var2;
      }

      if (this.supporting != null) {
         Map var5 = new HashMap<>();

         for (Entry var7 : this.supporting.entrySet()) {
            var5.put(var7.getKey(), Arrays.stream(var7.getValue()).map(var0 -> var0.clone()).toArray(BlockFaceSupport[]::new));
         }

         var1.supporting = var5;
      }

      var1.requiresAlphaBlending = this.requiresAlphaBlending;
      var1.cubeTextures = this.cubeTextures != null ? Arrays.stream(this.cubeTextures).map(var0 -> var0.clone()).toArray(BlockTextures[]::new) : null;
      var1.cubeSideMaskTexture = this.cubeSideMaskTexture;
      var1.cubeShadingMode = this.cubeShadingMode;
      var1.randomRotation = this.randomRotation;
      var1.variantRotation = this.variantRotation;
      var1.rotationYawPlacementOffset = this.rotationYawPlacementOffset;
      var1.blockSoundSetIndex = this.blockSoundSetIndex;
      var1.physicalMaterialIndex = this.physicalMaterialIndex;
      var1.soundOcclusionOpacity = this.soundOcclusionOpacity;
      var1.ambientSoundEventIndex = this.ambientSoundEventIndex;
      var1.conditionalSounds = this.conditionalSounds != null
         ? Arrays.stream(this.conditionalSounds).map(var0 -> var0.clone()).toArray(ConditionalBlockSound[]::new)
         : null;
      var1.particles = this.particles != null ? Arrays.stream(this.particles).map(var0 -> var0.clone()).toArray(ModelParticle[]::new) : null;
      var1.blockParticleSetId = this.blockParticleSetId;
      var1.blockBreakingDecalId = this.blockBreakingDecalId;
      var1.particleColor = this.particleColor != null ? this.particleColor.clone() : null;
      var1.textureComputedColor = this.textureComputedColor != null ? this.textureComputedColor.clone() : null;
      var1.light = this.light != null ? this.light.clone() : null;
      var1.tint = this.tint != null ? this.tint.clone() : null;
      var1.biomeTint = this.biomeTint != null ? this.biomeTint.clone() : null;
      var1.group = this.group;
      var1.transitionTexture = this.transitionTexture;
      var1.transitionToGroups = this.transitionToGroups != null ? Arrays.copyOf(this.transitionToGroups, this.transitionToGroups.length) : null;
      var1.movementSettings = this.movementSettings.clone();
      var1.interactionHint = this.interactionHint;
      var1.gathering = this.gathering != null ? this.gathering.clone() : null;
      var1.placementSettings = this.placementSettings != null ? this.placementSettings.clone() : null;
      var1.display = this.display != null ? this.display.clone() : null;
      var1.rail = this.rail != null ? this.rail.clone() : null;
      var1.ignoreSupportWhenPlaced = this.ignoreSupportWhenPlaced;
      var1.interactions = this.interactions != null ? new HashMap<>(this.interactions) : null;
      var1.states = this.states != null ? new HashMap<>(this.states) : null;
      var1.transitionToTag = this.transitionToTag;
      var1.tagIndexes = this.tagIndexes != null ? Arrays.copyOf(this.tagIndexes, this.tagIndexes.length) : null;
      var1.bench = this.bench != null ? this.bench.clone() : null;
      var1.connectedBlockRuleSet = this.connectedBlockRuleSet;
      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 BlockType var2)
            ? false
            : Objects.equals(this.item, var2.item)
               && Objects.equals(this.name, var2.name)
               && this.unknown == var2.unknown
               && Objects.equals(this.drawType, var2.drawType)
               && Objects.equals(this.material, var2.material)
               && Objects.equals(this.opacity, var2.opacity)
               && Arrays.equals(this.shaderEffect, var2.shaderEffect)
               && this.hitbox == var2.hitbox
               && this.interactionHitbox == var2.interactionHitbox
               && Objects.equals(this.model, var2.model)
               && Arrays.equals(this.modelTexture, var2.modelTexture)
               && this.modelScale == var2.modelScale
               && Objects.equals(this.modelAnimation, var2.modelAnimation)
               && this.modelAnimationSpeed == var2.modelAnimationSpeed
               && this.looping == var2.looping
               && this.maxSupportDistance == var2.maxSupportDistance
               && Objects.equals(this.blockSupportsRequiredFor, var2.blockSupportsRequiredFor)
               && Objects.equals(this.support, var2.support)
               && Objects.equals(this.supporting, var2.supporting)
               && this.requiresAlphaBlending == var2.requiresAlphaBlending
               && Arrays.equals(this.cubeTextures, var2.cubeTextures)
               && Objects.equals(this.cubeSideMaskTexture, var2.cubeSideMaskTexture)
               && Objects.equals(this.cubeShadingMode, var2.cubeShadingMode)
               && Objects.equals(this.randomRotation, var2.randomRotation)
               && Objects.equals(this.variantRotation, var2.variantRotation)
               && Objects.equals(this.rotationYawPlacementOffset, var2.rotationYawPlacementOffset)
               && this.blockSoundSetIndex == var2.blockSoundSetIndex
               && this.physicalMaterialIndex == var2.physicalMaterialIndex
               && this.soundOcclusionOpacity == var2.soundOcclusionOpacity
               && this.ambientSoundEventIndex == var2.ambientSoundEventIndex
               && Arrays.equals(this.conditionalSounds, var2.conditionalSounds)
               && Arrays.equals(this.particles, var2.particles)
               && Objects.equals(this.blockParticleSetId, var2.blockParticleSetId)
               && Objects.equals(this.blockBreakingDecalId, var2.blockBreakingDecalId)
               && Objects.equals(this.particleColor, var2.particleColor)
               && Objects.equals(this.textureComputedColor, var2.textureComputedColor)
               && Objects.equals(this.light, var2.light)
               && Objects.equals(this.tint, var2.tint)
               && Objects.equals(this.biomeTint, var2.biomeTint)
               && this.group == var2.group
               && Objects.equals(this.transitionTexture, var2.transitionTexture)
               && Arrays.equals(this.transitionToGroups, var2.transitionToGroups)
               && Objects.equals(this.movementSettings, var2.movementSettings)
               && Objects.equals(this.interactionHint, var2.interactionHint)
               && Objects.equals(this.gathering, var2.gathering)
               && Objects.equals(this.placementSettings, var2.placementSettings)
               && Objects.equals(this.display, var2.display)
               && Objects.equals(this.rail, var2.rail)
               && this.ignoreSupportWhenPlaced == var2.ignoreSupportWhenPlaced
               && Objects.equals(this.interactions, var2.interactions)
               && Objects.equals(this.states, var2.states)
               && this.transitionToTag == var2.transitionToTag
               && Arrays.equals(this.tagIndexes, var2.tagIndexes)
               && Objects.equals(this.bench, var2.bench)
               && Objects.equals(this.connectedBlockRuleSet, var2.connectedBlockRuleSet);
      }
   }

   @Override
   class="kw">public int hashCode() {
      int var1 = 1;
      var1 = 31 * var1 + Objects.hashCode(this.item);
      var1 = 31 * var1 + Objects.hashCode(this.name);
      var1 = 31 * var1 + Boolean.hashCode(this.unknown);
      var1 = 31 * var1 + Objects.hashCode(this.drawType);
      var1 = 31 * var1 + Objects.hashCode(this.material);
      var1 = 31 * var1 + Objects.hashCode(this.opacity);
      var1 = 31 * var1 + Arrays.hashCode(this.shaderEffect);
      var1 = 31 * var1 + Integer.hashCode(this.hitbox);
      var1 = 31 * var1 + Integer.hashCode(this.interactionHitbox);
      var1 = 31 * var1 + Objects.hashCode(this.model);
      var1 = 31 * var1 + Arrays.hashCode(this.modelTexture);
      var1 = 31 * var1 + Float.hashCode(this.modelScale);
      var1 = 31 * var1 + Objects.hashCode(this.modelAnimation);
      var1 = 31 * var1 + Float.hashCode(this.modelAnimationSpeed);
      var1 = 31 * var1 + Boolean.hashCode(this.looping);
      var1 = 31 * var1 + Integer.hashCode(this.maxSupportDistance);
      var1 = 31 * var1 + Objects.hashCode(this.blockSupportsRequiredFor);
      var1 = 31 * var1 + Objects.hashCode(this.support);
      var1 = 31 * var1 + Objects.hashCode(this.supporting);
      var1 = 31 * var1 + Boolean.hashCode(this.requiresAlphaBlending);
      var1 = 31 * var1 + Arrays.hashCode(this.cubeTextures);
      var1 = 31 * var1 + Objects.hashCode(this.cubeSideMaskTexture);
      var1 = 31 * var1 + Objects.hashCode(this.cubeShadingMode);
      var1 = 31 * var1 + Objects.hashCode(this.randomRotation);
      var1 = 31 * var1 + Objects.hashCode(this.variantRotation);
      var1 = 31 * var1 + Objects.hashCode(this.rotationYawPlacementOffset);
      var1 = 31 * var1 + Integer.hashCode(this.blockSoundSetIndex);
      var1 = 31 * var1 + Integer.hashCode(this.physicalMaterialIndex);
      var1 = 31 * var1 + Float.hashCode(this.soundOcclusionOpacity);
      var1 = 31 * var1 + Integer.hashCode(this.ambientSoundEventIndex);
      var1 = 31 * var1 + Arrays.hashCode(this.conditionalSounds);
      var1 = 31 * var1 + Arrays.hashCode(this.particles);
      var1 = 31 * var1 + Objects.hashCode(this.blockParticleSetId);
      var1 = 31 * var1 + Objects.hashCode(this.blockBreakingDecalId);
      var1 = 31 * var1 + Objects.hashCode(this.particleColor);
      var1 = 31 * var1 + Objects.hashCode(this.textureComputedColor);
      var1 = 31 * var1 + Objects.hashCode(this.light);
      var1 = 31 * var1 + Objects.hashCode(this.tint);
      var1 = 31 * var1 + Objects.hashCode(this.biomeTint);
      var1 = 31 * var1 + Integer.hashCode(this.group);
      var1 = 31 * var1 + Objects.hashCode(this.transitionTexture);
      var1 = 31 * var1 + Arrays.hashCode(this.transitionToGroups);
      var1 = 31 * var1 + Objects.hashCode(this.movementSettings);
      var1 = 31 * var1 + Objects.hashCode(this.interactionHint);
      var1 = 31 * var1 + Objects.hashCode(this.gathering);
      var1 = 31 * var1 + Objects.hashCode(this.placementSettings);
      var1 = 31 * var1 + Objects.hashCode(this.display);
      var1 = 31 * var1 + Objects.hashCode(this.rail);
      var1 = 31 * var1 + Boolean.hashCode(this.ignoreSupportWhenPlaced);
      var1 = 31 * var1 + Objects.hashCode(this.interactions);
      var1 = 31 * var1 + Objects.hashCode(this.states);
      var1 = 31 * var1 + Integer.hashCode(this.transitionToTag);
      var1 = 31 * var1 + Arrays.hashCode(this.tagIndexes);
      var1 = 31 * var1 + Objects.hashCode(this.bench);
      class="kw">return 31 * var1 + Objects.hashCode(this.connectedBlockRuleSet);
   }
}