Showing preview only (1,678K chars total). Download the full file or copy to clipboard to get everything.
Repository: ZeppelinMC/Zeppelin
Branch: main
Commit: ed75f63fe8f4
Files: 1356
Total size: 1.4 MB
Directory structure:
gitextract_f2qo_zll/
├── .github/
│ └── workflows/
│ └── go.yml
├── LICENSE
├── commands/
│ ├── commands.go
│ ├── debug.go
│ ├── gc.go
│ ├── mem.go
│ ├── tick.go
│ └── time.go
├── go.mod
├── go.sum
├── main.go
├── properties/
│ ├── decode.go
│ ├── encode.go
│ └── properties.go
├── protocol/
│ ├── nbt/
│ │ ├── decoder.go
│ │ ├── encoder.go
│ │ ├── qnbt/
│ │ │ ├── abi.go
│ │ │ ├── buffer.go
│ │ │ ├── decode.go
│ │ │ ├── list.go
│ │ │ ├── malloc.go
│ │ │ ├── map.go
│ │ │ ├── primitive.go
│ │ │ ├── qnbt.go
│ │ │ └── struct.go
│ │ └── staticReader.go
│ ├── net/
│ │ ├── authentication.go
│ │ ├── cfb8/
│ │ │ └── cfb8.go
│ │ ├── config.go
│ │ ├── conn.go
│ │ ├── encryption.go
│ │ ├── io/
│ │ │ ├── buffers/
│ │ │ │ └── buffers.go
│ │ │ ├── compress/
│ │ │ │ ├── compress.go
│ │ │ │ ├── lz4.go
│ │ │ │ └── zlib.go
│ │ │ └── encoding/
│ │ │ ├── encoding.go
│ │ │ ├── reader.go
│ │ │ └── writer.go
│ │ ├── listener.go
│ │ ├── metadata/
│ │ │ ├── metadata.go
│ │ │ └── new.go
│ │ ├── packet/
│ │ │ ├── configuration/
│ │ │ │ ├── clientInfo.go
│ │ │ │ ├── cookie.go
│ │ │ │ ├── disconnect.go
│ │ │ │ ├── finish.go
│ │ │ │ ├── keepAlive.go
│ │ │ │ ├── ping.go
│ │ │ │ ├── plugin.go
│ │ │ │ ├── registryData.go
│ │ │ │ └── resetChat.go
│ │ │ ├── handshake/
│ │ │ │ └── handshake.go
│ │ │ ├── login/
│ │ │ │ ├── cookie.go
│ │ │ │ ├── disconnect.go
│ │ │ │ ├── encryption.go
│ │ │ │ ├── loginStart.go
│ │ │ │ ├── loginSuccess.go
│ │ │ │ ├── plugin.go
│ │ │ │ └── setCompression.go
│ │ │ ├── packet.go
│ │ │ ├── play/
│ │ │ │ ├── acknowledgeBlockChange.go
│ │ │ │ ├── blockAction.go
│ │ │ │ ├── blockEntityData.go
│ │ │ │ ├── blockUpdate.go
│ │ │ │ ├── bundleDelimiter.go
│ │ │ │ ├── changeDifficulty.go
│ │ │ │ ├── chatCommand.go
│ │ │ │ ├── chatMessage.go
│ │ │ │ ├── chunkBatch.go
│ │ │ │ ├── chunkData.go
│ │ │ │ ├── clickContainer.go
│ │ │ │ ├── clientInfo.go
│ │ │ │ ├── closeContainer.go
│ │ │ │ ├── commands.go
│ │ │ │ ├── confirmTeleport.go
│ │ │ │ ├── damageEvent.go
│ │ │ │ ├── deleteMessage.go
│ │ │ │ ├── disconnect.go
│ │ │ │ ├── disguisedChatMessage.go
│ │ │ │ ├── entityAnimation.go
│ │ │ │ ├── entityEvent.go
│ │ │ │ ├── entitySoundEffect.go
│ │ │ │ ├── gameEvent.go
│ │ │ │ ├── hurtAnimation.go
│ │ │ │ ├── interact.go
│ │ │ │ ├── keepAlive.go
│ │ │ │ ├── login.go
│ │ │ │ ├── openScreen.go
│ │ │ │ ├── playerAbilitiesCB.go
│ │ │ │ ├── playerAbilitiesSB.go
│ │ │ │ ├── playerChatMessage.go
│ │ │ │ ├── playerCommand.go
│ │ │ │ ├── playerInfoRemove.go
│ │ │ │ ├── playerInfoUpdate.go
│ │ │ │ ├── playerSession.go
│ │ │ │ ├── plugin.go
│ │ │ │ ├── removeEntities.go
│ │ │ │ ├── serverData.go
│ │ │ │ ├── serverLinks.go
│ │ │ │ ├── setCenterChunk.go
│ │ │ │ ├── setContainerContent.go
│ │ │ │ ├── setCreativeModeSlot.go
│ │ │ │ ├── setDefaultSpawnPosition.go
│ │ │ │ ├── setEntityMetadata.go
│ │ │ │ ├── setEntityVelocity.go
│ │ │ │ ├── setHeadRotation.go
│ │ │ │ ├── setHeldItemCB.go
│ │ │ │ ├── setHeldItemSB.go
│ │ │ │ ├── setPlayerOnGround.go
│ │ │ │ ├── setPlayerPosition.go
│ │ │ │ ├── setPlayerPositionAndRotation.go
│ │ │ │ ├── setPlayerRotation.go
│ │ │ │ ├── setTickingState.go
│ │ │ │ ├── signedChatCommand.go
│ │ │ │ ├── soundEffect.go
│ │ │ │ ├── spawnEntity.go
│ │ │ │ ├── stepTick.go
│ │ │ │ ├── swingArm.go
│ │ │ │ ├── synchronizePlayerPosition.go
│ │ │ │ ├── systemChatMessage.go
│ │ │ │ ├── updateEntityPosition.go
│ │ │ │ ├── updateEntityPositionAndRotation.go
│ │ │ │ ├── updateEntityRotation.go
│ │ │ │ ├── updateRecipeBook.go
│ │ │ │ ├── updateSectionBlocks.go
│ │ │ │ ├── updateTags.go
│ │ │ │ ├── updateTime.go
│ │ │ │ └── useItemOn.go
│ │ │ └── status/
│ │ │ ├── ping.go
│ │ │ └── status.go
│ │ ├── pool.go
│ │ ├── registry/
│ │ │ ├── embed.go
│ │ │ └── registry.go
│ │ ├── slot/
│ │ │ ├── comp_dec.go
│ │ │ └── slot.go
│ │ └── tags/
│ │ └── tags.go
│ └── text/
│ ├── builder.go
│ ├── color.go
│ └── text.go
├── readme.md
├── server/
│ ├── command/
│ │ ├── builder.go
│ │ ├── command.go
│ │ ├── graph.go
│ │ └── manager.go
│ ├── container/
│ │ └── container.go
│ ├── entity/
│ │ ├── entity.go
│ │ └── levelEntity.go
│ ├── player/
│ │ ├── chunks.go
│ │ ├── conn.go
│ │ ├── handler_chat_command.go
│ │ ├── player.go
│ │ ├── playerlist.go
│ │ └── state/
│ │ ├── list/
│ │ │ └── playerlist.go
│ │ ├── playerEntity.go
│ │ └── playerEntityManager.go
│ ├── plugin.go
│ ├── registry/
│ │ ├── activity.go
│ │ ├── armor_material.go
│ │ ├── attribute.go
│ │ ├── block.go
│ │ ├── block_entity_type.go
│ │ ├── block_predicate_type.go
│ │ ├── block_type.go
│ │ ├── cat_variant.go
│ │ ├── chunk_status.go
│ │ ├── command_argument_type.go
│ │ ├── creative_mode_tab.go
│ │ ├── custom_stat.go
│ │ ├── data_component_type.go
│ │ ├── decorated_pot_pattern.go
│ │ ├── enchantment_effect_component_type.go
│ │ ├── enchantment_entity_effect_type.go
│ │ ├── enchantment_level_based_value_type.go
│ │ ├── enchantment_location_based_effect_type.go
│ │ ├── enchantment_provider_type.go
│ │ ├── enchantment_value_effect_type.go
│ │ ├── entity_sub_predicate_type.go
│ │ ├── entity_type.go
│ │ ├── float_provider_type.go
│ │ ├── fluid.go
│ │ ├── frog_variant.go
│ │ ├── game_event.go
│ │ ├── height_provider_type.go
│ │ ├── instrument.go
│ │ ├── int_provider_type.go
│ │ ├── item.go
│ │ ├── item_sub_predicate_type.go
│ │ ├── loot_condition_type.go
│ │ ├── loot_function_type.go
│ │ ├── loot_nbt_provider_type.go
│ │ ├── loot_number_provider_type.go
│ │ ├── loot_pool_entry_type.go
│ │ ├── loot_score_provider_type.go
│ │ ├── map_decoration_type.go
│ │ ├── memory_module_type.go
│ │ ├── menu.go
│ │ ├── mob_effect.go
│ │ ├── number_format_type.go
│ │ ├── particle_type.go
│ │ ├── point_of_interest_type.go
│ │ ├── pos_rule_test.go
│ │ ├── position_source_type.go
│ │ ├── potion.go
│ │ ├── recipe_serializer.go
│ │ ├── recipe_type.go
│ │ ├── registry.go
│ │ ├── rule_block_entity_modifier.go
│ │ ├── rule_test.go
│ │ ├── schedule.go
│ │ ├── sensor_type.go
│ │ ├── sound_event.go
│ │ ├── stat_type.go
│ │ ├── trigger_type.go
│ │ ├── villager_profession.go
│ │ ├── villager_type.go
│ │ ├── worldgen_biome_source.go
│ │ ├── worldgen_block_state_provider_type.go
│ │ ├── worldgen_carver.go
│ │ ├── worldgen_chunk_generator.go
│ │ ├── worldgen_density_function_type.go
│ │ ├── worldgen_feature.go
│ │ ├── worldgen_feature_size_type.go
│ │ ├── worldgen_foliage_placer_type.go
│ │ ├── worldgen_material_condition.go
│ │ ├── worldgen_material_rule.go
│ │ ├── worldgen_placement_modifier_type.go
│ │ ├── worldgen_pool_alias_binding.go
│ │ ├── worldgen_root_placer_type.go
│ │ ├── worldgen_structure_piece.go
│ │ ├── worldgen_structure_placement.go
│ │ ├── worldgen_structure_pool_element.go
│ │ ├── worldgen_structure_processor.go
│ │ ├── worldgen_structure_type.go
│ │ ├── worldgen_tree_decorator_type.go
│ │ └── worldgen_trunk_placer_type.go
│ ├── server.go
│ ├── tick/
│ │ └── tick.go
│ └── world/
│ ├── block/
│ │ ├── 0block.go
│ │ ├── acaciaButton.go
│ │ ├── acaciaDoor.go
│ │ ├── acaciaFence.go
│ │ ├── acaciaFenceGate.go
│ │ ├── acaciaHangingSign.go
│ │ ├── acaciaLeaves.go
│ │ ├── acaciaLog.go
│ │ ├── acaciaPlanks.go
│ │ ├── acaciaPressurePlate.go
│ │ ├── acaciaSapling.go
│ │ ├── acaciaSign.go
│ │ ├── acaciaSlab.go
│ │ ├── acaciaStairs.go
│ │ ├── acaciaTrapdoor.go
│ │ ├── acaciaWallHangingSign.go
│ │ ├── acaciaWallSign.go
│ │ ├── acaciaWood.go
│ │ ├── activatorRail.go
│ │ ├── air.go
│ │ ├── allium.go
│ │ ├── amethystBlock.go
│ │ ├── amethystCluster.go
│ │ ├── ancientDebris.go
│ │ ├── andesite.go
│ │ ├── andesiteSlab.go
│ │ ├── andesiteStairs.go
│ │ ├── andesiteWall.go
│ │ ├── anvil.go
│ │ ├── attachedMelonStem.go
│ │ ├── attachedPumpkinStem.go
│ │ ├── azalea.go
│ │ ├── azaleaLeaves.go
│ │ ├── azureBluet.go
│ │ ├── bamboo.go
│ │ ├── bambooBlock.go
│ │ ├── bambooButton.go
│ │ ├── bambooDoor.go
│ │ ├── bambooFence.go
│ │ ├── bambooFenceGate.go
│ │ ├── bambooHangingSign.go
│ │ ├── bambooMosaic.go
│ │ ├── bambooMosaicSlab.go
│ │ ├── bambooMosaicStairs.go
│ │ ├── bambooPlanks.go
│ │ ├── bambooPressurePlate.go
│ │ ├── bambooSapling.go
│ │ ├── bambooSign.go
│ │ ├── bambooSlab.go
│ │ ├── bambooStairs.go
│ │ ├── bambooTrapdoor.go
│ │ ├── bambooWallHangingSign.go
│ │ ├── bambooWallSign.go
│ │ ├── barrel.go
│ │ ├── barrier.go
│ │ ├── basalt.go
│ │ ├── beacon.go
│ │ ├── bedrock.go
│ │ ├── beeNest.go
│ │ ├── beehive.go
│ │ ├── beetroots.go
│ │ ├── bell.go
│ │ ├── bigDripleaf.go
│ │ ├── bigDripleafStem.go
│ │ ├── birchButton.go
│ │ ├── birchDoor.go
│ │ ├── birchFence.go
│ │ ├── birchFenceGate.go
│ │ ├── birchHangingSign.go
│ │ ├── birchLeaves.go
│ │ ├── birchLog.go
│ │ ├── birchPlanks.go
│ │ ├── birchPressurePlate.go
│ │ ├── birchSapling.go
│ │ ├── birchSign.go
│ │ ├── birchSlab.go
│ │ ├── birchStairs.go
│ │ ├── birchTrapdoor.go
│ │ ├── birchWallHangingSign.go
│ │ ├── birchWallSign.go
│ │ ├── birchWood.go
│ │ ├── blackBanner.go
│ │ ├── blackBed.go
│ │ ├── blackCandle.go
│ │ ├── blackCandleCake.go
│ │ ├── blackCarpet.go
│ │ ├── blackConcrete.go
│ │ ├── blackConcretePowder.go
│ │ ├── blackGlazedTerracotta.go
│ │ ├── blackShulkerBox.go
│ │ ├── blackStainedGlass.go
│ │ ├── blackStainedGlassPane.go
│ │ ├── blackTerracotta.go
│ │ ├── blackWallBanner.go
│ │ ├── blackWool.go
│ │ ├── blackstone.go
│ │ ├── blackstoneSlab.go
│ │ ├── blackstoneStairs.go
│ │ ├── blackstoneWall.go
│ │ ├── blastFurnace.go
│ │ ├── blueBanner.go
│ │ ├── blueBed.go
│ │ ├── blueCandle.go
│ │ ├── blueCandleCake.go
│ │ ├── blueCarpet.go
│ │ ├── blueConcrete.go
│ │ ├── blueConcretePowder.go
│ │ ├── blueGlazedTerracotta.go
│ │ ├── blueIce.go
│ │ ├── blueOrchid.go
│ │ ├── blueShulkerBox.go
│ │ ├── blueStainedGlass.go
│ │ ├── blueStainedGlassPane.go
│ │ ├── blueTerracotta.go
│ │ ├── blueWallBanner.go
│ │ ├── blueWool.go
│ │ ├── boneBlock.go
│ │ ├── bookshelf.go
│ │ ├── brainCoral.go
│ │ ├── brainCoralBlock.go
│ │ ├── brainCoralFan.go
│ │ ├── brainCoralWallFan.go
│ │ ├── brewingStand.go
│ │ ├── brickSlab.go
│ │ ├── brickStairs.go
│ │ ├── brickWall.go
│ │ ├── bricks.go
│ │ ├── brownBanner.go
│ │ ├── brownBed.go
│ │ ├── brownCandle.go
│ │ ├── brownCandleCake.go
│ │ ├── brownCarpet.go
│ │ ├── brownConcrete.go
│ │ ├── brownConcretePowder.go
│ │ ├── brownGlazedTerracotta.go
│ │ ├── brownMushroom.go
│ │ ├── brownMushroomBlock.go
│ │ ├── brownShulkerBox.go
│ │ ├── brownStainedGlass.go
│ │ ├── brownStainedGlassPane.go
│ │ ├── brownTerracotta.go
│ │ ├── brownWallBanner.go
│ │ ├── brownWool.go
│ │ ├── bubbleColumn.go
│ │ ├── bubbleCoral.go
│ │ ├── bubbleCoralBlock.go
│ │ ├── bubbleCoralFan.go
│ │ ├── bubbleCoralWallFan.go
│ │ ├── buddingAmethyst.go
│ │ ├── cactus.go
│ │ ├── cake.go
│ │ ├── calcite.go
│ │ ├── calibratedSculkSensor.go
│ │ ├── campfire.go
│ │ ├── candle.go
│ │ ├── candleCake.go
│ │ ├── carrots.go
│ │ ├── cartographyTable.go
│ │ ├── carvedPumpkin.go
│ │ ├── cauldron.go
│ │ ├── caveAir.go
│ │ ├── caveVines.go
│ │ ├── caveVinesPlant.go
│ │ ├── chain.go
│ │ ├── chainCommandBlock.go
│ │ ├── cherryButton.go
│ │ ├── cherryDoor.go
│ │ ├── cherryFence.go
│ │ ├── cherryFenceGate.go
│ │ ├── cherryHangingSign.go
│ │ ├── cherryLeaves.go
│ │ ├── cherryLog.go
│ │ ├── cherryPlanks.go
│ │ ├── cherryPressurePlate.go
│ │ ├── cherrySapling.go
│ │ ├── cherrySign.go
│ │ ├── cherrySlab.go
│ │ ├── cherryStairs.go
│ │ ├── cherryTrapdoor.go
│ │ ├── cherryWallHangingSign.go
│ │ ├── cherryWallSign.go
│ │ ├── cherryWood.go
│ │ ├── chest.go
│ │ ├── chippedAnvil.go
│ │ ├── chiseledBookshelf.go
│ │ ├── chiseledCopper.go
│ │ ├── chiseledDeepslate.go
│ │ ├── chiseledNetherBricks.go
│ │ ├── chiseledPolishedBlackstone.go
│ │ ├── chiseledQuartzBlock.go
│ │ ├── chiseledRedSandstone.go
│ │ ├── chiseledSandstone.go
│ │ ├── chiseledStoneBricks.go
│ │ ├── chiseledTuff.go
│ │ ├── chiseledTuffBricks.go
│ │ ├── chorusFlower.go
│ │ ├── chorusPlant.go
│ │ ├── clay.go
│ │ ├── coalBlock.go
│ │ ├── coalOre.go
│ │ ├── coarseDirt.go
│ │ ├── cobbledDeepslate.go
│ │ ├── cobbledDeepslateSlab.go
│ │ ├── cobbledDeepslateStairs.go
│ │ ├── cobbledDeepslateWall.go
│ │ ├── cobblestone.go
│ │ ├── cobblestoneSlab.go
│ │ ├── cobblestoneStairs.go
│ │ ├── cobblestoneWall.go
│ │ ├── cobweb.go
│ │ ├── cocoa.go
│ │ ├── commandBlock.go
│ │ ├── comparator.go
│ │ ├── composter.go
│ │ ├── conduit.go
│ │ ├── copperBlock.go
│ │ ├── copperBulb.go
│ │ ├── copperDoor.go
│ │ ├── copperGrate.go
│ │ ├── copperOre.go
│ │ ├── copperTrapdoor.go
│ │ ├── cornflower.go
│ │ ├── crackedDeepslateBricks.go
│ │ ├── crackedDeepslateTiles.go
│ │ ├── crackedNetherBricks.go
│ │ ├── crackedPolishedBlackstoneBricks.go
│ │ ├── crackedStoneBricks.go
│ │ ├── crafter.go
│ │ ├── craftingTable.go
│ │ ├── creeperHead.go
│ │ ├── creeperWallHead.go
│ │ ├── crimsonButton.go
│ │ ├── crimsonDoor.go
│ │ ├── crimsonFence.go
│ │ ├── crimsonFenceGate.go
│ │ ├── crimsonFungus.go
│ │ ├── crimsonHangingSign.go
│ │ ├── crimsonHyphae.go
│ │ ├── crimsonNylium.go
│ │ ├── crimsonPlanks.go
│ │ ├── crimsonPressurePlate.go
│ │ ├── crimsonRoots.go
│ │ ├── crimsonSign.go
│ │ ├── crimsonSlab.go
│ │ ├── crimsonStairs.go
│ │ ├── crimsonStem.go
│ │ ├── crimsonTrapdoor.go
│ │ ├── crimsonWallHangingSign.go
│ │ ├── crimsonWallSign.go
│ │ ├── cryingObsidian.go
│ │ ├── cutCopper.go
│ │ ├── cutCopperSlab.go
│ │ ├── cutCopperStairs.go
│ │ ├── cutRedSandstone.go
│ │ ├── cutRedSandstoneSlab.go
│ │ ├── cutSandstone.go
│ │ ├── cutSandstoneSlab.go
│ │ ├── cyanBanner.go
│ │ ├── cyanBed.go
│ │ ├── cyanCandle.go
│ │ ├── cyanCandleCake.go
│ │ ├── cyanCarpet.go
│ │ ├── cyanConcrete.go
│ │ ├── cyanConcretePowder.go
│ │ ├── cyanGlazedTerracotta.go
│ │ ├── cyanShulkerBox.go
│ │ ├── cyanStainedGlass.go
│ │ ├── cyanStainedGlassPane.go
│ │ ├── cyanTerracotta.go
│ │ ├── cyanWallBanner.go
│ │ ├── cyanWool.go
│ │ ├── damagedAnvil.go
│ │ ├── dandelion.go
│ │ ├── darkOakButton.go
│ │ ├── darkOakDoor.go
│ │ ├── darkOakFence.go
│ │ ├── darkOakFenceGate.go
│ │ ├── darkOakHangingSign.go
│ │ ├── darkOakLeaves.go
│ │ ├── darkOakLog.go
│ │ ├── darkOakPlanks.go
│ │ ├── darkOakPressurePlate.go
│ │ ├── darkOakSapling.go
│ │ ├── darkOakSign.go
│ │ ├── darkOakSlab.go
│ │ ├── darkOakStairs.go
│ │ ├── darkOakTrapdoor.go
│ │ ├── darkOakWallHangingSign.go
│ │ ├── darkOakWallSign.go
│ │ ├── darkOakWood.go
│ │ ├── darkPrismarine.go
│ │ ├── darkPrismarineSlab.go
│ │ ├── darkPrismarineStairs.go
│ │ ├── daylightDetector.go
│ │ ├── deadBrainCoral.go
│ │ ├── deadBrainCoralBlock.go
│ │ ├── deadBrainCoralFan.go
│ │ ├── deadBrainCoralWallFan.go
│ │ ├── deadBubbleCoral.go
│ │ ├── deadBubbleCoralBlock.go
│ │ ├── deadBubbleCoralFan.go
│ │ ├── deadBubbleCoralWallFan.go
│ │ ├── deadBush.go
│ │ ├── deadFireCoral.go
│ │ ├── deadFireCoralBlock.go
│ │ ├── deadFireCoralFan.go
│ │ ├── deadFireCoralWallFan.go
│ │ ├── deadHornCoral.go
│ │ ├── deadHornCoralBlock.go
│ │ ├── deadHornCoralFan.go
│ │ ├── deadHornCoralWallFan.go
│ │ ├── deadTubeCoral.go
│ │ ├── deadTubeCoralBlock.go
│ │ ├── deadTubeCoralFan.go
│ │ ├── deadTubeCoralWallFan.go
│ │ ├── decoratedPot.go
│ │ ├── deepslate.go
│ │ ├── deepslateBrickSlab.go
│ │ ├── deepslateBrickStairs.go
│ │ ├── deepslateBrickWall.go
│ │ ├── deepslateBricks.go
│ │ ├── deepslateCoalOre.go
│ │ ├── deepslateCopperOre.go
│ │ ├── deepslateDiamondOre.go
│ │ ├── deepslateEmeraldOre.go
│ │ ├── deepslateGoldOre.go
│ │ ├── deepslateIronOre.go
│ │ ├── deepslateLapisOre.go
│ │ ├── deepslateRedstoneOre.go
│ │ ├── deepslateTileSlab.go
│ │ ├── deepslateTileStairs.go
│ │ ├── deepslateTileWall.go
│ │ ├── deepslateTiles.go
│ │ ├── detectorRail.go
│ │ ├── diamondBlock.go
│ │ ├── diamondOre.go
│ │ ├── diorite.go
│ │ ├── dioriteSlab.go
│ │ ├── dioriteStairs.go
│ │ ├── dioriteWall.go
│ │ ├── dirt.go
│ │ ├── dirtPath.go
│ │ ├── dispenser.go
│ │ ├── dragonEgg.go
│ │ ├── dragonHead.go
│ │ ├── dragonWallHead.go
│ │ ├── driedKelpBlock.go
│ │ ├── dripstoneBlock.go
│ │ ├── dropper.go
│ │ ├── emeraldBlock.go
│ │ ├── emeraldOre.go
│ │ ├── enchantingTable.go
│ │ ├── endGateway.go
│ │ ├── endPortal.go
│ │ ├── endPortalFrame.go
│ │ ├── endRod.go
│ │ ├── endStone.go
│ │ ├── endStoneBrickSlab.go
│ │ ├── endStoneBrickStairs.go
│ │ ├── endStoneBrickWall.go
│ │ ├── endStoneBricks.go
│ │ ├── enderChest.go
│ │ ├── exposedChiseledCopper.go
│ │ ├── exposedCopper.go
│ │ ├── exposedCopperBulb.go
│ │ ├── exposedCopperDoor.go
│ │ ├── exposedCopperGrate.go
│ │ ├── exposedCopperTrapdoor.go
│ │ ├── exposedCutCopper.go
│ │ ├── exposedCutCopperSlab.go
│ │ ├── exposedCutCopperStairs.go
│ │ ├── farmland.go
│ │ ├── fern.go
│ │ ├── fire.go
│ │ ├── fireCoral.go
│ │ ├── fireCoralBlock.go
│ │ ├── fireCoralFan.go
│ │ ├── fireCoralWallFan.go
│ │ ├── fletchingTable.go
│ │ ├── flowerPot.go
│ │ ├── floweringAzalea.go
│ │ ├── floweringAzaleaLeaves.go
│ │ ├── frogspawn.go
│ │ ├── frostedIce.go
│ │ ├── furnace.go
│ │ ├── gildedBlackstone.go
│ │ ├── glass.go
│ │ ├── glassPane.go
│ │ ├── glowLichen.go
│ │ ├── glowstone.go
│ │ ├── goldBlock.go
│ │ ├── goldOre.go
│ │ ├── granite.go
│ │ ├── graniteSlab.go
│ │ ├── graniteStairs.go
│ │ ├── graniteWall.go
│ │ ├── grassBlock.go
│ │ ├── gravel.go
│ │ ├── grayBanner.go
│ │ ├── grayBed.go
│ │ ├── grayCandle.go
│ │ ├── grayCandleCake.go
│ │ ├── grayCarpet.go
│ │ ├── grayConcrete.go
│ │ ├── grayConcretePowder.go
│ │ ├── grayGlazedTerracotta.go
│ │ ├── grayShulkerBox.go
│ │ ├── grayStainedGlass.go
│ │ ├── grayStainedGlassPane.go
│ │ ├── grayTerracotta.go
│ │ ├── grayWallBanner.go
│ │ ├── grayWool.go
│ │ ├── greenBanner.go
│ │ ├── greenBed.go
│ │ ├── greenCandle.go
│ │ ├── greenCandleCake.go
│ │ ├── greenCarpet.go
│ │ ├── greenConcrete.go
│ │ ├── greenConcretePowder.go
│ │ ├── greenGlazedTerracotta.go
│ │ ├── greenShulkerBox.go
│ │ ├── greenStainedGlass.go
│ │ ├── greenStainedGlassPane.go
│ │ ├── greenTerracotta.go
│ │ ├── greenWallBanner.go
│ │ ├── greenWool.go
│ │ ├── grindstone.go
│ │ ├── hangingRoots.go
│ │ ├── hayBlock.go
│ │ ├── heavyCore.go
│ │ ├── heavyWeightedPressurePlate.go
│ │ ├── honeyBlock.go
│ │ ├── honeycombBlock.go
│ │ ├── hopper.go
│ │ ├── hornCoral.go
│ │ ├── hornCoralBlock.go
│ │ ├── hornCoralFan.go
│ │ ├── hornCoralWallFan.go
│ │ ├── ice.go
│ │ ├── infestedChiseledStoneBricks.go
│ │ ├── infestedCobblestone.go
│ │ ├── infestedCrackedStoneBricks.go
│ │ ├── infestedDeepslate.go
│ │ ├── infestedMossyStoneBricks.go
│ │ ├── infestedStone.go
│ │ ├── infestedStoneBricks.go
│ │ ├── ironBars.go
│ │ ├── ironBlock.go
│ │ ├── ironDoor.go
│ │ ├── ironOre.go
│ │ ├── ironTrapdoor.go
│ │ ├── jackOLantern.go
│ │ ├── jigsaw.go
│ │ ├── jukebox.go
│ │ ├── jungleButton.go
│ │ ├── jungleDoor.go
│ │ ├── jungleFence.go
│ │ ├── jungleFenceGate.go
│ │ ├── jungleHangingSign.go
│ │ ├── jungleLeaves.go
│ │ ├── jungleLog.go
│ │ ├── junglePlanks.go
│ │ ├── junglePressurePlate.go
│ │ ├── jungleSapling.go
│ │ ├── jungleSign.go
│ │ ├── jungleSlab.go
│ │ ├── jungleStairs.go
│ │ ├── jungleTrapdoor.go
│ │ ├── jungleWallHangingSign.go
│ │ ├── jungleWallSign.go
│ │ ├── jungleWood.go
│ │ ├── kelp.go
│ │ ├── kelpPlant.go
│ │ ├── ladder.go
│ │ ├── lantern.go
│ │ ├── lapisBlock.go
│ │ ├── lapisOre.go
│ │ ├── largeAmethystBud.go
│ │ ├── largeFern.go
│ │ ├── lava.go
│ │ ├── lavaCauldron.go
│ │ ├── lectern.go
│ │ ├── lever.go
│ │ ├── light.go
│ │ ├── lightBlueBanner.go
│ │ ├── lightBlueBed.go
│ │ ├── lightBlueCandle.go
│ │ ├── lightBlueCandleCake.go
│ │ ├── lightBlueCarpet.go
│ │ ├── lightBlueConcrete.go
│ │ ├── lightBlueConcretePowder.go
│ │ ├── lightBlueGlazedTerracotta.go
│ │ ├── lightBlueShulkerBox.go
│ │ ├── lightBlueStainedGlass.go
│ │ ├── lightBlueStainedGlassPane.go
│ │ ├── lightBlueTerracotta.go
│ │ ├── lightBlueWallBanner.go
│ │ ├── lightBlueWool.go
│ │ ├── lightGrayBanner.go
│ │ ├── lightGrayBed.go
│ │ ├── lightGrayCandle.go
│ │ ├── lightGrayCandleCake.go
│ │ ├── lightGrayCarpet.go
│ │ ├── lightGrayConcrete.go
│ │ ├── lightGrayConcretePowder.go
│ │ ├── lightGrayGlazedTerracotta.go
│ │ ├── lightGrayShulkerBox.go
│ │ ├── lightGrayStainedGlass.go
│ │ ├── lightGrayStainedGlassPane.go
│ │ ├── lightGrayTerracotta.go
│ │ ├── lightGrayWallBanner.go
│ │ ├── lightGrayWool.go
│ │ ├── lightWeightedPressurePlate.go
│ │ ├── lightningRod.go
│ │ ├── lilac.go
│ │ ├── lilyOfTheValley.go
│ │ ├── lilyPad.go
│ │ ├── limeBanner.go
│ │ ├── limeBed.go
│ │ ├── limeCandle.go
│ │ ├── limeCandleCake.go
│ │ ├── limeCarpet.go
│ │ ├── limeConcrete.go
│ │ ├── limeConcretePowder.go
│ │ ├── limeGlazedTerracotta.go
│ │ ├── limeShulkerBox.go
│ │ ├── limeStainedGlass.go
│ │ ├── limeStainedGlassPane.go
│ │ ├── limeTerracotta.go
│ │ ├── limeWallBanner.go
│ │ ├── limeWool.go
│ │ ├── lodestone.go
│ │ ├── loom.go
│ │ ├── magentaBanner.go
│ │ ├── magentaBed.go
│ │ ├── magentaCandle.go
│ │ ├── magentaCandleCake.go
│ │ ├── magentaCarpet.go
│ │ ├── magentaConcrete.go
│ │ ├── magentaConcretePowder.go
│ │ ├── magentaGlazedTerracotta.go
│ │ ├── magentaShulkerBox.go
│ │ ├── magentaStainedGlass.go
│ │ ├── magentaStainedGlassPane.go
│ │ ├── magentaTerracotta.go
│ │ ├── magentaWallBanner.go
│ │ ├── magentaWool.go
│ │ ├── magmaBlock.go
│ │ ├── mangroveButton.go
│ │ ├── mangroveDoor.go
│ │ ├── mangroveFence.go
│ │ ├── mangroveFenceGate.go
│ │ ├── mangroveHangingSign.go
│ │ ├── mangroveLeaves.go
│ │ ├── mangroveLog.go
│ │ ├── mangrovePlanks.go
│ │ ├── mangrovePressurePlate.go
│ │ ├── mangrovePropagule.go
│ │ ├── mangroveRoots.go
│ │ ├── mangroveSign.go
│ │ ├── mangroveSlab.go
│ │ ├── mangroveStairs.go
│ │ ├── mangroveTrapdoor.go
│ │ ├── mangroveWallHangingSign.go
│ │ ├── mangroveWallSign.go
│ │ ├── mangroveWood.go
│ │ ├── mediumAmethystBud.go
│ │ ├── melon.go
│ │ ├── melonStem.go
│ │ ├── mossBlock.go
│ │ ├── mossCarpet.go
│ │ ├── mossyCobblestone.go
│ │ ├── mossyCobblestoneSlab.go
│ │ ├── mossyCobblestoneStairs.go
│ │ ├── mossyCobblestoneWall.go
│ │ ├── mossyStoneBrickSlab.go
│ │ ├── mossyStoneBrickStairs.go
│ │ ├── mossyStoneBrickWall.go
│ │ ├── mossyStoneBricks.go
│ │ ├── movingPiston.go
│ │ ├── mud.go
│ │ ├── mudBrickSlab.go
│ │ ├── mudBrickStairs.go
│ │ ├── mudBrickWall.go
│ │ ├── mudBricks.go
│ │ ├── muddyMangroveRoots.go
│ │ ├── mushroomStem.go
│ │ ├── mycelium.go
│ │ ├── netherBrickFence.go
│ │ ├── netherBrickSlab.go
│ │ ├── netherBrickStairs.go
│ │ ├── netherBrickWall.go
│ │ ├── netherBricks.go
│ │ ├── netherGoldOre.go
│ │ ├── netherPortal.go
│ │ ├── netherQuartzOre.go
│ │ ├── netherSprouts.go
│ │ ├── netherWart.go
│ │ ├── netherWartBlock.go
│ │ ├── netheriteBlock.go
│ │ ├── netherrack.go
│ │ ├── noteBlock.go
│ │ ├── oakButton.go
│ │ ├── oakDoor.go
│ │ ├── oakFence.go
│ │ ├── oakFenceGate.go
│ │ ├── oakHangingSign.go
│ │ ├── oakLeaves.go
│ │ ├── oakLog.go
│ │ ├── oakPlanks.go
│ │ ├── oakPressurePlate.go
│ │ ├── oakSapling.go
│ │ ├── oakSign.go
│ │ ├── oakSlab.go
│ │ ├── oakStairs.go
│ │ ├── oakTrapdoor.go
│ │ ├── oakWallHangingSign.go
│ │ ├── oakWallSign.go
│ │ ├── oakWood.go
│ │ ├── observer.go
│ │ ├── obsidian.go
│ │ ├── ochreFroglight.go
│ │ ├── orangeBanner.go
│ │ ├── orangeBed.go
│ │ ├── orangeCandle.go
│ │ ├── orangeCandleCake.go
│ │ ├── orangeCarpet.go
│ │ ├── orangeConcrete.go
│ │ ├── orangeConcretePowder.go
│ │ ├── orangeGlazedTerracotta.go
│ │ ├── orangeShulkerBox.go
│ │ ├── orangeStainedGlass.go
│ │ ├── orangeStainedGlassPane.go
│ │ ├── orangeTerracotta.go
│ │ ├── orangeTulip.go
│ │ ├── orangeWallBanner.go
│ │ ├── orangeWool.go
│ │ ├── oxeyeDaisy.go
│ │ ├── oxidizedChiseledCopper.go
│ │ ├── oxidizedCopper.go
│ │ ├── oxidizedCopperBulb.go
│ │ ├── oxidizedCopperDoor.go
│ │ ├── oxidizedCopperGrate.go
│ │ ├── oxidizedCopperTrapdoor.go
│ │ ├── oxidizedCutCopper.go
│ │ ├── oxidizedCutCopperSlab.go
│ │ ├── oxidizedCutCopperStairs.go
│ │ ├── packedIce.go
│ │ ├── packedMud.go
│ │ ├── pearlescentFroglight.go
│ │ ├── peony.go
│ │ ├── petrifiedOakSlab.go
│ │ ├── piglinHead.go
│ │ ├── piglinWallHead.go
│ │ ├── pinkBanner.go
│ │ ├── pinkBed.go
│ │ ├── pinkCandle.go
│ │ ├── pinkCandleCake.go
│ │ ├── pinkCarpet.go
│ │ ├── pinkConcrete.go
│ │ ├── pinkConcretePowder.go
│ │ ├── pinkGlazedTerracotta.go
│ │ ├── pinkPetals.go
│ │ ├── pinkShulkerBox.go
│ │ ├── pinkStainedGlass.go
│ │ ├── pinkStainedGlassPane.go
│ │ ├── pinkTerracotta.go
│ │ ├── pinkTulip.go
│ │ ├── pinkWallBanner.go
│ │ ├── pinkWool.go
│ │ ├── piston.go
│ │ ├── pistonHead.go
│ │ ├── pitcherCrop.go
│ │ ├── pitcherPlant.go
│ │ ├── playerHead.go
│ │ ├── playerWallHead.go
│ │ ├── podzol.go
│ │ ├── pointedDripstone.go
│ │ ├── polishedAndesite.go
│ │ ├── polishedAndesiteSlab.go
│ │ ├── polishedAndesiteStairs.go
│ │ ├── polishedBasalt.go
│ │ ├── polishedBlackstone.go
│ │ ├── polishedBlackstoneBrickSlab.go
│ │ ├── polishedBlackstoneBrickStairs.go
│ │ ├── polishedBlackstoneBrickWall.go
│ │ ├── polishedBlackstoneBricks.go
│ │ ├── polishedBlackstoneButton.go
│ │ ├── polishedBlackstonePressurePlate.go
│ │ ├── polishedBlackstoneSlab.go
│ │ ├── polishedBlackstoneStairs.go
│ │ ├── polishedBlackstoneWall.go
│ │ ├── polishedDeepslate.go
│ │ ├── polishedDeepslateSlab.go
│ │ ├── polishedDeepslateStairs.go
│ │ ├── polishedDeepslateWall.go
│ │ ├── polishedDiorite.go
│ │ ├── polishedDioriteSlab.go
│ │ ├── polishedDioriteStairs.go
│ │ ├── polishedGranite.go
│ │ ├── polishedGraniteSlab.go
│ │ ├── polishedGraniteStairs.go
│ │ ├── polishedTuff.go
│ │ ├── polishedTuffSlab.go
│ │ ├── polishedTuffStairs.go
│ │ ├── polishedTuffWall.go
│ │ ├── poppy.go
│ │ ├── pos/
│ │ │ └── pos.go
│ │ ├── potatoes.go
│ │ ├── pottedAcaciaSapling.go
│ │ ├── pottedAllium.go
│ │ ├── pottedAzaleaBush.go
│ │ ├── pottedAzureBluet.go
│ │ ├── pottedBamboo.go
│ │ ├── pottedBirchSapling.go
│ │ ├── pottedBlueOrchid.go
│ │ ├── pottedBrownMushroom.go
│ │ ├── pottedCactus.go
│ │ ├── pottedCherrySapling.go
│ │ ├── pottedCornflower.go
│ │ ├── pottedCrimsonFungus.go
│ │ ├── pottedCrimsonRoots.go
│ │ ├── pottedDandelion.go
│ │ ├── pottedDarkOakSapling.go
│ │ ├── pottedDeadBush.go
│ │ ├── pottedFern.go
│ │ ├── pottedFloweringAzaleaBush.go
│ │ ├── pottedJungleSapling.go
│ │ ├── pottedLilyOfTheValley.go
│ │ ├── pottedMangrovePropagule.go
│ │ ├── pottedOakSapling.go
│ │ ├── pottedOrangeTulip.go
│ │ ├── pottedOxeyeDaisy.go
│ │ ├── pottedPinkTulip.go
│ │ ├── pottedPoppy.go
│ │ ├── pottedRedMushroom.go
│ │ ├── pottedRedTulip.go
│ │ ├── pottedSpruceSapling.go
│ │ ├── pottedTorchflower.go
│ │ ├── pottedWarpedFungus.go
│ │ ├── pottedWarpedRoots.go
│ │ ├── pottedWhiteTulip.go
│ │ ├── pottedWitherRose.go
│ │ ├── powderSnow.go
│ │ ├── powderSnowCauldron.go
│ │ ├── poweredRail.go
│ │ ├── prismarine.go
│ │ ├── prismarineBrickSlab.go
│ │ ├── prismarineBrickStairs.go
│ │ ├── prismarineBricks.go
│ │ ├── prismarineSlab.go
│ │ ├── prismarineStairs.go
│ │ ├── prismarineWall.go
│ │ ├── pumpkin.go
│ │ ├── pumpkinStem.go
│ │ ├── purpleBanner.go
│ │ ├── purpleBed.go
│ │ ├── purpleCandle.go
│ │ ├── purpleCandleCake.go
│ │ ├── purpleCarpet.go
│ │ ├── purpleConcrete.go
│ │ ├── purpleConcretePowder.go
│ │ ├── purpleGlazedTerracotta.go
│ │ ├── purpleShulkerBox.go
│ │ ├── purpleStainedGlass.go
│ │ ├── purpleStainedGlassPane.go
│ │ ├── purpleTerracotta.go
│ │ ├── purpleWallBanner.go
│ │ ├── purpleWool.go
│ │ ├── purpurBlock.go
│ │ ├── purpurPillar.go
│ │ ├── purpurSlab.go
│ │ ├── purpurStairs.go
│ │ ├── quartzBlock.go
│ │ ├── quartzBricks.go
│ │ ├── quartzPillar.go
│ │ ├── quartzSlab.go
│ │ ├── quartzStairs.go
│ │ ├── rail.go
│ │ ├── rawCopperBlock.go
│ │ ├── rawGoldBlock.go
│ │ ├── rawIronBlock.go
│ │ ├── redBanner.go
│ │ ├── redBed.go
│ │ ├── redCandle.go
│ │ ├── redCandleCake.go
│ │ ├── redCarpet.go
│ │ ├── redConcrete.go
│ │ ├── redConcretePowder.go
│ │ ├── redGlazedTerracotta.go
│ │ ├── redMushroom.go
│ │ ├── redMushroomBlock.go
│ │ ├── redNetherBrickSlab.go
│ │ ├── redNetherBrickStairs.go
│ │ ├── redNetherBrickWall.go
│ │ ├── redNetherBricks.go
│ │ ├── redSand.go
│ │ ├── redSandstone.go
│ │ ├── redSandstoneSlab.go
│ │ ├── redSandstoneStairs.go
│ │ ├── redSandstoneWall.go
│ │ ├── redShulkerBox.go
│ │ ├── redStainedGlass.go
│ │ ├── redStainedGlassPane.go
│ │ ├── redTerracotta.go
│ │ ├── redTulip.go
│ │ ├── redWallBanner.go
│ │ ├── redWool.go
│ │ ├── redstoneBlock.go
│ │ ├── redstoneLamp.go
│ │ ├── redstoneOre.go
│ │ ├── redstoneTorch.go
│ │ ├── redstoneWallTorch.go
│ │ ├── redstoneWire.go
│ │ ├── reinforcedDeepslate.go
│ │ ├── repeater.go
│ │ ├── repeatingCommandBlock.go
│ │ ├── respawnAnchor.go
│ │ ├── rootedDirt.go
│ │ ├── roseBush.go
│ │ ├── sand.go
│ │ ├── sandstone.go
│ │ ├── sandstoneSlab.go
│ │ ├── sandstoneStairs.go
│ │ ├── sandstoneWall.go
│ │ ├── scaffolding.go
│ │ ├── sculk.go
│ │ ├── sculkCatalyst.go
│ │ ├── sculkSensor.go
│ │ ├── sculkShrieker.go
│ │ ├── sculkVein.go
│ │ ├── seaLantern.go
│ │ ├── seaPickle.go
│ │ ├── seagrass.go
│ │ ├── shortGrass.go
│ │ ├── shroomlight.go
│ │ ├── shulkerBox.go
│ │ ├── skeletonSkull.go
│ │ ├── skeletonWallSkull.go
│ │ ├── slimeBlock.go
│ │ ├── smallAmethystBud.go
│ │ ├── smallDripleaf.go
│ │ ├── smithingTable.go
│ │ ├── smoker.go
│ │ ├── smoothBasalt.go
│ │ ├── smoothQuartz.go
│ │ ├── smoothQuartzSlab.go
│ │ ├── smoothQuartzStairs.go
│ │ ├── smoothRedSandstone.go
│ │ ├── smoothRedSandstoneSlab.go
│ │ ├── smoothRedSandstoneStairs.go
│ │ ├── smoothSandstone.go
│ │ ├── smoothSandstoneSlab.go
│ │ ├── smoothSandstoneStairs.go
│ │ ├── smoothStone.go
│ │ ├── smoothStoneSlab.go
│ │ ├── snifferEgg.go
│ │ ├── snow.go
│ │ ├── snowBlock.go
│ │ ├── soulCampfire.go
│ │ ├── soulFire.go
│ │ ├── soulLantern.go
│ │ ├── soulSand.go
│ │ ├── soulSoil.go
│ │ ├── soulTorch.go
│ │ ├── soulWallTorch.go
│ │ ├── spawner.go
│ │ ├── sponge.go
│ │ ├── sporeBlossom.go
│ │ ├── spruceButton.go
│ │ ├── spruceDoor.go
│ │ ├── spruceFence.go
│ │ ├── spruceFenceGate.go
│ │ ├── spruceHangingSign.go
│ │ ├── spruceLeaves.go
│ │ ├── spruceLog.go
│ │ ├── sprucePlanks.go
│ │ ├── sprucePressurePlate.go
│ │ ├── spruceSapling.go
│ │ ├── spruceSign.go
│ │ ├── spruceSlab.go
│ │ ├── spruceStairs.go
│ │ ├── spruceTrapdoor.go
│ │ ├── spruceWallHangingSign.go
│ │ ├── spruceWallSign.go
│ │ ├── spruceWood.go
│ │ ├── stickyPiston.go
│ │ ├── stone.go
│ │ ├── stoneBrickSlab.go
│ │ ├── stoneBrickStairs.go
│ │ ├── stoneBrickWall.go
│ │ ├── stoneBricks.go
│ │ ├── stoneButton.go
│ │ ├── stonePressurePlate.go
│ │ ├── stoneSlab.go
│ │ ├── stoneStairs.go
│ │ ├── stonecutter.go
│ │ ├── strippedAcaciaLog.go
│ │ ├── strippedAcaciaWood.go
│ │ ├── strippedBambooBlock.go
│ │ ├── strippedBirchLog.go
│ │ ├── strippedBirchWood.go
│ │ ├── strippedCherryLog.go
│ │ ├── strippedCherryWood.go
│ │ ├── strippedCrimsonHyphae.go
│ │ ├── strippedCrimsonStem.go
│ │ ├── strippedDarkOakLog.go
│ │ ├── strippedDarkOakWood.go
│ │ ├── strippedJungleLog.go
│ │ ├── strippedJungleWood.go
│ │ ├── strippedMangroveLog.go
│ │ ├── strippedMangroveWood.go
│ │ ├── strippedOakLog.go
│ │ ├── strippedOakWood.go
│ │ ├── strippedSpruceLog.go
│ │ ├── strippedSpruceWood.go
│ │ ├── strippedWarpedHyphae.go
│ │ ├── strippedWarpedStem.go
│ │ ├── structureBlock.go
│ │ ├── structureVoid.go
│ │ ├── sugarCane.go
│ │ ├── sunflower.go
│ │ ├── suspiciousGravel.go
│ │ ├── suspiciousSand.go
│ │ ├── sweetBerryBush.go
│ │ ├── tallGrass.go
│ │ ├── tallSeagrass.go
│ │ ├── target.go
│ │ ├── terracotta.go
│ │ ├── tintedGlass.go
│ │ ├── tnt.go
│ │ ├── torch.go
│ │ ├── torchflower.go
│ │ ├── torchflowerCrop.go
│ │ ├── trappedChest.go
│ │ ├── trialSpawner.go
│ │ ├── tripwire.go
│ │ ├── tripwireHook.go
│ │ ├── tubeCoral.go
│ │ ├── tubeCoralBlock.go
│ │ ├── tubeCoralFan.go
│ │ ├── tubeCoralWallFan.go
│ │ ├── tuff.go
│ │ ├── tuffBrickSlab.go
│ │ ├── tuffBrickStairs.go
│ │ ├── tuffBrickWall.go
│ │ ├── tuffBricks.go
│ │ ├── tuffSlab.go
│ │ ├── tuffStairs.go
│ │ ├── tuffWall.go
│ │ ├── turtleEgg.go
│ │ ├── twistingVines.go
│ │ ├── twistingVinesPlant.go
│ │ ├── vault.go
│ │ ├── verdantFroglight.go
│ │ ├── vine.go
│ │ ├── voidAir.go
│ │ ├── wallTorch.go
│ │ ├── warpedButton.go
│ │ ├── warpedDoor.go
│ │ ├── warpedFence.go
│ │ ├── warpedFenceGate.go
│ │ ├── warpedFungus.go
│ │ ├── warpedHangingSign.go
│ │ ├── warpedHyphae.go
│ │ ├── warpedNylium.go
│ │ ├── warpedPlanks.go
│ │ ├── warpedPressurePlate.go
│ │ ├── warpedRoots.go
│ │ ├── warpedSign.go
│ │ ├── warpedSlab.go
│ │ ├── warpedStairs.go
│ │ ├── warpedStem.go
│ │ ├── warpedTrapdoor.go
│ │ ├── warpedWallHangingSign.go
│ │ ├── warpedWallSign.go
│ │ ├── warpedWartBlock.go
│ │ ├── water.go
│ │ ├── waterCauldron.go
│ │ ├── waxedChiseledCopper.go
│ │ ├── waxedCopperBlock.go
│ │ ├── waxedCopperBulb.go
│ │ ├── waxedCopperDoor.go
│ │ ├── waxedCopperGrate.go
│ │ ├── waxedCopperTrapdoor.go
│ │ ├── waxedCutCopper.go
│ │ ├── waxedCutCopperSlab.go
│ │ ├── waxedCutCopperStairs.go
│ │ ├── waxedExposedChiseledCopper.go
│ │ ├── waxedExposedCopper.go
│ │ ├── waxedExposedCopperBulb.go
│ │ ├── waxedExposedCopperDoor.go
│ │ ├── waxedExposedCopperGrate.go
│ │ ├── waxedExposedCopperTrapdoor.go
│ │ ├── waxedExposedCutCopper.go
│ │ ├── waxedExposedCutCopperSlab.go
│ │ ├── waxedExposedCutCopperStairs.go
│ │ ├── waxedOxidizedChiseledCopper.go
│ │ ├── waxedOxidizedCopper.go
│ │ ├── waxedOxidizedCopperBulb.go
│ │ ├── waxedOxidizedCopperDoor.go
│ │ ├── waxedOxidizedCopperGrate.go
│ │ ├── waxedOxidizedCopperTrapdoor.go
│ │ ├── waxedOxidizedCutCopper.go
│ │ ├── waxedOxidizedCutCopperSlab.go
│ │ ├── waxedOxidizedCutCopperStairs.go
│ │ ├── waxedWeatheredChiseledCopper.go
│ │ ├── waxedWeatheredCopper.go
│ │ ├── waxedWeatheredCopperBulb.go
│ │ ├── waxedWeatheredCopperDoor.go
│ │ ├── waxedWeatheredCopperGrate.go
│ │ ├── waxedWeatheredCopperTrapdoor.go
│ │ ├── waxedWeatheredCutCopper.go
│ │ ├── waxedWeatheredCutCopperSlab.go
│ │ ├── waxedWeatheredCutCopperStairs.go
│ │ ├── weatheredChiseledCopper.go
│ │ ├── weatheredCopper.go
│ │ ├── weatheredCopperBulb.go
│ │ ├── weatheredCopperDoor.go
│ │ ├── weatheredCopperGrate.go
│ │ ├── weatheredCopperTrapdoor.go
│ │ ├── weatheredCutCopper.go
│ │ ├── weatheredCutCopperSlab.go
│ │ ├── weatheredCutCopperStairs.go
│ │ ├── weepingVines.go
│ │ ├── weepingVinesPlant.go
│ │ ├── wetSponge.go
│ │ ├── wheat.go
│ │ ├── whiteBanner.go
│ │ ├── whiteBed.go
│ │ ├── whiteCandle.go
│ │ ├── whiteCandleCake.go
│ │ ├── whiteCarpet.go
│ │ ├── whiteConcrete.go
│ │ ├── whiteConcretePowder.go
│ │ ├── whiteGlazedTerracotta.go
│ │ ├── whiteShulkerBox.go
│ │ ├── whiteStainedGlass.go
│ │ ├── whiteStainedGlassPane.go
│ │ ├── whiteTerracotta.go
│ │ ├── whiteTulip.go
│ │ ├── whiteWallBanner.go
│ │ ├── whiteWool.go
│ │ ├── witherRose.go
│ │ ├── witherSkeletonSkull.go
│ │ ├── witherSkeletonWallSkull.go
│ │ ├── yellowBanner.go
│ │ ├── yellowBed.go
│ │ ├── yellowCandle.go
│ │ ├── yellowCandleCake.go
│ │ ├── yellowCarpet.go
│ │ ├── yellowConcrete.go
│ │ ├── yellowConcretePowder.go
│ │ ├── yellowGlazedTerracotta.go
│ │ ├── yellowShulkerBox.go
│ │ ├── yellowStainedGlass.go
│ │ ├── yellowStainedGlassPane.go
│ │ ├── yellowTerracotta.go
│ │ ├── yellowWallBanner.go
│ │ ├── yellowWool.go
│ │ ├── zombieHead.go
│ │ └── zombieWallHead.go
│ ├── chunk/
│ │ ├── anvil.go
│ │ ├── chunk.go
│ │ ├── encode.go
│ │ ├── heightmaps/
│ │ │ └── heightmaps.go
│ │ └── section/
│ │ ├── block.go
│ │ ├── blockRegister.go
│ │ ├── data/
│ │ │ └── blocks.nbt
│ │ └── section.go
│ ├── dimension/
│ │ ├── dimension.go
│ │ ├── manager.go
│ │ ├── tick.go
│ │ └── window/
│ │ └── window.go
│ ├── level/
│ │ ├── entity.go
│ │ ├── item/
│ │ │ ├── attribute_modifiers.go
│ │ │ ├── banner_patterns.go
│ │ │ ├── bees.go
│ │ │ ├── bucket_entity_data.go
│ │ │ ├── can_do.go
│ │ │ ├── container_loot.go
│ │ │ ├── creative_slot_lock.go
│ │ │ ├── enchantments.go
│ │ │ ├── entity_data.go
│ │ │ ├── fire_resistant.go
│ │ │ ├── firework_explosion.go
│ │ │ ├── fireworks.go
│ │ │ ├── food.go
│ │ │ ├── hide_additional_tooltip.go
│ │ │ ├── hide_tooltip.go
│ │ │ ├── intangible_projectile.go
│ │ │ ├── item.go
│ │ │ ├── items.go
│ │ │ ├── jukebox_playable.go
│ │ │ ├── lodestone_tracker.go
│ │ │ ├── map_post_processing.go
│ │ │ ├── stored_enchantments.go
│ │ │ ├── susipicious_stew_effects.go
│ │ │ ├── tool.go
│ │ │ ├── trim.go
│ │ │ ├── unbreakable.go
│ │ │ ├── writable_book_content.go
│ │ │ └── written_book_content.go
│ │ ├── level.go
│ │ ├── playerdata.go
│ │ ├── region/
│ │ │ ├── anvil.go
│ │ │ ├── region_dec.go
│ │ │ └── region_enc.go
│ │ ├── seed/
│ │ │ └── seed.go
│ │ └── uuid/
│ │ └── uuid.go
│ ├── terrain/
│ │ ├── superflat.go
│ │ └── terrain.go
│ └── world.go
└── util/
├── atomic/
│ ├── atomic.go
│ └── slice.go
├── console/
│ └── console.go
├── log/
│ └── log.go
├── mapequal.go
├── rot.go
└── unit.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/go.yml
================================================
name: Build Zeppelin
on:
push:
pull_request:
workflow_dispatch:
release:
types: [published]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
go-version: ["1.22.x"]
os: [ubuntu-latest, macos-latest]
arch: [amd64, arm64]
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ matrix.go-version }}
- name: Install libdeflate
run: |
if [ ${{ runner.os }} == 'Linux' ]; then
sudo apt-get update
sudo apt-get install -y libdeflate-dev
elif [ ${{ runner.os }} == 'macOS' ]; then
brew install libdeflate
fi
- name: Build
run: go build -v
- name: Upload Go build results linux
uses: actions/upload-artifact@v3
if: ${{ runner.os == 'Linux' && matrix.arch == 'amd64' }}
with:
name: Zeppelin-AMD64-Linux.zip
path: zeppelin
- name: Upload Go build results arm64-linux
uses: actions/upload-artifact@v3
if: ${{ runner.os == 'Linux' && matrix.arch == 'arm64' }}
with:
name: Zeppelin-ARM64-Linux.zip
path: zeppelin
- name: Upload Go build results macos
uses: actions/upload-artifact@v3
if: ${{ runner.os == 'macOS' && matrix.arch == 'amd64' }}
with:
name: Zeppelin-AMD64-macOS.zip
path: zeppelin
- name: Upload Go build results arm64-macos
uses: actions/upload-artifact@v3
if: ${{ runner.os == 'macOS' && matrix.arch == 'arm64' }}
with:
name: Zeppelin-ARM64-macOS.zip
path: zeppelin
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: commands/commands.go
================================================
package commands
import "github.com/zeppelinmc/zeppelin/server/command"
var Commands = []command.Command{
mem, debug, tick, timecmd, gc,
}
================================================
FILE: commands/debug.go
================================================
package commands
import (
"github.com/zeppelinmc/zeppelin/server/player"
"math"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/zeppelinmc/zeppelin/server/command"
//"github.com/zeppelinmc/zeppelin/server/session"
"github.com/zeppelinmc/zeppelin/util"
)
var debug = command.Command{
Node: command.NewLiteral("debug"),
Aliases: []string{"f3"},
Namespace: "zeppelin",
Callback: func(ccc command.CommandCallContext) {
player, ok := ccc.Executor.(*player.Player)
if !ok {
ccc.Executor.SystemMessage(text.TextComponent{
Text: "This command should be used by a player.",
Color: "red",
})
return
}
x, y, z := player.Position()
chunkX, chunkY, chunkZ := int32(x)>>4, int32(y)>>4, int32(z)>>4
xb, yb, zb := int32(math.Floor(x)), int32(math.Floor(y)), int32(math.Floor(z))
rx, rz := chunkX>>5, chunkZ>>5
yaw, pitch := player.Rotation()
dimension := player.Dimension()
c, err := dimension.GetChunk(chunkX, chunkZ)
if err != nil {
ccc.Executor.SystemMessage(text.TextComponent{
Text: "Unrendered chunk",
Color: "red",
})
return
}
onBlock, _ := c.Block(xb&0x0f, yb-1, zb&0x0f)
sky, _ := c.SkyLightLevel(xb&0x0f, yb, zb&0x0f)
ccc.Executor.SystemMessage(text.Unmarshalf(
'&', //ccc.Executor.Config().ChatFormatter.Rune(),
"XYZ: %.03f / %.05f / %.03f\nBlock: %d %d %d [%d %d %d]\nChunk: %d %d %d [%d %d in r.%d.%d.mca]\nStanding on: %s [%v]\nFacing: (%.01f / %.01f)\nClient Light: %d (%d sky, 0 block)\n\nYou are using: %s",
x, y, z,
xb, yb, zb,
xb&0xf, yb&0xf, zb&0xf,
chunkX, chunkY, chunkZ,
chunkX&31, chunkZ&31,
rx, rz,
onBlock.Name, onBlock.Properties,
util.NormalizeYaw(yaw), pitch,
sky, sky,
"idk",
//s.ClientName(),
))
},
}
================================================
FILE: commands/gc.go
================================================
package commands
import (
"runtime"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/zeppelinmc/zeppelin/server/command"
)
var gc = command.Command{
Node: command.NewLiteral("gc"),
Namespace: "zeppelin",
Callback: func(ccc command.CommandCallContext) {
runtime.GC()
ccc.Executor.SystemMessage(text.Text("Done.").WithColor(text.BrightGreen))
},
}
================================================
FILE: commands/mem.go
================================================
package commands
import (
"fmt"
"runtime"
"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/zeppelinmc/zeppelin/server"
"github.com/zeppelinmc/zeppelin/server/command"
)
var memStats runtime.MemStats
var mem = command.Command{
Node: command.NewLiteral("mem"),
Namespace: "zeppelin",
Callback: func(ccc command.CommandCallContext) {
runtime.ReadMemStats(&memStats)
loaded := ccc.Server.(*server.Server).World.LoadedChunks()
goroutines := runtime.NumGoroutine()
ccc.Executor.SystemMessage(text.TextComponent{
Text: fmt.Sprintf(
"Server memory usage: \n\nAlloc: %dMiB, Total Alloc: %dMiB\nLoaded Chunks: %d\nBuffer size: %dB\nGoroutines: %d",
memStats.Alloc/1024/1024, memStats.TotalAlloc/1024/1024, loaded, buffers.Size(), goroutines,
),
})
},
}
================================================
FILE: commands/tick.go
================================================
package commands
import (
"time"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/zeppelinmc/zeppelin/server"
"github.com/zeppelinmc/zeppelin/server/command"
)
var tick = command.Command{
Node: command.NewLiteral("tick", command.NewLiteral("info"), command.NewLiteral("freeze"), command.NewLiteral("unfreeze")),
Callback: func(ccc command.CommandCallContext) {
tickManager := ccc.Server.(*server.Server).TickManager
command := ccc.Arguments.Fallback(0, "info")
num := tickManager.Count()
switch command {
case "info":
freq := tickManager.Frequency()
ccc.Executor.SystemMessage(text.Sprintf(
"Server Tickers: %d\nTicking Frequency: %.02ftps (expected ticks per second)",
num, 1/(float64(freq)/float64(time.Second)),
))
case "freeze":
tickManager.Freeze()
ccc.Executor.SystemMessage(text.Sprintf("Froze %d tickers", num))
case "unfreeze":
tickManager.Unfreeze()
ccc.Executor.SystemMessage(text.Sprintf("Froze %d tickers", num))
}
},
}
================================================
FILE: commands/time.go
================================================
package commands
import (
"github.com/zeppelinmc/zeppelin/server/command"
)
var timecmd = command.Command{
Node: command.NewLiteral("time" /*command.NewCommand("add", command.NewTimeArgument("time", 0)), command.NewCommand("set", command.NewTimeArgument("time", 0))*/),
Callback: func(ccc command.CommandCallContext) {
/*command := ccc.Arguments.At(0)
w := ccc.Server.(*server.Server).World
switch command {
case "set":
t := ccc.Arguments.At(1)
time, err := strconv.Atoi(t)
if t == "" || err != nil {
ccc.Reply(text.Sprint("Invalid time"))
return
}
a, _ := w.Time()
ccc.Executor.UpdateTime(a, int64(time))
}*/
},
}
================================================
FILE: go.mod
================================================
module github.com/zeppelinmc/zeppelin
go 1.23
require (
github.com/fatih/color v1.17.0
github.com/google/uuid v1.6.0
golang.org/x/term v0.22.0
)
require (
github.com/4kills/go-libdeflate/v2 v2.2.0
github.com/pierrec/lz4/v4 v4.1.21
)
require github.com/oq-x/unsafe2 v0.0.0-20240901191313-2b7bec1d9e3b
require (
github.com/aimjel/mine-net v0.0.0-20241231185445-f0751c927ecb // indirect
github.com/grailbio/base v0.0.11 // indirect
)
require (
github.com/4kills/go-zlib v1.2.0
github.com/aimjel/minecraft v0.0.0-20240907220502-e1fe5798908b
github.com/aquilax/go-perlin v1.1.0
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
golang.org/x/sys v0.25.0 // indirect
)
================================================
FILE: go.sum
================================================
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
github.com/4kills/go-libdeflate/v2 v2.2.0 h1:2kdYT79I+k23LO6VLn9p0l1Og47EWWgKbC1n353zE30=
github.com/4kills/go-libdeflate/v2 v2.2.0/go.mod h1:hyouZv4OAhHaaMpYuejstUN0xOg8mA+yy75WE3Ty6SM=
github.com/4kills/go-zlib v1.2.0 h1:h/OjHfOi0ZGAhotXzFVJK7V97cKNsEqRJVmJo4e8H6A=
github.com/4kills/go-zlib v1.2.0/go.mod h1:ngBUonyN1YJBHSknfLPNtWokAjYhHsaZDio8yS+BqSo=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/aimjel/mine-net v0.0.0-20241231184943-192b6fd6bfdc h1:Fl6/rTVRsK3yRvLIe59RgElHb/fpVVo8fOm1SYvAfS8=
github.com/aimjel/mine-net v0.0.0-20241231184943-192b6fd6bfdc/go.mod h1:2p/uMjMBAOvMK8NvNnTsXS7s00IYvbS3Ji3YM2ApzxA=
github.com/aimjel/mine-net v0.0.0-20241231185445-f0751c927ecb h1:DzjkzmO1C8qXdEUSWU0I4hHEi0tuaFNrKeLeRZ8ntZo=
github.com/aimjel/mine-net v0.0.0-20241231185445-f0751c927ecb/go.mod h1:2p/uMjMBAOvMK8NvNnTsXS7s00IYvbS3Ji3YM2ApzxA=
github.com/aimjel/minecraft v0.0.0-20240907220502-e1fe5798908b h1:P5dA2C10r7BqzbhXqjjx07+LBV1tcsioFJrogWBOOBY=
github.com/aimjel/minecraft v0.0.0-20240907220502-e1fe5798908b/go.mod h1:jb47g4nDw3J8JdA4WxQpDx25NoIZiyNCjFOtM1b3Urk=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/aquilax/go-perlin v1.1.0 h1:Gg+3jQ24wT4Y5GI7TCRLmYarzUG0k+n/JATFqOimb7s=
github.com/aquilax/go-perlin v1.1.0/go.mod h1:z9Rl7EM4BZY0Ikp2fEN1I5mKSOJ26HQpk0O2TBdN2HE=
github.com/aws/aws-sdk-go v1.23.14/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.23.22/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.34.31/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
github.com/biogo/store v0.0.0-20190426020002-884f370e325d/go.mod h1:Iev9Q3MErcn+w3UOJD/DkEzllvugfdx7bGcMOFhvr/4=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grailbio/base v0.0.1/go.mod h1:wVM2Cq2/HT0rt6WYGQhXJ3CCLkNnGjeAAOPHCZ2IsN0=
github.com/grailbio/base v0.0.11 h1:F/khklg9LwJDZpdHaHBvJIQrZfthNfcz3h2WuiwqK7E=
github.com/grailbio/base v0.0.11/go.mod h1:8xmAiPsu9U7ZrRuaUCSuT2SDJS97QXGqVKpn0Den8GA=
github.com/grailbio/testutil v0.0.1/go.mod h1:j7teGaXqRY1n6m7oM8oy954lxL37Myt7nEJZlif3nMA=
github.com/grailbio/testutil v0.0.3/go.mod h1:f9+y7xMXeXwyNcdV5cmo6GzRiitSOubMmqcqEON7NQQ=
github.com/grailbio/v23/factories/grail v0.0.0-20190904050408-8a555d238e9a/go.mod h1:2g5HI42KHw+BDBdjLP3zs+WvTHlDK3RoE8crjCl26y4=
github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok=
github.com/hanwen/go-fuse/v2 v2.0.2/go.mod h1:HH3ygZOoyRbP9y2q7y3+JM6hPL+Epe29IbWaS0UA81o=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
github.com/keybase/go-keychain v0.0.0-20190828153431-2390ae572545/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc=
github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.8.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/compress v1.8.6/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/oq-x/unsafe2 v0.0.0-20240901191313-2b7bec1d9e3b h1:ffDVPOtSkPRHwJxp34oBUxgxR8H4arPUSzQMwT3fZi8=
github.com/oq-x/unsafe2 v0.0.0-20240901191313-2b7bec1d9e3b/go.mod h1:x0z103mg/p7DX2tk7+9ubWfXbh+ynkAtwRlEOVEbIkk=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v2.19.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/vanadium/go-mdns-sd v0.0.0-20181006014439-f1a1ccd1252e/go.mod h1:35fXDjvKtzyf89fHHhyTTNLHaG2CkI7u/GvO59PIjP4=
github.com/vitessio/vitess v2.1.1+incompatible/go.mod h1:A11WWLimUfZAYYm8P1I63RryRPP2GdpHRgQcfa++OnQ=
github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
github.com/yasushi-saito/zlibng v0.0.0-20190905015749-ec536402779e/go.mod h1:qD8maXXiM82RPOfKUGWetL74si8WnsRS7LNPDWK7byI=
github.com/yasushi-saito/zlibng v0.0.0-20190922135643-2a860060b80c/go.mod h1:fmRgeAuoXV70NcmjNe3PyhylzfGSgyLv9nZaW/I/C7Q=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190902003836-43865b531bee/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/api v0.0.0-20181213150558-05914d821849/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=
k8s.io/apimachinery v0.0.0-20181127025237-2b1284ed4c93/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=
k8s.io/client-go v10.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
v.io v0.1.5/go.mod h1:Apu/AQfn7lq+o3m+ReLtlrKxkZTTo2p6mLXlioAUWA0=
v.io v0.1.15/go.mod h1:Ort0a9YYK5eDJZ1Bc5m5hroWkygXzkifJzmlRpaGbWk=
v.io/x/lib v0.1.4/go.mod h1:maU79RWqiiC9ARbvS+2Q8tqZUnQiHxeJDriXcW7cYg8=
v.io/x/lib v0.1.6/go.mod h1:aLm+mPXyXf4Vd/n+1f4LcSQFFgqNhNzwQvHYfXoOLlE=
v.io/x/lib v0.1.7/go.mod h1:aLm+mPXyXf4Vd/n+1f4LcSQFFgqNhNzwQvHYfXoOLlE=
v.io/x/ref/internal/logger v0.1.1/go.mod h1:00nuJdZEVCzMOn9y474jZ+e6B9R/ydLW7d6IQFl/NHU=
v.io/x/ref/lib/flags/sitedefaults v0.1.1/go.mod h1:ew4Igo60KMBDYhnxH6l7P+qBCJiqR8PVp7fJJYGqILA=
================================================
FILE: main.go
================================================
package main
import (
_ "embed"
"github.com/zeppelinmc/zeppelin/properties"
"math/rand"
"os"
"runtime"
"runtime/debug"
"runtime/pprof"
"slices"
"strconv"
"time"
"github.com/zeppelinmc/zeppelin/commands"
"github.com/zeppelinmc/zeppelin/server"
"github.com/zeppelinmc/zeppelin/server/command"
"github.com/zeppelinmc/zeppelin/server/world"
"github.com/zeppelinmc/zeppelin/util"
"github.com/zeppelinmc/zeppelin/util/console"
"github.com/zeppelinmc/zeppelin/util/log"
"golang.org/x/term"
)
var timeStart = time.Now()
func main() {
log.Infolnf("Zeppelin 1.21 Minecraft server with %s on platform %s-%s", runtime.Version(), runtime.GOOS, runtime.GOARCH)
max, ok := console.GetFlag("xmem")
if ok {
m, err := util.ParseSizeUnit(max)
if err == nil {
debug.SetMemoryLimit(int64(m))
log.Infolnf("Memory usage is limited to %s", util.FormatSizeUnit(m))
}
}
if slices.Index(os.Args, "--cpuprof") != -1 {
if f, err := os.Create("zeppelin-cpu-profile"); err == nil {
pprof.StartCPUProfile(f)
log.Infoln("Started CPU profiler (writing to zeppelin-cpu-profile)")
defer func() {
log.Infoln("Stopped CPU profiler")
pprof.StopCPUProfile()
f.Close()
}()
}
}
if slices.Index(os.Args, "--memprof") != -1 {
defer func() {
log.InfolnClean("Writing memory profile to zeppelin-mem-profile")
f, _ := os.Create("zeppelin-mem-profile")
pprof.Lookup("allocs").WriteTo(f, 0)
f.Close()
}()
}
cfg := loadConfig()
if cfg.LevelSeed == "" {
cfg.LevelSeed = strconv.FormatInt(rand.Int63(), 10)
}
w, err := world.NewWorld(cfg)
if err != nil {
log.Errorlnf("Error preparing level: %v", w)
return
}
log.Infof("Binding server to %s:%d\n", cfg.ServerIp, cfg.ServerPort)
rawTerminal := slices.Index(os.Args, "--no-raw-terminal") == -1
srv, err := server.New(cfg, w)
if err != nil {
log.Errorln("Error binding server:", err)
return
}
srv.CommandManager = command.NewManager(srv, commands.Commands...)
if rawTerminal {
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
panic(err)
}
go console.StartRawConsole(srv)
defer term.Restore(int(os.Stdin.Fd()), oldState)
} else {
go console.StartConsole(srv)
}
srv.Start(timeStart)
}
func loadConfig() properties.ServerProperties {
file, err := os.ReadFile("server.properties")
if err != nil {
file, err := os.Create("server.properties")
if err == nil {
properties.Marshal(file, properties.Default)
file.Close()
}
return properties.Default
}
var cfg properties.ServerProperties
err = properties.Unmarshal(string(file), &cfg)
if err != nil {
cfg = properties.Default
}
return cfg
}
================================================
FILE: properties/decode.go
================================================
// Package properties provides parsing of .properties files
package properties
import (
"fmt"
"reflect"
"strconv"
"strings"
)
// Unmarshal decodes the properties file
func Unmarshal(src string, dst any) error {
properties := strings.Split(src, "\n")
val := reflect.ValueOf(dst)
switch val.Kind() {
case reflect.Pointer:
val = val.Elem()
switch val.Kind() {
case reflect.Struct:
return unmarshalStruct(properties, structMap(val))
default:
return fmt.Errorf("Unmarshal excepts a pointer of a struct or map, not %s", val.Kind())
}
default:
return fmt.Errorf("Unmarshal excepts a pointer of a struct or map, not %s", val.Kind())
}
}
func unmarshalStruct(props []string, v map[string]reflect.Value) error {
for _, line := range props {
if len(line) == 0 {
continue //comment
}
if line[0] == '#' {
continue //comment
}
if line[0] == '!' {
continue //comment
}
var key, value string
for i, char := range line {
if char == '=' || char == ':' || char == ' ' {
key = line[:i]
if i != len(line)-2 {
value = line[i+1:]
}
break
}
}
if value == "" {
continue
}
value = strings.TrimSpace(value)
value = strings.ReplaceAll(value, "\\n", "\n")
value = strings.ReplaceAll(value, "\\r", "\r")
value = strings.ReplaceAll(value, "\\t", "\t")
field, ok := v[key]
if !ok {
continue
}
switch field.Kind() {
case reflect.String:
field.SetString(value)
case reflect.Bool:
switch value {
case "true":
field.SetBool(true)
case "false":
field.SetBool(false)
default:
return fmt.Errorf("unsupported value %s for type boolean", value)
}
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
i, err := strconv.ParseInt(value, 10, field.Type().Bits())
if err != nil {
return fmt.Errorf("unsupported value %s for type integer: %v", value, err)
}
field.SetInt(i)
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
i, err := strconv.ParseUint(value, 10, field.Type().Bits())
if err != nil {
return fmt.Errorf("unsupported value %s for type integer: %v", value, err)
}
field.SetUint(i)
}
}
return nil
}
func structMap(val reflect.Value) map[string]reflect.Value {
var sm = make(map[string]reflect.Value, val.NumField())
vt := val.Type()
for i := 0; i < val.NumField(); i++ {
ft := vt.Field(i)
fv := val.Field(i)
if !ft.IsExported() {
continue
}
name := ft.Name
propName, ok := ft.Tag.Lookup("properties")
if ok {
if propName == "-" {
continue
}
name = propName
if i := strings.Index(name, ",omitempty"); i != -1 {
name = name[:i]
}
}
if name == "" {
name = ft.Name
}
sm[name] = fv
}
return sm
}
================================================
FILE: properties/encode.go
================================================
package properties
import (
"fmt"
"io"
"reflect"
"strings"
"unsafe"
)
// Marshal encodes the properties file
func Marshal(dst io.Writer, p any) error {
val := reflect.ValueOf(p)
switch val.Kind() {
case reflect.Struct:
return encodePropsStruct(dst, val)
default:
return fmt.Errorf("Marshal excepts a struct or map, not %s", val.Kind())
}
}
func encodePropsStruct(dst io.Writer, v reflect.Value) error {
vt := v.Type()
for i := 0; i < v.NumField(); i++ {
tf := vt.Field(i)
vf := v.Field(i)
name, ok, omitempty := name(tf)
if !ok {
continue
}
if omitempty && vf.IsZero() {
continue
}
if i != 0 {
if err := writeString(dst, "\n"); err != nil {
return err
}
}
if err := writeString(dst, name+"="); err != nil {
return err
}
switch vf.Kind() {
case reflect.String, reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
if err := writeString(dst, fmt.Sprint(vf.Interface())); err != nil {
return err
}
default:
return fmt.Errorf("unsupported kind %s for encode struct", vf.Kind())
}
}
return nil
}
func name(tf reflect.StructField) (n string, ok bool, omitempty bool) {
if !tf.IsExported() {
return "", false, false
}
name := tf.Name
propName, ok := tf.Tag.Lookup("properties")
if !ok {
return name, true, false
}
if propName == "-" {
return name, false, false
}
name = propName
i := strings.Index(name, ",omitempty")
if i == -1 {
return name, true, false
}
name = name[:i]
if name == "" {
name = tf.Name
}
return name, true, true
}
func writeString(w io.Writer, str string) error {
_, err := w.Write(unsafe.Slice(unsafe.StringData(str), len(str)))
return err
}
================================================
FILE: properties/properties.go
================================================
// Package properties provides encoding and decoding of .properties files
package properties
type formatter string
func (f formatter) Rune() rune {
return rune(f[0])
}
type ServerProperties struct {
AcceptTransfers bool `properties:"accept-transfers"`
AllowFlight bool `properties:"allow-flight"`
AllowNether bool `properties:"allow-nether"`
BroadcastConsoleToOps bool `properties:"broadcast-console-to-ops"`
BroadcastRconToOps bool `properties:"broadcast-rcon-to-ops"`
Difficulty string `properties:"difficulty"`
EnableCommandBlock bool `properties:"enable-command-block"`
EnableRCON bool `properties:"enable-rcon"`
EnableStatus bool `properties:"enable-status"`
EnableQuery bool `properties:"enable-query"`
EnableChat bool `properties:"enable-chat"`
EnableEncryption bool `properties:"enable-encryption"`
ChatFormatter formatter `properties:"chat-formatter"`
SystemChatFormat string `properties:"system-chat-format"`
EnforceSecureProfile bool `properties:"enforce-secure-profile"`
EnforceWhitelist bool `properties:"enforce-whitelist"`
EntityBroadcastRangePrecentage int `properties:"state-broadcast-range-precentage"`
ForceGamemode bool `properties:"force-gamemode"`
FunctionPermissionLevel int `properties:"function-permission-level"`
Gamemode string `properties:"gamemode"`
GenerateStructures bool `properties:"generate-structures"`
GeneratorSettings string `properties:"generator-settings"`
Hardcore bool `properties:"hardcore"`
HideOnlinePlayers bool `properties:"hide-online-players"`
InitialDisabledPacks string `properties:"initial-disabled-packs"`
InitialEnabledPacks string `properties:"initial-enabled-packs"`
LevelName string `properties:"level-name"`
LevelSeed string `properties:"level-seed"`
LevelType string `properties:"level-type"`
LogIPs bool `properties:"log-ips"`
MaxPlayers int `properties:"max-players"`
MOTD string `properties:"motd"`
NetworkCompressionThreshold int `properties:"network-compression-threshold"`
OnlineMode bool `properties:"online-mode"`
OpPermissionLevel int `properties:"op-permission-level"`
PlayerIdleTimeout int `properties:"player-idle-timeout"`
PreventProxyConnections bool `properties:"prevent-proxy-connections"`
PvP bool `properties:"pvp"`
QueryPort uint16 `properties:"query.port"`
RCONPassword string `properties:"rcon.password"`
RCONPort uint16 `properties:"rcon.port"`
// NOTE: unlike java edition, this accepts deflate, lz4, none AND gzip.
RegionFileCompression string `properties:"region-file-compression"`
ResourcePack string `properties:"resource-pack"`
ResourcePackId string `properties:"resource-pack-id"`
ResourcePackSha1 string `properties:"resource-pack-sha1"`
RequireResourcePack string `properties:"require-resource-pack"`
ServerIp string `properties:"server-ip"`
ServerPort uint16 `properties:"server-port"`
SimulationDistance int32 `properties:"simulation-distance"`
SpawnMonsters bool `properties:"spawn-monsters"`
SpawnProtection int `properties:"spawn-protection"`
ViewDistance int32 `properties:"view-distance"`
WhiteList bool `properties:"white-list"`
}
var Default = ServerProperties{
AllowNether: true,
BroadcastConsoleToOps: true,
BroadcastRconToOps: true,
Difficulty: "easy",
EnableStatus: true,
EnableChat: true,
ChatFormatter: "§",
EntityBroadcastRangePrecentage: 100,
FunctionPermissionLevel: 2,
Gamemode: "survival",
GenerateStructures: true,
InitialEnabledPacks: "vanilla",
LevelName: "world",
LevelType: "minecraft:normal",
LogIPs: true,
MaxPlayers: 20,
MOTD: "A Minecraft Server",
NetworkCompressionThreshold: 256,
OnlineMode: true,
OpPermissionLevel: 4,
PvP: true,
QueryPort: 25565,
RCONPort: 25575,
RegionFileCompression: "deflate",
ServerPort: 25565,
SimulationDistance: 10,
SpawnMonsters: true,
SpawnProtection: 16,
ViewDistance: 10,
}
================================================
FILE: protocol/nbt/decoder.go
================================================
package nbt
import (
"bytes"
"fmt"
"io"
"math"
"reflect"
"strings"
"sync"
"unsafe"
)
var valueMap = sync.Pool{
New: func() any {
return make(map[string]reflect.Value)
}}
func generateMap(v reflect.Value) map[string]reflect.Value {
m := valueMap.Get().(map[string]reflect.Value)
clear(m)
ty := v.Type()
for i := 0; i < v.NumField(); i++ {
ft := ty.Field(i)
if !ft.IsExported() {
continue
}
found := ft.Name
if n, ok := ft.Tag.Lookup("nbt"); ok {
found = n
}
if i := strings.Index(found, ",omitempty"); i != -1 {
found = found[:i]
}
m[found] = v.Field(i)
}
return m
}
const (
End = iota
Byte
Short
Int
Long
Float
Double
ByteArray
String
List
Compound
IntArray
LongArray
)
type Decoder struct {
rd io.Reader
dontReadRootCompoundName,
disallowUnknownFields bool
}
func NewDecoder(rd io.Reader) *Decoder {
return &Decoder{rd: rd}
}
func (d *Decoder) ReadRootName(v bool) {
d.dontReadRootCompoundName = !v
}
func (d *Decoder) DisallowUnknownFields(v bool) {
d.disallowUnknownFields = v
}
// Unmarshal is the same as making a new decoder and using it on a bytes.Reader of the input
func Unmarshal(input []byte, v any) (rootName string, err error) {
return NewDecoder(bytes.NewReader(input)).Decode(v)
}
func (d *Decoder) DecodeRootCompound(v any) (rootName string, err error) {
val := reflect.ValueOf(v)
if val.Kind() != reflect.Pointer {
return "", fmt.Errorf("Decode expects a pointer")
}
val = val.Elem()
if !d.dontReadRootCompoundName {
rootName, err = d.readString()
if err != nil {
return
}
}
switch val.Kind() {
case reflect.Struct:
m := generateMap(val)
defer func() {
clear(m)
valueMap.Put(m)
}()
if err := d.decodeCompoundStruct(m); err != nil {
return "", err
}
case reflect.Map:
if val.IsNil() {
val.Set(reflect.MakeMap(val.Type()))
}
if err := d.decodeCompoundMap(val); err != nil {
return rootName, err
}
default:
return rootName, fmt.Errorf("Decode expects a pointer of struct/map, not %s", val.Type())
}
return
}
// Decode will decode the nbt file into v and return the root name of the file
func (d *Decoder) Decode(v any) (rootName string, err error) {
val := reflect.ValueOf(v)
if val.Kind() != reflect.Pointer {
return "", fmt.Errorf("Decode expects a pointer")
}
val = val.Elem()
typeId, err := d.readByte()
if err != nil {
return "", err
}
if typeId != Compound {
return "", fmt.Errorf("expected a compound first element")
}
if !d.dontReadRootCompoundName {
rootName, err = d.readString()
if err != nil {
return
}
}
switch val.Kind() {
case reflect.Struct:
m := generateMap(val)
defer func() {
clear(m)
valueMap.Put(m)
}()
if err := d.decodeCompoundStruct(m); err != nil {
return "", err
}
case reflect.Map:
if val.IsNil() {
val.Set(reflect.MakeMap(val.Type()))
}
if err := d.decodeCompoundMap(val); err != nil {
return rootName, err
}
default:
return rootName, fmt.Errorf("Decode expects a pointer of struct/map, not %s", val.Type())
}
return
}
func (d *Decoder) decodeCompoundMap(_map reflect.Value) error {
var typeId [1]byte
for {
err := d.readTo(typeId[:])
if err != nil {
return err
}
if typeId[0] == End {
return nil
}
name, err := d.readString()
if err != nil {
return err
}
nameVal := reflect.ValueOf(name)
switch typeId[0] {
case Byte:
d, err := d.readByte()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Uint8:
_map.SetMapIndex(nameVal, reflect.ValueOf(uint8(d)))
case reflect.Int8:
case reflect.Bool:
_map.SetMapIndex(nameVal, reflect.ValueOf(*(*bool)(unsafe.Pointer(&d))))
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign byte to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case Short:
d, err := d.readShort()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Uint16:
_map.SetMapIndex(nameVal, reflect.ValueOf(uint16(d)))
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign short to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case Int:
d, err := d.readInt()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Uint32:
_map.SetMapIndex(nameVal, reflect.ValueOf(uint32(d)))
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign int to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case Long:
d, err := d.readLong()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Uint64:
_map.SetMapIndex(nameVal, reflect.ValueOf(uint64(d)))
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign long to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case String:
d, err := d.readString()
if err != nil {
return err
}
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign string to type %s for field %s", _map.Type().Elem(), name)
}
}
case Float:
d, err := d.readFloat()
if err != nil {
return err
}
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign float to type %s for field %s", _map.Type().Elem(), name)
}
}
case Double:
d, err := d.readDouble()
if err != nil {
return err
}
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign double to type %s for field %s", _map.Type().Elem(), name)
}
}
case ByteArray:
d, err := d.readByteArray()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Slice:
switch _map.Type().Elem().Elem().Kind() {
case reflect.Int8:
_map.SetMapIndex(nameVal, reflect.ValueOf(*(*[]int8)(unsafe.Pointer(&d))))
}
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign byte array to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case IntArray:
d, err := d.readIntArray()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Slice:
switch _map.Type().Elem().Elem().Kind() {
case reflect.Uint32:
_map.SetMapIndex(nameVal, reflect.ValueOf(*(*[]uint32)(unsafe.Pointer(&d))))
}
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign int array to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case LongArray:
d, err := d.readLongArray()
if err != nil {
return err
}
switch _map.Type().Elem().Kind() {
case reflect.Slice:
switch _map.Type().Elem().Elem().Kind() {
case reflect.Uint64:
_map.SetMapIndex(nameVal, reflect.ValueOf(*(*[]uint64)(unsafe.Pointer(&d))))
}
default:
if reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {
_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))
} else {
return fmt.Errorf("cannot assign long array to type %s for field %s", _map.Type().Elem(), name)
}
}
}
case List:
switch _map.Type().Elem().Kind() {
case reflect.Slice:
s := reflect.MakeSlice(_map.Type().Elem(), 0, 0)
d.decodeList(s)
_map.SetMapIndex(nameVal, s)
case reflect.Array:
s := reflect.New(_map.Type().Elem()).Elem()
d.decodeList(s)
_map.SetMapIndex(nameVal, s)
}
case Compound:
switch _map.Type().Elem().Kind() {
case reflect.Map:
s := reflect.MakeMap(_map.Type().Elem())
if err := d.decodeCompoundMap(s); err != nil {
return err
}
_map.SetMapIndex(nameVal, s)
case reflect.Struct:
z := reflect.New(_map.Type().Elem()).Elem()
m := generateMap(z)
defer func() {
clear(m)
valueMap.Put(m)
}()
if err := d.decodeCompoundStruct(m); err != nil {
return err
}
_map.SetMapIndex(nameVal, z)
case reflect.Interface:
if _map.Type().Elem().NumMethod() == 0 {
s := reflect.MakeMap(reflect.TypeOf(map[string]any{}))
if err := d.decodeCompoundMap(s); err != nil {
return err
}
_map.SetMapIndex(nameVal, s)
continue
}
fallthrough
default:
return fmt.Errorf("cannot assign compound to type %s on field %s", _map.Type().Elem(), name)
}
default:
return fmt.Errorf("unknown tag %d", typeId[0])
}
}
}
func (d *Decoder) decodeCompoundStruct(_struct map[string]reflect.Value) error {
var typeId [1]byte
for {
err := d.readTo(typeId[:])
if err != nil {
return err
}
if typeId[0] == End {
return nil
}
name, err := d.readString()
if err != nil {
return err
}
var z, valid = _struct[name]
switch typeId[0] {
case Byte:
d, err := d.readByte()
if err != nil {
return err
}
if valid {
switch z.Kind() {
case reflect.Uint8:
z.SetUint(uint64(d))
case reflect.Int8:
z.SetInt(int64(d))
case reflect.Bool:
z.SetBool(*(*bool)(unsafe.Pointer(&d)))
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign byte to type %s for field %s", z.Type(), name)
}
}
}
}
case Short:
d, err := d.readShort()
if err != nil {
return err
}
if valid {
switch z.Kind() {
case reflect.Uint16:
z.SetUint(uint64(d))
case reflect.Int16:
z.SetInt(int64(d))
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign short to type %s for field %s", z.Type(), name)
}
}
}
}
case Int:
d, err := d.readInt()
if err != nil {
return err
}
if valid {
switch z.Type().Kind() {
case reflect.Uint32, reflect.Uint:
z.SetUint(uint64(d))
case reflect.Int32, reflect.Int:
z.SetInt(int64(d))
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign int to type %s for field %s", z.Type(), name)
}
}
}
}
case Long:
d, err := d.readLong()
if err != nil {
return err
}
if valid {
switch z.Type().Kind() {
case reflect.Uint64:
z.SetUint(uint64(d))
case reflect.Int64:
z.SetInt(d)
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign long to type %s for field %s", z.Type(), name)
}
}
}
}
case String:
d, err := d.readString()
if err != nil {
return err
}
if valid {
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign string to type %s for field %s", z.Type(), name)
}
}
}
case Float:
d, err := d.readFloat()
if err != nil {
return err
}
if valid {
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type().Elem()))
} else {
return fmt.Errorf("cannot assign float to type %s for field %s", z.Type(), name)
}
}
}
case Double:
d, err := d.readDouble()
if err != nil {
return err
}
if valid {
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign double to type %s for field %s", z.Type(), name)
}
}
}
case ByteArray:
d, err := d.readByteArray()
if err != nil {
return err
}
if valid {
switch z.Type().Kind() {
case reflect.Slice:
switch z.Type().Elem().Kind() {
case reflect.Int8:
z.Set(reflect.ValueOf(*(*[]int8)(unsafe.Pointer(&d))))
case reflect.Uint8:
z.Set(reflect.ValueOf(d))
}
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign byte array to type %s for field %s", z.Type(), name)
}
}
}
}
case IntArray:
d, err := d.readIntArray()
if err != nil {
return err
}
if valid {
switch z.Type().Kind() {
case reflect.Slice:
switch z.Type().Elem().Kind() {
case reflect.Uint32:
z.Set(reflect.ValueOf(*(*[]uint32)(unsafe.Pointer(&d))))
case reflect.Int32:
z.Set(reflect.ValueOf(d))
}
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign int array to type %s for field %s", z.Type(), name)
}
}
}
}
case LongArray:
d, err := d.readLongArray()
if err != nil {
return err
}
if valid {
switch z.Type().Kind() {
case reflect.Slice:
switch z.Type().Elem().Kind() {
case reflect.Uint64:
z.Set(reflect.ValueOf(*(*[]uint64)(unsafe.Pointer(&d))))
case reflect.Int64:
z.Set(reflect.ValueOf(d))
}
default:
if reflect.TypeOf(d).AssignableTo(z.Type()) {
z.Set(reflect.ValueOf(d))
} else {
if reflect.TypeOf(d).ConvertibleTo(z.Type()) {
z.Set(reflect.ValueOf(d).Convert(z.Type()))
} else {
return fmt.Errorf("cannot assign long array to type %s for field %s", z.Type(), name)
}
}
}
}
case List:
if valid {
switch z.Type().Kind() {
case reflect.Slice:
d.decodeList(z)
case reflect.Array:
s := reflect.New(z.Type()).Elem()
d.decodeList(s)
z.Set(s)
}
} else {
d._decodeList()
}
case Compound:
if valid {
switch z.Type().Kind() {
case reflect.Struct:
m := generateMap(_struct[name])
defer valueMap.Put(m)
if err := d.decodeCompoundStruct(m); err != nil {
return err
}
case reflect.Interface:
if z.Type().NumMethod() == 0 {
s := reflect.MakeMap(reflect.TypeOf(map[string]any{}))
if err := d.decodeCompoundMap(s); err != nil {
return err
}
z.Set(s)
continue
}
fallthrough
case reflect.Map:
s := reflect.MakeMap(z.Type())
if err := d.decodeCompoundMap(s); err != nil {
return err
}
z.Set(s)
default:
return fmt.Errorf("cannot assign compound to type %s on field %s", z.Type(), name)
}
} else {
d.decodeCompound()
}
default:
return fmt.Errorf("unknown tag %d", typeId[0])
}
}
}
// TODO add byte, int, long array IMPORTANT!
func (d *Decoder) decodeList(list reflect.Value) error {
typeId, err := d.readByte()
if err != nil {
return err
}
length, err := d.readInt()
if err != nil {
return err
}
if list.Len() < int(length) {
switch list.Kind() {
case reflect.Slice:
list.Set(reflect.MakeSlice(list.Type(), int(length), int(length)))
case reflect.Array:
return fmt.Errorf("list of size %d is too big for array %s", length, list.Type())
}
}
for i := 0; i < int(length); i++ {
switch typeId {
case Byte:
d, err := d.readByte()
if err != nil {
return err
}
switch list.Type().Elem().Kind() {
case reflect.Uint8:
list.Index(i).Set(reflect.ValueOf(uint8(d)))
default:
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign byte to type %s for index %d", list.Type().Elem(), i)
}
}
case Short:
d, err := d.readShort()
if err != nil {
return err
}
switch list.Type().Elem().Kind() {
case reflect.Uint16:
list.Index(i).Set(reflect.ValueOf(uint16(d)))
default:
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign short to type %s for index %d", list.Type().Elem(), i)
}
}
case Int:
d, err := d.readInt()
if err != nil {
return err
}
switch list.Type().Elem().Kind() {
case reflect.Uint32:
list.Index(i).Set(reflect.ValueOf(uint32(d)))
default:
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign int to type %s for index %d", list.Type().Elem(), i)
}
}
case Long:
d, err := d.readLong()
if err != nil {
return err
}
switch list.Type().Elem().Kind() {
case reflect.Uint64:
list.Index(i).Set(reflect.ValueOf(uint64(d)))
default:
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign long to type %s for index %d", list.Type().Elem(), i)
}
}
case Float:
d, err := d.readFloat()
if err != nil {
return err
}
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign float to type %s for index %d", list.Type().Elem(), i)
}
case Double:
d, err := d.readDouble()
if err != nil {
return err
}
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign double to type %s for index %d", list.Type().Elem(), i)
}
case String:
d, err := d.readString()
if err != nil {
return err
}
if reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {
list.Index(i).Set(reflect.ValueOf(d))
} else {
return fmt.Errorf("cannot assign string to type %s for index %d", list.Type().Elem(), i)
}
case Compound:
switch list.Type().Elem().Kind() {
case reflect.Struct:
m := generateMap(list.Index(i))
defer valueMap.Put(m)
if err := d.decodeCompoundStruct(m); err != nil {
return err
}
case reflect.Map:
list.Index(i).Set(reflect.MakeMap(list.Type().Elem()))
if err := d.decodeCompoundMap(list.Index(i)); err != nil {
return err
}
default:
return fmt.Errorf("cannot assign compound to type %s on index %d", list.Type().Elem(), i)
}
case List:
switch list.Type().Elem().Kind() {
case reflect.Slice:
list.Index(i).Set(reflect.MakeSlice(list.Type().Elem(), 0, 0))
fallthrough
case reflect.Array:
if err := d.decodeList(list.Index(i)); err != nil {
return err
}
default:
return fmt.Errorf("cannot assign list to type %s on index %d", list.Type().Elem(), i)
}
default:
return fmt.Errorf("unknown tag %d", typeId)
}
}
return nil
}
func (d *Decoder) decodeCompound() error {
for {
typeId, err := d.readByte()
if err != nil {
return err
}
if typeId == End {
return nil
}
_, err = d.readString()
if err != nil {
return err
}
switch typeId {
case Byte:
_, err := d.readByte()
if err != nil {
return err
}
case Short:
_, err := d.readShort()
if err != nil {
return err
}
case Int:
_, err := d.readInt()
if err != nil {
return err
}
case Long:
_, err := d.readLong()
if err != nil {
return err
}
case Float:
_, err := d.readFloat()
if err != nil {
return err
}
case Double:
_, err := d.readDouble()
if err != nil {
return err
}
case ByteArray:
_, err := d.readByteArray()
if err != nil {
return err
}
case IntArray:
_, err := d.readIntArray()
if err != nil {
return err
}
case LongArray:
_, err := d.readLongArray()
if err != nil {
return err
}
case String:
_, err := d.readString()
if err != nil {
return err
}
case Compound:
if err := d.decodeCompound(); err != nil {
return err
}
case List:
if err := d._decodeList(); err != nil {
return err
}
}
}
}
func (d *Decoder) _decodeList() error {
typeId, err := d.readByte()
if err != nil {
return err
}
length, err := d.readInt()
if err != nil {
return err
}
for i := 0; i < int(length); i++ {
switch typeId {
case Byte:
if _, err := d.readByte(); err != nil {
return err
}
case Short:
if _, err := d.readShort(); err != nil {
return err
}
case Int:
if _, err := d.readInt(); err != nil {
return err
}
case Long:
if _, err := d.readLong(); err != nil {
return err
}
case Float:
if _, err := d.readFloat(); err != nil {
return err
}
case Double:
if _, err := d.readDouble(); err != nil {
return err
}
case String:
if _, err := d.readString(); err != nil {
return err
}
case List:
if err := d._decodeList(); err != nil {
return err
}
case Compound:
if err := d.decodeCompound(); err != nil {
return err
}
case ByteArray:
if _, err := d.readByteArray(); err != nil {
return err
}
case IntArray:
if _, err := d.readIntArray(); err != nil {
return err
}
case LongArray:
if _, err := d.readLongArray(); err != nil {
return err
}
}
}
return nil
}
func (d *Decoder) readByte() (int8, error) {
var data [1]byte
_, err := d.rd.Read(data[:])
return int8(data[0]), err
}
func (d *Decoder) readTo(t []byte) error {
_, err := d.rd.Read(t)
return err
}
func (d *Decoder) readShort() (int16, error) {
var data [2]byte
_, err := d.rd.Read(data[:])
return int16(data[0])<<8 | int16(data[1]), err
}
func (d *Decoder) readInt() (int32, error) {
var data [4]byte
_, err := d.rd.Read(data[:])
return int32(data[0])<<24 | int32(data[1])<<16 | int32(data[2])<<8 | int32(data[3]), err
}
func (d *Decoder) readLong() (int64, error) {
var data [8]byte
_, err := d.rd.Read(data[:])
return int64(data[0])<<56 | int64(data[1])<<48 | int64(data[2])<<40 | int64(data[3])<<32 | int64(data[4])<<24 | int64(data[5])<<16 | int64(data[6])<<8 | int64(data[7]), err
}
func (d *Decoder) readFloat() (float32, error) {
i, err := d.readInt()
return math.Float32frombits(uint32(i)), err
}
func (d *Decoder) readDouble() (float64, error) {
i, err := d.readLong()
return math.Float64frombits(uint64(i)), err
}
func (d *Decoder) readString() (string, error) {
l, err := d.readShort()
if err != nil {
return "", err
}
if l < 0 {
return "", fmt.Errorf("negative length for make (read string)")
}
var data = make([]byte, l)
_, err = d.rd.Read(data)
return string(data), err
}
func (d *Decoder) readByteArray() ([]byte, error) {
l, err := d.readInt()
if err != nil {
return nil, err
}
if l < 0 {
return nil, fmt.Errorf("negative length for make (read byte array)")
}
var data = make([]byte, l)
_, err = d.rd.Read(data)
return data, err
}
func (d *Decoder) readIntArray() ([]int32, error) {
l, err := d.readInt()
if err != nil {
return nil, err
}
if l < 0 {
return nil, fmt.Errorf("negative length for make (read int array)")
}
var data = make([]byte, l*4)
_, err = d.rd.Read(data)
if err != nil {
return nil, err
}
var sl = make([]int32, l)
for i := range sl {
sl[i] = int32(data[i*4+0])<<24 | int32(data[i*4+1])<<16 | int32(data[i*4+2])<<8 | int32(data[i*4+3])
}
return sl, nil
}
func (d *Decoder) readLongArray() ([]int64, error) {
l, err := d.readInt()
if err != nil {
return nil, err
}
if l < 0 {
return nil, fmt.Errorf("negative length for make (read long array)")
}
var data = make([]byte, l*8)
_, err = d.rd.Read(data)
if err != nil {
return nil, err
}
var sl = make([]int64, l)
for i := range sl {
sl[i] = int64(data[i*8+0])<<56 | int64(data[i*8+1])<<48 | int64(data[i*8+2])<<40 | int64(data[i*8+3])<<32 | int64(data[i*8+4])<<24 | int64(data[i*8+5])<<16 | int64(data[i*8+6])<<8 | int64(data[i*8+7])
}
return sl, nil
}
================================================
FILE: protocol/nbt/encoder.go
================================================
package nbt
import (
"encoding/binary"
"fmt"
"io"
"math"
"reflect"
"strings"
"unsafe"
)
type Encoder struct {
w io.Writer
dontWriteRootCompoundName bool
}
func NewEncoder(w io.Writer) *Encoder {
return &Encoder{w: w}
}
func (e *Encoder) Encode(name string, v any) error {
if err := e.writeByte(Compound); err != nil {
return err
}
if !e.dontWriteRootCompoundName {
if err := e.writeString(name); err != nil {
return err
}
}
val := reflect.ValueOf(v)
switch val.Kind() {
case reflect.Struct:
return e.encodeCompoundStruct(val)
case reflect.Map:
return e.encodeCompoundMap(val)
default:
return fmt.Errorf("Encode expects map/struct, not %s", val.Type())
}
}
func (e *Encoder) WriteRootName(val bool) {
e.dontWriteRootCompoundName = !val
}
func (e *Encoder) writeBytes(b ...byte) error {
_, err := e.w.Write(b)
return err
}
func (e *Encoder) writeByte(b int8) error {
return e.writeBytes(byte(b))
}
func (e *Encoder) writeShort(s int16) error {
return e.writeBytes(
byte(s>>8),
byte(s),
)
}
func (e *Encoder) writeInt(i int32) error {
return e.writeBytes(
byte(i>>24),
byte(i>>16),
byte(i>>8),
byte(i),
)
}
func (e *Encoder) writeLong(l int64) error {
return e.writeBytes(
byte(l>>56),
byte(l>>48),
byte(l>>40),
byte(l>>32),
byte(l>>24),
byte(l>>16),
byte(l>>8),
byte(l),
)
}
func (e *Encoder) writeFloat(f float32) error {
return e.writeInt(int32(math.Float32bits(f)))
}
func (e *Encoder) writeDouble(d float64) error {
return e.writeLong(int64(math.Float64bits(d)))
}
func (e *Encoder) writeIntArray(il []int32) error {
if err := e.writeInt(int32(len(il))); err != nil {
return err
}
return binary.Write(e.w, binary.BigEndian, il)
}
func (e *Encoder) writeLongArray(ll []int64) error {
if err := e.writeInt(int32(len(ll))); err != nil {
return err
}
return binary.Write(e.w, binary.BigEndian, ll)
}
func (e *Encoder) writeString(s string) error {
if err := e.writeShort(int16(len(s))); err != nil {
return err
}
return e.writeBytes([]byte(s)...)
}
func (e *Encoder) encodeCompoundStruct(val reflect.Value) error {
for i := 0; i < val.NumField(); i++ {
tf := val.Type().Field(i)
f := val.Field(i)
if !tf.IsExported() {
continue
}
name := tf.Name
if v, ok := tf.Tag.Lookup("nbt"); ok {
name = v
}
if name == "-" {
continue
}
var omitempty bool
i := strings.Index(name, ",omitempty")
if i != -1 {
name = name[:i]
omitempty = true
}
if omitempty && f.IsZero() {
continue
}
if f.Kind() == reflect.Interface {
f = f.Elem()
}
switch f.Kind() {
case reflect.Bool:
if err := e.writeByte(Byte); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
b := f.Bool()
if err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {
return err
}
case reflect.Int8, reflect.Uint8:
if err := e.writeByte(Byte); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeByte(int8(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeByte(int8(f.Int())); err != nil {
return err
}
}
case reflect.Int16, reflect.Uint16:
if err := e.writeByte(Short); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeShort(int16(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeShort(int16(f.Int())); err != nil {
return err
}
}
case reflect.Int32, reflect.Uint32:
if err := e.writeByte(Int); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeInt(int32(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeInt(int32(f.Int())); err != nil {
return err
}
}
case reflect.Int64, reflect.Uint64:
if err := e.writeByte(Long); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeLong(int64(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeLong(int64(f.Int())); err != nil {
return err
}
}
case reflect.Float32:
if err := e.writeByte(Float); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeFloat(float32(f.Float())); err != nil {
return err
}
case reflect.Float64:
if err := e.writeByte(Double); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeDouble(f.Float()); err != nil {
return err
}
case reflect.String:
if err := e.writeByte(String); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeString(f.String()); err != nil {
return err
}
case reflect.Slice, reflect.Array:
switch f.Type().Elem().Kind() {
case reflect.Uint8, reflect.Int8:
if err := e.writeByte(ByteArray); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeInt(int32(f.Len())); err != nil {
return err
}
for i := 0; i < f.Len(); i++ {
val := f.Index(i)
switch val.Kind() {
case reflect.Int8:
if err := e.writeByte(int8(val.Int())); err != nil {
return err
}
case reflect.Uint8:
if err := e.writeByte(int8(val.Uint())); err != nil {
return err
}
}
}
case reflect.Uint32, reflect.Int32:
if err := e.writeByte(IntArray); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeInt(int32(f.Len())); err != nil {
return err
}
for i := 0; i < f.Len(); i++ {
fi := f.Index(i)
if f.CanUint() {
if err := e.writeInt(int32(fi.Uint())); err != nil {
return err
}
} else {
if err := e.writeInt(int32(fi.Int())); err != nil {
return err
}
}
}
case reflect.Uint64, reflect.Int64:
if err := e.writeByte(LongArray); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeInt(int32(f.Len())); err != nil {
return err
}
for i := 0; i < f.Len(); i++ {
x := f.Index(i)
if x.CanUint() {
if err := e.writeLong(int64(x.Uint())); err != nil {
return err
}
} else {
if err := e.writeLong(x.Int()); err != nil {
return err
}
}
}
default:
if err := e.writeByte(List); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.encodeList(f); err != nil {
return err
}
}
case reflect.Struct:
if err := e.writeByte(Compound); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.encodeCompoundStruct(f); err != nil {
return err
}
case reflect.Map:
if err := e.writeByte(Compound); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.encodeCompoundMap(f); err != nil {
return err
}
}
}
return e.writeByte(0)
}
func (e *Encoder) encodeCompoundMap(val reflect.Value) error {
for _, key := range val.MapKeys() {
f := val.MapIndex(key)
name := key.String()
switch f.Kind() {
case reflect.Bool:
if err := e.writeByte(Byte); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
b := f.Bool()
if err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {
return err
}
case reflect.Int8, reflect.Uint8:
if err := e.writeByte(Byte); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeByte(int8(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeByte(int8(f.Int())); err != nil {
return err
}
}
case reflect.Int16, reflect.Uint16:
if err := e.writeByte(Short); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeShort(int16(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeShort(int16(f.Int())); err != nil {
return err
}
}
case reflect.Int32, reflect.Uint32:
if err := e.writeByte(Int); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeInt(int32(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeInt(int32(f.Int())); err != nil {
return err
}
}
case reflect.Int64, reflect.Uint64:
if err := e.writeByte(Long); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if f.CanUint() {
if err := e.writeLong(int64(f.Uint())); err != nil {
return err
}
} else {
if err := e.writeLong(int64(f.Int())); err != nil {
return err
}
}
case reflect.Float32:
if err := e.writeByte(Float); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeFloat(float32(f.Float())); err != nil {
return err
}
case reflect.Float64:
if err := e.writeByte(Double); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeDouble(f.Float()); err != nil {
return err
}
case reflect.String:
if err := e.writeByte(String); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeString(f.String()); err != nil {
return err
}
case reflect.Slice, reflect.Array:
switch f.Type().Elem().Kind() {
case reflect.Uint8, reflect.Int8:
if err := e.writeByte(ByteArray); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeInt(int32(f.Len())); err != nil {
return err
}
for i := 0; i < f.Len(); i++ {
val := f.Index(i)
switch val.Kind() {
case reflect.Int8:
if err := e.writeByte(int8(val.Int())); err != nil {
return err
}
case reflect.Uint8:
if err := e.writeByte(int8(val.Uint())); err != nil {
return err
}
}
}
case reflect.Uint32, reflect.Int32:
if err := e.writeByte(IntArray); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeIntArray(*(*[]int32)(f.UnsafePointer())); err != nil {
return err
}
case reflect.Uint64, reflect.Int64:
if err := e.writeByte(LongArray); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.writeLongArray(*(*[]int64)(f.UnsafePointer())); err != nil {
return err
}
default:
if err := e.writeByte(List); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.encodeList(f); err != nil {
return err
}
}
case reflect.Struct:
if err := e.writeByte(Compound); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.encodeCompoundStruct(f); err != nil {
return err
}
case reflect.Map:
if err := e.writeByte(Compound); err != nil {
return err
}
if err := e.writeString(name); err != nil {
return err
}
if err := e.encodeCompoundMap(f); err != nil {
return err
}
}
}
return e.writeByte(0)
}
func (e *Encoder) encodeList(val reflect.Value) error {
if err := e.writeByte(e.tagFor(val.Type().Elem())); err != nil {
return err
}
if err := e.writeInt(int32(val.Len())); err != nil {
return err
}
for i := 0; i < val.Len(); i++ {
f := val.Index(i)
switch val.Type().Elem().Kind() {
case reflect.Bool:
b := f.Bool()
if err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {
return err
}
case reflect.Int8:
if err := e.writeByte(int8(f.Int())); err != nil {
return err
}
case reflect.Uint8:
if err := e.writeByte(int8(f.Uint())); err != nil {
return err
}
case reflect.Int16:
if err := e.writeShort(int16(f.Int())); err != nil {
return err
}
case reflect.Uint16:
if err := e.writeShort(int16(f.Uint())); err != nil {
return err
}
case reflect.Int32:
if err := e.writeInt(int32(f.Int())); err != nil {
return err
}
case reflect.Uint32:
if err := e.writeInt(int32(f.Uint())); err != nil {
return err
}
case reflect.Int64:
if err := e.writeLong(f.Int()); err != nil {
return err
}
case reflect.Uint64:
if err := e.writeLong(int64(f.Uint())); err != nil {
return err
}
case reflect.String:
if err := e.writeString(f.String()); err != nil {
return err
}
case reflect.Slice, reflect.Array:
switch f.Type().Elem().Kind() {
case reflect.Uint8, reflect.Int8:
if err := e.writeInt(int32(f.Len())); err != nil {
return err
}
for i := 0; i < f.Len(); i++ {
val := f.Index(i)
switch val.Kind() {
case reflect.Int8:
if err := e.writeByte(int8(val.Int())); err != nil {
return err
}
case reflect.Uint8:
if err := e.writeByte(int8(val.Uint())); err != nil {
return err
}
}
}
case reflect.Uint32, reflect.Int32:
if err := e.writeIntArray(*(*[]int32)(f.UnsafePointer())); err != nil {
return err
}
case reflect.Uint64, reflect.Int64:
if err := e.writeInt(int32(f.Len())); err != nil {
return err
}
for i := 0; i < f.Len(); i++ {
x := f.Index(i)
if x.CanUint() {
if err := e.writeLong(int64(x.Uint())); err != nil {
return err
}
} else {
if err := e.writeLong(x.Int()); err != nil {
return err
}
}
}
default:
if err := e.encodeList(f); err != nil {
return err
}
}
case reflect.Float32:
if err := e.writeFloat(float32(f.Float())); err != nil {
return err
}
case reflect.Float64:
if err := e.writeDouble(f.Float()); err != nil {
return err
}
case reflect.Struct:
if err := e.encodeCompoundStruct(f); err != nil {
return err
}
case reflect.Map:
if err := e.encodeCompoundMap(f); err != nil {
return err
}
}
}
return nil
}
func (e *Encoder) tagFor(typ reflect.Type) int8 {
switch typ.Kind() {
case reflect.Uint8, reflect.Int8, reflect.Bool:
return Byte
case reflect.Uint16, reflect.Int16:
return Short
case reflect.Uint32, reflect.Int32:
return Int
case reflect.Uint64, reflect.Int64:
return Long
case reflect.Float32:
return Float
case reflect.Float64:
return Double
case reflect.Struct, reflect.Map:
return Compound
case reflect.String:
return String
case reflect.Slice, reflect.Array:
{
switch typ.Elem().Kind() {
case reflect.Uint8, reflect.Int8:
return ByteArray
case reflect.Uint32, reflect.Int32:
return IntArray
case reflect.Uint64, reflect.Int64:
return LongArray
default:
return List
}
}
default:
return 0
}
}
================================================
FILE: protocol/nbt/qnbt/abi.go
================================================
package qnbt
import (
"unsafe"
"github.com/oq-x/unsafe2"
)
type name struct {
Bytes *byte
}
func (n name) exported() bool {
return (*n.Bytes)&(1<<0) != 0
}
func (n name) hastag() bool {
return (*n.Bytes)&(1<<1) != 0
}
func (n name) embedded() bool {
return (*n.Bytes)&(1<<3) != 0
}
func (n name) rvi(off int) (int, int) {
v := 0
for i := 0; ; i++ {
x := *n.data(off + i)
v += int(x&0x7f) << (7 * i)
if x&0x80 == 0 {
return i + 1, v
}
}
}
func (n name) data(off int) *byte {
return (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(n.Bytes)) + uintptr(off)))
}
func (n name) name() string {
i, l := n.rvi(1)
return unsafe.String(n.data(i+1), l)
}
func (n name) tag() string {
if !n.hastag() {
return ""
}
i, l := n.rvi(1)
i2, l2 := n.rvi(1 + i + l)
return unsafe.String(n.data(1+i+l+i2), l2)
}
type structField struct {
name name
typ *unsafe2.Type
off uintptr
}
type structType struct {
unsafe2.Type
pkgPath name
fields []structField
}
type ptrType struct {
unsafe2.Type
elem *unsafe2.Type
}
type arrayType struct {
unsafe2.Type
elem *unsafe2.Type
slice *unsafe2.Type
len uintptr
}
type mapType struct {
unsafe2.Type
key *unsafe2.Type
elem *unsafe2.Type
// rest is unimportant
}
// returns the element of a pointer
func ptrelem(t *unsafe2.Type, v uintptr) (*unsafe2.Type, unsafe.Pointer) {
ptr_t := *(*ptrType)(unsafe.Pointer(t))
elem_t := ptr_t.elem
return elem_t, unsafe.Pointer(v)
}
func kindOf(t *unsafe2.Type) uint8 {
return t.Kind & kindm
}
const (
kindm = (1 << 5) - 1
)
func kind_name(k uint8) string {
switch k {
case bool_k:
return "bool"
case int_k:
return "int"
case int8_k:
return "int8"
case int16_k:
return "int16"
case int32_k:
return "int32"
case int64_k:
return "int64"
case uint_k:
return "uint"
case uint8_k:
return "uint8"
case uint16_k:
return "uint16"
case uint32_k:
return "uint32"
case uint64_k:
return "uint64"
case uintptr_k:
return "uintptr"
case float32_k:
return "float32"
case float64_k:
return "float64"
case complex64_k:
return "complex64"
case complex128_k:
return "complex128"
case array_k:
return "array"
case chan_k:
return "chan"
case func_k:
return "func"
case interface_k:
return "interface"
case map_k:
return "map"
case pointer_k:
return "pointer"
case slice_k:
return "slice"
case string_k:
return "string"
case struct_k:
return "struct"
case unsafe_ptr_k:
return "unsafe.Pointer"
default:
return "invalid"
}
}
const (
invalid_k uint8 = iota
bool_k
int_k
int8_k
int16_k
int32_k
int64_k
uint_k
uint8_k
uint16_k
uint32_k
uint64_k
uintptr_k
float32_k
float64_k
complex64_k
complex128_k
array_k
chan_k
func_k
interface_k
map_k
pointer_k
slice_k
string_k
struct_k
unsafe_ptr_k
)
func setSliceArray(s, a unsafe.Pointer, l int) {
*(*uintptr)(s) = uintptr(a)
*(*int)(unsafe.Add(s, ptrSize)) = l
*(*int)(unsafe.Add(s, ptrSize*2)) = l
}
var ptrSize = unsafe.Sizeof(0)
================================================
FILE: protocol/nbt/qnbt/buffer.go
================================================
package qnbt
import (
"io"
"unsafe"
)
type bufferedReader struct {
src io.Reader
buf []byte
r, w int
}
func (rd *bufferedReader) available() int {
return rd.w - rd.r
}
func (rd *bufferedReader) readBytes(num int) ([]byte, error) {
if err := rd.fill(num); err != nil {
return nil, err
}
b := rd.buf[rd.r : rd.r+num]
rd.r += num
return b, nil
}
func (rd *bufferedReader) readBytesString(num int) (string, error) {
b, err := rd.readBytes(num)
if err != nil {
return "", err
}
return unsafe.String(unsafe.SliceData(b), num), nil
}
func (rd *bufferedReader) fill(min int) error {
if rd.available() < min {
rd.r, rd.w = 0, copy(rd.buf, rd.buf[rd.r:rd.w])
for i := 0; i < 5; i++ {
n, err := rd.src.Read(rd.buf[rd.w:])
rd.w += n
if err != nil {
return err
}
min -= n
if min <= 0 || rd.w == len(rd.buf) {
return nil
}
}
return io.ErrNoProgress
}
return nil
}
func (rd *bufferedReader) skip(n int) error {
avail := rd.w - rd.r
if avail > n {
rd.r += n
return nil
}
n -= avail
rd.r += avail
rd.r, rd.w = 0, copy(rd.buf, rd.buf[rd.r:rd.w])
for n > 0 {
mx := n
if mx >= len(rd.buf) {
mx = len(rd.buf)
}
x, err := rd.src.Read(rd.buf[rd.w : rd.w+mx])
rd.w += x
rd.r += x
if err != nil {
return err
}
if rd.w == len(rd.buf) {
rd.r, rd.w = 0, 0
}
n -= x
}
return nil
}
================================================
FILE: protocol/nbt/qnbt/decode.go
================================================
// deprecated: :(
package qnbt
import (
"errors"
"fmt"
"io"
"sync"
"unsafe"
"github.com/oq-x/unsafe2"
)
type MismatchError struct {
// name of the field trying to decode
name string
// the type kind expected
expectedKind string
// the type kind got
gotKind string
// the tag got
tag string
}
func (m MismatchError) Error() string {
return fmt.Sprintf("MismatchError: tag %s (expected %s), got %s (while decoding %s)", m.tag, m.expectedKind, m.gotKind, m.name)
}
var (
ErrExpectPointer = errors.New("expected a pointer for dst")
ErrUnsupported = errors.New("unsupported type")
ErrUnknownTag = errors.New("unknown tag")
)
var decoders = sync.Pool{
New: func() any {
return new(Decoder)
},
}
var readers = sync.Pool{
New: func() any {
r := new(bufferedReader)
r.buf = make([]byte, 1024)
return r
},
}
type Decoder struct {
// if disallowUnknownKeys is enabled, the decoder will return an error if it reads a name not in the struct
disallowUnknownKeys bool
// if networkNBT is enabled, the name for the root compound will not be read
networkNBT bool
rd *bufferedReader
}
// Close closes the decoder for further use and puts it back in the decoder pool
func (d *Decoder) Close() {
readers.Put(d.rd)
d.rd = nil
decoders.Put(d)
}
func NewDecoder(rd io.Reader) *Decoder {
dc := decoders.Get().(*Decoder)
dc.disallowUnknownKeys, dc.networkNBT = false, false
dc.rd = &bufferedReader{
src: rd,
buf: make([]byte, 1024),
}
dc.rd = readers.Get().(*bufferedReader)
dc.rd.buf, dc.rd.src, dc.rd.r, dc.rd.w = slicesize(dc.rd.buf, 1024), rd, 0, 0
return dc
}
func slicesize(s []byte, l int) []byte {
if l < len(s) {
return s[:l]
} else {
return make([]byte, l)
}
}
func (dc *Decoder) DisallowUnknownKeys(v bool) *Decoder {
dc.disallowUnknownKeys = v
return dc
}
func (dc *Decoder) NetworkNBT(v bool) *Decoder {
dc.networkNBT = v
return dc
}
func Unmarshal(data []byte, dst any) (rootName string, err error) {
dc := decoders.Get().(*Decoder)
defer decoders.Put(dc)
dc.disallowUnknownKeys, dc.networkNBT = false, false
dc.rd = readers.Get().(*bufferedReader)
dc.rd.buf, dc.rd.src, dc.rd.r, dc.rd.w = data, nil, 0, len(data)
return dc.DecodeAndClose(dst)
}
// DecodeAndClose decodes into dst and closes the decoder
func (d *Decoder) DecodeAndClose(dst any) (rootName string, err error) {
defer d.Close()
return d.Decode(dst)
}
func (d *Decoder) Decode(dst any) (rootName string, err error) {
id := unsafe2.InterfaceData(dst)
typ := (*unsafe2.Type)(unsafe.Pointer(id.Type))
if kindOf(typ) != pointer_k {
return rootName, ErrExpectPointer
}
typ, v := ptrelem(typ, id.Value)
rootTagS, err := d.rd.readBytesString(1)
if err != nil {
return rootName, err
}
if !d.networkNBT {
if err := d.readString(&rootName); err != nil {
return rootName, err
}
}
switch rootTagS {
case string_t_b:
if k := kindOf(typ); k != string_k {
return rootName, MismatchError{
expectedKind: "string",
gotKind: kind_name(k),
tag: tagName(rootTagS),
name: "root",
}
}
case compound_t_b:
switch k := kindOf(typ); k {
case struct_k:
typ := (*structType)(unsafe.Pointer(typ))
s := newStruct(typ, v)
defer structs.Put(s)
if err := d.decodeStructCompound(s); err != nil {
return rootName, err
}
default:
return rootName, MismatchError{
expectedKind: "struct",
gotKind: kind_name(k),
tag: tagName(rootTagS),
name: "root",
}
}
default:
return rootName, ErrUnsupported
}
return rootName, nil
}
func (d *Decoder) discardCompound() error {
for {
tag, err := d.readByte2()
if err != nil {
return err
}
if tag == end_t {
return nil
}
if err := d.skipString(); err != nil {
return err
}
s, err := d.discard(tag)
if err != nil {
return err
}
if !s {
switch tag {
case compound_t:
if err := d.discardCompound(); err != nil {
return err
}
case list_t:
if err := d.discardList(); err != nil {
return err
}
default:
return ErrUnknownTag
}
}
}
}
func (d *Decoder) discard(tag_b byte) (skipped bool, err error) {
switch tag_b {
case byte_t:
return true, d.rd.skip(1)
case short_t:
return true, d.rd.skip(2)
case int_t, float_t:
return true, d.rd.skip(4)
case long_t, double_t:
return true, d.rd.skip(8)
case byte_array_t:
l, err := d.readInt()
if err != nil {
return true, err
}
return true, d.rd.skip(int(l))
case string_t:
l, err := d.readShort()
if err != nil {
return true, err
}
return true, d.rd.skip(int(l))
case int_array_t:
l, err := d.readInt()
if err != nil {
return true, err
}
return true, d.rd.skip(int(l) * 4)
case long_array_t:
l, err := d.readInt()
if err != nil {
return true, err
}
return true, d.rd.skip(int(l) * 8)
default:
return
}
}
================================================
FILE: protocol/nbt/qnbt/list.go
================================================
package qnbt
import (
"fmt"
"strconv"
"unsafe"
"github.com/oq-x/unsafe2"
)
func (d *Decoder) decodeListSlice(ptr unsafe.Pointer, t *ptrType) error {
tag, err := d.readByte2()
if err != nil {
return err
}
l, err := d.readInt()
if err != nil {
return err
}
if tag == end_t {
return nil
}
cap := *(*int)(unsafe.Add(ptr, ptrSize*2))
array := &array_t{
elem: t.elem,
ptr: unsafe.Pointer(*(*uintptr)(ptr)),
len: uintptr(cap),
}
if int(l) > cap {
array.ptr = mallocgc(uintptr(l)*array.elem.Size, nil, true)
array.len = uintptr(l)
setSliceArray(ptr, array.ptr, int(l))
}
return d.readListArray(tag, l, array)
}
type array_t struct {
elem *unsafe2.Type
ptr unsafe.Pointer
len uintptr
}
func (a *array_t) index(i int) unsafe.Pointer {
return unsafe.Add(a.ptr, a.elem.Size*uintptr(i))
}
func (d *Decoder) decodeListArray(a *array_t) error {
tag, err := d.readByte2()
if err != nil {
return err
}
l, err := d.readInt()
if err != nil {
return err
}
if tag == end_t {
return nil
}
if uintptr(l) < a.len {
return fmt.Errorf("array too small")
}
return d.readListArray(tag, l, a)
}
func (d *Decoder) readListArray(tag byte, l int32, a *array_t) error {
kind := kindOf(a.elem)
for i := 0; i < int(l); i++ {
iptr := a.index(i)
//if err := match("", tag, a.elem); err != nil {
// return err
//}
switch tag {
case byte_t:
if err := d.readBytePtr(iptr); err != nil {
return err
}
case short_t:
if err := d.readShortPtr(iptr); err != nil {
return err
}
case int_t, float_t:
if err := d.readIntPtr(iptr); err != nil {
return err
}
case long_t, double_t:
if err := d.readLongPtr(iptr); err != nil {
return err
}
case byte_array_t:
switch kind {
case array_k:
if err := d.readByteArray(iptr); err != nil {
return err
}
case slice_k:
l, err := d.readInt()
if err != nil {
return err
}
ptr := mallocgc(uintptr(l), nil, true)
if err := d.decodeByteArray(int(l), ptr); err != nil {
return err
}
setSliceArray(iptr, ptr, int(l))
}
case string_t:
if err := d.readStringPtr(iptr); err != nil {
return err
}
case long_array_t:
switch kind {
case array_k:
if err := d.readLongArray(iptr); err != nil {
return err
}
case slice_k:
l, err := d.readInt()
if err != nil {
return err
}
ptr := mallocgc(uintptr(l)*8, nil, true)
if err := d.decodeLongArray(int(l), ptr); err != nil {
return err
}
setSliceArray(iptr, ptr, int(l))
}
case int_array_t:
switch kind {
case array_k:
if err := d.readIntArray(iptr); err != nil {
return err
}
case slice_k:
l, err := d.readInt()
if err != nil {
return err
}
ptr := mallocgc(uintptr(l)*4, nil, true)
if err := d.decodeIntArray(int(l), ptr); err != nil {
return err
}
setSliceArray(iptr, ptr, int(l))
}
case compound_t:
switch kind {
case struct_k:
s := newStruct((*structType)(unsafe.Pointer(a.elem)), iptr)
if err := d.decodeStructCompound(s); err != nil {
return err
}
structs.Put(s)
case map_k:
t := (*mapType)(unsafe.Pointer(a.elem))
if kK, kE := kindOf(t.key), kindOf(t.elem); kK != string_k || kE != string_k {
return MismatchError{
name: strconv.Itoa(i),
expectedKind: "struct/map[string]string",
gotKind: fmt.Sprintf("map[%s]%s", kind_name(kK), kind_name(kE)),
//tag: tagName(tag),
}
}
m := *(*map[string]string)(iptr)
if m == nil {
m = make(map[string]string)
*(*map[string]string)(iptr) = m
}
if err := d.decodeMapString(m); err != nil {
return err
}
}
case list_t:
switch kind {
case array_k:
arr := (*arrayType)(unsafe.Pointer(a.elem))
if err := d.decodeListArray(&array_t{arr.elem, iptr, arr.len}); err != nil {
return err
}
case slice_k:
if err := d.decodeListSlice(iptr, (*ptrType)(unsafe.Pointer(a.elem))); err != nil {
return err
}
}
default:
return ErrUnknownTag
}
}
return nil
}
func (d *Decoder) discardList() error {
tag, err := d.readByte2()
if err != nil {
return err
}
len, err := d.readInt()
if err != nil {
return err
}
f := fixedSize(tag)
if f == 0 {
return nil
}
if f != -1 {
return d.rd.skip(f * int(len))
}
for i := int32(0); i < len; i++ {
s, err := d.discard(tag)
if err != nil {
return err
}
if !s {
switch tag {
case compound_t:
if err := d.discardCompound(); err != nil {
return err
}
case list_t:
if err := d.discardList(); err != nil {
return err
}
default:
return ErrUnknownTag
}
}
}
return nil
}
func fixedSize(tag byte) int {
switch tag {
case end_t:
return 0
case byte_t:
return 1
case short_t:
return 2
case int_t, float_t:
return 4
case long_t, double_t:
return 8
default:
return -1
}
}
================================================
FILE: protocol/nbt/qnbt/malloc.go
================================================
package qnbt
import (
"unsafe"
"github.com/oq-x/unsafe2"
)
//go:linkname mallocgc runtime.mallocgc
func mallocgc(size uintptr, typ *unsafe2.Type, needzero bool) unsafe.Pointer
================================================
FILE: protocol/nbt/qnbt/map.go
================================================
package qnbt
import "fmt"
func (d *Decoder) decodeMapString(m map[string]string) error {
var name string
for {
tag, err := d.rd.readBytesString(1)
if err != nil {
return err
}
if tag == end_t_b {
return nil
}
if err := d.readStringNonCopy(&name); err != nil {
return err
}
if tag != string_t_b {
return fmt.Errorf("expected string tag, got %s", tagName(tag))
}
var v string
if err := d.readString(&v); err != nil {
return err
}
m[name] = v
}
}
================================================
FILE: protocol/nbt/qnbt/primitive.go
================================================
package qnbt
import (
"encoding/binary"
"unsafe"
"github.com/zeppelinmc/zeppelin/protocol/nbt/qnbt/native"
)
const (
end_t = iota
byte_t
short_t
int_t
long_t
float_t
double_t
byte_array_t
string_t
list_t
compound_t
int_array_t
long_array_t
)
// a little trick to avoid allocations
var (
end_t_b = string([]byte{end_t})
byte_t_b = string([]byte{byte_t})
short_t_b = string([]byte{short_t})
int_t_b = string([]byte{int_t})
long_t_b = string([]byte{long_t})
float_t_b = string([]byte{float_t})
double_t_b = string([]byte{double_t})
byte_array_t_b = string([]byte{byte_array_t})
string_t_b = string([]byte{string_t})
list_t_b = string([]byte{list_t})
compound_t_b = string([]byte{compound_t})
int_array_t_b = string([]byte{int_array_t})
long_array_t_b = string([]byte{long_array_t})
)
func tagName(t string) string {
switch t {
case end_t_b:
return "TAG_End"
case byte_t_b:
return "TAG_Byte"
case short_t_b:
return "TAG_Short"
case int_t_b:
return "TAG_Int"
case long_t_b:
return "TAG_Long"
case float_t_b:
return "TAG_Float"
case double_t_b:
return "TAG_Double"
case byte_array_t_b:
return "TAG_Byte_Array"
case string_t_b:
return "TAG_String"
case list_t_b:
return "TAG_List"
case compound_t_b:
return "TAG_Compound"
case int_array_t_b:
return "TAG_Int_Array"
case long_array_t_b:
return "TAG_Long_Array"
default:
return "Unknown"
}
}
func (d *Decoder) load(length int) []byte {
b := d.rd.buf[d.rd.r : d.rd.r+length]
d.rd.r += length
return b
}
func (d *Decoder) readByte(b *byte) error {
if err := d.rd.fill(1); err != nil {
return err
}
*b = d.rd.buf[d.rd.r]
d.rd.r++
return nil
}
func (d *Decoder) readByte2() (byte, error) {
if err := d.rd.fill(1); err != nil {
return 0, err
}
b := d.rd.buf[d.rd.r]
d.rd.r++
return b, nil
}
func (d *Decoder) readBytePtr(ptr unsafe.Pointer) error {
return d.readByte((*byte)(ptr))
}
func (d *Decoder) readShort() (int16, error) {
if err := d.rd.fill(2); err != nil {
return 0, err
}
return int16(binary.BigEndian.Uint16(d.load(2))), nil
}
func (d *Decoder) readShortPtr(ptr unsafe.Pointer) error {
if err := d.rd.fill(2); err != nil {
return err
}
s := unsafe.Slice((*byte)(ptr), 2)
copy(s, d.load(2))
if !native.SystemBigEndian {
native.Convert16(s)
}
return nil
}
func (d *Decoder) readInt() (int32, error) {
if err := d.rd.fill(4); err != nil {
return 0, err
}
return int32(binary.BigEndian.Uint32(d.load(4))), nil
}
func (d *Decoder) readIntPtr(ptr unsafe.Pointer) error {
if err := d.rd.fill(4); err != nil {
return err
}
s := unsafe.Slice((*byte)(ptr), 4)
copy(s, d.load(4))
if !native.SystemBigEndian {
native.Convert32(s)
}
return nil
}
func (d *Decoder) readLongPtr(ptr unsafe.Pointer) error {
if err := d.rd.fill(8); err != nil {
return err
}
s := unsafe.Slice((*byte)(ptr), 8)
copy(s, d.load(8))
if !native.SystemBigEndian {
native.Convert64(s)
}
return nil
}
func (d *Decoder) skipString() error {
l, err := d.readShort()
if err != nil {
return err
}
return d.rd.skip(int(l))
}
func (d *Decoder) readString(dst *string) error {
l, err := d.readShort()
if err != nil {
return err
}
if err := d.rd.fill(int(l)); err != nil {
return err
}
*dst = string(d.load(int(l)))
return nil
}
func (d *Decoder) readStringNonCopy(dst *string) error {
l, err := d.readShort()
if err != nil {
return err
}
if err := d.rd.fill(int(l)); err != nil {
return err
}
buf := d.rd.buf[d.rd.r : d.rd.r+int(l)]
d.rd.r += int(l)
*dst = unsafe.String(unsafe.SliceData(buf), len(buf))
return nil
}
func (d *Decoder) readStringPtr(dst unsafe.Pointer) error {
return d.readString((*string)(dst))
}
func (d *Decoder) readLongArray(ptr unsafe.Pointer) error {
l, err := d.readInt()
if err != nil {
return err
}
return d.decodeLongArray(int(l), ptr)
}
func (d *Decoder) decodeLongArray(len int, ptr unsafe.Pointer) error {
for i := 0; i < len; i++ {
if err := d.readLongPtr(ptr); err != nil {
return err
}
ptr = unsafe.Add(ptr, 8)
}
return nil
}
func (d *Decoder) readIntArray(ptr unsafe.Pointer) error {
l, err := d.readInt()
if err != nil {
return err
}
return d.decodeIntArray(int(l), ptr)
}
func (d *Decoder) decodeIntArray(len int, ptr unsafe.Pointer) error {
for i := 0; i < len; i++ {
if err := d.readIntPtr(ptr); err != nil {
return err
}
ptr = unsafe.Add(ptr, 4)
}
return nil
}
func (d *Decoder) readByteArray(ptr unsafe.Pointer) error {
l, err := d.readInt()
if err != nil {
return err
}
return d.decodeByteArray(int(l), ptr)
}
/*func (d *Decoder) decodeByteArray(len int, ptr unsafe.Pointer) error {
data, err := d.rd.readBytes(len)
if err != nil {
return err
}
copy(unsafe.Slice((*byte)(ptr), len), data)
return nil
}
*/
func (d *Decoder) decodeByteArray(l int, ptr unsafe.Pointer) error {
for l > 0 {
lr := min(len(d.rd.buf), l)
data, err := d.rd.readBytes(lr)
if err != nil {
return err
}
copy(unsafe.Slice((*byte)(ptr), l), data)
l -= lr
ptr = unsafe.Add(ptr, lr)
}
return nil
}
================================================
FILE: protocol/nbt/qnbt/qnbt.go
================================================
// qNBT is a very efficient NBT decoder!
// Caveats: does not work with []any, map[string]any or maps in general (except for map[string]string)
// Specification:
// Uses very lite, custom reflection (mostly unsafe)
package qnbt
================================================
FILE: protocol/nbt/qnbt/struct.go
================================================
package qnbt
import (
"fmt"
"strings"
"sync"
"unsafe"
"github.com/oq-x/unsafe2"
)
var structs = sync.Pool{
New: func() any {
return &struct_t{
names: make(map[string]int),
}
}}
func newStruct(t *structType, ptr unsafe.Pointer) *struct_t {
s := structs.Get().(*struct_t)
clear(s.names)
s.t = t
s.ptr = ptr
for i, f := range t.fields {
if !f.name.exported() {
continue
}
name := f.name.name()
if nbtname, ok := findNBTTag(f.name.tag()); ok {
name = nbtname
if name == "-" {
continue
}
if i := strings.Index(name, ",omitempty"); i != -1 {
name = name[:i]
}
}
s.names[name] = i
}
return s
}
func findNBTTag(tag string) (string, bool) {
i := strings.Index(tag, `nbt:"`)
if i == -1 {
return "", false
}
tag = tag[i+5:]
i = strings.Index(tag, `"`)
if i == -1 {
return "", false
}
return tag[:i], true
}
type struct_t struct {
t *structType
names map[string]int
ptr unsafe.Pointer
}
func (s *struct_t) field(n string) (f *structField, ptr unsafe.Pointer, ok bool) {
i, ok := s.names[n]
if !ok {
return nil, nil, ok
}
ft := s.t.fields[i]
return &ft, unsafe.Add(s.ptr, ft.off), ok
}
func (d *Decoder) decodeStructCompound(s *struct_t) error {
var name string
for {
tag, err := d.readByte2()
if err != nil {
return err
}
if tag == end_t {
return nil
}
if err := d.readStringNonCopy(&name); err != nil {
return err
}
field, fieldPtr, ok := s.field(name)
if ok {
//if err := match(name, tag, field.typ); err != nil {
// return err
//}
switch tag {
case byte_t:
if err := d.readBytePtr(fieldPtr); err != nil {
return err
}
case string_t:
if err := d.readStringPtr(fieldPtr); err != nil {
return err
}
case short_t:
if err := d.readShortPtr(fieldPtr); err != nil {
return err
}
case int_t, float_t:
if err := d.readIntPtr(fieldPtr); err != nil {
return err
}
case long_t, double_t:
if err := d.readLongPtr(fieldPtr); err != nil {
return err
}
case byte_array_t:
switch kindOf(field.typ) {
case array_k:
if err := d.readByteArray(fieldPtr); err != nil {
return err
}
case slice_k:
l, err := d.readInt()
if err != nil {
return err
}
ptr := mallocgc(uintptr(l), nil, true)
if err := d.decodeByteArray(int(l), ptr); err != nil {
return err
}
setSliceArray(fieldPtr, ptr, int(l))
}
case long_array_t:
switch kindOf(field.typ) {
case array_k:
if err := d.readLongArray(fieldPtr); err != nil {
return err
}
case slice_k:
l, err := d.readInt()
if err != nil {
return err
}
ptr := mallocgc(uintptr(l)*8, nil, true)
if err := d.decodeLongArray(int(l), ptr); err != nil {
return err
}
setSliceArray(fieldPtr, ptr, int(l))
}
case int_array_t:
switch kindOf(field.typ) {
case array_k:
if err := d.readIntArray(fieldPtr); err != nil {
return err
}
case slice_k:
l, err := d.readInt()
if err != nil {
return err
}
ptr := mallocgc(uintptr(l)*4, nil, true)
if err := d.decodeIntArray(int(l), ptr); err != nil {
return err
}
setSliceArray(fieldPtr, ptr, int(l))
}
case compound_t:
switch kindOf(field.typ) {
case struct_k:
s := newStruct((*structType)(unsafe.Pointer(field.typ)), fieldPtr)
if err := d.decodeStructCompound(s); err != nil {
return err
}
structs.Put(s)
case map_k:
t := (*mapType)(unsafe.Pointer(field.typ))
if kK, kE := kindOf(t.key), kindOf(t.elem); kK != string_k || kE != string_k {
return MismatchError{
name: name,
expectedKind: "struct/map[string]string",
gotKind: fmt.Sprintf("map[%s]%s", kind_name(kK), kind_name(kE)),
tag: tagName(string([]byte{tag})),
}
}
m := *(*map[string]string)(fieldPtr)
if m == nil {
m = make(map[string]string)
*(*map[string]string)(fieldPtr) = m
}
if err := d.decodeMapString(m); err != nil {
return err
}
}
case list_t:
switch kindOf(field.typ) {
case array_k:
t := (*arrayType)(unsafe.Pointer(field.typ))
if err := d.decodeListArray(&array_t{t.elem, fieldPtr, t.len}); err != nil {
return err
}
case slice_k:
if err := d.decodeListSlice(fieldPtr, (*ptrType)(unsafe.Pointer(field.typ))); err != nil {
return err
}
}
default:
return ErrUnknownTag
}
} else {
s, err := d.discard(tag)
if err != nil {
return err
}
if !s {
switch tag {
case compound_t:
if err := d.discardCompound(); err != nil {
return err
}
case list_t:
if err := d.discardList(); err != nil {
return err
}
default:
return ErrUnknownTag
}
}
}
//fmt.Println(tag, name)
}
}
func match(name, tag_b string, t *unsafe2.Type) error {
k := kindOf(t)
switch tag_b {
case byte_t_b:
if k != uint8_k && k != int8_k && k != bool_k {
return MismatchError{
name: name,
expectedKind: "uint8/int8/bool",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case short_t_b:
if k != int16_k && k != uint16_k {
return MismatchError{
name: name,
expectedKind: "int16/uint16",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case int_t_b:
if k != int32_k && k != uint32_k {
return MismatchError{
name: name,
expectedKind: "int32/uint32",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case long_t_b:
if k != int64_k && k != uint64_k {
return MismatchError{
name: name,
expectedKind: "int64/uint64",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case float_t_b:
if k != float32_k {
return MismatchError{
name: name,
expectedKind: "float32",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case double_t_b:
if k != float64_k {
return MismatchError{
name: name,
expectedKind: "float64",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case byte_array_t_b:
if k != slice_k && k != array_k {
return MismatchError{
name: name,
expectedKind: "[]uint8/[]int8",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
base := (*ptrType)(unsafe.Pointer(t))
elemKind := kindOf(base.elem)
if elemKind != int8_k && elemKind != uint8_k {
return MismatchError{
name: name,
expectedKind: "[]uint8/[]int8",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case string_t_b:
if k != string_k {
return MismatchError{
name: name,
expectedKind: "string",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case list_t_b:
if k != slice_k && k != array_k {
return MismatchError{
name: name,
expectedKind: "slice/array",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case compound_t_b:
if k != struct_k && k != map_k {
return MismatchError{
name: name,
expectedKind: "struct/map[string]string",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case int_array_t_b:
if k != slice_k && k != array_k {
return MismatchError{
name: name,
expectedKind: "[]uint32/[]int32",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
base := (*ptrType)(unsafe.Pointer(t))
elemKind := kindOf(base.elem)
if elemKind != int32_k && elemKind != uint32_k {
return MismatchError{
name: name,
expectedKind: "[]uint32/[]int32",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
case long_array_t_b:
if k != slice_k && k != array_k {
return MismatchError{
name: name,
expectedKind: "[]uint64/[]int64",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
base := (*ptrType)(unsafe.Pointer(t))
elemKind := kindOf(base.elem)
if elemKind != int64_k && elemKind != uint64_k {
return MismatchError{
name: name,
expectedKind: "[]uint64/[]int64",
gotKind: kind_name(k),
tag: tagName(tag_b),
}
}
}
return nil
}
================================================
FILE: protocol/nbt/staticReader.go
================================================
package nbt
import (
"fmt"
"io"
"unsafe"
)
/*
Reader is an NBT decoder that uses no reflection. it should be used for static structures.
The read functions read the type id, name and value
*/
type StaticReader struct {
r io.Reader
}
func NewStaticReader(r io.Reader) StaticReader {
return StaticReader{r}
}
// reads a byte
func (r StaticReader) readByte() (byte, error) {
var data [1]byte
_, err := r.r.Read(data[:])
return data[0], err
}
// reads a short, big endian
func (r StaticReader) readShort() (int16, error) {
var data [2]byte
_, err := r.r.Read(data[:])
return int16(data[0])<<8 | int16(data[1]), err
}
// reads an int, big endian
func (r StaticReader) readInt() (int32, error) {
var data [4]byte
_, err := r.r.Read(data[:])
return int32(data[0])<<24 | int32(data[1])<<16 | int32(data[2])<<8 | int32(data[3]), err
}
// reads a long, big endian
func (r StaticReader) readLong() (int64, error) {
var data [8]byte
_, err := r.r.Read(data[:])
return int64(data[0])<<56 | int64(data[1])<<48 | int64(data[2])<<40 | int64(data[3])<<32 | int64(data[4])<<24 | int64(data[5])<<16 | int64(data[6])<<8 | int64(data[7]), err
}
// reads a string prefixed by a short of its length
func (r StaticReader) readString() (string, error) {
length, err := r.readShort()
if err != nil {
return "", err
}
if length < 0 {
return "", fmt.Errorf("negative length for make (read string)")
}
var data = make([]byte, length)
if _, err := r.r.Read(data); err != nil {
return "", err
}
return unsafe.String(unsafe.SliceData(data), len(data)), nil //*(*string)(unsafe.Pointer(&data)), nil
}
func (r StaticReader) ReadRoot(withName bool) (typeId byte, name string, err error) {
typeId, err = r.readByte()
if err != nil {
return typeId, "", err
}
if withName {
name, err = r.readString()
}
return
}
func (r StaticReader) Byte(dst *byte) (string, error) {
typeId, err := r.readByte()
if err != nil {
return "", err
}
if typeId != Byte {
return "", fmt.Errorf("tried reading TAG_Byte, got %d", typeId)
}
name, err := r.readString()
if err != nil {
return "", err
}
*dst, err = r.readByte()
return name, err
}
func (r StaticReader) Short(dst *int16) (string, error) {
typeId, err := r.readByte()
if err != nil {
return "", err
}
if typeId != Short {
return "", fmt.Errorf("tried reading TAG_Short, got %d", typeId)
}
name, err := r.readString()
if err != nil {
return "", err
}
*dst, err = r.readShort()
return name, err
}
func (r StaticReader) Int(dst *int32) (string, error) {
typeId, err := r.readByte()
if err != nil {
return "", err
}
if typeId != Int {
return "", fmt.Errorf("tried reading TAG_Int, got %d", typeId)
}
name, err := r.readString()
if err != nil {
return "", err
}
*dst, err = r.readInt()
return name, err
}
func (r StaticReader) Long(dst *int64) (string, error) {
typeId, err := r.readByte()
if err != nil {
return "", err
}
if typeId != Long {
return "", fmt.Errorf("tried reading TAG_Long, got %d", typeId)
}
name, err := r.readString()
if err != nil {
return "", err
}
*dst, err = r.readLong()
return name, err
}
func (r StaticReader) String(dst *string) (string, error) {
typeId, err := r.readByte()
if err != nil {
return "", err
}
if typeId != String {
return "", fmt.Errorf("tried reading TAG_String, got %d", typeId)
}
name, err := r.readString()
if err != nil {
return "", err
}
*dst, err = r.readString()
return name, err
}
func (r StaticReader) Compound(dst *CompoundReader) (string, error, bool) {
typeId, err := r.readByte()
if err != nil {
return "", err, false
}
if typeId == End {
return "", nil, true
}
if typeId != Compound {
return "", fmt.Errorf("tried reading TAG_Compound, got %d", typeId), false
}
name, err := r.readString()
if err != nil {
return "", err, false
}
*dst = CompoundReader{r}
return name, err, false
}
type CompoundReader struct {
r StaticReader
}
// super convenient
func (cr CompoundReader) ReadStringMap(tgt map[string]string) error {
for {
typeId, err := cr.r.readByte()
if err != nil {
return err
}
if typeId == End {
return nil
}
name, err := cr.r.readString()
if err != nil {
return err
}
switch typeId {
case String:
str, err := cr.r.readString()
if err != nil {
return err
}
tgt[name] = str
default:
return fmt.Errorf("unsupported tag %d for string map", typeId)
}
}
}
func (cr CompoundReader) ReadAll(targets ...any) error {
for i := 0; i < len(targets)+1; i++ { //+1 to read end
typeId, err := cr.r.readByte()
if err != nil {
return err
}
if typeId == End {
return nil
}
_, err = cr.r.readString()
if err != nil {
return err
}
switch typeId {
case Byte:
dst, ok := targets[i].(*byte)
if !ok {
return fmt.Errorf("mismatched type Byte and %T", targets[i])
}
*dst, err = cr.r.readByte()
if err != nil {
return err
}
case Short:
dst, ok := targets[i].(*int16)
if !ok {
return fmt.Errorf("mismatched type Short and %T", targets[i])
}
*dst, err = cr.r.readShort()
if err != nil {
return err
}
case Int:
dst, ok := targets[i].(*int32)
if !ok {
return fmt.Errorf("mismatched type Int and %T", targets[i])
}
*dst, err = cr.r.readInt()
if err != nil {
return err
}
case Long:
dst, ok := targets[i].(*int64)
if !ok {
return fmt.Errorf("mismatched type Long and %T", targets[i])
}
*dst, err = cr.r.readLong()
if err != nil {
return err
}
case String:
dst, ok := targets[i].(*string)
if !ok {
return fmt.Errorf("mismatched type String and %T", targets[i])
}
*dst, err = cr.r.readString()
if err != nil {
return err
}
case Compound:
switch dst := targets[i].(type) {
case []any:
CompoundReader{r: cr.r}.ReadAll(dst)
case map[string]string:
CompoundReader{r: cr.r}.ReadStringMap(dst)
default:
return fmt.Errorf("mismatched type Compound and %T", targets[i])
}
case List:
dst, ok := targets[i].(func(len int32, rd ListReader))
if !ok {
return fmt.Errorf("mismatched type List and %T", targets[i])
}
typeId, err := cr.r.readByte()
if err != nil {
return err
}
len, err := cr.r.readInt()
if err != nil {
return err
}
dst(len, ListReader{typeId: typeId, r: cr.r})
}
}
return nil
}
type ListReader struct {
typeId byte
r StaticReader
}
func (lr ListReader) Read(tgt any) (err error) {
switch lr.typeId {
case Byte:
dst, ok := tgt.(*byte)
if !ok {
return fmt.Errorf("mismatched type Byte and %T", tgt)
}
*dst, err = lr.r.readByte()
if err != nil {
return err
}
case Short:
dst, ok := tgt.(*int16)
if !ok {
return fmt.Errorf("mismatched type Short and %T", tgt)
}
*dst, err = lr.r.readShort()
if err != nil {
return err
}
case Int:
dst, ok := tgt.(*int32)
if !ok {
return fmt.Errorf("mismatched type Int and %T", tgt)
}
*dst, err = lr.r.readInt()
if err != nil {
return err
}
case Long:
dst, ok := tgt.(*int64)
if !ok {
return fmt.Errorf("mismatched type Long and %T", tgt)
}
*dst, err = lr.r.readLong()
if err != nil {
return err
}
case String:
dst, ok := tgt.(*string)
if !ok {
return fmt.Errorf("mismatched type String and %T", tgt)
}
*dst, err = lr.r.readString()
if err != nil {
return err
}
case Compound:
dst, ok := tgt.([]any)
if !ok {
return fmt.Errorf("mismatched type Compound and %T", lr)
}
CompoundReader{r: lr.r}.ReadAll(dst...)
case List:
dst, ok := tgt.(func(ListReader))
if !ok {
return fmt.Errorf("mismatched type List and %T", tgt)
}
typeId, err := lr.r.readByte()
if err != nil {
return err
}
dst(ListReader{typeId: typeId, r: lr.r})
}
return nil
}
================================================
FILE: protocol/net/authentication.go
================================================
package net
import (
"crypto/sha1"
"crypto/x509"
"encoding/hex"
"encoding/json"
"fmt"
"net/http"
"strings"
"unsafe"
"github.com/google/uuid"
"github.com/zeppelinmc/zeppelin/protocol/net/packet/login"
)
func authurl(u, h string) string {
return "https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + u + "&serverId=" + h
}
func (conn *Conn) authenticate() error {
key, err := x509.MarshalPKIXPublicKey(&conn.listener.privKey.PublicKey)
if err != nil {
return err
}
hash := conn.sessionHash(key)
res, err := http.Get(authurl(conn.username, hash))
if err != nil {
return err
}
if res.StatusCode != http.StatusOK {
return fmt.Errorf("authenticated error: player not joined")
}
var response struct {
ID string `json:"id"`
Name string `json:"name"`
Properties []struct {
Name string `json:"name"`
Value string `json:"value"`
Signature string `json:"signature"`
} `json:"properties"`
}
err = json.NewDecoder(res.Body).Decode(&response)
if err != nil {
return err
}
conn.username = response.Name
conn.uuid, err = uuid.Parse(response.ID)
if err != nil {
return err
}
conn.properties = *(*[]login.Property)(unsafe.Pointer(&response.Properties))
return nil
}
func (conn *Conn) sessionHash(publicKey []byte) string {
hash := sha1.New()
hash.Write(conn.sharedSecret)
hash.Write(publicKey)
sum := hash.Sum(nil)
negative := (sum[0] & 0x80) == 0x80
if negative {
sum = twosComplement(sum)
}
// Trim away zeroes
res := strings.TrimLeft(hex.EncodeToString(sum), "0")
if negative {
res = "-" + res
}
return res
}
func twosComplement(p []byte) []byte {
carry := true
for i := len(p) - 1; i >= 0; i-- {
p[i] = byte(^p[i])
if carry {
carry = p[i] == 0xff
p[i]++
}
}
return p
}
================================================
FILE: protocol/net/cfb8/cfb8.go
================================================
package cfb8
import "crypto/cipher"
// CFB stream with 8 bit segment size
// See http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
type CFB8 struct {
// the input block used to produce an output block
//also the same as the iv, but overtime it's changed
input []byte
//output used to decipher and cipher plaintext and cipher segments
output []byte
//block is the forward crypto function
block cipher.Block
decrypt bool
}
func (x *CFB8) XORKeyStream(dst, src []byte) {
//notes:
//the plaintext and ciphertext segments consist of s bits(8 in this case)
for i, v := range src {
//the forward crypto operation is applied to
//the IV to produce the first output block
x.block.Encrypt(x.output, x.input)
//both the cipher plain text and segments are XOR with the msb s bits of the output block
dst[i] = v ^ x.output[0]
//makes room to concatenate s bits of cipher text segment for
//encryption, and plaintext segment for decryption
copy(x.input, x.input[1:16])
if x.decrypt {
x.input[15] = v
} else {
x.input[15] = dst[i]
}
}
}
func NewCFB8(b cipher.Block, iv []byte, decrypt bool) *CFB8 {
if b.BlockSize() != len(iv) {
panic("blockSize and IV must be the same length")
}
cfb8 := &CFB8{
block: b,
input: make([]byte, len(iv)),
output: make([]byte, len(iv)),
decrypt: decrypt,
}
//in CFB encryption, the first input block is the IV
copy(cfb8.input, iv)
return cfb8
}
================================================
FILE: protocol/net/config.go
================================================
package net
import (
"crypto/rand"
"crypto/rsa"
"net"
"github.com/zeppelinmc/zeppelin/protocol/net/packet/status"
"github.com/zeppelinmc/zeppelin/protocol/text"
)
type Config struct {
Status StatusProvider
PacketWriteChanBuffer int
IP net.IP
Port int
CompressionThreshold int32
Encrypt bool
Authenticate bool
AcceptTransfers bool
}
type StatusProvider func(*Conn) status.StatusResponseData
func (c Config) New() (*Listener, error) {
l, err := net.ListenTCP("tcp", &net.TCPAddr{
IP: c.IP, Port: c.Port,
})
if err != nil {
return nil, err
}
lis := &Listener{
cfg: c,
Listener: l,
newConns: make(chan *Conn),
err: make(chan error),
ApprovePlayer: func(c *Conn) (ok bool, disconnectionReason *text.TextComponent) {
return true, nil
},
}
if c.Encrypt {
lis.privKey, err = rsa.GenerateKey(rand.Reader, 1024)
}
go lis.listen()
return lis, err
}
func Status(s status.StatusResponseData) StatusProvider {
return func(*Conn) status.StatusResponseData {
return s
}
}
================================================
FILE: protocol/net/conn.go
================================================
package net
import (
"bytes"
"crypto/md5"
"encoding/binary"
"fmt"
"io"
"net"
"sync"
"sync/atomic"
"unicode/utf16"
"github.com/zeppelinmc/zeppelin/protocol/net/cfb8"
"github.com/zeppelinmc/zeppelin/protocol/net/io/compress"
"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding"
"github.com/zeppelinmc/zeppelin/protocol/net/packet"
"github.com/zeppelinmc/zeppelin/protocol/net/packet/handshake"
"github.com/zeppelinmc/zeppelin/protocol/net/packet/login"
"github.com/zeppelinmc/zeppelin/protocol/net/packet/status"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/google/uuid"
)
var PacketEncodeInterceptor func(c *Conn, pk packet.Encodeable) (stop bool)
var PacketDecodeInterceptor func(c *Conn, pk packet.Decodeable) (stop bool)
var PacketWriteInterceptor func(c *Conn, pk *bytes.Buffer, headerSize int32) (stop bool)
var PacketReadInterceptor func(c *Conn, pk *bytes.Reader, packetId int32) (stop bool)
const (
clientVeryOldMsg = "Your client is WAYYYYYY too old!!! this server supports MC 1.21"
clientTooOldMsg = "Your client is too old! this server supports MC 1.21"
clientTooNewMsg = "Your client is too new! this server supports MC 1.21"
)
type Conn struct {
net.Conn
listener *Listener
username string
uuid uuid.UUID
properties []login.Property
state atomic.Int32
encrypted bool
sharedSecret, verifyToken []byte
decrypter, encrypter *cfb8.CFB8
compressionSet bool
usesForge bool
read_mu sync.Mutex
write_mu sync.Mutex
packetWriteChan chan packet.Encodeable
}
func (conn *Conn) UsesForge() bool {
return conn.usesForge
}
func (conn *Conn) Username() string {
return conn.username
}
func (conn *Conn) UUID() uuid.UUID {
return conn.uuid
}
func (conn *Conn) Properties() []login.Property {
return conn.properties
}
func (conn *Conn) SetState(state int32) {
conn.state.Store(state)
}
func (conn *Conn) State() int32 {
return conn.state.Load()
}
var pkpool = sync.Pool{
New: func() any {
return bytes.NewBuffer(nil)
},
}
var pkcppool = sync.Pool{
New: func() any {
return bytes.NewBuffer(nil)
},
}
func (conn *Conn) wpk(pk packet.Encodeable) error {
if PacketEncodeInterceptor != nil {
if PacketEncodeInterceptor(conn, pk) {
return nil
}
}
var packetBuf = pkpool.Get().(*bytes.Buffer)
packetBuf.Reset()
defer pkpool.Put(packetBuf)
w := encoding.NewWriter(packetBuf)
// write the header for the packet
var headerSize int32
if conn.listener.cfg.CompressionThreshold < 0 || !conn.compressionSet {
packetBuf.Write([]byte{0x80, 0x80, 0})
headerSize = 3
} else if conn.compressionSet {
packetBuf.Write([]byte{0x80, 0x80, 0, 0x80, 0x80, 0})
headerSize = 6
}
if err := w.VarInt(pk.ID()); err != nil {
return err
}
if err := pk.Encode(w); err != nil {
return err
}
if PacketWriteInterceptor != nil {
if PacketWriteInterceptor(conn, packetBuf, headerSize) {
return nil
}
}
if conn.listener.cfg.CompressionThreshold < 0 || !conn.compressionSet { // no compression
i := encoding.PutVarInt(packetBuf.Bytes()[:3], int32(packetBuf.Len()-3))
if i != 2 {
packetBuf.Bytes()[i] |= 0x80
}
_, err := conn.Write(packetBuf.Bytes())
return err
} else { // yes compression
if conn.listener.cfg.CompressionThreshold > int32(packetBuf.Len())-6 { // packet is too small to be compressed
i := encoding.PutVarInt(packetBuf.Bytes()[:3], int32(packetBuf.Len()-3))
if i != 2 {
packetBuf.Bytes()[i] |= 0x80
}
_, err := conn.Write(packetBuf.Bytes())
return err
} else { // packet is compressed
uncompressedLength := int32(packetBuf.Len() - 6)
if i := encoding.PutVarInt(packetBuf.Bytes()[3:6], uncompressedLength); i != 2 {
packetBuf.Bytes()[i+3] |= 0x80
}
compressedPacket, err := compress.CompressZlib(packetBuf.Bytes()[6:], &MaxCompressedPacketSize)
if err != nil {
return err
}
packetBuf.Truncate(6)
packetBuf.Write(compressedPacket)
if i := encoding.PutVarInt(packetBuf.Bytes()[:3], int32(packetBuf.Len())-3); i != 2 {
packetBuf.Bytes()[i] |= 0x80
}
if _, err := conn.Write(packetBuf.Bytes()); err != nil {
return err
}
return err
}
}
}
func (conn *Conn) WritePacket(pk packet.Encodeable) error {
if conn.encrypted {
conn.write_mu.Lock()
defer conn.write_mu.Unlock()
} //no lock seems to work fine without encryption (?)
return conn.wpk(pk)
}
// 1MiB
var MaxCompressedPacketSize = 1024 * 1024
func (conn *Conn) Read(dst []byte) (i int, err error) {
i, err = conn.Conn.Read(dst)
if err != nil {
return i, err
}
if conn.encrypted {
conn.decryptd(dst, dst)
}
return i, err
}
func (conn *Conn) Write(data []byte) (i int, err error) {
if !conn.encrypted {
return conn.Conn.Write(data)
}
conn.encryptd(data, data)
return conn.Conn.Write(data)
}
func (conn *Conn) ReadPacket() (decoded packet.Decodeable, interceptionStopped bool, err error) {
conn.read_mu.Lock()
defer conn.read_mu.Unlock()
var rd = encoding.NewReader(conn, 0)
var (
length, packetId int32
)
if conn.listener.cfg.CompressionThreshold < 0 || !conn.compressionSet { // no compression
if _, err := rd.VarInt(&length); err != nil {
return nil, false, err
}
if length <= 0 {
return nil, false, fmt.Errorf("malformed packet: empty")
}
if length > 4096 {
return nil, false, fmt.Errorf("packet too big")
}
var packet = make([]byte, length)
if _, err := conn.Read(packet); err != nil {
return nil, false, err
}
id, data, err := encoding.VarInt(packet)
if err != nil {
return nil, false, err
}
packetId = id
packet = data
length = int32(len(data))
br := bytes.NewReader(packet)
if PacketReadInterceptor != nil {
if PacketReadInterceptor(conn, br, packetId) {
return nil, true, nil
}
}
rd = encoding.NewReader(br, int(length))
} else {
var packetLength int32
if _, err := rd.VarInt(&packetLength); err != nil {
return nil, false, err
}
if packetLength <= 0 {
return nil, false, fmt.Errorf("malformed packet: empty")
}
var dataLength int32
dataLengthSize, err := rd.VarInt(&dataLength)
if err != nil {
return nil, false, err
}
if dataLength < 0 {
return nil, false, fmt.Errorf("malformed packet: negative length")
}
if dataLength == 0 { //packet is uncompressed
length = packetLength - int32(dataLengthSize)
if length < 0 {
return nil, false, fmt.Errorf("malformed packet: negative length")
}
if length != 0 {
var packet = make([]byte, length)
if _, err := conn.Read(packet); err != nil {
return nil, false, err
}
id, data, err := encoding.VarInt(packet)
if err != nil {
return nil, false, err
}
packetId = id
packet = data
length = int32(len(data))
r := bytes.NewReader(packet)
if PacketReadInterceptor != nil {
if PacketReadInterceptor(conn, r, packetId) {
return nil, true, nil
}
}
rd = encoding.NewReader(r, int(length))
}
} else { //packet is compressed
length = dataLength
compressedLength := packetLength - int32(dataLengthSize)
var ilength = int(length)
var packetBuf = pkpool.Get().(*bytes.Buffer)
packetBuf.Reset()
packetBuf.ReadFrom(io.LimitReader(conn, int64(compressedLength)))
defer pkpool.Put(packetBuf)
uncompressedPacket, err := compress.DecompressZlib(packetBuf.Bytes(), &ilength)
if err != nil {
return nil, false, err
}
id, data, err := encoding.VarInt(uncompressedPacket)
if err != nil {
return nil, false, err
}
packetId = id
uncompressedPacket = data
length = int32(len(data))
r := bytes.NewReader(uncompressedPacket)
if PacketReadInterceptor != nil {
if PacketReadInterceptor(conn, r, packetId) {
return nil, true, nil
}
}
rd = encoding.NewReader(r, int(length))
}
}
var pk packet.Decodeable
pc, ok := ServerboundPool[conn.state.Load()][packetId]
if !ok {
return packet.UnknownPacket{
Id: packetId,
Length: length,
Payload: rd,
}, false, nil
} else {
pk = pc()
if PacketDecodeInterceptor != nil {
if PacketDecodeInterceptor(conn, pk) {
return nil, true, nil
}
}
err := pk.Decode(rd)
return pk, false, err
}
}
// PushPacket adds a packet to the queue without waiting for it to be sent
func (conn *Conn) PushPacket(pk packet.Encodeable) {
conn.packetWriteChan <- pk
}
func (conn *Conn) packetWriteChanListen() {
go func() {
for pk := range conn.packetWriteChan {
if conn.encrypted {
conn.write_mu.Lock()
}
conn.WritePacket(pk)
if conn.encrypted {
conn.write_mu.Unlock()
}
}
}()
}
func (conn *Conn) writeLegacyStatus(status status.StatusResponseData) {
protocolString := fmt.Sprint(status.Version.Protocol)
onlineString := fmt.Sprint(status.Players.Online)
maxString := fmt.Sprint(status.Players.Max)
stringData := make([]rune, 3, 3+len(protocolString)+len(status.Version.Name)+len(status.Description.Text)+len(onlineString)+len(maxString))
stringData[0], stringData[1] = '§', '1'
stringData = append(append(stringData, []rune(protocolString)...), 0)
stringData = append(append(stringData, []rune(status.Version.Name)...), 0)
stringData = append(append(stringData, []rune(status.Description.Text)...), 0)
stringData = append(append(stringData, []rune(onlineString)...), 0)
stringData = append(stringData, []rune(maxString)...)
utf16be := utf16.Encode([]rune(stringData))
length := uint16(len(utf16be))
conn.Write([]byte{
0xFF, byte(length >> 8), byte(length),
})
binary.Write(conn, binary.BigEndian, utf16be)
}
func (conn *Conn) writeLegacyDisconnect(reason string) {
var data = []byte{0xFF}
var strdata = utf16.Encode([]rune(reason))
var strlen = int16(len(strdata))
data = append(data, byte(strlen>>8), byte(strlen))
conn.Write(data)
binary.Write(conn, binary.BigEndian, strdata)
}
func (conn *Conn) writeClassicDisconnect(reason string) {
var data = []byte{0x0E}
data = append(data, reason...)
for len(data)-1 < 64 {
data = append(data, 0x20)
}
conn.Write(data)
}
var fml2hs = [...]byte{0, 70, 79, 82, 71, 69}
// Handles the handshake, and status/login state for the connection
// Returns true if the client is logging in
func (conn *Conn) handleHandshake() bool {
pk, s, err := conn.ReadPacket()
if err != nil {
conn.writeClassicDisconnect(clientVeryOldMsg)
return false
}
if s {
return false
}
handshaking, ok := pk.(*handshake.Handshaking)
if !ok {
if pk.ID() == 122 {
conn.writeLegacyStatus(conn.listener.cfg.Status(conn))
}
if pk.ID() == 78 {
conn.writeLegacyDisconnect(clientTooOldMsg)
}
return false
}
if addr := []byte(handshaking.ServerAddress); len(addr) > len(fml2hs) && [6]byte(addr[len(addr)-len(fml2hs):]) == fml2hs {
conn.usesForge = true
}
switch handshaking.NextState {
case handshake.Status:
conn.state.Store(StatusState)
pk, s, err := conn.ReadPacket()
if err != nil || s {
return false
}
switch pac := pk.(type) {
case *status.StatusRequest:
if err := conn.WritePacket(&status.StatusResponse{Data: conn.listener.cfg.Status(conn)}); err != nil {
return false
}
pk, s, err = conn.ReadPacket()
if err != nil || s {
return false
}
p, ok := pk.(*status.Ping)
if !ok {
return false
}
conn.WritePacket(p)
case *status.Ping:
conn.WritePacket(pac)
}
case handshake.Transfer:
if !conn.listener.cfg.AcceptTransfers {
conn.WritePacket(&login.Disconnect{Reason: text.Sprint("Transfers are not allowed.")})
conn.Close()
return false
}
fallthrough
case handshake.Login:
conn.state.Store(LoginState)
if handshaking.ProtocolVersion > ProtocolVersion {
conn.WritePacket(&login.Disconnect{Reason: text.TextComponent{Text: clientTooNewMsg}})
return false
}
if handshaking.ProtocolVersion < ProtocolVersion {
conn.WritePacket(&login.Disconnect{Reason: text.TextComponent{Text: clientTooOldMsg}})
return false
}
pk, s, err := conn.ReadPacket()
if err != nil || s {
return false
}
loginStart, ok := pk.(*login.LoginStart)
if !ok {
return false
}
if ok, r := conn.listener.ApprovePlayer(conn); !ok {
var reason = text.Sprint("Disconnected")
if r != nil {
reason = *r
}
conn.WritePacket(&login.Disconnect{Reason: reason})
conn.Close()
return false
}
conn.username = loginStart.Name
conn.uuid = loginStart.PlayerUUID
if conn.listener.cfg.Encrypt {
if err := conn.encrypt(); err != nil {
return false
}
if conn.listener.cfg.Authenticate {
if err := conn.authenticate(); err != nil && conn.listener.cfg.Authenticate {
conn.WritePacket(&login.Disconnect{Reason: text.TextComponent{Text: "This server uses authenticated encryption mode, and you are using a cracked account."}})
return false
}
}
}
if !conn.listener.cfg.Authenticate {
conn.uuid = username2v3(conn.username)
}
if err := conn.WritePacket(&login.SetCompression{Threshold: conn.listener.cfg.CompressionThreshold}); err != nil {
return false
}
conn.compressionSet = true
suc := &login.LoginSuccess{
UUID: conn.uuid,
Username: conn.username,
Properties: conn.properties,
}
if err := conn.WritePacket(suc); err != nil {
return false
}
pk, s, err = conn.ReadPacket()
if err != nil || s {
return false
}
_, ok = pk.(*login.LoginAcknowledged)
if !ok {
return false
}
conn.state.Store(ConfigurationState)
return true
}
return false
}
func username2v3(username string) uuid.UUID {
d := append([]byte("OfflinePlayer:"), username...)
sum := md5.Sum(d)
sum[6] &= 0x0f /* clear version */
sum[6] |= 0x30 /* set to version 3 */
sum[8] &= 0x3f /* clear variant */
sum[8] |= 0x80 /* set to IETF variant */
return uuid.UUID(sum)
}
================================================
FILE: protocol/net/encryption.go
================================================
package net
import (
"crypto/aes"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"fmt"
"github.com/zeppelinmc/zeppelin/protocol/net/cfb8"
"github.com/zeppelinmc/zeppelin/protocol/net/packet/login"
)
func (conn *Conn) encryptd(plaintext, dst []byte) {
conn.encrypter.XORKeyStream(dst, plaintext)
}
func (conn *Conn) decryptd(ciphertext, dst []byte) {
conn.decrypter.XORKeyStream(dst, ciphertext)
}
func (conn *Conn) encrypt() error {
key, err := x509.MarshalPKIXPublicKey(&conn.listener.privKey.PublicKey)
if err != nil {
return err
}
verifyToken := make([]byte, 4)
rand.Read(verifyToken)
conn.WritePacket(&login.EncryptionRequest{
PublicKey: key,
VerifyToken: verifyToken,
ShouldAuthenticate: conn.listener.cfg.Authenticate,
})
p, s, err := conn.ReadPacket()
if err != nil || s {
return err
}
res, ok := p.(*login.EncryptionResponse)
if !ok {
return fmt.Errorf("unsuccessful encryption")
}
conn.encrypted = ok
conn.sharedSecret, err = rsa.DecryptPKCS1v15(nil, conn.listener.privKey, res.SharedSecret)
if err != nil {
return err
}
conn.verifyToken, err = rsa.DecryptPKCS1v15(nil, conn.listener.privKey, res.VerifyToken)
if err != nil {
return err
}
if [4]byte(conn.verifyToken) != [4]byte(verifyToken) {
return fmt.Errorf("unsuccessful encryption")
}
block, err := aes.NewCipher(conn.sharedSecret)
if err != nil {
return err
}
conn.encrypter = cfb8.NewCFB8(block, conn.sharedSecret, false)
conn.decrypter = cfb8.NewCFB8(block, conn.sharedSecret, true)
return nil
}
================================================
FILE: protocol/net/io/buffers/buffers.go
================================================
package buffers
import (
"bytes"
"sync"
)
var Buffers = sync.Pool{
New: func() any {
return new(bytes.Buffer)
},
}
func Size() int {
buf := Buffers.Get().(*bytes.Buffer)
defer Buffers.Put(buf)
return buf.Cap()
}
================================================
FILE: protocol/net/io/compress/compress.go
================================================
package compress
import (
"bytes"
"compress/gzip"
"sync"
"github.com/4kills/go-libdeflate/v2"
"github.com/4kills/go-zlib"
)
var decompressors = sync.Pool{
New: func() any {
dc, _ := libdeflate.NewDecompressor()
return dc
},
}
var compressors = sync.Pool{
New: func() any {
dc, _ := libdeflate.NewCompressor()
return dc
},
}
var bufs = sync.Pool{
New: func() any { return new(bytes.Buffer) },
}
// RZlib is a pool of zlib.Reader's that can be reused to avoid allocations
var RZlib = sync.Pool{
New: func() any { d, _ := zlib.NewReader(nil); return d },
}
// RGzip is a pool of gzip.Reader's that can be reused to avoid allocations
var RGzip = sync.Pool{
New: func() any { d, _ := gzip.NewReader(nil); return d },
}
// WZlib is a pool of zlib.Writer's that can be reused to avoid allocations
var WZlib = sync.Pool{
New: func() any { return zlib.NewWriter(nil) },
}
// WGzip is a pool of gzip.Writer's that can be reused to avoid allocations
var WGzip = sync.Pool{
New: func() any { return gzip.NewWriter(nil) },
}
================================================
FILE: protocol/net/io/compress/lz4.go
================================================
package compress
import (
"bytes"
"encoding/binary"
"fmt"
"github.com/pierrec/lz4/v4"
)
// Decompress a lz4-java data. The data returned is only safe to use until the next operation
func DecompressLZ4(data []byte) ([]byte, error) {
var buf = bufs.Get().(*bytes.Buffer)
defer bufs.Put(buf)
buf.Reset()
var (
offsetFile int
offsetBuffer int
)
for {
if offsetFile == len(data) {
return buf.Bytes()[:offsetBuffer], nil
}
header := data[offsetFile : offsetFile+21]
offsetFile += 21
if string(header[:8]) != magic {
return buf.Bytes()[:offsetBuffer], fmt.Errorf("invalid magic value")
}
token := header[8]
compressedLength := int(binary.LittleEndian.Uint32(header[9:13]))
compressionMethod := token & 0xf0
switch compressionMethod {
case methodUncompressed:
if buf.Cap()-offsetBuffer < compressedLength {
buf.Grow(offsetBuffer + compressedLength)
}
copy(buf.Bytes()[offsetBuffer:offsetBuffer+compressedLength], data[offsetFile:offsetFile+compressedLength])
offsetBuffer += compressedLength
case methodLZ4:
decompressedLength := int(binary.LittleEndian.Uint32(header[13:17]))
if buf.Cap()-offsetBuffer < decompressedLength {
buf.Grow(offsetBuffer + decompressedLength)
}
if _, err := lz4.UncompressBlock(data[offsetFile:offsetFile+compressedLength], buf.Bytes()[offsetBuffer:offsetBuffer+decompressedLength]); err != nil {
return buf.Bytes()[:offsetBuffer], err
}
offsetBuffer += decompressedLength
}
offsetFile += compressedLength
}
}
const magic = "LZ4Block"
const (
methodUncompressed = 1 << (iota + 4)
methodLZ4
)
================================================
FILE: protocol/net/io/compress/zlib.go
================================================
package compress
import (
"bytes"
"github.com/4kills/go-libdeflate/v2"
)
// Decompress zlib. If decompressedLength is provided, the data returned will only be safe to use until the next operation
// It is recommmended to provide the decompressed length to avoid allocation. If you don't know it, provide a number likely bigger than the decompressed length.
func DecompressZlib(compressed []byte, decompressedLength *int) ([]byte, error) {
dc := decompressors.Get().(libdeflate.Decompressor)
defer decompressors.Put(dc)
if decompressedLength != nil {
dst := bufs.Get().(*bytes.Buffer)
if dst.Len() < int(*decompressedLength) {
dst.Grow(*decompressedLength)
}
defer bufs.Put(dst)
c := dst.Bytes()[:*decompressedLength]
_, decompressedResult, err := dc.DecompressZlib(compressed, c)
return decompressedResult, err
} else {
_, decompressedResult, err := dc.DecompressZlib(compressed, nil)
return decompressedResult, err
}
}
// Compresses zlib. If compressedLength is provided, data returned will only be safe to use until the next operation.
// It is recommmended to provide the compressed length to avoid allocation. If you don't know it, provide a number likely bigger than the compressed length.
func CompressZlib(decompressedData []byte, compressedLength *int) (compressed []byte, err error) {
c := compressors.Get().(libdeflate.Compressor)
defer compressors.Put(c)
if compressedLength != nil {
dst := bufs.Get().(*bytes.Buffer)
if dst.Len() < int(*compressedLength) {
dst.Grow(*compressedLength)
}
defer bufs.Put(dst)
dc := dst.Bytes()[:*compressedLength]
_, compressedResult, err := c.CompressZlib(decompressedData, dc)
return compressedResult, err
} else {
_, compressedResult, err := c.CompressZlib(decompressedData, nil)
return compressedResult, err
}
}
================================================
FILE: protocol/net/io/encoding/encoding.go
================================================
// Package encoding provides encoding and decoding of minecraft data types
package encoding
import (
"fmt"
"io"
"unsafe"
)
func AppendByte(data []byte, b int8) []byte {
return append(data, byte(b))
}
func AppendUbyte(data []byte, b byte) []byte {
return append(data, b)
}
func AppendShort(data []byte, s int16) []byte {
return append(data, byte(s>>8), byte(s))
}
func AppendUshort(data []byte, s uint16) []byte {
return append(data, byte(s>>8), byte(s))
}
func AppendInt(data []byte, i int32) []byte {
return append(data, byte(i>>24), byte(i>>16), byte(i>>8), byte(i))
}
func AppendLong(data []byte, l int64) []byte {
return append(data, byte(l>>56), byte(l>>48), byte(l>>40), byte(l>>32), byte(l>>24), byte(l>>16), byte(l>>8), byte(l))
}
func AppendVarInt(data []byte, value int32) []byte {
ux := uint32(value)
for ux >= 0x80 {
data = append(data, byte(ux&0x7F)|0x80)
ux >>= 7
}
return append(data, byte(ux))
}
func PutVarInt(data []byte, value int32) (n int) {
ux := uint32(value)
var i int
for ; ux >= 0x80; i++ {
data[i] = byte(ux&0x7F) | 0x80
ux >>= 7
}
data[i] = byte(ux)
return i
}
func WriteVarInt(w io.Writer, value int32) error {
ux := uint32(value)
for ux >= 0x80 {
if _, err := w.Write([]byte{byte(ux&0x7F) | 0x80}); err != nil {
return err
}
ux >>= 7
}
_, err := w.Write([]byte{byte(ux)})
return err
}
func VarInt(data []byte) (int32, []byte, error) {
var (
position int
currentByte byte
value int32
)
for {
if len(data) == 0 {
return value, data, io.EOF
}
currentByte = data[0]
data = data[1:]
value |= int32(currentByte&127) << position
if (currentByte & 128) == 0 {
break
}
position += 7
if position >= 32 {
return value, data, fmt.Errorf("VarInt is too big")
}
}
return value, data, nil
}
func ReadVarInt(r io.Reader) (int32, error) {
var (
position int32
currentByte byte
continueBit byte = 128
segmentBits byte = 127
value int32
)
for {
if _, err := r.Read(unsafe.Slice(¤tByte, 1)); err != nil {
return value, err
}
value |= int32(currentByte&segmentBits) << position
if (currentByte & continueBit) == 0 {
break
}
position += 7
if position >= 32 {
return value, fmt.Errorf("VarInt is too big")
}
}
return value, nil
}
func AppendVarLong(data []byte, value int64) []byte {
var (
continueBit int64 = 128
segmentBits int64 = 127
)
for {
if (value & ^segmentBits) == 0 {
return append(data, byte(value))
}
data = append(data, byte((value&segmentBits)|continueBit))
value >>= 7
}
}
func AppendString(data []byte, str string) []byte {
data = AppendVarInt(data, int32(len(str)))
return append(data, str...)
}
func String(data []byte) (string, error) {
l, strd, err := VarInt(data)
if err != nil {
return "", err
}
return unsafe.String(unsafe.SliceData(strd), l), nil
}
type BitSet []int64
func (set BitSet) Get(i int) bool {
return (set[i/64] & (1 << (i % 64))) != 0
}
func (set BitSet) Set(i int) {
set[i/64] |= 1 << (i % 64)
}
func (set BitSet) Unset(i int) {
set[i/64] &= ^(1 << (i % 64))
}
type FixedBitSet []byte
func (set FixedBitSet) Get(i int) bool {
return (set[i/8] & (1 << (i % 8))) != 0
}
func (set FixedBitSet) Set(i int) {
set[i/8] |= 1 << (i % 8)
}
func (set FixedBitSet) Unset(i int) {
set[i/8] &= ^(1 << (i % 8))
}
================================================
FILE: protocol/net/io/encoding/reader.go
================================================
package encoding
import (
"encoding/json"
"fmt"
"io"
"math"
"unsafe"
"github.com/zeppelinmc/zeppelin/protocol/nbt"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/google/uuid"
)
type Reader struct {
r io.Reader
length int
}
func NewReader(r io.Reader, length int) Reader {
return Reader{r, length}
}
func (r *Reader) SetLength(length int) {
r.length = length
}
func (r Reader) readBytes(l int) ([]byte, error) {
if l < 0 {
return nil, fmt.Errorf("negative length for make (read bytes)")
}
arr := make([]byte, l)
_, err := r.r.Read(arr)
return arr, err
}
func (r Reader) Read(dst []byte) (i int, err error) {
return r.r.Read(dst)
}
func (r Reader) Bool(b *bool) error {
var byt byte
err := r.Ubyte(&byt)
*b = byt != 0
return err
}
func (r Reader) ReadAll(data *[]byte) (err error) {
*data, err = r.readBytes(r.length)
return err
}
func (r Reader) Byte(i *int8) error {
d, err := r.readBytes(1)
*i = int8(d[0])
return err
}
func (r Reader) Ubyte(i *byte) error {
d, err := r.readBytes(1)
*i = d[0]
return err
}
func (r Reader) Short(i *int16) error {
d, err := r.readBytes(2)
*i = int16(d[0])<<8 | int16(d[1])
return err
}
func (r Reader) Ushort(i *uint16) error {
d, err := r.readBytes(2)
*i = uint16(d[0])<<8 | uint16(d[1])
return err
}
func (r Reader) Int(i *int32) error {
d, err := r.readBytes(4)
*i = int32(d[0])<<24 | int32(d[1])<<16 | int32(d[2])<<8 | int32(d[3])
return err
}
func (r Reader) Long(i *int64) error {
d, err := r.readBytes(8)
*i = int64(d[0])<<56 | int64(d[1])<<48 | int64(d[2])<<40 | int64(d[3])<<32 | int64(d[4])<<24 | int64(d[5])<<16 | int64(d[6])<<8 | int64(d[7])
return err
}
func (r Reader) Float(f *float32) error {
return r.Int((*int32)(unsafe.Pointer(f)))
}
func (r Reader) Double(f *float64) error {
return r.Long((*int64)(unsafe.Pointer(f)))
}
func (r Reader) String(s *string) error {
var l int32
if _, err := r.VarInt(&l); err != nil {
return err
}
d, err := r.readBytes(int(l))
*s = unsafe.String(unsafe.SliceData(d), len(d))
return err
}
func (r Reader) Identifier(s *string) error {
return r.String(s)
}
func (r Reader) VarInt(value *int32) (i int, err error) {
var (
position int32
currentByte byte
CONTINUE_BIT byte = 128
SEGMENT_BITS byte = 127
size int
)
for {
if err := r.Ubyte(¤tByte); err != nil {
return size, err
}
*value |= int32((currentByte & SEGMENT_BITS)) << position
size++
if (currentByte & CONTINUE_BIT) == 0 {
break
}
position += 7
if position >= 32 {
return size, fmt.Errorf("VarInt is too big")
}
}
return size, nil
}
func (r Reader) VarLong(value *int64) error {
var (
position int64
currentByte byte
CONTINUE_BIT byte = 128
SEGMENT_BITS byte = 127
)
for {
if err := r.Ubyte(¤tByte); err != nil {
return err
}
*value |= int64((currentByte & SEGMENT_BITS)) << position
if (currentByte & CONTINUE_BIT) == 0 {
break
}
position += 7
if position >= 32 {
return fmt.Errorf("VarInt is too big")
}
}
return nil
}
func (r Reader) Position(x, y, z *int32) error {
var l int64
err := r.Long(&l)
*x = int32(l >> 38)
*y = int32(l << 52 >> 52)
*z = int32(l << 26 >> 38)
return err
}
func (r Reader) UUID(u *uuid.UUID) error {
d, err := r.readBytes(16)
*u = uuid.UUID(d)
return err
}
func (r Reader) BitSet(data *BitSet) error {
var l int32
if _, err := r.VarInt(&l); err != nil {
return err
}
if l < 0 {
return fmt.Errorf("negative length for make (bitset)")
}
*data = make([]int64, l)
for _, l := range *data {
if err := r.Long(&l); err != nil {
return err
}
}
return nil
}
func (r Reader) FixedBitSet(data *FixedBitSet, bits int32) error {
*data = make(FixedBitSet, int(math.Ceil(float64(bits)/8)))
for _, l := range *data {
if err := r.Ubyte(&l); err != nil {
return err
}
}
return nil
}
// Length prefixed byte array
func (r Reader) ByteArray(s *[]byte) error {
var l int32
if _, err := r.VarInt(&l); err != nil {
return err
}
d, err := r.readBytes(int(l))
*s = d
return err
}
func (r Reader) FixedByteArray(s []byte) error {
_, err := r.r.Read(s)
return err
}
func (r Reader) NBT(v any) error {
dec := nbt.NewDecoder(r.r)
dec.ReadRootName(false)
_, err := dec.Decode(v)
return err
}
func (r Reader) JSONTextComponent(comp *text.TextComponent) error {
var d []byte
if err := r.ByteArray(&d); err != nil {
return err
}
return json.Unmarshal(d, comp)
}
func (r Reader) TextComponent(comp *text.TextComponent) error {
var tag int8
if err := r.Byte(&tag); err != nil {
return err
}
switch tag {
case nbt.String:
return r.nbtString(&comp.Text)
case nbt.Compound:
return r.NBT(comp)
default:
return fmt.Errorf("invalid text component root compound")
}
}
func (r Reader) nbtString(v *string) error {
var stringlen int16
if err := r.Short(&stringlen); err != nil {
return err
}
d, err := r.readBytes(int(stringlen))
*v = unsafe.String(unsafe.SliceData(d), len(d))
return err
}
================================================
FILE: protocol/net/io/encoding/writer.go
================================================
package encoding
import (
"bytes"
"encoding/json"
"fmt"
"math"
"unsafe"
"github.com/zeppelinmc/zeppelin/protocol/nbt"
"github.com/zeppelinmc/zeppelin/protocol/text"
"github.com/google/uuid"
)
type Writer struct {
w *bytes.Buffer
}
func NewWriter(w *bytes.Buffer) Writer {
return Writer{w}
}
func (w Writer) Write(data []byte) (i int, err error) {
return w.w.Write(data)
}
func (w Writer) Bool(b bool) error {
return w.Ubyte(*(*byte)(unsafe.Pointer(&b)))
}
func (w Writer) Byte(i int8) error {
return w.Ubyte(uint8(i))
}
func (w Writer) Ubyte(i uint8) error {
_, err := w.Write([]byte{i})
return err
}
func (w Writer) Short(i int16) error {
return w.Ushort(uint16(i))
}
func (w Writer) Ushort(i uint16) error {
_, err := w.Write(
[]byte{
byte(i >> 8),
byte(i),
},
)
return err
}
func (w Writer) Int(i int32) error {
_, err := w.Write(
[]byte{
byte(i >> 24),
byte(i >> 16),
byte(i >> 8),
byte(i),
},
)
return err
}
func (w Writer) Long(i int64) error {
_, err := w.Write(
[]byte{
byte(i >> 56),
byte(i >> 48),
byte(i >> 40),
byte(i >> 32),
byte(i >> 24),
byte(i >> 16),
byte(i >> 8),
byte(i),
},
)
return err
}
func (w Writer) Float(f float32) error {
return w.Int(int32(math.Float32bits(f)))
}
func (w Writer) Double(f float64) error {
return w.Long(int64(math.Float64bits(f)))
}
func (w Writer) String(s string) error {
if err := w.VarInt(int32(len(s))); err != nil {
return err
}
_, err := w.Write(unsafe.Slice(unsafe.StringData(s), len(s))) //(*(*[]byte)(unsafe.Pointer(&s)))
return err
}
func (w Writer) Identifier(s string) error {
if len(s) > 32767 {
return fmt.Errorf("expected identifier len to be smaller than 32767, got %d", len(s))
}
if err := w.VarInt(int32(len(s))); err != nil {
return err
}
_, err := w.Write(unsafe.Slice(unsafe.StringData(s), len(s))) //(*(*[]byte)(unsafe.Pointer(&s)))
return err
}
func (w Writer) VarInt(value int32) error {
ux := uint32(value)
for ux >= 0x80 {
if err := w.Ubyte(byte(ux&0x7F) | 0x80); err != nil {
return err
}
ux >>= 7
}
return w.Ubyte(byte(ux))
}
func (w Writer) VarLong(value int64) error {
var (
CONTINUE_BIT int64 = 128
SEGMENT_BITS int64 = 127
)
for {
if (value & ^SEGMENT_BITS) == 0 {
return w.Ubyte(byte(value))
}
if err := w.Ubyte(byte((value & SEGMENT_BITS) | CONTINUE_BIT)); err != nil {
return err
}
value >>= 7
}
}
func (w Writer) Position(x, y, z int32) error {
return w.Long(((int64(x) & 0x3FFFFFF) << 38) | ((int64(z) & 0x3FFFFFF) << 12) | (int64(y) & 0xFFF))
}
func (w Writer) UUID(u uuid.UUID) error {
d := [16]byte(u)
_, err := w.Write(d[:])
return err
}
func (w Writer) BitSet(data BitSet) error {
if err := w.VarInt(int32(len(data))); err != nil {
return err
}
for _, l := range data {
if err := w.Long(l); err != nil {
return err
}
}
return nil
}
func (w Writer) FixedBitSet(data FixedBitSet) error {
for _, l := range data {
if err := w.Ubyte(l); err != nil {
return err
}
}
return nil
}
// Length prefixed byte array
func (w Writer) ByteArray(s []byte) error {
if err := w.VarInt(int32(len(s))); err != nil {
return err
}
_, err := w.w.Write(s)
return err
}
func (w Writer) FixedByteArray(s []byte) error {
_, err := w.w.Write(s)
return err
}
func (w Writer) JSONTextComponent(comp text.TextComponent) error {
d, _ := json.Marshal(comp)
return w.ByteArray(d)
}
func (w Writer) TextComponent(comp text.TextComponent) error {
return w.NBT(comp)
}
func (w Writer) StringTextComponent(text string) error {
if err := w.Byte(8); err != nil {
return err
}
if err := w.Short(int16(len(text))); err != nil {
return err
}
return w.String(text)
}
func (w Writer) NBT(data any) error {
enc := nbt.NewEncoder(w.w)
enc.WriteRootName(false)
return enc.Encode("", data)
}
================================================
FILE: protocol/net/listener.go
================================================
// Package net provides tools for creating minecraft servers, such as packet sending, registry data, encryption, authentication, compression and more
package net
import (
"crypto/rsa"
"fmt"
"github.com/zeppelinmc/zeppelin/protocol/net/packet"
"net"
"github.com/zeppelinmc/zeppelin/protocol/text"
)
const (
ProtocolVersion = 767
)
const (
HandshakingState = iota
StatusState
LoginState
ConfigurationState
PlayState
)
type Listener struct {
net.Listener
cfg Config
ApprovePlayer func(*Conn) (ok bool, disconnectionReason *text.TextComponent)
newConns chan *Conn
err chan error
privKey *rsa.PrivateKey
}
func (l *Listener) SetStatusProvider(p StatusProvider) {
l.cfg.Status = p
}
func (l *Listener) StatusProvider() StatusProvider {
return l.cfg.Status
}
func (l *Listener) listen() {
for {
c, err := l.Listener.Accept()
if err != nil {
l.err <- err
close(l.newConns)
return
}
conn := l.newConn(c)
go func() {
if conn.handleHandshake() {
l.newConns <- conn
}
}()
}
}
func (l *Listener) newConn(c net.Conn) *Conn {
conn := &Conn{
Conn: c,
listener: l,
packetWriteChan: make(chan packet.Encodeable, l.cfg.PacketWriteChanBuffer),
}
return conn
}
func (l *Listener) Close() error {
close(l.newConns)
l.err <- fmt.Errorf("listener closed")
return nil
}
func (l *Listener) Accept() (*Conn, error) {
conn, ok := <-l.newConns
if !ok {
return nil, <-l.err
}
return conn, nil
}
================================================
FILE: protocol/net/metadata/metadata.go
================================================
package metadata
import (
"github.com/google/uuid"
"github.com/zeppelinmc/zeppelin/protocol/net/slot"
"github.com/zeppelinmc/zeppelin/protocol/text"
)
/*
[index] -> value
value must be one of the types below
learn more about metadata at https://wiki.vg/Entity_metadata
*/
type Metadata map[byte]any
type (
Byte int8 //0
VarInt int32 //1
VarLong int64 //2
Float float32 //3
String string //4
TextComponent text.TextComponent //5
OptionalTextComponent *text.TextComponent //6
Slot = slot.Slot //7
Boolean bool //8
Rotations [3]Float //9
Position [3]int32 //10
OptionalPosition *[3]int32 //11
Direction VarInt //12
OptionalUUID *uuid.UUID //13
BlockState VarInt //14
OptionalBlockState VarInt //15
NBT any //16
// Particle //17
VillagerData [3]Float //18 | [type, profession, level]
OptionalVarInt VarInt //19
Pose VarInt //20
CatVariant VarInt //21
FrogVariant VarInt //22
GlobalPosition struct {
DimensionIdentifier String
Position Position
}
OptionalGlobalPosition *GlobalPosition //23
PaintingVariant VarInt //24
SnifferState VarInt //25
Vector3 [3]Float //26
Quatermion [4]Float //27
)
const (
Standing Pose = iota
FallFlying
Sleeping
Swimming
SpinAttack
Sneaking
LongJumping
Dying
Croaking
UsingTongue
Sitting
Roaring
Sniffing
Emerging
Digging
)
const (
SnifferIdling SnifferState = iota
SnifferFeelingHappy
SnifferScenting
SnifferSniffing
SnifferSearching
SnifferDigging
SnifferRising
)
const (
VillagerTypeDesert = iota
VillagerTypeJungle
VillagerTypePlains
VillagerTypeSavanna
VillagerTypeSnow
VillagerTypeSwamp
VillagerTypeTaiga
)
const (
VillagerProfessionNone = iota
VillagerProfessionArmorer
VillagerProfessionButcher
VillagerProfessionCartographer
VillagerProfessionCleric
VillagerProfessionFarmer
VillagerProfessionFisherman
VillagerProfessionFletcher
VillagerProfessionLeatherworker
VillagerProfessionLibrarian
VillagerProfessionMason // hi mason
VillagerProfessionNitwit
VillagerProfessionShepherd
VillagerProfessionToolsmith
VillagerProfessionWeaponsmith
)
const (
IsOnFire = 1 << iota
IsCrouching
IsRiding_unused
IsSprinting
IsSwimming
IsInvisible
HasGlowingEffect
IsFlyingWithElytra
)
const (
IsHandActive = 1 << iota
IsOffhandActive
IsInRiptideSpinAttack
)
// base state
const (
// Byte (0)
BaseIndex = iota
// VarInt (1)
AirTicksIndex
// OptionalTextComponent (6)
CustomNameIndex
// Boolean (8)
IsCustomNameVisibleIndex
// Boolean (8)
IsSilentIndex
// Boolean (8)
HasNoGravityIndex
// Pose (21)
PoseIndex
// VarInt (1)
TicksFrozenInPowderedSnowIndex
)
// living state extends state
const (
// Byte (0)
LivingEntityHandstatesIndex = iota + 8
// Float (3)
LivingEntityHealthIndex
// VarInt (1)
LivingEntityPotionEffectColorIndex
// Boolean (8)
LivingEntityPotionEffectAmbientIndex
// VarInt (1)
LivingEntityArrowCountIndex
// VarInt (1)
LivingEntityBeeStingersCountIndex
// Optional Position (11)
LivingEntitySleepingBedPositionIndex
)
// player extends living state
const (
// Float (3)
PlayerAdditionalHeartsIndex = iota + 15
// VarInt (1)
PlayerScoreIndex
// Byte (0)
PlayerDisplayedSkinPartsIndex
// Byte (0)
PlayerMainHandIndex
// NBT (16)
LeftShoulderEntityData
// NBT (16)
RightShoulderEntityData
)
================================================
FILE: protocol/net/metadata/new.go
================================================
package metadata
// Player returns the default player metadata object
func Player(health float32) Metadata {
return Metadata{
// Entity
BaseIndex: Byte(0),
AirTicksIndex: VarInt(300),
CustomNameIndex: OptionalTextComponent(nil),
IsCustomNameVisibleIndex: Boolean(false),
IsSilentIndex: Boolean(false),
HasNoGravityIndex: Boolean(false),
PoseIndex: Standing,
TicksFrozenInPowderedSnowIndex: VarInt(0),
// Living Entity extends Entity
LivingEntityHandstatesIndex: Byte(0),
LivingEntityHealthIndex: Float(health), // this one is actually stored in data (others are too but arent used yet)
//LivingEntityPotionEffectColorIndex: VarInt(0),
LivingEntityPotionEffectAmbientIndex: Boolean(false),
LivingEntityArrowCountIndex: VarInt(0),
LivingEntityBeeStingersCountIndex: VarInt(0),
LivingEntitySleepingBedPositionIndex: OptionalPosition(nil),
// Player extends Living Entity
PlayerAdditionalHeartsIndex: Float(0),
PlayerScoreIndex: VarInt(0),
PlayerDisplayedSkinPartsIndex: Byte(0),
PlayerMainHandIndex: Byte(1),
}
}
================================================
FILE: protocol/net/packet/configuration/clientInfo.go
================================================
package configuration
import (
"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding"
)
const (
ChatModeEnabled = iota
ChatModeCommandsOnly
ChatModeHidden
)
const (
CapeEnabled = 1 << iota
JacketEnabled
LeftSleeveEnabled
RightSleeveEnabled
LeftPantsLegEnabled
RightPantsLegEnabled
HatEnabled
)
const (
MainHandLeft = iota
MainHandRight
)
// serverbound
const PacketIdClientInformation = 0x00
type ClientInformation struct {
Locale string
ViewDistance int8
ChatMode int32
ChatColors bool
DisplayedSkinParts byte
MainHand int32
EnableTextFiltering bool
AllowServerListing bool
}
func (ClientInformation) ID() int32 {
return 0x00
}
func (c *ClientInformation) Encode(w encoding.Writer) error {
if err := w.String(c.Locale); err != nil {
return err
}
if err := w.Byte(c.ViewDistance); err != nil {
return err
}
if err := w.VarInt(c.ChatMode); err != nil {
return err
}
if err := w.Bool(c.ChatColors); err != nil {
return err
}
if err := w.Ubyte(c.DisplayedSkinParts); err != nil {
return err
}
if err := w.VarInt(c.MainHand); err != nil {
return err
}
if err := w.Bool(c.EnableTextFiltering); err != nil {
return err
}
return w.Bool(c.AllowServerListing)
}
func (c *ClientInformation) Decode(r encoding.Reader) error {
if err := r.String(&c.Locale); err != nil {
return err
}
if err := r.Byte(&c.ViewDistance); err != nil {
return err
}
if _, err := r.VarInt(&c.ChatMode); err != nil {
return err
}
if err := r.Bool(&c.ChatColors); err != nil {
return err
}
if err := r.Ubyte(&c.DisplayedSkinParts); err != nil {
return err
}
if _, err := r.VarInt(&c.MainHand); err != nil {
return err
}
if err := r.Bool(&c.EnableTextFiltering); err != nil {
return err
}
return r.Bool(&c.AllowServerListing)
}
================================================
FILE: protocol/net/packet/configuration/cookie.go
================================================
package configuration
import "github.com/zeppelinmc/zeppelin/protocol/net/packet/login"
//clientbound
const PacketIdCookieRequest = 0x00
type CookieRequest struct{ login.CookieRequest }
func (CookieRequest) ID() int32 {
return 0x00
}
//serverbound
const PacketIdCookieResponse = 0x01
type CookieResponse struct{ login.CookieResponse }
func (CookieResponse) ID() int32 {
return 0x01
}
================================================
FILE: protocol/net/packet/configuration/disconnect.go
================================================
package configuration
import (
"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding"
"github.com/zeppelinmc/zeppelin/protocol/text"
)
// clientbound
const PacketIdDisconnect = 0x02
type Disconnect struct {
Reason text.TextComponent
}
func (Disconnect) ID() int32 {
return 0x02
}
func (d *Disconnect) Encode(w encoding.Writer) error {
return w.TextComponent(d.Reason)
}
func (d *Disconnect) Decode(r encoding.Reader) error {
return r.TextComponent(&d.Reason)
}
================================================
FILE: protocol/net/packet/configuration/finish.go
================================================
package configuration
import (
"github.com/zeppelinmc/zeppelin/protocol/net/packet"
)
co
gitextract_f2qo_zll/
├── .github/
│ └── workflows/
│ └── go.yml
├── LICENSE
├── commands/
│ ├── commands.go
│ ├── debug.go
│ ├── gc.go
│ ├── mem.go
│ ├── tick.go
│ └── time.go
├── go.mod
├── go.sum
├── main.go
├── properties/
│ ├── decode.go
│ ├── encode.go
│ └── properties.go
├── protocol/
│ ├── nbt/
│ │ ├── decoder.go
│ │ ├── encoder.go
│ │ ├── qnbt/
│ │ │ ├── abi.go
│ │ │ ├── buffer.go
│ │ │ ├── decode.go
│ │ │ ├── list.go
│ │ │ ├── malloc.go
│ │ │ ├── map.go
│ │ │ ├── primitive.go
│ │ │ ├── qnbt.go
│ │ │ └── struct.go
│ │ └── staticReader.go
│ ├── net/
│ │ ├── authentication.go
│ │ ├── cfb8/
│ │ │ └── cfb8.go
│ │ ├── config.go
│ │ ├── conn.go
│ │ ├── encryption.go
│ │ ├── io/
│ │ │ ├── buffers/
│ │ │ │ └── buffers.go
│ │ │ ├── compress/
│ │ │ │ ├── compress.go
│ │ │ │ ├── lz4.go
│ │ │ │ └── zlib.go
│ │ │ └── encoding/
│ │ │ ├── encoding.go
│ │ │ ├── reader.go
│ │ │ └── writer.go
│ │ ├── listener.go
│ │ ├── metadata/
│ │ │ ├── metadata.go
│ │ │ └── new.go
│ │ ├── packet/
│ │ │ ├── configuration/
│ │ │ │ ├── clientInfo.go
│ │ │ │ ├── cookie.go
│ │ │ │ ├── disconnect.go
│ │ │ │ ├── finish.go
│ │ │ │ ├── keepAlive.go
│ │ │ │ ├── ping.go
│ │ │ │ ├── plugin.go
│ │ │ │ ├── registryData.go
│ │ │ │ └── resetChat.go
│ │ │ ├── handshake/
│ │ │ │ └── handshake.go
│ │ │ ├── login/
│ │ │ │ ├── cookie.go
│ │ │ │ ├── disconnect.go
│ │ │ │ ├── encryption.go
│ │ │ │ ├── loginStart.go
│ │ │ │ ├── loginSuccess.go
│ │ │ │ ├── plugin.go
│ │ │ │ └── setCompression.go
│ │ │ ├── packet.go
│ │ │ ├── play/
│ │ │ │ ├── acknowledgeBlockChange.go
│ │ │ │ ├── blockAction.go
│ │ │ │ ├── blockEntityData.go
│ │ │ │ ├── blockUpdate.go
│ │ │ │ ├── bundleDelimiter.go
│ │ │ │ ├── changeDifficulty.go
│ │ │ │ ├── chatCommand.go
│ │ │ │ ├── chatMessage.go
│ │ │ │ ├── chunkBatch.go
│ │ │ │ ├── chunkData.go
│ │ │ │ ├── clickContainer.go
│ │ │ │ ├── clientInfo.go
│ │ │ │ ├── closeContainer.go
│ │ │ │ ├── commands.go
│ │ │ │ ├── confirmTeleport.go
│ │ │ │ ├── damageEvent.go
│ │ │ │ ├── deleteMessage.go
│ │ │ │ ├── disconnect.go
│ │ │ │ ├── disguisedChatMessage.go
│ │ │ │ ├── entityAnimation.go
│ │ │ │ ├── entityEvent.go
│ │ │ │ ├── entitySoundEffect.go
│ │ │ │ ├── gameEvent.go
│ │ │ │ ├── hurtAnimation.go
│ │ │ │ ├── interact.go
│ │ │ │ ├── keepAlive.go
│ │ │ │ ├── login.go
│ │ │ │ ├── openScreen.go
│ │ │ │ ├── playerAbilitiesCB.go
│ │ │ │ ├── playerAbilitiesSB.go
│ │ │ │ ├── playerChatMessage.go
│ │ │ │ ├── playerCommand.go
│ │ │ │ ├── playerInfoRemove.go
│ │ │ │ ├── playerInfoUpdate.go
│ │ │ │ ├── playerSession.go
│ │ │ │ ├── plugin.go
│ │ │ │ ├── removeEntities.go
│ │ │ │ ├── serverData.go
│ │ │ │ ├── serverLinks.go
│ │ │ │ ├── setCenterChunk.go
│ │ │ │ ├── setContainerContent.go
│ │ │ │ ├── setCreativeModeSlot.go
│ │ │ │ ├── setDefaultSpawnPosition.go
│ │ │ │ ├── setEntityMetadata.go
│ │ │ │ ├── setEntityVelocity.go
│ │ │ │ ├── setHeadRotation.go
│ │ │ │ ├── setHeldItemCB.go
│ │ │ │ ├── setHeldItemSB.go
│ │ │ │ ├── setPlayerOnGround.go
│ │ │ │ ├── setPlayerPosition.go
│ │ │ │ ├── setPlayerPositionAndRotation.go
│ │ │ │ ├── setPlayerRotation.go
│ │ │ │ ├── setTickingState.go
│ │ │ │ ├── signedChatCommand.go
│ │ │ │ ├── soundEffect.go
│ │ │ │ ├── spawnEntity.go
│ │ │ │ ├── stepTick.go
│ │ │ │ ├── swingArm.go
│ │ │ │ ├── synchronizePlayerPosition.go
│ │ │ │ ├── systemChatMessage.go
│ │ │ │ ├── updateEntityPosition.go
│ │ │ │ ├── updateEntityPositionAndRotation.go
│ │ │ │ ├── updateEntityRotation.go
│ │ │ │ ├── updateRecipeBook.go
│ │ │ │ ├── updateSectionBlocks.go
│ │ │ │ ├── updateTags.go
│ │ │ │ ├── updateTime.go
│ │ │ │ └── useItemOn.go
│ │ │ └── status/
│ │ │ ├── ping.go
│ │ │ └── status.go
│ │ ├── pool.go
│ │ ├── registry/
│ │ │ ├── embed.go
│ │ │ └── registry.go
│ │ ├── slot/
│ │ │ ├── comp_dec.go
│ │ │ └── slot.go
│ │ └── tags/
│ │ └── tags.go
│ └── text/
│ ├── builder.go
│ ├── color.go
│ └── text.go
├── readme.md
├── server/
│ ├── command/
│ │ ├── builder.go
│ │ ├── command.go
│ │ ├── graph.go
│ │ └── manager.go
│ ├── container/
│ │ └── container.go
│ ├── entity/
│ │ ├── entity.go
│ │ └── levelEntity.go
│ ├── player/
│ │ ├── chunks.go
│ │ ├── conn.go
│ │ ├── handler_chat_command.go
│ │ ├── player.go
│ │ ├── playerlist.go
│ │ └── state/
│ │ ├── list/
│ │ │ └── playerlist.go
│ │ ├── playerEntity.go
│ │ └── playerEntityManager.go
│ ├── plugin.go
│ ├── registry/
│ │ ├── activity.go
│ │ ├── armor_material.go
│ │ ├── attribute.go
│ │ ├── block.go
│ │ ├── block_entity_type.go
│ │ ├── block_predicate_type.go
│ │ ├── block_type.go
│ │ ├── cat_variant.go
│ │ ├── chunk_status.go
│ │ ├── command_argument_type.go
│ │ ├── creative_mode_tab.go
│ │ ├── custom_stat.go
│ │ ├── data_component_type.go
│ │ ├── decorated_pot_pattern.go
│ │ ├── enchantment_effect_component_type.go
│ │ ├── enchantment_entity_effect_type.go
│ │ ├── enchantment_level_based_value_type.go
│ │ ├── enchantment_location_based_effect_type.go
│ │ ├── enchantment_provider_type.go
│ │ ├── enchantment_value_effect_type.go
│ │ ├── entity_sub_predicate_type.go
│ │ ├── entity_type.go
│ │ ├── float_provider_type.go
│ │ ├── fluid.go
│ │ ├── frog_variant.go
│ │ ├── game_event.go
│ │ ├── height_provider_type.go
│ │ ├── instrument.go
│ │ ├── int_provider_type.go
│ │ ├── item.go
│ │ ├── item_sub_predicate_type.go
│ │ ├── loot_condition_type.go
│ │ ├── loot_function_type.go
│ │ ├── loot_nbt_provider_type.go
│ │ ├── loot_number_provider_type.go
│ │ ├── loot_pool_entry_type.go
│ │ ├── loot_score_provider_type.go
│ │ ├── map_decoration_type.go
│ │ ├── memory_module_type.go
│ │ ├── menu.go
│ │ ├── mob_effect.go
│ │ ├── number_format_type.go
│ │ ├── particle_type.go
│ │ ├── point_of_interest_type.go
│ │ ├── pos_rule_test.go
│ │ ├── position_source_type.go
│ │ ├── potion.go
│ │ ├── recipe_serializer.go
│ │ ├── recipe_type.go
│ │ ├── registry.go
│ │ ├── rule_block_entity_modifier.go
│ │ ├── rule_test.go
│ │ ├── schedule.go
│ │ ├── sensor_type.go
│ │ ├── sound_event.go
│ │ ├── stat_type.go
│ │ ├── trigger_type.go
│ │ ├── villager_profession.go
│ │ ├── villager_type.go
│ │ ├── worldgen_biome_source.go
│ │ ├── worldgen_block_state_provider_type.go
│ │ ├── worldgen_carver.go
│ │ ├── worldgen_chunk_generator.go
│ │ ├── worldgen_density_function_type.go
│ │ ├── worldgen_feature.go
│ │ ├── worldgen_feature_size_type.go
│ │ ├── worldgen_foliage_placer_type.go
│ │ ├── worldgen_material_condition.go
│ │ ├── worldgen_material_rule.go
│ │ ├── worldgen_placement_modifier_type.go
│ │ ├── worldgen_pool_alias_binding.go
│ │ ├── worldgen_root_placer_type.go
│ │ ├── worldgen_structure_piece.go
│ │ ├── worldgen_structure_placement.go
│ │ ├── worldgen_structure_pool_element.go
│ │ ├── worldgen_structure_processor.go
│ │ ├── worldgen_structure_type.go
│ │ ├── worldgen_tree_decorator_type.go
│ │ └── worldgen_trunk_placer_type.go
│ ├── server.go
│ ├── tick/
│ │ └── tick.go
│ └── world/
│ ├── block/
│ │ ├── 0block.go
│ │ ├── acaciaButton.go
│ │ ├── acaciaDoor.go
│ │ ├── acaciaFence.go
│ │ ├── acaciaFenceGate.go
│ │ ├── acaciaHangingSign.go
│ │ ├── acaciaLeaves.go
│ │ ├── acaciaLog.go
│ │ ├── acaciaPlanks.go
│ │ ├── acaciaPressurePlate.go
│ │ ├── acaciaSapling.go
│ │ ├── acaciaSign.go
│ │ ├── acaciaSlab.go
│ │ ├── acaciaStairs.go
│ │ ├── acaciaTrapdoor.go
│ │ ├── acaciaWallHangingSign.go
│ │ ├── acaciaWallSign.go
│ │ ├── acaciaWood.go
│ │ ├── activatorRail.go
│ │ ├── air.go
│ │ ├── allium.go
│ │ ├── amethystBlock.go
│ │ ├── amethystCluster.go
│ │ ├── ancientDebris.go
│ │ ├── andesite.go
│ │ ├── andesiteSlab.go
│ │ ├── andesiteStairs.go
│ │ ├── andesiteWall.go
│ │ ├── anvil.go
│ │ ├── attachedMelonStem.go
│ │ ├── attachedPumpkinStem.go
│ │ ├── azalea.go
│ │ ├── azaleaLeaves.go
│ │ ├── azureBluet.go
│ │ ├── bamboo.go
│ │ ├── bambooBlock.go
│ │ ├── bambooButton.go
│ │ ├── bambooDoor.go
│ │ ├── bambooFence.go
│ │ ├── bambooFenceGate.go
│ │ ├── bambooHangingSign.go
│ │ ├── bambooMosaic.go
│ │ ├── bambooMosaicSlab.go
│ │ ├── bambooMosaicStairs.go
│ │ ├── bambooPlanks.go
│ │ ├── bambooPressurePlate.go
│ │ ├── bambooSapling.go
│ │ ├── bambooSign.go
│ │ ├── bambooSlab.go
│ │ ├── bambooStairs.go
│ │ ├── bambooTrapdoor.go
│ │ ├── bambooWallHangingSign.go
│ │ ├── bambooWallSign.go
│ │ ├── barrel.go
│ │ ├── barrier.go
│ │ ├── basalt.go
│ │ ├── beacon.go
│ │ ├── bedrock.go
│ │ ├── beeNest.go
│ │ ├── beehive.go
│ │ ├── beetroots.go
│ │ ├── bell.go
│ │ ├── bigDripleaf.go
│ │ ├── bigDripleafStem.go
│ │ ├── birchButton.go
│ │ ├── birchDoor.go
│ │ ├── birchFence.go
│ │ ├── birchFenceGate.go
│ │ ├── birchHangingSign.go
│ │ ├── birchLeaves.go
│ │ ├── birchLog.go
│ │ ├── birchPlanks.go
│ │ ├── birchPressurePlate.go
│ │ ├── birchSapling.go
│ │ ├── birchSign.go
│ │ ├── birchSlab.go
│ │ ├── birchStairs.go
│ │ ├── birchTrapdoor.go
│ │ ├── birchWallHangingSign.go
│ │ ├── birchWallSign.go
│ │ ├── birchWood.go
│ │ ├── blackBanner.go
│ │ ├── blackBed.go
│ │ ├── blackCandle.go
│ │ ├── blackCandleCake.go
│ │ ├── blackCarpet.go
│ │ ├── blackConcrete.go
│ │ ├── blackConcretePowder.go
│ │ ├── blackGlazedTerracotta.go
│ │ ├── blackShulkerBox.go
│ │ ├── blackStainedGlass.go
│ │ ├── blackStainedGlassPane.go
│ │ ├── blackTerracotta.go
│ │ ├── blackWallBanner.go
│ │ ├── blackWool.go
│ │ ├── blackstone.go
│ │ ├── blackstoneSlab.go
│ │ ├── blackstoneStairs.go
│ │ ├── blackstoneWall.go
│ │ ├── blastFurnace.go
│ │ ├── blueBanner.go
│ │ ├── blueBed.go
│ │ ├── blueCandle.go
│ │ ├── blueCandleCake.go
│ │ ├── blueCarpet.go
│ │ ├── blueConcrete.go
│ │ ├── blueConcretePowder.go
│ │ ├── blueGlazedTerracotta.go
│ │ ├── blueIce.go
│ │ ├── blueOrchid.go
│ │ ├── blueShulkerBox.go
│ │ ├── blueStainedGlass.go
│ │ ├── blueStainedGlassPane.go
│ │ ├── blueTerracotta.go
│ │ ├── blueWallBanner.go
│ │ ├── blueWool.go
│ │ ├── boneBlock.go
│ │ ├── bookshelf.go
│ │ ├── brainCoral.go
│ │ ├── brainCoralBlock.go
│ │ ├── brainCoralFan.go
│ │ ├── brainCoralWallFan.go
│ │ ├── brewingStand.go
│ │ ├── brickSlab.go
│ │ ├── brickStairs.go
│ │ ├── brickWall.go
│ │ ├── bricks.go
│ │ ├── brownBanner.go
│ │ ├── brownBed.go
│ │ ├── brownCandle.go
│ │ ├── brownCandleCake.go
│ │ ├── brownCarpet.go
│ │ ├── brownConcrete.go
│ │ ├── brownConcretePowder.go
│ │ ├── brownGlazedTerracotta.go
│ │ ├── brownMushroom.go
│ │ ├── brownMushroomBlock.go
│ │ ├── brownShulkerBox.go
│ │ ├── brownStainedGlass.go
│ │ ├── brownStainedGlassPane.go
│ │ ├── brownTerracotta.go
│ │ ├── brownWallBanner.go
│ │ ├── brownWool.go
│ │ ├── bubbleColumn.go
│ │ ├── bubbleCoral.go
│ │ ├── bubbleCoralBlock.go
│ │ ├── bubbleCoralFan.go
│ │ ├── bubbleCoralWallFan.go
│ │ ├── buddingAmethyst.go
│ │ ├── cactus.go
│ │ ├── cake.go
│ │ ├── calcite.go
│ │ ├── calibratedSculkSensor.go
│ │ ├── campfire.go
│ │ ├── candle.go
│ │ ├── candleCake.go
│ │ ├── carrots.go
│ │ ├── cartographyTable.go
│ │ ├── carvedPumpkin.go
│ │ ├── cauldron.go
│ │ ├── caveAir.go
│ │ ├── caveVines.go
│ │ ├── caveVinesPlant.go
│ │ ├── chain.go
│ │ ├── chainCommandBlock.go
│ │ ├── cherryButton.go
│ │ ├── cherryDoor.go
│ │ ├── cherryFence.go
│ │ ├── cherryFenceGate.go
│ │ ├── cherryHangingSign.go
│ │ ├── cherryLeaves.go
│ │ ├── cherryLog.go
│ │ ├── cherryPlanks.go
│ │ ├── cherryPressurePlate.go
│ │ ├── cherrySapling.go
│ │ ├── cherrySign.go
│ │ ├── cherrySlab.go
│ │ ├── cherryStairs.go
│ │ ├── cherryTrapdoor.go
│ │ ├── cherryWallHangingSign.go
│ │ ├── cherryWallSign.go
│ │ ├── cherryWood.go
│ │ ├── chest.go
│ │ ├── chippedAnvil.go
│ │ ├── chiseledBookshelf.go
│ │ ├── chiseledCopper.go
│ │ ├── chiseledDeepslate.go
│ │ ├── chiseledNetherBricks.go
│ │ ├── chiseledPolishedBlackstone.go
│ │ ├── chiseledQuartzBlock.go
│ │ ├── chiseledRedSandstone.go
│ │ ├── chiseledSandstone.go
│ │ ├── chiseledStoneBricks.go
│ │ ├── chiseledTuff.go
│ │ ├── chiseledTuffBricks.go
│ │ ├── chorusFlower.go
│ │ ├── chorusPlant.go
│ │ ├── clay.go
│ │ ├── coalBlock.go
│ │ ├── coalOre.go
│ │ ├── coarseDirt.go
│ │ ├── cobbledDeepslate.go
│ │ ├── cobbledDeepslateSlab.go
│ │ ├── cobbledDeepslateStairs.go
│ │ ├── cobbledDeepslateWall.go
│ │ ├── cobblestone.go
│ │ ├── cobblestoneSlab.go
│ │ ├── cobblestoneStairs.go
│ │ ├── cobblestoneWall.go
│ │ ├── cobweb.go
│ │ ├── cocoa.go
│ │ ├── commandBlock.go
│ │ ├── comparator.go
│ │ ├── composter.go
│ │ ├── conduit.go
│ │ ├── copperBlock.go
│ │ ├── copperBulb.go
│ │ ├── copperDoor.go
│ │ ├── copperGrate.go
│ │ ├── copperOre.go
│ │ ├── copperTrapdoor.go
│ │ ├── cornflower.go
│ │ ├── crackedDeepslateBricks.go
│ │ ├── crackedDeepslateTiles.go
│ │ ├── crackedNetherBricks.go
│ │ ├── crackedPolishedBlackstoneBricks.go
│ │ ├── crackedStoneBricks.go
│ │ ├── crafter.go
│ │ ├── craftingTable.go
│ │ ├── creeperHead.go
│ │ ├── creeperWallHead.go
│ │ ├── crimsonButton.go
│ │ ├── crimsonDoor.go
│ │ ├── crimsonFence.go
│ │ ├── crimsonFenceGate.go
│ │ ├── crimsonFungus.go
│ │ ├── crimsonHangingSign.go
│ │ ├── crimsonHyphae.go
│ │ ├── crimsonNylium.go
│ │ ├── crimsonPlanks.go
│ │ ├── crimsonPressurePlate.go
│ │ ├── crimsonRoots.go
│ │ ├── crimsonSign.go
│ │ ├── crimsonSlab.go
│ │ ├── crimsonStairs.go
│ │ ├── crimsonStem.go
│ │ ├── crimsonTrapdoor.go
│ │ ├── crimsonWallHangingSign.go
│ │ ├── crimsonWallSign.go
│ │ ├── cryingObsidian.go
│ │ ├── cutCopper.go
│ │ ├── cutCopperSlab.go
│ │ ├── cutCopperStairs.go
│ │ ├── cutRedSandstone.go
│ │ ├── cutRedSandstoneSlab.go
│ │ ├── cutSandstone.go
│ │ ├── cutSandstoneSlab.go
│ │ ├── cyanBanner.go
│ │ ├── cyanBed.go
│ │ ├── cyanCandle.go
│ │ ├── cyanCandleCake.go
│ │ ├── cyanCarpet.go
│ │ ├── cyanConcrete.go
│ │ ├── cyanConcretePowder.go
│ │ ├── cyanGlazedTerracotta.go
│ │ ├── cyanShulkerBox.go
│ │ ├── cyanStainedGlass.go
│ │ ├── cyanStainedGlassPane.go
│ │ ├── cyanTerracotta.go
│ │ ├── cyanWallBanner.go
│ │ ├── cyanWool.go
│ │ ├── damagedAnvil.go
│ │ ├── dandelion.go
│ │ ├── darkOakButton.go
│ │ ├── darkOakDoor.go
│ │ ├── darkOakFence.go
│ │ ├── darkOakFenceGate.go
│ │ ├── darkOakHangingSign.go
│ │ ├── darkOakLeaves.go
│ │ ├── darkOakLog.go
│ │ ├── darkOakPlanks.go
│ │ ├── darkOakPressurePlate.go
│ │ ├── darkOakSapling.go
│ │ ├── darkOakSign.go
│ │ ├── darkOakSlab.go
│ │ ├── darkOakStairs.go
│ │ ├── darkOakTrapdoor.go
│ │ ├── darkOakWallHangingSign.go
│ │ ├── darkOakWallSign.go
│ │ ├── darkOakWood.go
│ │ ├── darkPrismarine.go
│ │ ├── darkPrismarineSlab.go
│ │ ├── darkPrismarineStairs.go
│ │ ├── daylightDetector.go
│ │ ├── deadBrainCoral.go
│ │ ├── deadBrainCoralBlock.go
│ │ ├── deadBrainCoralFan.go
│ │ ├── deadBrainCoralWallFan.go
│ │ ├── deadBubbleCoral.go
│ │ ├── deadBubbleCoralBlock.go
│ │ ├── deadBubbleCoralFan.go
│ │ ├── deadBubbleCoralWallFan.go
│ │ ├── deadBush.go
│ │ ├── deadFireCoral.go
│ │ ├── deadFireCoralBlock.go
│ │ ├── deadFireCoralFan.go
│ │ ├── deadFireCoralWallFan.go
│ │ ├── deadHornCoral.go
│ │ ├── deadHornCoralBlock.go
│ │ ├── deadHornCoralFan.go
│ │ ├── deadHornCoralWallFan.go
│ │ ├── deadTubeCoral.go
│ │ ├── deadTubeCoralBlock.go
│ │ ├── deadTubeCoralFan.go
│ │ ├── deadTubeCoralWallFan.go
│ │ ├── decoratedPot.go
│ │ ├── deepslate.go
│ │ ├── deepslateBrickSlab.go
│ │ ├── deepslateBrickStairs.go
│ │ ├── deepslateBrickWall.go
│ │ ├── deepslateBricks.go
│ │ ├── deepslateCoalOre.go
│ │ ├── deepslateCopperOre.go
│ │ ├── deepslateDiamondOre.go
│ │ ├── deepslateEmeraldOre.go
│ │ ├── deepslateGoldOre.go
│ │ ├── deepslateIronOre.go
│ │ ├── deepslateLapisOre.go
│ │ ├── deepslateRedstoneOre.go
│ │ ├── deepslateTileSlab.go
│ │ ├── deepslateTileStairs.go
│ │ ├── deepslateTileWall.go
│ │ ├── deepslateTiles.go
│ │ ├── detectorRail.go
│ │ ├── diamondBlock.go
│ │ ├── diamondOre.go
│ │ ├── diorite.go
│ │ ├── dioriteSlab.go
│ │ ├── dioriteStairs.go
│ │ ├── dioriteWall.go
│ │ ├── dirt.go
│ │ ├── dirtPath.go
│ │ ├── dispenser.go
│ │ ├── dragonEgg.go
│ │ ├── dragonHead.go
│ │ ├── dragonWallHead.go
│ │ ├── driedKelpBlock.go
│ │ ├── dripstoneBlock.go
│ │ ├── dropper.go
│ │ ├── emeraldBlock.go
│ │ ├── emeraldOre.go
│ │ ├── enchantingTable.go
│ │ ├── endGateway.go
│ │ ├── endPortal.go
│ │ ├── endPortalFrame.go
│ │ ├── endRod.go
│ │ ├── endStone.go
│ │ ├── endStoneBrickSlab.go
│ │ ├── endStoneBrickStairs.go
│ │ ├── endStoneBrickWall.go
│ │ ├── endStoneBricks.go
│ │ ├── enderChest.go
│ │ ├── exposedChiseledCopper.go
│ │ ├── exposedCopper.go
│ │ ├── exposedCopperBulb.go
│ │ ├── exposedCopperDoor.go
│ │ ├── exposedCopperGrate.go
│ │ ├── exposedCopperTrapdoor.go
│ │ ├── exposedCutCopper.go
│ │ ├── exposedCutCopperSlab.go
│ │ ├── exposedCutCopperStairs.go
│ │ ├── farmland.go
│ │ ├── fern.go
│ │ ├── fire.go
│ │ ├── fireCoral.go
│ │ ├── fireCoralBlock.go
│ │ ├── fireCoralFan.go
│ │ ├── fireCoralWallFan.go
│ │ ├── fletchingTable.go
│ │ ├── flowerPot.go
│ │ ├── floweringAzalea.go
│ │ ├── floweringAzaleaLeaves.go
│ │ ├── frogspawn.go
│ │ ├── frostedIce.go
│ │ ├── furnace.go
│ │ ├── gildedBlackstone.go
│ │ ├── glass.go
│ │ ├── glassPane.go
│ │ ├── glowLichen.go
│ │ ├── glowstone.go
│ │ ├── goldBlock.go
│ │ ├── goldOre.go
│ │ ├── granite.go
│ │ ├── graniteSlab.go
│ │ ├── graniteStairs.go
│ │ ├── graniteWall.go
│ │ ├── grassBlock.go
│ │ ├── gravel.go
│ │ ├── grayBanner.go
│ │ ├── grayBed.go
│ │ ├── grayCandle.go
│ │ ├── grayCandleCake.go
│ │ ├── grayCarpet.go
│ │ ├── grayConcrete.go
│ │ ├── grayConcretePowder.go
│ │ ├── grayGlazedTerracotta.go
│ │ ├── grayShulkerBox.go
│ │ ├── grayStainedGlass.go
│ │ ├── grayStainedGlassPane.go
│ │ ├── grayTerracotta.go
│ │ ├── grayWallBanner.go
│ │ ├── grayWool.go
│ │ ├── greenBanner.go
│ │ ├── greenBed.go
│ │ ├── greenCandle.go
│ │ ├── greenCandleCake.go
│ │ ├── greenCarpet.go
│ │ ├── greenConcrete.go
│ │ ├── greenConcretePowder.go
│ │ ├── greenGlazedTerracotta.go
│ │ ├── greenShulkerBox.go
│ │ ├── greenStainedGlass.go
│ │ ├── greenStainedGlassPane.go
│ │ ├── greenTerracotta.go
│ │ ├── greenWallBanner.go
│ │ ├── greenWool.go
│ │ ├── grindstone.go
│ │ ├── hangingRoots.go
│ │ ├── hayBlock.go
│ │ ├── heavyCore.go
│ │ ├── heavyWeightedPressurePlate.go
│ │ ├── honeyBlock.go
│ │ ├── honeycombBlock.go
│ │ ├── hopper.go
│ │ ├── hornCoral.go
│ │ ├── hornCoralBlock.go
│ │ ├── hornCoralFan.go
│ │ ├── hornCoralWallFan.go
│ │ ├── ice.go
│ │ ├── infestedChiseledStoneBricks.go
│ │ ├── infestedCobblestone.go
│ │ ├── infestedCrackedStoneBricks.go
│ │ ├── infestedDeepslate.go
│ │ ├── infestedMossyStoneBricks.go
│ │ ├── infestedStone.go
│ │ ├── infestedStoneBricks.go
│ │ ├── ironBars.go
│ │ ├── ironBlock.go
│ │ ├── ironDoor.go
│ │ ├── ironOre.go
│ │ ├── ironTrapdoor.go
│ │ ├── jackOLantern.go
│ │ ├── jigsaw.go
│ │ ├── jukebox.go
│ │ ├── jungleButton.go
│ │ ├── jungleDoor.go
│ │ ├── jungleFence.go
│ │ ├── jungleFenceGate.go
│ │ ├── jungleHangingSign.go
│ │ ├── jungleLeaves.go
│ │ ├── jungleLog.go
│ │ ├── junglePlanks.go
│ │ ├── junglePressurePlate.go
│ │ ├── jungleSapling.go
│ │ ├── jungleSign.go
│ │ ├── jungleSlab.go
│ │ ├── jungleStairs.go
│ │ ├── jungleTrapdoor.go
│ │ ├── jungleWallHangingSign.go
│ │ ├── jungleWallSign.go
│ │ ├── jungleWood.go
│ │ ├── kelp.go
│ │ ├── kelpPlant.go
│ │ ├── ladder.go
│ │ ├── lantern.go
│ │ ├── lapisBlock.go
│ │ ├── lapisOre.go
│ │ ├── largeAmethystBud.go
│ │ ├── largeFern.go
│ │ ├── lava.go
│ │ ├── lavaCauldron.go
│ │ ├── lectern.go
│ │ ├── lever.go
│ │ ├── light.go
│ │ ├── lightBlueBanner.go
│ │ ├── lightBlueBed.go
│ │ ├── lightBlueCandle.go
│ │ ├── lightBlueCandleCake.go
│ │ ├── lightBlueCarpet.go
│ │ ├── lightBlueConcrete.go
│ │ ├── lightBlueConcretePowder.go
│ │ ├── lightBlueGlazedTerracotta.go
│ │ ├── lightBlueShulkerBox.go
│ │ ├── lightBlueStainedGlass.go
│ │ ├── lightBlueStainedGlassPane.go
│ │ ├── lightBlueTerracotta.go
│ │ ├── lightBlueWallBanner.go
│ │ ├── lightBlueWool.go
│ │ ├── lightGrayBanner.go
│ │ ├── lightGrayBed.go
│ │ ├── lightGrayCandle.go
│ │ ├── lightGrayCandleCake.go
│ │ ├── lightGrayCarpet.go
│ │ ├── lightGrayConcrete.go
│ │ ├── lightGrayConcretePowder.go
│ │ ├── lightGrayGlazedTerracotta.go
│ │ ├── lightGrayShulkerBox.go
│ │ ├── lightGrayStainedGlass.go
│ │ ├── lightGrayStainedGlassPane.go
│ │ ├── lightGrayTerracotta.go
│ │ ├── lightGrayWallBanner.go
│ │ ├── lightGrayWool.go
│ │ ├── lightWeightedPressurePlate.go
│ │ ├── lightningRod.go
│ │ ├── lilac.go
│ │ ├── lilyOfTheValley.go
│ │ ├── lilyPad.go
│ │ ├── limeBanner.go
│ │ ├── limeBed.go
│ │ ├── limeCandle.go
│ │ ├── limeCandleCake.go
│ │ ├── limeCarpet.go
│ │ ├── limeConcrete.go
│ │ ├── limeConcretePowder.go
│ │ ├── limeGlazedTerracotta.go
│ │ ├── limeShulkerBox.go
│ │ ├── limeStainedGlass.go
│ │ ├── limeStainedGlassPane.go
│ │ ├── limeTerracotta.go
│ │ ├── limeWallBanner.go
│ │ ├── limeWool.go
│ │ ├── lodestone.go
│ │ ├── loom.go
│ │ ├── magentaBanner.go
│ │ ├── magentaBed.go
│ │ ├── magentaCandle.go
│ │ ├── magentaCandleCake.go
│ │ ├── magentaCarpet.go
│ │ ├── magentaConcrete.go
│ │ ├── magentaConcretePowder.go
│ │ ├── magentaGlazedTerracotta.go
│ │ ├── magentaShulkerBox.go
│ │ ├── magentaStainedGlass.go
│ │ ├── magentaStainedGlassPane.go
│ │ ├── magentaTerracotta.go
│ │ ├── magentaWallBanner.go
│ │ ├── magentaWool.go
│ │ ├── magmaBlock.go
│ │ ├── mangroveButton.go
│ │ ├── mangroveDoor.go
│ │ ├── mangroveFence.go
│ │ ├── mangroveFenceGate.go
│ │ ├── mangroveHangingSign.go
│ │ ├── mangroveLeaves.go
│ │ ├── mangroveLog.go
│ │ ├── mangrovePlanks.go
│ │ ├── mangrovePressurePlate.go
│ │ ├── mangrovePropagule.go
│ │ ├── mangroveRoots.go
│ │ ├── mangroveSign.go
│ │ ├── mangroveSlab.go
│ │ ├── mangroveStairs.go
│ │ ├── mangroveTrapdoor.go
│ │ ├── mangroveWallHangingSign.go
│ │ ├── mangroveWallSign.go
│ │ ├── mangroveWood.go
│ │ ├── mediumAmethystBud.go
│ │ ├── melon.go
│ │ ├── melonStem.go
│ │ ├── mossBlock.go
│ │ ├── mossCarpet.go
│ │ ├── mossyCobblestone.go
│ │ ├── mossyCobblestoneSlab.go
│ │ ├── mossyCobblestoneStairs.go
│ │ ├── mossyCobblestoneWall.go
│ │ ├── mossyStoneBrickSlab.go
│ │ ├── mossyStoneBrickStairs.go
│ │ ├── mossyStoneBrickWall.go
│ │ ├── mossyStoneBricks.go
│ │ ├── movingPiston.go
│ │ ├── mud.go
│ │ ├── mudBrickSlab.go
│ │ ├── mudBrickStairs.go
│ │ ├── mudBrickWall.go
│ │ ├── mudBricks.go
│ │ ├── muddyMangroveRoots.go
│ │ ├── mushroomStem.go
│ │ ├── mycelium.go
│ │ ├── netherBrickFence.go
│ │ ├── netherBrickSlab.go
│ │ ├── netherBrickStairs.go
│ │ ├── netherBrickWall.go
│ │ ├── netherBricks.go
│ │ ├── netherGoldOre.go
│ │ ├── netherPortal.go
│ │ ├── netherQuartzOre.go
│ │ ├── netherSprouts.go
│ │ ├── netherWart.go
│ │ ├── netherWartBlock.go
│ │ ├── netheriteBlock.go
│ │ ├── netherrack.go
│ │ ├── noteBlock.go
│ │ ├── oakButton.go
│ │ ├── oakDoor.go
│ │ ├── oakFence.go
│ │ ├── oakFenceGate.go
│ │ ├── oakHangingSign.go
│ │ ├── oakLeaves.go
│ │ ├── oakLog.go
│ │ ├── oakPlanks.go
│ │ ├── oakPressurePlate.go
│ │ ├── oakSapling.go
│ │ ├── oakSign.go
│ │ ├── oakSlab.go
│ │ ├── oakStairs.go
│ │ ├── oakTrapdoor.go
│ │ ├── oakWallHangingSign.go
│ │ ├── oakWallSign.go
│ │ ├── oakWood.go
│ │ ├── observer.go
│ │ ├── obsidian.go
│ │ ├── ochreFroglight.go
│ │ ├── orangeBanner.go
│ │ ├── orangeBed.go
│ │ ├── orangeCandle.go
│ │ ├── orangeCandleCake.go
│ │ ├── orangeCarpet.go
│ │ ├── orangeConcrete.go
│ │ ├── orangeConcretePowder.go
│ │ ├── orangeGlazedTerracotta.go
│ │ ├── orangeShulkerBox.go
│ │ ├── orangeStainedGlass.go
│ │ ├── orangeStainedGlassPane.go
│ │ ├── orangeTerracotta.go
│ │ ├── orangeTulip.go
│ │ ├── orangeWallBanner.go
│ │ ├── orangeWool.go
│ │ ├── oxeyeDaisy.go
│ │ ├── oxidizedChiseledCopper.go
│ │ ├── oxidizedCopper.go
│ │ ├── oxidizedCopperBulb.go
│ │ ├── oxidizedCopperDoor.go
│ │ ├── oxidizedCopperGrate.go
│ │ ├── oxidizedCopperTrapdoor.go
│ │ ├── oxidizedCutCopper.go
│ │ ├── oxidizedCutCopperSlab.go
│ │ ├── oxidizedCutCopperStairs.go
│ │ ├── packedIce.go
│ │ ├── packedMud.go
│ │ ├── pearlescentFroglight.go
│ │ ├── peony.go
│ │ ├── petrifiedOakSlab.go
│ │ ├── piglinHead.go
│ │ ├── piglinWallHead.go
│ │ ├── pinkBanner.go
│ │ ├── pinkBed.go
│ │ ├── pinkCandle.go
│ │ ├── pinkCandleCake.go
│ │ ├── pinkCarpet.go
│ │ ├── pinkConcrete.go
│ │ ├── pinkConcretePowder.go
│ │ ├── pinkGlazedTerracotta.go
│ │ ├── pinkPetals.go
│ │ ├── pinkShulkerBox.go
│ │ ├── pinkStainedGlass.go
│ │ ├── pinkStainedGlassPane.go
│ │ ├── pinkTerracotta.go
│ │ ├── pinkTulip.go
│ │ ├── pinkWallBanner.go
│ │ ├── pinkWool.go
│ │ ├── piston.go
│ │ ├── pistonHead.go
│ │ ├── pitcherCrop.go
│ │ ├── pitcherPlant.go
│ │ ├── playerHead.go
│ │ ├── playerWallHead.go
│ │ ├── podzol.go
│ │ ├── pointedDripstone.go
│ │ ├── polishedAndesite.go
│ │ ├── polishedAndesiteSlab.go
│ │ ├── polishedAndesiteStairs.go
│ │ ├── polishedBasalt.go
│ │ ├── polishedBlackstone.go
│ │ ├── polishedBlackstoneBrickSlab.go
│ │ ├── polishedBlackstoneBrickStairs.go
│ │ ├── polishedBlackstoneBrickWall.go
│ │ ├── polishedBlackstoneBricks.go
│ │ ├── polishedBlackstoneButton.go
│ │ ├── polishedBlackstonePressurePlate.go
│ │ ├── polishedBlackstoneSlab.go
│ │ ├── polishedBlackstoneStairs.go
│ │ ├── polishedBlackstoneWall.go
│ │ ├── polishedDeepslate.go
│ │ ├── polishedDeepslateSlab.go
│ │ ├── polishedDeepslateStairs.go
│ │ ├── polishedDeepslateWall.go
│ │ ├── polishedDiorite.go
│ │ ├── polishedDioriteSlab.go
│ │ ├── polishedDioriteStairs.go
│ │ ├── polishedGranite.go
│ │ ├── polishedGraniteSlab.go
│ │ ├── polishedGraniteStairs.go
│ │ ├── polishedTuff.go
│ │ ├── polishedTuffSlab.go
│ │ ├── polishedTuffStairs.go
│ │ ├── polishedTuffWall.go
│ │ ├── poppy.go
│ │ ├── pos/
│ │ │ └── pos.go
│ │ ├── potatoes.go
│ │ ├── pottedAcaciaSapling.go
│ │ ├── pottedAllium.go
│ │ ├── pottedAzaleaBush.go
│ │ ├── pottedAzureBluet.go
│ │ ├── pottedBamboo.go
│ │ ├── pottedBirchSapling.go
│ │ ├── pottedBlueOrchid.go
│ │ ├── pottedBrownMushroom.go
│ │ ├── pottedCactus.go
│ │ ├── pottedCherrySapling.go
│ │ ├── pottedCornflower.go
│ │ ├── pottedCrimsonFungus.go
│ │ ├── pottedCrimsonRoots.go
│ │ ├── pottedDandelion.go
│ │ ├── pottedDarkOakSapling.go
│ │ ├── pottedDeadBush.go
│ │ ├── pottedFern.go
│ │ ├── pottedFloweringAzaleaBush.go
│ │ ├── pottedJungleSapling.go
│ │ ├── pottedLilyOfTheValley.go
│ │ ├── pottedMangrovePropagule.go
│ │ ├── pottedOakSapling.go
│ │ ├── pottedOrangeTulip.go
│ │ ├── pottedOxeyeDaisy.go
│ │ ├── pottedPinkTulip.go
│ │ ├── pottedPoppy.go
│ │ ├── pottedRedMushroom.go
│ │ ├── pottedRedTulip.go
│ │ ├── pottedSpruceSapling.go
│ │ ├── pottedTorchflower.go
│ │ ├── pottedWarpedFungus.go
│ │ ├── pottedWarpedRoots.go
│ │ ├── pottedWhiteTulip.go
│ │ ├── pottedWitherRose.go
│ │ ├── powderSnow.go
│ │ ├── powderSnowCauldron.go
│ │ ├── poweredRail.go
│ │ ├── prismarine.go
│ │ ├── prismarineBrickSlab.go
│ │ ├── prismarineBrickStairs.go
│ │ ├── prismarineBricks.go
│ │ ├── prismarineSlab.go
│ │ ├── prismarineStairs.go
│ │ ├── prismarineWall.go
│ │ ├── pumpkin.go
│ │ ├── pumpkinStem.go
│ │ ├── purpleBanner.go
│ │ ├── purpleBed.go
│ │ ├── purpleCandle.go
│ │ ├── purpleCandleCake.go
│ │ ├── purpleCarpet.go
│ │ ├── purpleConcrete.go
│ │ ├── purpleConcretePowder.go
│ │ ├── purpleGlazedTerracotta.go
│ │ ├── purpleShulkerBox.go
│ │ ├── purpleStainedGlass.go
│ │ ├── purpleStainedGlassPane.go
│ │ ├── purpleTerracotta.go
│ │ ├── purpleWallBanner.go
│ │ ├── purpleWool.go
│ │ ├── purpurBlock.go
│ │ ├── purpurPillar.go
│ │ ├── purpurSlab.go
│ │ ├── purpurStairs.go
│ │ ├── quartzBlock.go
│ │ ├── quartzBricks.go
│ │ ├── quartzPillar.go
│ │ ├── quartzSlab.go
│ │ ├── quartzStairs.go
│ │ ├── rail.go
│ │ ├── rawCopperBlock.go
│ │ ├── rawGoldBlock.go
│ │ ├── rawIronBlock.go
│ │ ├── redBanner.go
│ │ ├── redBed.go
│ │ ├── redCandle.go
│ │ ├── redCandleCake.go
│ │ ├── redCarpet.go
│ │ ├── redConcrete.go
│ │ ├── redConcretePowder.go
│ │ ├── redGlazedTerracotta.go
│ │ ├── redMushroom.go
│ │ ├── redMushroomBlock.go
│ │ ├── redNetherBrickSlab.go
│ │ ├── redNetherBrickStairs.go
│ │ ├── redNetherBrickWall.go
│ │ ├── redNetherBricks.go
│ │ ├── redSand.go
│ │ ├── redSandstone.go
│ │ ├── redSandstoneSlab.go
│ │ ├── redSandstoneStairs.go
│ │ ├── redSandstoneWall.go
│ │ ├── redShulkerBox.go
│ │ ├── redStainedGlass.go
│ │ ├── redStainedGlassPane.go
│ │ ├── redTerracotta.go
│ │ ├── redTulip.go
│ │ ├── redWallBanner.go
│ │ ├── redWool.go
│ │ ├── redstoneBlock.go
│ │ ├── redstoneLamp.go
│ │ ├── redstoneOre.go
│ │ ├── redstoneTorch.go
│ │ ├── redstoneWallTorch.go
│ │ ├── redstoneWire.go
│ │ ├── reinforcedDeepslate.go
│ │ ├── repeater.go
│ │ ├── repeatingCommandBlock.go
│ │ ├── respawnAnchor.go
│ │ ├── rootedDirt.go
│ │ ├── roseBush.go
│ │ ├── sand.go
│ │ ├── sandstone.go
│ │ ├── sandstoneSlab.go
│ │ ├── sandstoneStairs.go
│ │ ├── sandstoneWall.go
│ │ ├── scaffolding.go
│ │ ├── sculk.go
│ │ ├── sculkCatalyst.go
│ │ ├── sculkSensor.go
│ │ ├── sculkShrieker.go
│ │ ├── sculkVein.go
│ │ ├── seaLantern.go
│ │ ├── seaPickle.go
│ │ ├── seagrass.go
│ │ ├── shortGrass.go
│ │ ├── shroomlight.go
│ │ ├── shulkerBox.go
│ │ ├── skeletonSkull.go
│ │ ├── skeletonWallSkull.go
│ │ ├── slimeBlock.go
│ │ ├── smallAmethystBud.go
│ │ ├── smallDripleaf.go
│ │ ├── smithingTable.go
│ │ ├── smoker.go
│ │ ├── smoothBasalt.go
│ │ ├── smoothQuartz.go
│ │ ├── smoothQuartzSlab.go
│ │ ├── smoothQuartzStairs.go
│ │ ├── smoothRedSandstone.go
│ │ ├── smoothRedSandstoneSlab.go
│ │ ├── smoothRedSandstoneStairs.go
│ │ ├── smoothSandstone.go
│ │ ├── smoothSandstoneSlab.go
│ │ ├── smoothSandstoneStairs.go
│ │ ├── smoothStone.go
│ │ ├── smoothStoneSlab.go
│ │ ├── snifferEgg.go
│ │ ├── snow.go
│ │ ├── snowBlock.go
│ │ ├── soulCampfire.go
│ │ ├── soulFire.go
│ │ ├── soulLantern.go
│ │ ├── soulSand.go
│ │ ├── soulSoil.go
│ │ ├── soulTorch.go
│ │ ├── soulWallTorch.go
│ │ ├── spawner.go
│ │ ├── sponge.go
│ │ ├── sporeBlossom.go
│ │ ├── spruceButton.go
│ │ ├── spruceDoor.go
│ │ ├── spruceFence.go
│ │ ├── spruceFenceGate.go
│ │ ├── spruceHangingSign.go
│ │ ├── spruceLeaves.go
│ │ ├── spruceLog.go
│ │ ├── sprucePlanks.go
│ │ ├── sprucePressurePlate.go
│ │ ├── spruceSapling.go
│ │ ├── spruceSign.go
│ │ ├── spruceSlab.go
│ │ ├── spruceStairs.go
│ │ ├── spruceTrapdoor.go
│ │ ├── spruceWallHangingSign.go
│ │ ├── spruceWallSign.go
│ │ ├── spruceWood.go
│ │ ├── stickyPiston.go
│ │ ├── stone.go
│ │ ├── stoneBrickSlab.go
│ │ ├── stoneBrickStairs.go
│ │ ├── stoneBrickWall.go
│ │ ├── stoneBricks.go
│ │ ├── stoneButton.go
│ │ ├── stonePressurePlate.go
│ │ ├── stoneSlab.go
│ │ ├── stoneStairs.go
│ │ ├── stonecutter.go
│ │ ├── strippedAcaciaLog.go
│ │ ├── strippedAcaciaWood.go
│ │ ├── strippedBambooBlock.go
│ │ ├── strippedBirchLog.go
│ │ ├── strippedBirchWood.go
│ │ ├── strippedCherryLog.go
│ │ ├── strippedCherryWood.go
│ │ ├── strippedCrimsonHyphae.go
│ │ ├── strippedCrimsonStem.go
│ │ ├── strippedDarkOakLog.go
│ │ ├── strippedDarkOakWood.go
│ │ ├── strippedJungleLog.go
│ │ ├── strippedJungleWood.go
│ │ ├── strippedMangroveLog.go
│ │ ├── strippedMangroveWood.go
│ │ ├── strippedOakLog.go
│ │ ├── strippedOakWood.go
│ │ ├── strippedSpruceLog.go
│ │ ├── strippedSpruceWood.go
│ │ ├── strippedWarpedHyphae.go
│ │ ├── strippedWarpedStem.go
│ │ ├── structureBlock.go
│ │ ├── structureVoid.go
│ │ ├── sugarCane.go
│ │ ├── sunflower.go
│ │ ├── suspiciousGravel.go
│ │ ├── suspiciousSand.go
│ │ ├── sweetBerryBush.go
│ │ ├── tallGrass.go
│ │ ├── tallSeagrass.go
│ │ ├── target.go
│ │ ├── terracotta.go
│ │ ├── tintedGlass.go
│ │ ├── tnt.go
│ │ ├── torch.go
│ │ ├── torchflower.go
│ │ ├── torchflowerCrop.go
│ │ ├── trappedChest.go
│ │ ├── trialSpawner.go
│ │ ├── tripwire.go
│ │ ├── tripwireHook.go
│ │ ├── tubeCoral.go
│ │ ├── tubeCoralBlock.go
│ │ ├── tubeCoralFan.go
│ │ ├── tubeCoralWallFan.go
│ │ ├── tuff.go
│ │ ├── tuffBrickSlab.go
│ │ ├── tuffBrickStairs.go
│ │ ├── tuffBrickWall.go
│ │ ├── tuffBricks.go
│ │ ├── tuffSlab.go
│ │ ├── tuffStairs.go
│ │ ├── tuffWall.go
│ │ ├── turtleEgg.go
│ │ ├── twistingVines.go
│ │ ├── twistingVinesPlant.go
│ │ ├── vault.go
│ │ ├── verdantFroglight.go
│ │ ├── vine.go
│ │ ├── voidAir.go
│ │ ├── wallTorch.go
│ │ ├── warpedButton.go
│ │ ├── warpedDoor.go
│ │ ├── warpedFence.go
│ │ ├── warpedFenceGate.go
│ │ ├── warpedFungus.go
│ │ ├── warpedHangingSign.go
│ │ ├── warpedHyphae.go
│ │ ├── warpedNylium.go
│ │ ├── warpedPlanks.go
│ │ ├── warpedPressurePlate.go
│ │ ├── warpedRoots.go
│ │ ├── warpedSign.go
│ │ ├── warpedSlab.go
│ │ ├── warpedStairs.go
│ │ ├── warpedStem.go
│ │ ├── warpedTrapdoor.go
│ │ ├── warpedWallHangingSign.go
│ │ ├── warpedWallSign.go
│ │ ├── warpedWartBlock.go
│ │ ├── water.go
│ │ ├── waterCauldron.go
│ │ ├── waxedChiseledCopper.go
│ │ ├── waxedCopperBlock.go
│ │ ├── waxedCopperBulb.go
│ │ ├── waxedCopperDoor.go
│ │ ├── waxedCopperGrate.go
│ │ ├── waxedCopperTrapdoor.go
│ │ ├── waxedCutCopper.go
│ │ ├── waxedCutCopperSlab.go
│ │ ├── waxedCutCopperStairs.go
│ │ ├── waxedExposedChiseledCopper.go
│ │ ├── waxedExposedCopper.go
│ │ ├── waxedExposedCopperBulb.go
│ │ ├── waxedExposedCopperDoor.go
│ │ ├── waxedExposedCopperGrate.go
│ │ ├── waxedExposedCopperTrapdoor.go
│ │ ├── waxedExposedCutCopper.go
│ │ ├── waxedExposedCutCopperSlab.go
│ │ ├── waxedExposedCutCopperStairs.go
│ │ ├── waxedOxidizedChiseledCopper.go
│ │ ├── waxedOxidizedCopper.go
│ │ ├── waxedOxidizedCopperBulb.go
│ │ ├── waxedOxidizedCopperDoor.go
│ │ ├── waxedOxidizedCopperGrate.go
│ │ ├── waxedOxidizedCopperTrapdoor.go
│ │ ├── waxedOxidizedCutCopper.go
│ │ ├── waxedOxidizedCutCopperSlab.go
│ │ ├── waxedOxidizedCutCopperStairs.go
│ │ ├── waxedWeatheredChiseledCopper.go
│ │ ├── waxedWeatheredCopper.go
│ │ ├── waxedWeatheredCopperBulb.go
│ │ ├── waxedWeatheredCopperDoor.go
│ │ ├── waxedWeatheredCopperGrate.go
│ │ ├── waxedWeatheredCopperTrapdoor.go
│ │ ├── waxedWeatheredCutCopper.go
│ │ ├── waxedWeatheredCutCopperSlab.go
│ │ ├── waxedWeatheredCutCopperStairs.go
│ │ ├── weatheredChiseledCopper.go
│ │ ├── weatheredCopper.go
│ │ ├── weatheredCopperBulb.go
│ │ ├── weatheredCopperDoor.go
│ │ ├── weatheredCopperGrate.go
│ │ ├── weatheredCopperTrapdoor.go
│ │ ├── weatheredCutCopper.go
│ │ ├── weatheredCutCopperSlab.go
│ │ ├── weatheredCutCopperStairs.go
│ │ ├── weepingVines.go
│ │ ├── weepingVinesPlant.go
│ │ ├── wetSponge.go
│ │ ├── wheat.go
│ │ ├── whiteBanner.go
│ │ ├── whiteBed.go
│ │ ├── whiteCandle.go
│ │ ├── whiteCandleCake.go
│ │ ├── whiteCarpet.go
│ │ ├── whiteConcrete.go
│ │ ├── whiteConcretePowder.go
│ │ ├── whiteGlazedTerracotta.go
│ │ ├── whiteShulkerBox.go
│ │ ├── whiteStainedGlass.go
│ │ ├── whiteStainedGlassPane.go
│ │ ├── whiteTerracotta.go
│ │ ├── whiteTulip.go
│ │ ├── whiteWallBanner.go
│ │ ├── whiteWool.go
│ │ ├── witherRose.go
│ │ ├── witherSkeletonSkull.go
│ │ ├── witherSkeletonWallSkull.go
│ │ ├── yellowBanner.go
│ │ ├── yellowBed.go
│ │ ├── yellowCandle.go
│ │ ├── yellowCandleCake.go
│ │ ├── yellowCarpet.go
│ │ ├── yellowConcrete.go
│ │ ├── yellowConcretePowder.go
│ │ ├── yellowGlazedTerracotta.go
│ │ ├── yellowShulkerBox.go
│ │ ├── yellowStainedGlass.go
│ │ ├── yellowStainedGlassPane.go
│ │ ├── yellowTerracotta.go
│ │ ├── yellowWallBanner.go
│ │ ├── yellowWool.go
│ │ ├── zombieHead.go
│ │ └── zombieWallHead.go
│ ├── chunk/
│ │ ├── anvil.go
│ │ ├── chunk.go
│ │ ├── encode.go
│ │ ├── heightmaps/
│ │ │ └── heightmaps.go
│ │ └── section/
│ │ ├── block.go
│ │ ├── blockRegister.go
│ │ ├── data/
│ │ │ └── blocks.nbt
│ │ └── section.go
│ ├── dimension/
│ │ ├── dimension.go
│ │ ├── manager.go
│ │ ├── tick.go
│ │ └── window/
│ │ └── window.go
│ ├── level/
│ │ ├── entity.go
│ │ ├── item/
│ │ │ ├── attribute_modifiers.go
│ │ │ ├── banner_patterns.go
│ │ │ ├── bees.go
│ │ │ ├── bucket_entity_data.go
│ │ │ ├── can_do.go
│ │ │ ├── container_loot.go
│ │ │ ├── creative_slot_lock.go
│ │ │ ├── enchantments.go
│ │ │ ├── entity_data.go
│ │ │ ├── fire_resistant.go
│ │ │ ├── firework_explosion.go
│ │ │ ├── fireworks.go
│ │ │ ├── food.go
│ │ │ ├── hide_additional_tooltip.go
│ │ │ ├── hide_tooltip.go
│ │ │ ├── intangible_projectile.go
│ │ │ ├── item.go
│ │ │ ├── items.go
│ │ │ ├── jukebox_playable.go
│ │ │ ├── lodestone_tracker.go
│ │ │ ├── map_post_processing.go
│ │ │ ├── stored_enchantments.go
│ │ │ ├── susipicious_stew_effects.go
│ │ │ ├── tool.go
│ │ │ ├── trim.go
│ │ │ ├── unbreakable.go
│ │ │ ├── writable_book_content.go
│ │ │ └── written_book_content.go
│ │ ├── level.go
│ │ ├── playerdata.go
│ │ ├── region/
│ │ │ ├── anvil.go
│ │ │ ├── region_dec.go
│ │ │ └── region_enc.go
│ │ ├── seed/
│ │ │ └── seed.go
│ │ └── uuid/
│ │ └── uuid.go
│ ├── terrain/
│ │ ├── superflat.go
│ │ └── terrain.go
│ └── world.go
└── util/
├── atomic/
│ ├── atomic.go
│ └── slice.go
├── console/
│ └── console.go
├── log/
│ └── log.go
├── mapequal.go
├── rot.go
└── unit.go
Showing preview only (426K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4870 symbols across 1259 files)
FILE: main.go
function main (line 27) | func main() {
function loadConfig (line 97) | func loadConfig() properties.ServerProperties {
FILE: properties/decode.go
function Unmarshal (line 12) | func Unmarshal(src string, dst any) error {
function unmarshalStruct (line 30) | func unmarshalStruct(props []string, v map[string]reflect.Value) error {
function structMap (line 97) | func structMap(val reflect.Value) map[string]reflect.Value {
FILE: properties/encode.go
function Marshal (line 12) | func Marshal(dst io.Writer, p any) error {
function encodePropsStruct (line 22) | func encodePropsStruct(dst io.Writer, v reflect.Value) error {
function name (line 58) | func name(tf reflect.StructField) (n string, ok bool, omitempty bool) {
function writeString (line 86) | func writeString(w io.Writer, str string) error {
FILE: properties/properties.go
type formatter (line 5) | type formatter
method Rune (line 7) | func (f formatter) Rune() rune {
type ServerProperties (line 11) | type ServerProperties struct
FILE: protocol/nbt/decoder.go
function generateMap (line 19) | func generateMap(v reflect.Value) map[string]reflect.Value {
constant End (line 45) | End = iota
constant Byte (line 46) | Byte
constant Short (line 47) | Short
constant Int (line 48) | Int
constant Long (line 49) | Long
constant Float (line 50) | Float
constant Double (line 51) | Double
constant ByteArray (line 52) | ByteArray
constant String (line 53) | String
constant List (line 54) | List
constant Compound (line 55) | Compound
constant IntArray (line 56) | IntArray
constant LongArray (line 57) | LongArray
type Decoder (line 60) | type Decoder struct
method ReadRootName (line 70) | func (d *Decoder) ReadRootName(v bool) {
method DisallowUnknownFields (line 74) | func (d *Decoder) DisallowUnknownFields(v bool) {
method DecodeRootCompound (line 83) | func (d *Decoder) DecodeRootCompound(v any) (rootName string, err erro...
method Decode (line 123) | func (d *Decoder) Decode(v any) (rootName string, err error) {
method decodeCompoundMap (line 170) | func (d *Decoder) decodeCompoundMap(_map reflect.Value) error {
method decodeCompoundStruct (line 436) | func (d *Decoder) decodeCompoundStruct(_struct map[string]reflect.Valu...
method decodeList (line 739) | func (d *Decoder) decodeList(list reflect.Value) error {
method decodeCompound (line 893) | func (d *Decoder) decodeCompound() error {
method _decodeList (line 971) | func (d *Decoder) _decodeList() error {
method readByte (line 1035) | func (d *Decoder) readByte() (int8, error) {
method readTo (line 1041) | func (d *Decoder) readTo(t []byte) error {
method readShort (line 1046) | func (d *Decoder) readShort() (int16, error) {
method readInt (line 1053) | func (d *Decoder) readInt() (int32, error) {
method readLong (line 1060) | func (d *Decoder) readLong() (int64, error) {
method readFloat (line 1067) | func (d *Decoder) readFloat() (float32, error) {
method readDouble (line 1072) | func (d *Decoder) readDouble() (float64, error) {
method readString (line 1077) | func (d *Decoder) readString() (string, error) {
method readByteArray (line 1093) | func (d *Decoder) readByteArray() ([]byte, error) {
method readIntArray (line 1109) | func (d *Decoder) readIntArray() ([]int32, error) {
method readLongArray (line 1131) | func (d *Decoder) readLongArray() ([]int64, error) {
function NewDecoder (line 66) | func NewDecoder(rd io.Reader) *Decoder {
function Unmarshal (line 79) | func Unmarshal(input []byte, v any) (rootName string, err error) {
FILE: protocol/nbt/encoder.go
type Encoder (line 13) | type Encoder struct
method Encode (line 22) | func (e *Encoder) Encode(name string, v any) error {
method WriteRootName (line 42) | func (e *Encoder) WriteRootName(val bool) {
method writeBytes (line 46) | func (e *Encoder) writeBytes(b ...byte) error {
method writeByte (line 51) | func (e *Encoder) writeByte(b int8) error {
method writeShort (line 55) | func (e *Encoder) writeShort(s int16) error {
method writeInt (line 62) | func (e *Encoder) writeInt(i int32) error {
method writeLong (line 71) | func (e *Encoder) writeLong(l int64) error {
method writeFloat (line 84) | func (e *Encoder) writeFloat(f float32) error {
method writeDouble (line 88) | func (e *Encoder) writeDouble(d float64) error {
method writeIntArray (line 92) | func (e *Encoder) writeIntArray(il []int32) error {
method writeLongArray (line 99) | func (e *Encoder) writeLongArray(ll []int64) error {
method writeString (line 106) | func (e *Encoder) writeString(s string) error {
method encodeCompoundStruct (line 113) | func (e *Encoder) encodeCompoundStruct(val reflect.Value) error {
method encodeCompoundMap (line 356) | func (e *Encoder) encodeCompoundMap(val reflect.Value) error {
method encodeList (line 549) | func (e *Encoder) encodeList(val reflect.Value) error {
method tagFor (line 669) | func (e *Encoder) tagFor(typ reflect.Type) int8 {
function NewEncoder (line 18) | func NewEncoder(w io.Writer) *Encoder {
FILE: protocol/nbt/qnbt/abi.go
type name (line 9) | type name struct
method exported (line 13) | func (n name) exported() bool {
method hastag (line 17) | func (n name) hastag() bool {
method embedded (line 21) | func (n name) embedded() bool {
method rvi (line 25) | func (n name) rvi(off int) (int, int) {
method data (line 36) | func (n name) data(off int) *byte {
method name (line 40) | func (n name) name() string {
method tag (line 45) | func (n name) tag() string {
type structField (line 54) | type structField struct
type structType (line 60) | type structType struct
type ptrType (line 66) | type ptrType struct
type arrayType (line 71) | type arrayType struct
type mapType (line 78) | type mapType struct
function ptrelem (line 86) | func ptrelem(t *unsafe2.Type, v uintptr) (*unsafe2.Type, unsafe.Pointer) {
function kindOf (line 94) | func kindOf(t *unsafe2.Type) uint8 {
constant kindm (line 99) | kindm = (1 << 5) - 1
function kind_name (line 102) | func kind_name(k uint8) string {
constant invalid_k (line 166) | invalid_k uint8 = iota
constant bool_k (line 167) | bool_k
constant int_k (line 168) | int_k
constant int8_k (line 169) | int8_k
constant int16_k (line 170) | int16_k
constant int32_k (line 171) | int32_k
constant int64_k (line 172) | int64_k
constant uint_k (line 173) | uint_k
constant uint8_k (line 174) | uint8_k
constant uint16_k (line 175) | uint16_k
constant uint32_k (line 176) | uint32_k
constant uint64_k (line 177) | uint64_k
constant uintptr_k (line 178) | uintptr_k
constant float32_k (line 179) | float32_k
constant float64_k (line 180) | float64_k
constant complex64_k (line 181) | complex64_k
constant complex128_k (line 182) | complex128_k
constant array_k (line 183) | array_k
constant chan_k (line 184) | chan_k
constant func_k (line 185) | func_k
constant interface_k (line 186) | interface_k
constant map_k (line 187) | map_k
constant pointer_k (line 188) | pointer_k
constant slice_k (line 189) | slice_k
constant string_k (line 190) | string_k
constant struct_k (line 191) | struct_k
constant unsafe_ptr_k (line 192) | unsafe_ptr_k
function setSliceArray (line 195) | func setSliceArray(s, a unsafe.Pointer, l int) {
FILE: protocol/nbt/qnbt/buffer.go
type bufferedReader (line 8) | type bufferedReader struct
method available (line 15) | func (rd *bufferedReader) available() int {
method readBytes (line 19) | func (rd *bufferedReader) readBytes(num int) ([]byte, error) {
method readBytesString (line 29) | func (rd *bufferedReader) readBytesString(num int) (string, error) {
method fill (line 38) | func (rd *bufferedReader) fill(min int) error {
method skip (line 60) | func (rd *bufferedReader) skip(n int) error {
FILE: protocol/nbt/qnbt/decode.go
type MismatchError (line 14) | type MismatchError struct
method Error (line 25) | func (m MismatchError) Error() string {
type Decoder (line 49) | type Decoder struct
method Close (line 59) | func (d *Decoder) Close() {
method DisallowUnknownKeys (line 87) | func (dc *Decoder) DisallowUnknownKeys(v bool) *Decoder {
method NetworkNBT (line 92) | func (dc *Decoder) NetworkNBT(v bool) *Decoder {
method DecodeAndClose (line 110) | func (d *Decoder) DecodeAndClose(dst any) (rootName string, err error) {
method Decode (line 115) | func (d *Decoder) Decode(dst any) (rootName string, err error) {
method discardCompound (line 171) | func (d *Decoder) discardCompound() error {
method discard (line 206) | func (d *Decoder) discard(tag_b byte) (skipped bool, err error) {
function NewDecoder (line 65) | func NewDecoder(rd io.Reader) *Decoder {
function slicesize (line 79) | func slicesize(s []byte, l int) []byte {
function Unmarshal (line 97) | func Unmarshal(data []byte, dst any) (rootName string, err error) {
FILE: protocol/nbt/qnbt/list.go
method decodeListSlice (line 11) | func (d *Decoder) decodeListSlice(ptr unsafe.Pointer, t *ptrType) error {
type array_t (line 42) | type array_t struct
method index (line 48) | func (a *array_t) index(i int) unsafe.Pointer {
method decodeListArray (line 52) | func (d *Decoder) decodeListArray(a *array_t) error {
method readListArray (line 74) | func (d *Decoder) readListArray(tag byte, l int32, a *array_t) error {
method discardList (line 208) | func (d *Decoder) discardList() error {
function fixedSize (line 251) | func fixedSize(tag byte) int {
FILE: protocol/nbt/qnbt/malloc.go
function mallocgc (line 10) | func mallocgc(size uintptr, typ *unsafe2.Type, needzero bool) unsafe.Poi...
FILE: protocol/nbt/qnbt/map.go
method decodeMapString (line 5) | func (d *Decoder) decodeMapString(m map[string]string) error {
FILE: protocol/nbt/qnbt/primitive.go
constant end_t (line 11) | end_t = iota
constant byte_t (line 12) | byte_t
constant short_t (line 13) | short_t
constant int_t (line 14) | int_t
constant long_t (line 15) | long_t
constant float_t (line 16) | float_t
constant double_t (line 17) | double_t
constant byte_array_t (line 18) | byte_array_t
constant string_t (line 19) | string_t
constant list_t (line 20) | list_t
constant compound_t (line 21) | compound_t
constant int_array_t (line 22) | int_array_t
constant long_array_t (line 23) | long_array_t
function tagName (line 43) | func tagName(t string) string {
method load (line 76) | func (d *Decoder) load(length int) []byte {
method readByte (line 83) | func (d *Decoder) readByte(b *byte) error {
method readByte2 (line 94) | func (d *Decoder) readByte2() (byte, error) {
method readBytePtr (line 104) | func (d *Decoder) readBytePtr(ptr unsafe.Pointer) error {
method readShort (line 108) | func (d *Decoder) readShort() (int16, error) {
method readShortPtr (line 116) | func (d *Decoder) readShortPtr(ptr unsafe.Pointer) error {
method readInt (line 131) | func (d *Decoder) readInt() (int32, error) {
method readIntPtr (line 139) | func (d *Decoder) readIntPtr(ptr unsafe.Pointer) error {
method readLongPtr (line 154) | func (d *Decoder) readLongPtr(ptr unsafe.Pointer) error {
method skipString (line 169) | func (d *Decoder) skipString() error {
method readString (line 177) | func (d *Decoder) readString(dst *string) error {
method readStringNonCopy (line 192) | func (d *Decoder) readStringNonCopy(dst *string) error {
method readStringPtr (line 210) | func (d *Decoder) readStringPtr(dst unsafe.Pointer) error {
method readLongArray (line 214) | func (d *Decoder) readLongArray(ptr unsafe.Pointer) error {
method decodeLongArray (line 223) | func (d *Decoder) decodeLongArray(len int, ptr unsafe.Pointer) error {
method readIntArray (line 235) | func (d *Decoder) readIntArray(ptr unsafe.Pointer) error {
method decodeIntArray (line 244) | func (d *Decoder) decodeIntArray(len int, ptr unsafe.Pointer) error {
method readByteArray (line 256) | func (d *Decoder) readByteArray(ptr unsafe.Pointer) error {
method decodeByteArray (line 276) | func (d *Decoder) decodeByteArray(l int, ptr unsafe.Pointer) error {
FILE: protocol/nbt/qnbt/struct.go
function newStruct (line 19) | func newStruct(t *structType, ptr unsafe.Pointer) *struct_t {
function findNBTTag (line 48) | func findNBTTag(tag string) (string, bool) {
type struct_t (line 62) | type struct_t struct
method field (line 69) | func (s *struct_t) field(n string) (f *structField, ptr unsafe.Pointer...
method decodeStructCompound (line 81) | func (d *Decoder) decodeStructCompound(s *struct_t) error {
function match (line 247) | func match(name, tag_b string, t *unsafe2.Type) error {
FILE: protocol/nbt/staticReader.go
type StaticReader (line 14) | type StaticReader struct
method readByte (line 23) | func (r StaticReader) readByte() (byte, error) {
method readShort (line 31) | func (r StaticReader) readShort() (int16, error) {
method readInt (line 39) | func (r StaticReader) readInt() (int32, error) {
method readLong (line 47) | func (r StaticReader) readLong() (int64, error) {
method readString (line 55) | func (r StaticReader) readString() (string, error) {
method ReadRoot (line 72) | func (r StaticReader) ReadRoot(withName bool) (typeId byte, name strin...
method Byte (line 84) | func (r StaticReader) Byte(dst *byte) (string, error) {
method Short (line 102) | func (r StaticReader) Short(dst *int16) (string, error) {
method Int (line 120) | func (r StaticReader) Int(dst *int32) (string, error) {
method Long (line 138) | func (r StaticReader) Long(dst *int64) (string, error) {
method String (line 156) | func (r StaticReader) String(dst *string) (string, error) {
method Compound (line 174) | func (r StaticReader) Compound(dst *CompoundReader) (string, error, bo...
function NewStaticReader (line 18) | func NewStaticReader(r io.Reader) StaticReader {
type CompoundReader (line 195) | type CompoundReader struct
method ReadStringMap (line 200) | func (cr CompoundReader) ReadStringMap(tgt map[string]string) error {
method ReadAll (line 227) | func (cr CompoundReader) ReadAll(targets ...any) error {
type ListReader (line 315) | type ListReader struct
method Read (line 320) | func (lr ListReader) Read(tgt any) (err error) {
FILE: protocol/net/authentication.go
function authurl (line 17) | func authurl(u, h string) string {
method authenticate (line 21) | func (conn *Conn) authenticate() error {
method sessionHash (line 62) | func (conn *Conn) sessionHash(publicKey []byte) string {
function twosComplement (line 82) | func twosComplement(p []byte) []byte {
FILE: protocol/net/cfb8/cfb8.go
type CFB8 (line 7) | type CFB8 struct
method XORKeyStream (line 21) | func (x *CFB8) XORKeyStream(dst, src []byte) {
function NewCFB8 (line 44) | func NewCFB8(b cipher.Block, iv []byte, decrypt bool) *CFB8 {
FILE: protocol/net/config.go
type Config (line 12) | type Config struct
method New (line 26) | func (c Config) New() (*Listener, error) {
type StatusProvider (line 24) | type StatusProvider
function Status (line 52) | func Status(s status.StatusResponseData) StatusProvider {
FILE: protocol/net/conn.go
constant clientVeryOldMsg (line 33) | clientVeryOldMsg = "Your client is WAYYYYYY too old!!! this server suppo...
constant clientTooOldMsg (line 34) | clientTooOldMsg = "Your client is too old! this server supports MC 1.21"
constant clientTooNewMsg (line 35) | clientTooNewMsg = "Your client is too new! this server supports MC 1.21"
type Conn (line 38) | type Conn struct
method UsesForge (line 62) | func (conn *Conn) UsesForge() bool {
method Username (line 66) | func (conn *Conn) Username() string {
method UUID (line 70) | func (conn *Conn) UUID() uuid.UUID {
method Properties (line 74) | func (conn *Conn) Properties() []login.Property {
method SetState (line 78) | func (conn *Conn) SetState(state int32) {
method State (line 81) | func (conn *Conn) State() int32 {
method wpk (line 97) | func (conn *Conn) wpk(pk packet.Encodeable) error {
method WritePacket (line 177) | func (conn *Conn) WritePacket(pk packet.Encodeable) error {
method Read (line 188) | func (conn *Conn) Read(dst []byte) (i int, err error) {
method Write (line 200) | func (conn *Conn) Write(data []byte) (i int, err error) {
method ReadPacket (line 209) | func (conn *Conn) ReadPacket() (decoded packet.Decodeable, interceptio...
method PushPacket (line 353) | func (conn *Conn) PushPacket(pk packet.Encodeable) {
method packetWriteChanListen (line 357) | func (conn *Conn) packetWriteChanListen() {
method writeLegacyStatus (line 373) | func (conn *Conn) writeLegacyStatus(status status.StatusResponseData) {
method writeLegacyDisconnect (line 396) | func (conn *Conn) writeLegacyDisconnect(reason string) {
method writeClassicDisconnect (line 407) | func (conn *Conn) writeClassicDisconnect(reason string) {
method handleHandshake (line 421) | func (conn *Conn) handleHandshake() bool {
function username2v3 (line 550) | func username2v3(username string) uuid.UUID {
FILE: protocol/net/encryption.go
method encryptd (line 14) | func (conn *Conn) encryptd(plaintext, dst []byte) {
method decryptd (line 18) | func (conn *Conn) decryptd(ciphertext, dst []byte) {
method encrypt (line 22) | func (conn *Conn) encrypt() error {
FILE: protocol/net/io/buffers/buffers.go
function Size (line 14) | func Size() int {
FILE: protocol/net/io/compress/lz4.go
function DecompressLZ4 (line 12) | func DecompressLZ4(data []byte) ([]byte, error) {
constant magic (line 62) | magic = "LZ4Block"
constant methodUncompressed (line 64) | methodUncompressed = 1 << (iota + 4)
constant methodLZ4 (line 65) | methodLZ4
FILE: protocol/net/io/compress/zlib.go
function DecompressZlib (line 11) | func DecompressZlib(compressed []byte, decompressedLength *int) ([]byte,...
function CompressZlib (line 35) | func CompressZlib(decompressedData []byte, compressedLength *int) (compr...
FILE: protocol/net/io/encoding/encoding.go
function AppendByte (line 10) | func AppendByte(data []byte, b int8) []byte {
function AppendUbyte (line 14) | func AppendUbyte(data []byte, b byte) []byte {
function AppendShort (line 18) | func AppendShort(data []byte, s int16) []byte {
function AppendUshort (line 22) | func AppendUshort(data []byte, s uint16) []byte {
function AppendInt (line 26) | func AppendInt(data []byte, i int32) []byte {
function AppendLong (line 30) | func AppendLong(data []byte, l int64) []byte {
function AppendVarInt (line 34) | func AppendVarInt(data []byte, value int32) []byte {
function PutVarInt (line 43) | func PutVarInt(data []byte, value int32) (n int) {
function WriteVarInt (line 55) | func WriteVarInt(w io.Writer, value int32) error {
function VarInt (line 69) | func VarInt(data []byte) (int32, []byte, error) {
function ReadVarInt (line 100) | func ReadVarInt(r io.Reader) (int32, error) {
function AppendVarLong (line 131) | func AppendVarLong(data []byte, value int64) []byte {
function AppendString (line 147) | func AppendString(data []byte, str string) []byte {
function String (line 153) | func String(data []byte) (string, error) {
type BitSet (line 162) | type BitSet
method Get (line 164) | func (set BitSet) Get(i int) bool {
method Set (line 168) | func (set BitSet) Set(i int) {
method Unset (line 172) | func (set BitSet) Unset(i int) {
type FixedBitSet (line 176) | type FixedBitSet
method Get (line 178) | func (set FixedBitSet) Get(i int) bool {
method Set (line 182) | func (set FixedBitSet) Set(i int) {
method Unset (line 186) | func (set FixedBitSet) Unset(i int) {
FILE: protocol/net/io/encoding/reader.go
type Reader (line 16) | type Reader struct
method SetLength (line 25) | func (r *Reader) SetLength(length int) {
method readBytes (line 29) | func (r Reader) readBytes(l int) ([]byte, error) {
method Read (line 38) | func (r Reader) Read(dst []byte) (i int, err error) {
method Bool (line 42) | func (r Reader) Bool(b *bool) error {
method ReadAll (line 49) | func (r Reader) ReadAll(data *[]byte) (err error) {
method Byte (line 54) | func (r Reader) Byte(i *int8) error {
method Ubyte (line 59) | func (r Reader) Ubyte(i *byte) error {
method Short (line 65) | func (r Reader) Short(i *int16) error {
method Ushort (line 70) | func (r Reader) Ushort(i *uint16) error {
method Int (line 76) | func (r Reader) Int(i *int32) error {
method Long (line 82) | func (r Reader) Long(i *int64) error {
method Float (line 88) | func (r Reader) Float(f *float32) error {
method Double (line 91) | func (r Reader) Double(f *float64) error {
method String (line 95) | func (r Reader) String(s *string) error {
method Identifier (line 106) | func (r Reader) Identifier(s *string) error {
method VarInt (line 110) | func (r Reader) VarInt(value *int32) (i int, err error) {
method VarLong (line 142) | func (r Reader) VarLong(value *int64) error {
method Position (line 170) | func (r Reader) Position(x, y, z *int32) error {
method UUID (line 181) | func (r Reader) UUID(u *uuid.UUID) error {
method BitSet (line 188) | func (r Reader) BitSet(data *BitSet) error {
method FixedBitSet (line 206) | func (r Reader) FixedBitSet(data *FixedBitSet, bits int32) error {
method ByteArray (line 217) | func (r Reader) ByteArray(s *[]byte) error {
method FixedByteArray (line 228) | func (r Reader) FixedByteArray(s []byte) error {
method NBT (line 233) | func (r Reader) NBT(v any) error {
method JSONTextComponent (line 242) | func (r Reader) JSONTextComponent(comp *text.TextComponent) error {
method TextComponent (line 250) | func (r Reader) TextComponent(comp *text.TextComponent) error {
method nbtString (line 265) | func (r Reader) nbtString(v *string) error {
function NewReader (line 21) | func NewReader(r io.Reader, length int) Reader {
FILE: protocol/net/io/encoding/writer.go
type Writer (line 16) | type Writer struct
method Write (line 24) | func (w Writer) Write(data []byte) (i int, err error) {
method Bool (line 28) | func (w Writer) Bool(b bool) error {
method Byte (line 32) | func (w Writer) Byte(i int8) error {
method Ubyte (line 35) | func (w Writer) Ubyte(i uint8) error {
method Short (line 41) | func (w Writer) Short(i int16) error {
method Ushort (line 44) | func (w Writer) Ushort(i uint16) error {
method Int (line 54) | func (w Writer) Int(i int32) error {
method Long (line 66) | func (w Writer) Long(i int64) error {
method Float (line 82) | func (w Writer) Float(f float32) error {
method Double (line 85) | func (w Writer) Double(f float64) error {
method String (line 89) | func (w Writer) String(s string) error {
method Identifier (line 97) | func (w Writer) Identifier(s string) error {
method VarInt (line 108) | func (w Writer) VarInt(value int32) error {
method VarLong (line 121) | func (w Writer) VarLong(value int64) error {
method Position (line 139) | func (w Writer) Position(x, y, z int32) error {
method UUID (line 143) | func (w Writer) UUID(u uuid.UUID) error {
method BitSet (line 149) | func (w Writer) BitSet(data BitSet) error {
method FixedBitSet (line 161) | func (w Writer) FixedBitSet(data FixedBitSet) error {
method ByteArray (line 171) | func (w Writer) ByteArray(s []byte) error {
method FixedByteArray (line 180) | func (w Writer) FixedByteArray(s []byte) error {
method JSONTextComponent (line 186) | func (w Writer) JSONTextComponent(comp text.TextComponent) error {
method TextComponent (line 192) | func (w Writer) TextComponent(comp text.TextComponent) error {
method StringTextComponent (line 196) | func (w Writer) StringTextComponent(text string) error {
method NBT (line 207) | func (w Writer) NBT(data any) error {
function NewWriter (line 20) | func NewWriter(w *bytes.Buffer) Writer {
FILE: protocol/net/listener.go
constant ProtocolVersion (line 14) | ProtocolVersion = 767
constant HandshakingState (line 18) | HandshakingState = iota
constant StatusState (line 19) | StatusState
constant LoginState (line 20) | LoginState
constant ConfigurationState (line 21) | ConfigurationState
constant PlayState (line 22) | PlayState
type Listener (line 25) | type Listener struct
method SetStatusProvider (line 37) | func (l *Listener) SetStatusProvider(p StatusProvider) {
method StatusProvider (line 41) | func (l *Listener) StatusProvider() StatusProvider {
method listen (line 45) | func (l *Listener) listen() {
method newConn (line 63) | func (l *Listener) newConn(c net.Conn) *Conn {
method Close (line 74) | func (l *Listener) Close() error {
method Accept (line 81) | func (l *Listener) Accept() (*Conn, error) {
FILE: protocol/net/metadata/metadata.go
type Metadata (line 16) | type Metadata
type Byte (line 19) | type Byte
type VarInt (line 20) | type VarInt
type VarLong (line 21) | type VarLong
type Float (line 22) | type Float
type String (line 23) | type String
type TextComponent (line 25) | type TextComponent
type OptionalTextComponent (line 26) | type OptionalTextComponent
type Boolean (line 28) | type Boolean
type Rotations (line 29) | type Rotations
type Position (line 30) | type Position
type OptionalPosition (line 31) | type OptionalPosition
type Direction (line 32) | type Direction
type OptionalUUID (line 33) | type OptionalUUID
type BlockState (line 34) | type BlockState
type OptionalBlockState (line 35) | type OptionalBlockState
type NBT (line 36) | type NBT
type VillagerData (line 38) | type VillagerData
type OptionalVarInt (line 39) | type OptionalVarInt
type Pose (line 40) | type Pose
type CatVariant (line 41) | type CatVariant
type FrogVariant (line 42) | type FrogVariant
type GlobalPosition (line 44) | type GlobalPosition struct
type OptionalGlobalPosition (line 48) | type OptionalGlobalPosition
type PaintingVariant (line 50) | type PaintingVariant
type SnifferState (line 51) | type SnifferState
type Vector3 (line 52) | type Vector3
type Quatermion (line 53) | type Quatermion
constant Standing (line 57) | Standing Pose = iota
constant FallFlying (line 58) | FallFlying
constant Sleeping (line 59) | Sleeping
constant Swimming (line 60) | Swimming
constant SpinAttack (line 61) | SpinAttack
constant Sneaking (line 62) | Sneaking
constant LongJumping (line 63) | LongJumping
constant Dying (line 64) | Dying
constant Croaking (line 65) | Croaking
constant UsingTongue (line 66) | UsingTongue
constant Sitting (line 67) | Sitting
constant Roaring (line 68) | Roaring
constant Sniffing (line 69) | Sniffing
constant Emerging (line 70) | Emerging
constant Digging (line 71) | Digging
constant SnifferIdling (line 75) | SnifferIdling SnifferState = iota
constant SnifferFeelingHappy (line 76) | SnifferFeelingHappy
constant SnifferScenting (line 77) | SnifferScenting
constant SnifferSniffing (line 78) | SnifferSniffing
constant SnifferSearching (line 79) | SnifferSearching
constant SnifferDigging (line 80) | SnifferDigging
constant SnifferRising (line 81) | SnifferRising
constant VillagerTypeDesert (line 85) | VillagerTypeDesert = iota
constant VillagerTypeJungle (line 86) | VillagerTypeJungle
constant VillagerTypePlains (line 87) | VillagerTypePlains
constant VillagerTypeSavanna (line 88) | VillagerTypeSavanna
constant VillagerTypeSnow (line 89) | VillagerTypeSnow
constant VillagerTypeSwamp (line 90) | VillagerTypeSwamp
constant VillagerTypeTaiga (line 91) | VillagerTypeTaiga
constant VillagerProfessionNone (line 95) | VillagerProfessionNone = iota
constant VillagerProfessionArmorer (line 96) | VillagerProfessionArmorer
constant VillagerProfessionButcher (line 97) | VillagerProfessionButcher
constant VillagerProfessionCartographer (line 98) | VillagerProfessionCartographer
constant VillagerProfessionCleric (line 99) | VillagerProfessionCleric
constant VillagerProfessionFarmer (line 100) | VillagerProfessionFarmer
constant VillagerProfessionFisherman (line 101) | VillagerProfessionFisherman
constant VillagerProfessionFletcher (line 102) | VillagerProfessionFletcher
constant VillagerProfessionLeatherworker (line 103) | VillagerProfessionLeatherworker
constant VillagerProfessionLibrarian (line 104) | VillagerProfessionLibrarian
constant VillagerProfessionMason (line 105) | VillagerProfessionMason
constant VillagerProfessionNitwit (line 106) | VillagerProfessionNitwit
constant VillagerProfessionShepherd (line 107) | VillagerProfessionShepherd
constant VillagerProfessionToolsmith (line 108) | VillagerProfessionToolsmith
constant VillagerProfessionWeaponsmith (line 109) | VillagerProfessionWeaponsmith
constant IsOnFire (line 113) | IsOnFire = 1 << iota
constant IsCrouching (line 114) | IsCrouching
constant IsRiding_unused (line 115) | IsRiding_unused
constant IsSprinting (line 116) | IsSprinting
constant IsSwimming (line 117) | IsSwimming
constant IsInvisible (line 118) | IsInvisible
constant HasGlowingEffect (line 119) | HasGlowingEffect
constant IsFlyingWithElytra (line 120) | IsFlyingWithElytra
constant IsHandActive (line 124) | IsHandActive = 1 << iota
constant IsOffhandActive (line 125) | IsOffhandActive
constant IsInRiptideSpinAttack (line 126) | IsInRiptideSpinAttack
constant BaseIndex (line 132) | BaseIndex = iota
constant AirTicksIndex (line 134) | AirTicksIndex
constant CustomNameIndex (line 136) | CustomNameIndex
constant IsCustomNameVisibleIndex (line 138) | IsCustomNameVisibleIndex
constant IsSilentIndex (line 140) | IsSilentIndex
constant HasNoGravityIndex (line 142) | HasNoGravityIndex
constant PoseIndex (line 144) | PoseIndex
constant TicksFrozenInPowderedSnowIndex (line 146) | TicksFrozenInPowderedSnowIndex
constant LivingEntityHandstatesIndex (line 152) | LivingEntityHandstatesIndex = iota + 8
constant LivingEntityHealthIndex (line 154) | LivingEntityHealthIndex
constant LivingEntityPotionEffectColorIndex (line 156) | LivingEntityPotionEffectColorIndex
constant LivingEntityPotionEffectAmbientIndex (line 158) | LivingEntityPotionEffectAmbientIndex
constant LivingEntityArrowCountIndex (line 160) | LivingEntityArrowCountIndex
constant LivingEntityBeeStingersCountIndex (line 162) | LivingEntityBeeStingersCountIndex
constant LivingEntitySleepingBedPositionIndex (line 164) | LivingEntitySleepingBedPositionIndex
constant PlayerAdditionalHeartsIndex (line 170) | PlayerAdditionalHeartsIndex = iota + 15
constant PlayerScoreIndex (line 172) | PlayerScoreIndex
constant PlayerDisplayedSkinPartsIndex (line 174) | PlayerDisplayedSkinPartsIndex
constant PlayerMainHandIndex (line 176) | PlayerMainHandIndex
constant LeftShoulderEntityData (line 178) | LeftShoulderEntityData
constant RightShoulderEntityData (line 180) | RightShoulderEntityData
FILE: protocol/net/metadata/new.go
function Player (line 4) | func Player(health float32) Metadata {
FILE: protocol/net/packet/configuration/clientInfo.go
constant ChatModeEnabled (line 8) | ChatModeEnabled = iota
constant ChatModeCommandsOnly (line 9) | ChatModeCommandsOnly
constant ChatModeHidden (line 10) | ChatModeHidden
constant CapeEnabled (line 14) | CapeEnabled = 1 << iota
constant JacketEnabled (line 15) | JacketEnabled
constant LeftSleeveEnabled (line 16) | LeftSleeveEnabled
constant RightSleeveEnabled (line 17) | RightSleeveEnabled
constant LeftPantsLegEnabled (line 18) | LeftPantsLegEnabled
constant RightPantsLegEnabled (line 19) | RightPantsLegEnabled
constant HatEnabled (line 20) | HatEnabled
constant MainHandLeft (line 24) | MainHandLeft = iota
constant MainHandRight (line 25) | MainHandRight
constant PacketIdClientInformation (line 29) | PacketIdClientInformation = 0x00
type ClientInformation (line 31) | type ClientInformation struct
method ID (line 42) | func (ClientInformation) ID() int32 {
method Encode (line 46) | func (c *ClientInformation) Encode(w encoding.Writer) error {
method Decode (line 71) | func (c *ClientInformation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/configuration/cookie.go
constant PacketIdCookieRequest (line 6) | PacketIdCookieRequest = 0x00
type CookieRequest (line 8) | type CookieRequest struct
method ID (line 10) | func (CookieRequest) ID() int32 {
constant PacketIdCookieResponse (line 15) | PacketIdCookieResponse = 0x01
type CookieResponse (line 17) | type CookieResponse struct
method ID (line 19) | func (CookieResponse) ID() int32 {
FILE: protocol/net/packet/configuration/disconnect.go
constant PacketIdDisconnect (line 9) | PacketIdDisconnect = 0x02
type Disconnect (line 11) | type Disconnect struct
method ID (line 15) | func (Disconnect) ID() int32 {
method Encode (line 19) | func (d *Disconnect) Encode(w encoding.Writer) error {
method Decode (line 23) | func (d *Disconnect) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/configuration/finish.go
constant PacketIdFinishConfiguration (line 9) | PacketIdFinishConfiguration = 0x03
constant PacketIdAcknowledgeFinishConfiguration (line 11) | PacketIdAcknowledgeFinishConfiguration
type FinishConfiguration (line 14) | type FinishConfiguration struct
method ID (line 18) | func (FinishConfiguration) ID() int32 {
FILE: protocol/net/packet/configuration/keepAlive.go
constant PacketIdKeepAlive (line 8) | PacketIdKeepAlive = 0x04
type KeepAlive (line 10) | type KeepAlive struct
method ID (line 14) | func (KeepAlive) ID() int32 {
method Encode (line 18) | func (k *KeepAlive) Encode(w encoding.Writer) error {
method Decode (line 22) | func (k *KeepAlive) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/configuration/ping.go
constant PacketIdPing (line 8) | PacketIdPing = 0x05
type Ping (line 10) | type Ping struct
method ID (line 14) | func (Ping) ID() int32 {
method Encode (line 18) | func (p *Ping) Encode(w encoding.Writer) error {
method Decode (line 22) | func (p *Ping) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/configuration/plugin.go
constant PacketIdPluginMessage (line 8) | PacketIdPluginMessage = 0x01
type ClientboundPluginMessage (line 10) | type ClientboundPluginMessage struct
method ID (line 15) | func (ClientboundPluginMessage) ID() int32 {
method Encode (line 19) | func (c *ClientboundPluginMessage) Encode(w encoding.Writer) error {
method Decode (line 26) | func (c *ClientboundPluginMessage) Decode(r encoding.Reader) error {
type ServerboundPluginMessage (line 33) | type ServerboundPluginMessage struct
method ID (line 37) | func (ServerboundPluginMessage) ID() int32 {
FILE: protocol/net/packet/configuration/registryData.go
function init (line 13) | func init() {
constant PacketIdRegistryData (line 25) | PacketIdRegistryData = 0x07
type RegistryData (line 27) | type RegistryData struct
method ID (line 34) | func (RegistryData) ID() int32 {
method Encode (line 38) | func (r *RegistryData) Encode(w encoding.Writer) error {
method Decode (line 93) | func (d *RegistryData) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/configuration/resetChat.go
constant PacketIdResetChat (line 6) | PacketIdResetChat = 0x06
type ResetChat (line 8) | type ResetChat struct
method ID (line 10) | func (ResetChat) ID() int32 {
FILE: protocol/net/packet/handshake/handshake.go
constant Status (line 8) | Status = iota + 1
constant Login (line 9) | Login
constant Transfer (line 10) | Transfer
constant PacketIdHandshaking (line 14) | PacketIdHandshaking = 0x00
type Handshaking (line 16) | type Handshaking struct
method ID (line 23) | func (Handshaking) ID() int32 {
method Decode (line 27) | func (h *Handshaking) Decode(r encoding.Reader) error {
method Encode (line 41) | func (h Handshaking) Encode(w encoding.Writer) error {
FILE: protocol/net/packet/login/cookie.go
constant PacketIdCookieRequest (line 8) | PacketIdCookieRequest = 0x05
type CookieRequest (line 10) | type CookieRequest struct
method ID (line 14) | func (CookieRequest) ID() int32 {
method Encode (line 18) | func (s *CookieRequest) Encode(w encoding.Writer) error {
method Decode (line 22) | func (s *CookieRequest) Decode(r encoding.Reader) error {
type CookieResponse (line 26) | type CookieResponse struct
method ID (line 32) | func (CookieResponse) ID() int32 {
method Encode (line 36) | func (s *CookieResponse) Encode(w encoding.Writer) error {
method Decode (line 49) | func (s *CookieResponse) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/login/disconnect.go
constant PacketIdDisconnect (line 9) | PacketIdDisconnect = 0x00
type Disconnect (line 11) | type Disconnect struct
method ID (line 15) | func (Disconnect) ID() int32 {
method Encode (line 19) | func (d *Disconnect) Encode(w encoding.Writer) error {
method Decode (line 23) | func (d *Disconnect) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/login/encryption.go
constant PacketIdEncryption (line 8) | PacketIdEncryption = 0x01
type EncryptionRequest (line 10) | type EncryptionRequest struct
method ID (line 16) | func (EncryptionRequest) ID() int32 {
method Encode (line 20) | func (e *EncryptionRequest) Encode(w encoding.Writer) error {
method Decode (line 33) | func (e *EncryptionRequest) Decode(r encoding.Reader) error {
type EncryptionResponse (line 47) | type EncryptionResponse struct
method ID (line 52) | func (EncryptionResponse) ID() int32 {
method Encode (line 56) | func (e *EncryptionResponse) Encode(w encoding.Writer) error {
method Decode (line 63) | func (e *EncryptionResponse) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/login/loginStart.go
constant PacketIdLoginStart (line 9) | PacketIdLoginStart = 0x00
type LoginStart (line 11) | type LoginStart struct
method ID (line 16) | func (LoginStart) ID() int32 {
method Encode (line 20) | func (l *LoginStart) Encode(w encoding.Writer) error {
method Decode (line 27) | func (l *LoginStart) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/login/loginSuccess.go
type Textures (line 8) | type Textures struct
type Property (line 26) | type Property struct
constant PacketIdLoginSuccess (line 33) | PacketIdLoginSuccess = 0x02
type LoginSuccess (line 35) | type LoginSuccess struct
method ID (line 41) | func (LoginSuccess) ID() int32 {
method Encode (line 45) | func (l *LoginSuccess) Encode(w encoding.Writer) error {
constant PacketIdLoginAcknowledged (line 77) | PacketIdLoginAcknowledged = 0x03
type LoginAcknowledged (line 79) | type LoginAcknowledged struct
method ID (line 81) | func (LoginAcknowledged) ID() int32 {
method Decode (line 85) | func (*LoginAcknowledged) Decode(encoding.Reader) error {
FILE: protocol/net/packet/login/plugin.go
constant PacketIdLoginPluginRequest (line 8) | PacketIdLoginPluginRequest = 0x04
type LoginPluginRequest (line 10) | type LoginPluginRequest struct
method ID (line 16) | func (LoginPluginRequest) ID() int32 {
method Encode (line 20) | func (l *LoginPluginRequest) Encode(w encoding.Writer) error {
method Decode (line 30) | func (l *LoginPluginRequest) Decode(r encoding.Reader) error {
constant PacketIdLoginPluginResponse (line 41) | PacketIdLoginPluginResponse = 0x02
type LoginPluginResponse (line 43) | type LoginPluginResponse struct
method ID (line 49) | func (LoginPluginResponse) ID() int32 {
method Encode (line 53) | func (l *LoginPluginResponse) Encode(w encoding.Writer) error {
method Decode (line 68) | func (l *LoginPluginResponse) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/login/setCompression.go
constant PacketIdSetCompression (line 8) | PacketIdSetCompression = 0x03
type SetCompression (line 10) | type SetCompression struct
method ID (line 14) | func (SetCompression) ID() int32 {
method Encode (line 18) | func (s *SetCompression) Encode(w encoding.Writer) error {
method Decode (line 22) | func (s *SetCompression) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/packet.go
type Encodeable (line 6) | type Encodeable interface
type Decodeable (line 12) | type Decodeable interface
type Error (line 18) | type Error struct
method ID (line 22) | func (Error) ID() int32 { return -1 }
method Decode (line 23) | func (Error) Decode(encoding.Reader) error { return nil }
type UnknownPacket (line 27) | type UnknownPacket struct
method ID (line 33) | func (u UnknownPacket) ID() int32 {
method Decode (line 37) | func (u UnknownPacket) Decode(encoding.Reader) error {
method Encode (line 41) | func (u UnknownPacket) Encode(encoding.Writer) error {
type EmptyPacket (line 45) | type EmptyPacket struct
method Encode (line 48) | func (pk EmptyPacket) Encode(encoding.Writer) error {
method Decode (line 52) | func (pk EmptyPacket) Decode(encoding.Reader) error {
FILE: protocol/net/packet/play/acknowledgeBlockChange.go
constant PacketIdAcknowledgeBlockChange (line 8) | PacketIdAcknowledgeBlockChange = 0x05
type AcknowledgeBlockChange (line 10) | type AcknowledgeBlockChange struct
method ID (line 14) | func (AcknowledgeBlockChange) ID() int32 {
method Encode (line 18) | func (b *AcknowledgeBlockChange) Encode(w encoding.Writer) error {
method Decode (line 22) | func (b *AcknowledgeBlockChange) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/blockAction.go
constant PacketIdBlockAction (line 8) | PacketIdBlockAction = 0x08
type BlockAction (line 10) | type BlockAction struct
method ID (line 16) | func (BlockAction) ID() int32 {
method Encode (line 20) | func (b *BlockAction) Encode(w encoding.Writer) error {
method Decode (line 33) | func (b *BlockAction) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/blockEntityData.go
constant PacketIdBlockEntityData (line 9) | PacketIdBlockEntityData = 0x07
type BlockEntityData (line 11) | type BlockEntityData struct
method ID (line 17) | func (BlockEntityData) ID() int32 {
method Encode (line 21) | func (b *BlockEntityData) Encode(w encoding.Writer) error {
method Decode (line 34) | func (b *BlockEntityData) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/blockUpdate.go
constant PacketIdBlockUpdate (line 8) | PacketIdBlockUpdate = 0x09
type BlockUpdate (line 10) | type BlockUpdate struct
method ID (line 15) | func (BlockUpdate) ID() int32 {
method Encode (line 19) | func (b *BlockUpdate) Encode(w encoding.Writer) error {
method Decode (line 26) | func (b *BlockUpdate) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/bundleDelimiter.go
constant PacketIdBundleDelimiter (line 6) | PacketIdBundleDelimiter = 0x00
type BundleDelimiter (line 8) | type BundleDelimiter struct
method ID (line 10) | func (BundleDelimiter) ID() int32 {
FILE: protocol/net/packet/play/changeDifficulty.go
constant PacketIdChangeDifficulty (line 8) | PacketIdChangeDifficulty = 0x0B
type ChangeDifficulty (line 10) | type ChangeDifficulty struct
method ID (line 15) | func (ChangeDifficulty) ID() int32 {
method Encode (line 19) | func (c *ChangeDifficulty) Encode(w encoding.Writer) error {
method Decode (line 26) | func (c *ChangeDifficulty) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/chatCommand.go
constant PacketIdChatCommand (line 8) | PacketIdChatCommand = 0x04
type ChatCommand (line 10) | type ChatCommand struct
method ID (line 14) | func (ChatCommand) ID() int32 {
method Encode (line 18) | func (c *ChatCommand) Encode(w encoding.Writer) error {
method Decode (line 22) | func (c *ChatCommand) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/chatMessage.go
constant PacketIdChatMessage (line 8) | PacketIdChatMessage = 0x06
type ChatMessage (line 10) | type ChatMessage struct
method ID (line 21) | func (ChatMessage) ID() int32 {
method Encode (line 25) | func (c *ChatMessage) Encode(w encoding.Writer) error {
method Decode (line 49) | func (c *ChatMessage) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/chunkBatch.go
constant PacketIdChunkBatchFinished (line 9) | PacketIdChunkBatchFinished = 0x0C
type ChunkBatchFinished (line 11) | type ChunkBatchFinished struct
method ID (line 15) | func (ChunkBatchFinished) ID() int32 {
method Encode (line 19) | func (c *ChunkBatchFinished) Encode(w encoding.Writer) error {
method Decode (line 23) | func (c *ChunkBatchFinished) Decode(r encoding.Reader) error {
constant PacketIdChunkBatchStart (line 29) | PacketIdChunkBatchStart = 0x0D
type ChunkBatchStart (line 31) | type ChunkBatchStart struct
method ID (line 33) | func (ChunkBatchStart) ID() int32 {
constant PacketIdChunkBatchReceived (line 38) | PacketIdChunkBatchReceived = 0x08
type ChunkBatchReceived (line 40) | type ChunkBatchReceived struct
method ID (line 44) | func (ChunkBatchReceived) ID() int32 {
method Encode (line 48) | func (c *ChunkBatchReceived) Encode(w encoding.Writer) error {
method Decode (line 52) | func (c *ChunkBatchReceived) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/chunkData.go
type BlockEntity (line 9) | type BlockEntity struct
constant PacketIdChunkDataUpdateLight (line 16) | PacketIdChunkDataUpdateLight = 0x27
type Heightmaps (line 18) | type Heightmaps struct
type ChunkDataUpdateLight (line 22) | type ChunkDataUpdateLight struct
method ID (line 32) | func (ChunkDataUpdateLight) ID() int32 {
method Encode (line 36) | func (c *ChunkDataUpdateLight) Encode(w encoding.Writer) error {
method Decode (line 103) | func (c *ChunkDataUpdateLight) Decode(encoding.Reader) error {
FILE: protocol/net/packet/play/clickContainer.go
constant PacketIdClickContainer (line 9) | PacketIdClickContainer = 0x0E
type ClickContainer (line 11) | type ClickContainer struct
method ID (line 26) | func (ClickContainer) ID() int32 {
method Decode (line 30) | func (c *ClickContainer) Decode(r encoding.Reader) error {
type ChangedSlot (line 21) | type ChangedSlot struct
FILE: protocol/net/packet/play/clientInfo.go
constant PacketIdClientInformation (line 6) | PacketIdClientInformation = 0x0A
type ClientInformation (line 8) | type ClientInformation struct
method ID (line 12) | func (ClientInformation) ID() int32 {
FILE: protocol/net/packet/play/closeContainer.go
constant PacketIdCloseContainer (line 8) | PacketIdCloseContainer = 0x0F
type CloseContainer (line 10) | type CloseContainer struct
method ID (line 14) | func (CloseContainer) ID() int32 {
method Encode (line 18) | func (c *CloseContainer) Encode(w encoding.Writer) error {
method Decode (line 22) | func (c *CloseContainer) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/commands.go
type Node (line 9) | type Node struct
constant NodeRoot (line 29) | NodeRoot = iota
constant NodeLiteral (line 32) | NodeLiteral = 1 << iota
constant NodeArgument (line 33) | NodeArgument
constant NodeExecutable (line 35) | NodeExecutable
constant NodeRedirect (line 36) | NodeRedirect
constant NodeHasSuggestionsType (line 37) | NodeHasSuggestionsType
constant NodeType (line 40) | NodeType = 0x03
constant PacketIdCommands (line 43) | PacketIdCommands = 0x11
type Commands (line 45) | type Commands struct
method ID (line 50) | func (Commands) ID() int32 {
method Encode (line 54) | func (c *Commands) Encode(w encoding.Writer) error {
method encodeNode (line 66) | func (c *Commands) encodeNode(w encoding.Writer, node Node) error {
FILE: protocol/net/packet/play/confirmTeleport.go
constant PacketIdConfirmTeleportation (line 8) | PacketIdConfirmTeleportation = 0x00
type ConfirmTeleportation (line 10) | type ConfirmTeleportation struct
method ID (line 14) | func (ConfirmTeleportation) ID() int32 {
method Encode (line 18) | func (c *ConfirmTeleportation) Encode(w encoding.Writer) error {
method Decode (line 22) | func (c *ConfirmTeleportation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/damageEvent.go
constant PacketIdDamageEvent (line 8) | PacketIdDamageEvent = 0x1A
type DamageEvent (line 10) | type DamageEvent struct
method ID (line 20) | func (DamageEvent) ID() int32 {
method Encode (line 24) | func (d *DamageEvent) Encode(w encoding.Writer) error {
method Decode (line 54) | func (d *DamageEvent) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/deleteMessage.go
constant PacketIdDeleteMessage (line 8) | PacketIdDeleteMessage = 0x1C
type DeleteMessage (line 10) | type DeleteMessage struct
method ID (line 15) | func (DeleteMessage) ID() int32 {
method Encode (line 19) | func (b *DeleteMessage) Encode(w encoding.Writer) error {
method Decode (line 29) | func (b *DeleteMessage) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/disconnect.go
constant PacketIdDisconnect (line 9) | PacketIdDisconnect = 0x1D
type Disconnect (line 11) | type Disconnect struct
method ID (line 15) | func (Disconnect) ID() int32 {
method Encode (line 19) | func (d *Disconnect) Encode(w encoding.Writer) error {
method Decode (line 23) | func (d *Disconnect) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/disguisedChatMessage.go
constant PacketIdDisguisedChatMessage (line 9) | PacketIdDisguisedChatMessage = 0x1E
type DisguisedChatMessage (line 11) | type DisguisedChatMessage struct
method ID (line 20) | func (DisguisedChatMessage) ID() int32 {
method Encode (line 24) | func (p *DisguisedChatMessage) Encode(w encoding.Writer) error {
method Decode (line 48) | func (p *DisguisedChatMessage) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/entityAnimation.go
constant PacketIdEntityAnimation (line 8) | PacketIdEntityAnimation = 0x03
constant AnimationSwingMainArm (line 11) | AnimationSwingMainArm = iota
constant _ (line 12) | _
constant AnimationLeaveBed (line 13) | AnimationLeaveBed
constant AnimationSwingOffhand (line 14) | AnimationSwingOffhand
constant AnimationCriticalEffect (line 15) | AnimationCriticalEffect
constant AnimationMagicCriticalEffect (line 16) | AnimationMagicCriticalEffect
type EntityAnimation (line 19) | type EntityAnimation struct
method ID (line 24) | func (EntityAnimation) ID() int32 {
method Encode (line 28) | func (e *EntityAnimation) Encode(w encoding.Writer) error {
method Decode (line 35) | func (e *EntityAnimation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/entityEvent.go
constant PacketIdEntityEvent (line 8) | PacketIdEntityEvent = 0x1F
type EntityEvent (line 10) | type EntityEvent struct
method ID (line 15) | func (EntityEvent) ID() int32 {
method Encode (line 19) | func (e *EntityEvent) Encode(w encoding.Writer) error {
method Decode (line 26) | func (e *EntityEvent) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/entitySoundEffect.go
constant PacketIdEntitySoundEffect (line 8) | PacketIdEntitySoundEffect = 0x67
type EntitySoundEffect (line 10) | type EntitySoundEffect struct
method ID (line 22) | func (EntitySoundEffect) ID() int32 {
method Encode (line 26) | func (s *EntitySoundEffect) Encode(w encoding.Writer) error {
method Decode (line 58) | func (s *EntitySoundEffect) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/gameEvent.go
constant GameEventNoRespawnBlockAvailable (line 8) | GameEventNoRespawnBlockAvailable = iota
constant GameEventBeginRaining (line 9) | GameEventBeginRaining
constant GameEventEndRaining (line 10) | GameEventEndRaining
constant GameEventChangeGamemode (line 11) | GameEventChangeGamemode
constant GameEventWinGame (line 12) | GameEventWinGame
constant GameEventDemoEvent (line 13) | GameEventDemoEvent
constant GameEventArrowHitPlayer (line 14) | GameEventArrowHitPlayer
constant GameEventRainLevelChange (line 15) | GameEventRainLevelChange
constant GameEventThunderLevelChange (line 16) | GameEventThunderLevelChange
constant GameEventPlayPufferfishStingSound (line 17) | GameEventPlayPufferfishStingSound
constant GameEventPlayElderGuardianMobAppearance (line 18) | GameEventPlayElderGuardianMobAppearance
constant GameEventEnableRespawnScreen (line 19) | GameEventEnableRespawnScreen
constant GameEventLimitedCrafting (line 20) | GameEventLimitedCrafting
constant GameEventStartWaitingChunks (line 21) | GameEventStartWaitingChunks
constant PacketIdGameEvent (line 25) | PacketIdGameEvent = 0x22
type GameEvent (line 27) | type GameEvent struct
method ID (line 32) | func (GameEvent) ID() int32 {
method Encode (line 36) | func (g *GameEvent) Encode(w encoding.Writer) error {
method Decode (line 43) | func (g *GameEvent) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/hurtAnimation.go
constant PacketIdHurtAnimation (line 8) | PacketIdHurtAnimation = 0x24
type HurtAnimation (line 10) | type HurtAnimation struct
method ID (line 15) | func (HurtAnimation) ID() int32 {
method Encode (line 19) | func (d *HurtAnimation) Encode(w encoding.Writer) error {
method Decode (line 26) | func (d *HurtAnimation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/interact.go
constant PacketIdInteract (line 8) | PacketIdInteract = 0x16
constant InteractTypeInteract (line 11) | InteractTypeInteract = iota
constant InteractTypeAttack (line 12) | InteractTypeAttack
constant InteractTypeInteractAt (line 13) | InteractTypeInteractAt
type Interact (line 16) | type Interact struct
method ID (line 24) | func (Interact) ID() int32 {
method Encode (line 28) | func (i *Interact) Encode(w encoding.Writer) error {
method Decode (line 55) | func (i *Interact) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/keepAlive.go
constant PacketIdServerboundKeepAlive (line 8) | PacketIdServerboundKeepAlive = 0x18
type ServerboundKeepAlive (line 10) | type ServerboundKeepAlive struct
method ID (line 14) | func (ServerboundKeepAlive) ID() int32 {
method Encode (line 18) | func (k *ServerboundKeepAlive) Encode(w encoding.Writer) error {
method Decode (line 22) | func (k *ServerboundKeepAlive) Decode(r encoding.Reader) error {
constant PacketIdClientboundKeepAlive (line 27) | PacketIdClientboundKeepAlive = 0x26
type ClientboundKeepAlive (line 29) | type ClientboundKeepAlive struct
method ID (line 33) | func (ClientboundKeepAlive) ID() int32 {
method Encode (line 37) | func (k *ClientboundKeepAlive) Encode(w encoding.Writer) error {
method Decode (line 41) | func (k *ClientboundKeepAlive) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/login.go
constant PacketIdLogin (line 10) | PacketIdLogin = 0x2B
type Login (line 12) | type Login struct
method ID (line 43) | func (Login) ID() int32 {
method Encode (line 47) | func (l *Login) Encode(w encoding.Writer) error {
method Decode (line 119) | func (l *Login) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/openScreen.go
constant PacketIdOpenScreen (line 9) | PacketIdOpenScreen = 0x33
type OpenScreen (line 11) | type OpenScreen struct
method ID (line 17) | func (OpenScreen) ID() int32 {
method Encode (line 21) | func (o *OpenScreen) Encode(w encoding.Writer) error {
method Decode (line 31) | func (o *OpenScreen) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerAbilitiesCB.go
constant PacketIdPlayerAbilitiesClientbound (line 8) | PacketIdPlayerAbilitiesClientbound = 0x38
constant PlayerAbsInvulenrable (line 11) | PlayerAbsInvulenrable = 1 << iota
constant PlayerAbsFlying (line 12) | PlayerAbsFlying
constant PlayerAbsCreativeMode (line 13) | PlayerAbsCreativeMode
type PlayerAbilitiesClientbound (line 16) | type PlayerAbilitiesClientbound struct
method ID (line 22) | func (PlayerAbilitiesClientbound) ID() int32 {
method Encode (line 26) | func (a *PlayerAbilitiesClientbound) Encode(w encoding.Writer) error {
method Decode (line 36) | func (a *PlayerAbilitiesClientbound) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerAbilitiesSB.go
constant PacketIdPlayerAbilitiesServerbound (line 8) | PacketIdPlayerAbilitiesServerbound = 0x23
type PlayerAbilitiesServerbound (line 10) | type PlayerAbilitiesServerbound struct
method ID (line 14) | func (PlayerAbilitiesServerbound) ID() int32 {
method Encode (line 18) | func (a *PlayerAbilitiesServerbound) Encode(w encoding.Writer) error {
method Decode (line 22) | func (a *PlayerAbilitiesServerbound) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerChatMessage.go
constant FilterTypePassThrough (line 10) | FilterTypePassThrough = iota
constant FilterTypeFullyFiltered (line 11) | FilterTypeFullyFiltered
constant FilterTypePartiallyFiltered (line 12) | FilterTypePartiallyFiltered
type PreviousMessage (line 15) | type PreviousMessage struct
constant PacketIdPlayerChatMessage (line 21) | PacketIdPlayerChatMessage = 0x39
type PlayerChatMessage (line 23) | type PlayerChatMessage struct
method ID (line 44) | func (PlayerChatMessage) ID() int32 {
method Encode (line 48) | func (p *PlayerChatMessage) Encode(w encoding.Writer) error {
method Decode (line 124) | func (p *PlayerChatMessage) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerCommand.go
constant PacketIdPlayerCommand (line 8) | PacketIdPlayerCommand = 0x25
constant ActionIdStartSneaking (line 11) | ActionIdStartSneaking = iota
constant ActionIdStopSneaking (line 12) | ActionIdStopSneaking
constant ActionIdLeaveBed (line 13) | ActionIdLeaveBed
constant ActionIdStartSprinting (line 14) | ActionIdStartSprinting
constant ActionIdStopSprinting (line 15) | ActionIdStopSprinting
constant ActionIdStartJumpWithHorse (line 16) | ActionIdStartJumpWithHorse
constant ActionIdStopJumpWithHorse (line 17) | ActionIdStopJumpWithHorse
constant ActionIdOpenVehicleInventory (line 18) | ActionIdOpenVehicleInventory
constant ActionIdStartFlyingWithElytra (line 19) | ActionIdStartFlyingWithElytra
type PlayerCommand (line 22) | type PlayerCommand struct
method ID (line 28) | func (PlayerCommand) ID() int32 {
method Encode (line 32) | func (p *PlayerCommand) Encode(w encoding.Writer) error {
method Decode (line 42) | func (p *PlayerCommand) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerInfoRemove.go
constant PacketIdPlayerInfoRemove (line 10) | PacketIdPlayerInfoRemove = 0x3D
type PlayerInfoRemove (line 12) | type PlayerInfoRemove struct
method ID (line 16) | func (PlayerInfoRemove) ID() int32 {
method Encode (line 20) | func (p *PlayerInfoRemove) Encode(w encoding.Writer) error {
method Decode (line 32) | func (p *PlayerInfoRemove) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerInfoUpdate.go
constant ActionAddPlayer (line 11) | ActionAddPlayer = 1 << iota
constant ActionInitializeChat (line 12) | ActionInitializeChat
constant ActionUpdateGameMode (line 13) | ActionUpdateGameMode
constant ActionUpdateListed (line 14) | ActionUpdateListed
constant ActionUpdateLatency (line 15) | ActionUpdateLatency
constant ActionUpdateDisplayName (line 16) | ActionUpdateDisplayName
type PlayerAction (line 19) | type PlayerAction struct
constant PacketIdPlayerInfoUpdate (line 38) | PacketIdPlayerInfoUpdate = 0x3E
type PlayerInfoUpdate (line 40) | type PlayerInfoUpdate struct
method ID (line 45) | func (PlayerInfoUpdate) ID() int32 {
method Encode (line 49) | func (p *PlayerInfoUpdate) Encode(w encoding.Writer) error {
method Decode (line 128) | func (p *PlayerInfoUpdate) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/playerSession.go
constant PacketIdPlayerSession (line 9) | PacketIdPlayerSession = 0x07
type PlayerSession (line 11) | type PlayerSession struct
method ID (line 18) | func (PlayerSession) ID() int32 {
method Encode (line 22) | func (p *PlayerSession) Encode(w encoding.Writer) error {
method Decode (line 35) | func (p *PlayerSession) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/plugin.go
constant PacketIdClientboundPluginMessage (line 9) | PacketIdClientboundPluginMessage = 0x19
type ClientboundPluginMessage (line 11) | type ClientboundPluginMessage
method ID (line 13) | func (ClientboundPluginMessage) ID() int32 {
method Encode (line 17) | func (c *ClientboundPluginMessage) Encode(w encoding.Writer) error {
method Decode (line 24) | func (c *ClientboundPluginMessage) Decode(r encoding.Reader) error {
constant PacketIdServerboundPluginMessage (line 32) | PacketIdServerboundPluginMessage = 0x12
type ServerboundPluginMessage (line 34) | type ServerboundPluginMessage struct
method ID (line 38) | func (ServerboundPluginMessage) ID() int32 {
FILE: protocol/net/packet/play/removeEntities.go
constant PacketIdRemoveEntities (line 8) | PacketIdRemoveEntities = 0x42
type RemoveEntities (line 10) | type RemoveEntities struct
method ID (line 14) | func (RemoveEntities) ID() int32 {
method Encode (line 18) | func (r *RemoveEntities) Encode(w encoding.Writer) error {
method Decode (line 32) | func (e *RemoveEntities) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/serverData.go
constant PacketIdServerData (line 9) | PacketIdServerData = 0x4B
type ServerData (line 11) | type ServerData struct
method ID (line 16) | func (ServerData) ID() int32 {
method Encode (line 20) | func (d *ServerData) Encode(w encoding.Writer) error {
method Decode (line 33) | func (d *ServerData) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/serverLinks.go
constant PacketIdServerLinks (line 9) | PacketIdServerLinks = 0x7B
constant LabelBugRepot (line 12) | LabelBugRepot = iota
constant LabelCommunityGuidelines (line 13) | LabelCommunityGuidelines
constant LabelSupport (line 14) | LabelSupport
constant LabelStatus (line 15) | LabelStatus
constant LabelFeedback (line 16) | LabelFeedback
constant LabelCommunity (line 17) | LabelCommunity
constant LabelWebsite (line 18) | LabelWebsite
constant LabelForums (line 19) | LabelForums
constant LabelNews (line 20) | LabelNews
constant LabelAnnouncements (line 21) | LabelAnnouncements
type Link (line 24) | type Link struct
type ServerLinks (line 33) | type ServerLinks struct
method ID (line 37) | func (ServerLinks) ID() int32 {
method Encode (line 41) | func (s *ServerLinks) Encode(w encoding.Writer) error {
method Decode (line 65) | func (s *ServerLinks) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setCenterChunk.go
constant PacketIdSetCenterChunk (line 8) | PacketIdSetCenterChunk = 0x54
type SetCenterChunk (line 10) | type SetCenterChunk struct
method ID (line 14) | func (SetCenterChunk) ID() int32 {
method Encode (line 18) | func (s *SetCenterChunk) Encode(w encoding.Writer) error {
method Decode (line 25) | func (s *SetCenterChunk) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setContainerContent.go
constant PacketIdSetContainerContent (line 9) | PacketIdSetContainerContent = 0x13
type SetContainerContent (line 11) | type SetContainerContent struct
method ID (line 18) | func (SetContainerContent) ID() int32 {
method Encode (line 22) | func (s *SetContainerContent) Encode(w encoding.Writer) error {
method Decode (line 41) | func (s *SetContainerContent) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setCreativeModeSlot.go
constant PacketIdSetCreativeModeSlot (line 9) | PacketIdSetCreativeModeSlot = 0x32
type SetCreativeModeSlot (line 11) | type SetCreativeModeSlot struct
method ID (line 16) | func (SetCreativeModeSlot) ID() int32 {
method Encode (line 20) | func (s *SetCreativeModeSlot) Encode(w encoding.Writer) error {
method Decode (line 27) | func (s *SetCreativeModeSlot) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setDefaultSpawnPosition.go
constant PacketIdSetDefaultSpawnPosition (line 8) | PacketIdSetDefaultSpawnPosition = 0x56
type SetDefaultSpawnPosition (line 10) | type SetDefaultSpawnPosition struct
method ID (line 15) | func (SetDefaultSpawnPosition) ID() int32 {
method Encode (line 19) | func (s *SetDefaultSpawnPosition) Encode(w encoding.Writer) error {
method Decode (line 26) | func (s *SetDefaultSpawnPosition) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setEntityMetadata.go
constant PacketIdSetEntityMetadata (line 10) | PacketIdSetEntityMetadata = 0x58
type SetEntityMetadata (line 12) | type SetEntityMetadata struct
method ID (line 17) | func (SetEntityMetadata) ID() int32 {
method Encode (line 21) | func (s *SetEntityMetadata) Encode(w encoding.Writer) error {
method Decode (line 276) | func (*SetEntityMetadata) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setEntityVelocity.go
constant PacketIdSetEntityVelocity (line 8) | PacketIdSetEntityVelocity = 0x5A
type SetEntityVelocity (line 10) | type SetEntityVelocity struct
method ID (line 15) | func (SetEntityVelocity) ID() int32 {
method Encode (line 19) | func (d *SetEntityVelocity) Encode(w encoding.Writer) error {
method Decode (line 32) | func (d *SetEntityVelocity) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setHeadRotation.go
constant PacketIdSetHeadRotation (line 8) | PacketIdSetHeadRotation = 0x48
type SetHeadRotation (line 10) | type SetHeadRotation struct
method ID (line 15) | func (SetHeadRotation) ID() int32 {
method Encode (line 19) | func (s *SetHeadRotation) Encode(w encoding.Writer) error {
method Decode (line 26) | func (s *SetHeadRotation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setHeldItemCB.go
constant PacketIdSetHeldItemClientbound (line 8) | PacketIdSetHeldItemClientbound = 0x53
type SetHeldItemClientbound (line 10) | type SetHeldItemClientbound struct
method ID (line 14) | func (SetHeldItemClientbound) ID() int32 {
method Encode (line 18) | func (s *SetHeldItemClientbound) Encode(w encoding.Writer) error {
method Decode (line 22) | func (s *SetHeldItemClientbound) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setHeldItemSB.go
constant PacketIdSetHeldItemServerbound (line 8) | PacketIdSetHeldItemServerbound = 0x2F
type SetHeldItemServerbound (line 10) | type SetHeldItemServerbound struct
method ID (line 14) | func (SetHeldItemServerbound) ID() int32 {
method Encode (line 18) | func (s *SetHeldItemServerbound) Encode(w encoding.Writer) error {
method Decode (line 22) | func (s *SetHeldItemServerbound) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setPlayerOnGround.go
constant PacketIdSetPlayerOnGround (line 8) | PacketIdSetPlayerOnGround = 0x1D
type SetPlayerOnGround (line 10) | type SetPlayerOnGround struct
method ID (line 14) | func (SetPlayerOnGround) ID() int32 {
method Encode (line 18) | func (s *SetPlayerOnGround) Encode(w encoding.Writer) error {
method Decode (line 22) | func (s *SetPlayerOnGround) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setPlayerPosition.go
constant PacketIdSetPlayerPosition (line 8) | PacketIdSetPlayerPosition = 0x1A
type SetPlayerPosition (line 10) | type SetPlayerPosition struct
method ID (line 15) | func (SetPlayerPosition) ID() int32 {
method Encode (line 19) | func (s *SetPlayerPosition) Encode(w encoding.Writer) error {
method Decode (line 32) | func (s *SetPlayerPosition) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setPlayerPositionAndRotation.go
constant PacketIdSetPlayerPositionAndRotation (line 8) | PacketIdSetPlayerPositionAndRotation = 0x1B
type SetPlayerPositionAndRotation (line 10) | type SetPlayerPositionAndRotation struct
method ID (line 16) | func (SetPlayerPositionAndRotation) ID() int32 {
method Encode (line 20) | func (s *SetPlayerPositionAndRotation) Encode(w encoding.Writer) error {
method Decode (line 39) | func (s *SetPlayerPositionAndRotation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setPlayerRotation.go
constant PacketIdSetPlayerRotation (line 8) | PacketIdSetPlayerRotation = 0x1C
type SetPlayerRotation (line 10) | type SetPlayerRotation struct
method ID (line 15) | func (SetPlayerRotation) ID() int32 {
method Encode (line 19) | func (s *SetPlayerRotation) Encode(w encoding.Writer) error {
method Decode (line 29) | func (s *SetPlayerRotation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/setTickingState.go
constant PacketIdSetTickingState (line 8) | PacketIdSetTickingState = 0x71
type SetTickingState (line 10) | type SetTickingState struct
method ID (line 15) | func (SetTickingState) ID() int32 {
method Encode (line 19) | func (s *SetTickingState) Encode(w encoding.Writer) error {
FILE: protocol/net/packet/play/signedChatCommand.go
constant PacketIdSignedChatCommand (line 8) | PacketIdSignedChatCommand = 0x05
type SignedChatCommand (line 10) | type SignedChatCommand struct
method ID (line 23) | func (SignedChatCommand) ID() int32 {
method Encode (line 27) | func (c *SignedChatCommand) Encode(w encoding.Writer) error {
method Decode (line 54) | func (c *SignedChatCommand) Decode(r encoding.Reader) error {
type SignedArgument (line 18) | type SignedArgument struct
FILE: protocol/net/packet/play/soundEffect.go
constant PacketIdSoundEffect (line 8) | PacketIdSoundEffect = 0x68
constant SoundCategoryMaster (line 11) | SoundCategoryMaster = iota
constant SoundCategoryMusic (line 12) | SoundCategoryMusic
constant SoundCategoryRecord (line 13) | SoundCategoryRecord
constant SoundCategoryWeather (line 14) | SoundCategoryWeather
constant SoundCategoryBlock (line 15) | SoundCategoryBlock
constant SoundCategoryHostile (line 16) | SoundCategoryHostile
constant SoundCategoryNeutral (line 17) | SoundCategoryNeutral
constant SoundCategoryPlayer (line 18) | SoundCategoryPlayer
constant SoundCategoryAmbient (line 19) | SoundCategoryAmbient
constant SoundCategoryVoice (line 20) | SoundCategoryVoice
type SoundEffect (line 23) | type SoundEffect struct
method ID (line 35) | func (SoundEffect) ID() int32 {
method Encode (line 39) | func (s *SoundEffect) Encode(w encoding.Writer) error {
method Decode (line 77) | func (s *SoundEffect) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/spawnEntity.go
constant ObjectDataItemFrameDown (line 9) | ObjectDataItemFrameDown = iota
constant ObjectDataItemFrameUp (line 10) | ObjectDataItemFrameUp
constant ObjectDataNorth (line 11) | ObjectDataNorth
constant ObjectDataSouth (line 12) | ObjectDataSouth
constant ObjectDataWest (line 13) | ObjectDataWest
constant ObjectDataEast (line 14) | ObjectDataEast
constant PacketIdSpawnEntity (line 18) | PacketIdSpawnEntity = 0x01
type SpawnEntity (line 20) | type SpawnEntity struct
method ID (line 30) | func (SpawnEntity) ID() int32 {
method Encode (line 34) | func (s *SpawnEntity) Encode(w encoding.Writer) error {
method Decode (line 74) | func (s *SpawnEntity) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/stepTick.go
constant PacketIdStepTick (line 8) | PacketIdStepTick = 0x72
type StepTick (line 10) | type StepTick struct
method ID (line 14) | func (StepTick) ID() int32 {
method Encode (line 18) | func (s *StepTick) Encode(w encoding.Writer) error {
FILE: protocol/net/packet/play/swingArm.go
constant PacketIdSwingArm (line 8) | PacketIdSwingArm = 0x36
constant MainHand (line 11) | MainHand = iota
constant Offhand (line 12) | Offhand
type SwingArm (line 15) | type SwingArm struct
method ID (line 19) | func (SwingArm) ID() int32 {
method Encode (line 23) | func (e *SwingArm) Encode(w encoding.Writer) error {
method Decode (line 27) | func (e *SwingArm) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/synchronizePlayerPosition.go
constant PacketIdSynchronizePlayerPosition (line 8) | PacketIdSynchronizePlayerPosition = 0x40
constant SyncPosRelX (line 11) | SyncPosRelX = 1 << iota
constant SyncPosRelY (line 12) | SyncPosRelY
constant SyncPosRelZ (line 13) | SyncPosRelZ
constant SyncPosRelPitch (line 14) | SyncPosRelPitch
constant SyncPosRelYaw (line 15) | SyncPosRelYaw
type SynchronizePlayerPosition (line 18) | type SynchronizePlayerPosition struct
method ID (line 25) | func (SynchronizePlayerPosition) ID() int32 {
method Encode (line 29) | func (s *SynchronizePlayerPosition) Encode(w encoding.Writer) error {
method Decode (line 51) | func (s *SynchronizePlayerPosition) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/systemChatMessage.go
constant PacketIdSystemChatMessage (line 9) | PacketIdSystemChatMessage = 0x6C
type SystemChatMessage (line 11) | type SystemChatMessage struct
method ID (line 16) | func (SystemChatMessage) ID() int32 {
method Encode (line 20) | func (s *SystemChatMessage) Encode(w encoding.Writer) error {
method Decode (line 27) | func (s *SystemChatMessage) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/updateEntityPosition.go
constant PacketIdUpdateEntityPosition (line 8) | PacketIdUpdateEntityPosition = 0x2E
type UpdateEntityPosition (line 10) | type UpdateEntityPosition struct
method ID (line 16) | func (UpdateEntityPosition) ID() int32 {
method Encode (line 20) | func (s *UpdateEntityPosition) Encode(w encoding.Writer) error {
method Decode (line 36) | func (s *UpdateEntityPosition) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/updateEntityPositionAndRotation.go
constant PacketIdUpdateEntityPositionAndRotation (line 8) | PacketIdUpdateEntityPositionAndRotation = 0x2F
type UpdateEntityPositionAndRotation (line 10) | type UpdateEntityPositionAndRotation struct
method ID (line 17) | func (UpdateEntityPositionAndRotation) ID() int32 {
method Encode (line 21) | func (s *UpdateEntityPositionAndRotation) Encode(w encoding.Writer) er...
method Decode (line 43) | func (s *UpdateEntityPositionAndRotation) Decode(r encoding.Reader) er...
FILE: protocol/net/packet/play/updateEntityRotation.go
constant PacketIdUpdateEntityRotation (line 8) | PacketIdUpdateEntityRotation = 0x30
type UpdateEntityRotation (line 10) | type UpdateEntityRotation struct
method ID (line 16) | func (UpdateEntityRotation) ID() int32 {
method Encode (line 20) | func (s *UpdateEntityRotation) Encode(w encoding.Writer) error {
method Decode (line 33) | func (s *UpdateEntityRotation) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/updateRecipeBook.go
constant UpdateRecipeBookActionInit (line 8) | UpdateRecipeBookActionInit = iota
constant UpdateRecipeBookActionAdd (line 9) | UpdateRecipeBookActionAdd
constant UpdateRecipeBookActionRemove (line 10) | UpdateRecipeBookActionRemove
constant PacketIdUpdateRecipeBook (line 14) | PacketIdUpdateRecipeBook = 0x41
type UpdateRecipeBook (line 16) | type UpdateRecipeBook struct
method ID (line 35) | func (UpdateRecipeBook) ID() int32 {
method Encode (line 39) | func (u *UpdateRecipeBook) Encode(w encoding.Writer) error {
method Decode (line 93) | func (*UpdateRecipeBook) Decode(encoding.Reader) error {
FILE: protocol/net/packet/play/updateSectionBlocks.go
constant PacketIdUpdateSectionBlocks (line 8) | PacketIdUpdateSectionBlocks = 0x49
type UpdateSectionBlocks (line 10) | type UpdateSectionBlocks struct
method ID (line 17) | func (UpdateSectionBlocks) ID() int32 {
method Encode (line 21) | func (b *UpdateSectionBlocks) Encode(w encoding.Writer) error {
method Decode (line 37) | func (b *UpdateSectionBlocks) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/updateTags.go
constant PacketIdUpdateTags (line 8) | PacketIdUpdateTags = 0x78
type UpdateTags (line 10) | type UpdateTags struct
method ID (line 14) | func (UpdateTags) ID() int32 {
method Encode (line 18) | func (u *UpdateTags) Encode(w encoding.Writer) error {
method Decode (line 47) | func (u *UpdateTags) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/updateTime.go
constant PacketIdUpdateTime (line 8) | PacketIdUpdateTime = 0x64
type UpdateTime (line 10) | type UpdateTime struct
method ID (line 15) | func (UpdateTime) ID() int32 {
method Encode (line 19) | func (u *UpdateTime) Encode(w encoding.Writer) error {
method Decode (line 26) | func (u *UpdateTime) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/play/useItemOn.go
constant PacketIdUseItemOn (line 8) | PacketIdUseItemOn = 0x38
type UseItemOn (line 10) | type UseItemOn struct
method ID (line 28) | func (UseItemOn) ID() int32 {
method Encode (line 32) | func (u *UseItemOn) Encode(w encoding.Writer) error {
method Decode (line 57) | func (u *UseItemOn) Decode(r encoding.Reader) error {
constant FaceBottom (line 20) | FaceBottom = iota
constant FaceTop (line 21) | FaceTop
constant FaceNorth (line 22) | FaceNorth
constant FaceSouth (line 23) | FaceSouth
constant FaceWest (line 24) | FaceWest
constant FaceEast (line 25) | FaceEast
FILE: protocol/net/packet/status/ping.go
type Ping (line 7) | type Ping struct
method ID (line 11) | func (Ping) ID() int32 {
method Encode (line 15) | func (p Ping) Encode(w encoding.Writer) error {
method Decode (line 19) | func (p *Ping) Decode(r encoding.Reader) error {
FILE: protocol/net/packet/status/status.go
type StatusVersion (line 11) | type StatusVersion struct
type StatusSample (line 15) | type StatusSample struct
type StatusPlayers (line 19) | type StatusPlayers struct
type Favicon (line 25) | type Favicon
method MarshalJSON (line 27) | func (f Favicon) MarshalJSON() ([]byte, error) {
constant dimgpnb64txt (line 39) | dimgpnb64txt = `"data:image/png;base64,`
type StatusResponseData (line 41) | type StatusResponseData struct
type StatusResponse (line 49) | type StatusResponse struct
method ID (line 53) | func (StatusResponse) ID() int32 {
method Encode (line 57) | func (s StatusResponse) Encode(w encoding.Writer) error {
method Decode (line 65) | func (s *StatusResponse) Decode(r encoding.Reader) error {
type StatusRequest (line 73) | type StatusRequest struct
method ID (line 76) | func (StatusRequest) ID() int32 {
method Encode (line 80) | func (StatusRequest) Encode(encoding.Writer) error {
method Decode (line 84) | func (StatusRequest) Decode(r encoding.Reader) error {
FILE: protocol/net/registry/registry.go
type ChatType (line 9) | type ChatType struct
type Dimension1 (line 25) | type Dimension1 struct
type Dimension (line 46) | type Dimension struct
FILE: protocol/net/slot/comp_dec.go
function decode (line 8) | func decode(r encoding.Reader, comp *Component) error {
FILE: protocol/net/slot/slot.go
type Slot (line 9) | type Slot struct
method Is (line 16) | func (s Slot) Is(s1 Slot) bool {
method Encode (line 27) | func (s *Slot) Encode(w encoding.Writer) error {
method Decode (line 51) | func (s *Slot) Decode(r encoding.Reader) error {
type Component (line 22) | type Component struct
constant CustomData (line 92) | CustomData = iota
constant MaxStackSize (line 93) | MaxStackSize
constant MaxDamage (line 94) | MaxDamage
constant Damage (line 95) | Damage
constant Unbreakable (line 96) | Unbreakable
constant CustomName (line 97) | CustomName
constant ItemName (line 98) | ItemName
constant Lore (line 99) | Lore
constant Rarity (line 100) | Rarity
constant Enchantments (line 101) | Enchantments
constant CanPlaceOn (line 102) | CanPlaceOn
constant CanBreak (line 103) | CanBreak
constant AttributeModifiers (line 104) | AttributeModifiers
constant CustomModelData (line 105) | CustomModelData
constant HideAdditionalTooltip (line 106) | HideAdditionalTooltip
constant HideTooltip (line 107) | HideTooltip
constant RepairCost (line 108) | RepairCost
constant CreativeSlotLock (line 109) | CreativeSlotLock
constant EnchantmentGlintOverride (line 110) | EnchantmentGlintOverride
constant IntangibleProjectile (line 111) | IntangibleProjectile
constant Food (line 112) | Food
constant FireResistant (line 113) | FireResistant
constant Tool (line 114) | Tool
constant StoredEnchantments (line 115) | StoredEnchantments
constant DyedColor (line 116) | DyedColor
constant MapColor (line 117) | MapColor
constant MapId (line 118) | MapId
constant MapDecorations (line 119) | MapDecorations
constant MapPostProcessing (line 120) | MapPostProcessing
constant CharjedProjectiles (line 121) | CharjedProjectiles
constant BundleContents (line 122) | BundleContents
constant PotionContents (line 123) | PotionContents
constant SuspicousStewEffects (line 124) | SuspicousStewEffects
constant WritableBookContent (line 125) | WritableBookContent
constant WrittenBookContent (line 126) | WrittenBookContent
constant Trim (line 127) | Trim
constant DebugStickState (line 128) | DebugStickState
constant EntityData (line 129) | EntityData
constant BucketEntityData (line 130) | BucketEntityData
constant BlockEntityData (line 131) | BlockEntityData
constant Instrument (line 132) | Instrument
constant OminousBottleAmplifier (line 133) | OminousBottleAmplifier
constant JukeboxPlayable (line 134) | JukeboxPlayable
constant Recipes (line 135) | Recipes
constant LodestoneTracker (line 136) | LodestoneTracker
constant FireworkExplosion (line 137) | FireworkExplosion
constant Fireworks (line 138) | Fireworks
constant Profile (line 139) | Profile
constant NoteBlockSound (line 140) | NoteBlockSound
constant BannerPatterns (line 141) | BannerPatterns
constant BaseColor (line 142) | BaseColor
constant PotDecorations (line 143) | PotDecorations
constant Container (line 144) | Container
constant BlockState (line 145) | BlockState
constant Bees (line 146) | Bees
constant Lock (line 147) | Lock
constant ContainerLoot (line 148) | ContainerLoot
constant Common (line 154) | Common = iota
constant Uncommon (line 156) | Uncommon
constant Rare (line 158) | Rare
constant Epic (line 160) | Epic
FILE: protocol/text/builder.go
function New (line 3) | func New() TextComponent {
method WithColor (line 7) | func (t TextComponent) WithColor(c string) TextComponent {
method WithText (line 12) | func (t TextComponent) WithText(c string) TextComponent {
method WithItalic (line 17) | func (t TextComponent) WithItalic() TextComponent {
method WithUnderline (line 22) | func (t TextComponent) WithUnderline() TextComponent {
method WithStrikethrough (line 27) | func (t TextComponent) WithStrikethrough() TextComponent {
method WithObfuscation (line 32) | func (t TextComponent) WithObfuscation() TextComponent {
function Color (line 37) | func Color(c string) TextComponent {
function Text (line 41) | func Text(c string) TextComponent {
function Italic (line 45) | func Italic() TextComponent {
function Underline (line 49) | func Underline() TextComponent {
function Strikethrough (line 53) | func Strikethrough() TextComponent {
function Obfuscation (line 57) | func Obfuscation() TextComponent {
FILE: protocol/text/color.go
constant Black (line 10) | Black = "black"
constant DarkBlue (line 11) | DarkBlue = "dark_blue"
constant DarkGreen (line 12) | DarkGreen = "dark_green"
constant DarkCyan (line 13) | DarkCyan = "dark_aqua"
constant DarkRed (line 14) | DarkRed = "dark_red"
constant Purple (line 15) | Purple = "dark_purple"
constant Gold (line 16) | Gold = "gold"
constant Gray (line 17) | Gray = "gray"
constant DarkGray (line 18) | DarkGray = "dark_gray"
constant Blue (line 19) | Blue = "blue"
constant BrightGreen (line 20) | BrightGreen = "green"
constant Cyan (line 21) | Cyan = "aqua"
constant Red (line 22) | Red = "red"
constant Pink (line 23) | Pink = "light_purple"
constant Yellow (line 24) | Yellow = "yellow"
constant White (line 25) | White = "white"
function RGB (line 28) | func RGB(r, g, b uint8) string {
function CustomColor (line 32) | func CustomColor(c color.Color) string {
FILE: protocol/text/text.go
constant TypeText (line 7) | TypeText = "text"
constant TypeTranslatable (line 8) | TypeTranslatable = "translatable"
constant TypeKeybind (line 9) | TypeKeybind = "keybind"
constant TypeScore (line 10) | TypeScore = "score"
constant TypeSelector (line 11) | TypeSelector = "selector"
constant TypeNBT (line 12) | TypeNBT = "nbt"
constant FontDefault (line 16) | FontDefault = "minecraft:default"
constant FontUniform (line 17) | FontUniform = "minecraft:uniform"
constant FontAlt (line 18) | FontAlt = "minecraft:alt"
constant FontIllageralt (line 19) | FontIllageralt = "minecraft:illageralt"
constant ClickEventOpenURL (line 23) | ClickEventOpenURL = "open_url"
constant ClickEventRunCommand (line 24) | ClickEventRunCommand = "run_command"
constant ClickEventSuggestCommand (line 25) | ClickEventSuggestCommand = "suggest_command"
constant ClickEventChangePage (line 26) | ClickEventChangePage = "change_page"
constant ClickEventCopyToClipboard (line 27) | ClickEventCopyToClipboard = "copy_to_clipboard"
constant HoverEventShowText (line 31) | HoverEventShowText = "show_text"
constant HoverEventShowItem (line 32) | HoverEventShowItem = "show_item"
constant HoverEventShowEntity (line 33) | HoverEventShowEntity = "show_entity"
type ClickEvent (line 36) | type ClickEvent struct
type HoverEventContents (line 41) | type HoverEventContents struct
type HoverEvent (line 49) | type HoverEvent struct
type TextComponent (line 54) | type TextComponent struct
function Sprint (line 72) | func Sprint(a ...any) TextComponent {
function Sprintf (line 76) | func Sprintf(format string, a ...any) TextComponent {
function Unmarshalf (line 81) | func Unmarshalf(codeChar rune, format string, v ...any) TextComponent {
function Unmarshal (line 86) | func Unmarshal(text string, codeChar rune) TextComponent {
function Marshal (line 111) | func Marshal(component TextComponent, codeChar rune) string {
function charColor (line 123) | func charColor(char rune) string {
function colorChar (line 160) | func colorChar(color string, char string) string {
function applyStyle (line 197) | func applyStyle(char rune, component *TextComponent) {
function componentStyles (line 215) | func componentStyles(component TextComponent, text *string, codeChar run...
FILE: server/command/builder.go
constant Bool (line 8) | Bool = iota
constant Float (line 9) | Float
constant Double (line 10) | Double
constant Integer (line 11) | Integer
constant Long (line 12) | Long
constant String (line 13) | String
constant Entity (line 15) | Entity
constant GameProfile (line 16) | GameProfile
constant BlockPos (line 17) | BlockPos
constant ColumnPos (line 18) | ColumnPos
constant Vec3 (line 19) | Vec3
constant Vec2 (line 20) | Vec2
constant BlockState (line 21) | BlockState
constant BlockPredicate (line 22) | BlockPredicate
constant ItemStack (line 23) | ItemStack
constant ItemPredicate (line 24) | ItemPredicate
constant Color (line 25) | Color
constant Component (line 26) | Component
constant Style (line 27) | Style
constant Message (line 28) | Message
constant NBT (line 29) | NBT
constant NBTTag (line 30) | NBTTag
constant NBTPath (line 31) | NBTPath
constant Objective (line 32) | Objective
constant ObjectiveCriteria (line 33) | ObjectiveCriteria
constant Operation (line 34) | Operation
constant Particle (line 35) | Particle
constant Angle (line 36) | Angle
constant Rotation (line 37) | Rotation
constant ScoreboardSlot (line 38) | ScoreboardSlot
constant ScoreHolder (line 39) | ScoreHolder
constant Swizzle (line 40) | Swizzle
constant Team (line 41) | Team
constant ItemSlot (line 42) | ItemSlot
constant ResourceLocation (line 43) | ResourceLocation
constant Function (line 44) | Function
constant EntityAnchor (line 45) | EntityAnchor
constant IntRange (line 46) | IntRange
constant FloatRange (line 47) | FloatRange
constant Dimension (line 48) | Dimension
constant Gamemode (line 49) | Gamemode
constant Time (line 50) | Time
constant ResourceOrTag (line 51) | ResourceOrTag
constant ResourceOrTagKey (line 52) | ResourceOrTagKey
constant Resource (line 53) | Resource
constant ResourceKey (line 54) | ResourceKey
constant TemplateMirror (line 55) | TemplateMirror
constant TemplateRotation (line 56) | TemplateRotation
constant Heightmap (line 57) | Heightmap
constant UUID (line 58) | UUID
constant StringSingleWord (line 62) | StringSingleWord = iota
constant StringQuotablePhrase (line 63) | StringQuotablePhrase
constant StringGreedyPhrase (line 64) | StringGreedyPhrase
type Node (line 67) | type Node struct
method Add (line 72) | func (n *Node) Add(nodes ...Node) {
function NewNode (line 76) | func NewNode(n play.Node, children ...Node) Node {
function NewLiteral (line 80) | func NewLiteral(name string, nodes ...Node) Node {
function NewBoolArgument (line 90) | func NewBoolArgument(name string, nodes ...Node) Node {
function NewIntegerArgument (line 101) | func NewIntegerArgument(name string, min, max *int32, nodes ...Node) Node {
function NewStringArgument (line 126) | func NewStringArgument(name string, typ int, nodes ...Node) Node {
function NewTimeArgument (line 138) | func NewTimeArgument(name string, min int32, nodes ...Node) Node {
FILE: server/command/command.go
type Command (line 8) | type Command struct
type Arguments (line 17) | type Arguments
method At (line 19) | func (a Arguments) At(i int) string {
method Fallback (line 26) | func (a Arguments) Fallback(i int, fb string) string {
type CommandCallContext (line 33) | type CommandCallContext struct
method Reply (line 41) | func (c CommandCallContext) Reply(msg text.TextComponent) error {
FILE: server/command/graph.go
method Encode (line 5) | func (mgr *Manager) Encode() *play.Commands {
function appendNode (line 56) | func appendNode(parentIndex int32, n Node, tgt *[]play.Node) {
FILE: server/command/manager.go
type Manager (line 11) | type Manager struct
method Register (line 27) | func (mgr *Manager) Register(cmds ...Command) {
method Call (line 34) | func (mgr *Manager) Call(command string, caller Caller) {
method findCommand (line 69) | func (mgr *Manager) findCommand(name string) *Command {
type Caller (line 19) | type Caller interface
function NewManager (line 23) | func NewManager(srv any, cmds ...Command) *Manager {
FILE: server/container/container.go
type Container (line 12) | type Container
method EncodeResize (line 15) | func (c Container) EncodeResize(size int) []slot.Slot {
method Encode (line 31) | func (c Container) Encode() []slot.Slot {
method Set (line 48) | func (c *Container) Set(item item.Item) {
method SetAt (line 59) | func (c *Container) SetAt(item item.Item, slot item.DataSlot) {
method Slot (line 65) | func (c Container) Slot(slot item.DataSlot) (item.Item, bool) {
method Merge (line 74) | func (c *Container) Merge(slot item.DataSlot, carriedItem *item.Item) {
FILE: server/entity/entity.go
function NewEntityId (line 18) | func NewEntityId() int32 {
function New (line 22) | func New(uuid uuid.UUID, typ int32, metadata metadata.Metadata, attribut...
function NewLiving (line 31) | func NewLiving(e *Entity) LivingEntity {
type Entity (line 36) | type Entity struct
method Attribute (line 54) | func (p *Entity) Attribute(id string) *Attribute {
method Attributes (line 75) | func (p *Entity) Attributes() []Attribute {
method SetAttribute (line 81) | func (p *Entity) SetAttribute(id string, base float64) {
method Metadata (line 92) | func (p *Entity) Metadata() metadata.Metadata {
method SetMetadata (line 98) | func (p *Entity) SetMetadata(md metadata.Metadata) {
method MetadataIndex (line 104) | func (p *Entity) MetadataIndex(i byte) any {
method SetMetadataIndex (line 110) | func (p *Entity) SetMetadataIndex(i byte, v any) {
method SetMetadataIndexes (line 116) | func (p *Entity) SetMetadataIndexes(md metadata.Metadata) {
method DimensionName (line 124) | func (p *Entity) DimensionName() string {
method SetDimensionName (line 128) | func (p *Entity) SetDimensionName(v string) {
method SetMotion (line 132) | func (p *Entity) SetMotion(x, y, z float64) {
method SetPosition (line 138) | func (p *Entity) SetPosition(x, y, z float64) {
method SetRotation (line 144) | func (p *Entity) SetRotation(yaw, pitch float32) {
method SetOnGround (line 149) | func (p *Entity) SetOnGround(v bool) {
method Position (line 153) | func (p *Entity) Position() (x, y, z float64) {
method Motion (line 157) | func (p *Entity) Motion() (vx, vy, vz float64) {
method Rotation (line 161) | func (p *Entity) Rotation() (yaw, pitch float32) {
method OnGround (line 165) | func (p *Entity) OnGround() bool {
method UUID (line 169) | func (p *Entity) UUID() uuid.UUID {
method Type (line 173) | func (p *Entity) Type() int32 {
type LivingEntity (line 177) | type LivingEntity struct
method SetHealth (line 184) | func (l *LivingEntity) SetHealth(h float32) {
method SetFood (line 188) | func (l *LivingEntity) SetFood(food int32, saturation, exhaustion floa...
method Health (line 194) | func (l *LivingEntity) Health() float32 {
method Food (line 198) | func (l *LivingEntity) Food() (food int32, saturation, exhaustion floa...
type Attribute (line 202) | type Attribute struct
FILE: server/entity/levelEntity.go
type LevelEntity (line 5) | type LevelEntity struct
FILE: server/player/chunks.go
method Dimension (line 11) | func (p *Player) Dimension() *dimension.Dimension {
method sendSpawnChunks (line 15) | func (p *Player) sendSpawnChunks() error {
FILE: server/player/conn.go
function RegisterHandler (line 15) | func RegisterHandler(state, id int32, handler func(*Player, packet.Decod...
method awaitPacket (line 22) | func (p *Player) awaitPacket(id int32) (packet.Decodeable, error) {
function interfaceAssert (line 35) | func interfaceAssert[T any](v any) T {
method keepAlive (line 39) | func (p *Player) keepAlive() error {
method isConnectionDead (line 46) | func (p *Player) isConnectionDead() bool {
method listenPackets (line 51) | func (p *Player) listenPackets() {
method killConnection (line 111) | func (p *Player) killConnection(serverError bool, reason string) {
FILE: server/player/player.go
type Player (line 22) | type Player struct
method ViewDistance (line 84) | func (p *Player) ViewDistance() int32 {
method writeOrKill (line 94) | func (p *Player) writeOrKill(pk packet.Encodeable) {
method finishConfiguration (line 101) | func (p *Player) finishConfiguration() error {
method startGame (line 141) | func (p *Player) startGame() error {
method SynchronizePosition (line 193) | func (p *Player) SynchronizePosition(x, y, z float64, yaw, pitch float...
method Login (line 206) | func (p *Player) Login() error {
method SystemMessage (line 214) | func (p *Player) SystemMessage(msg text.TextComponent) error {
method sendCommandGraph (line 219) | func (p *Player) sendCommandGraph() error {
function int32toAtomic (line 52) | func int32toAtomic(i int32) atomic.Int32 {
method New (line 57) | func (list *PlayerList) New(conn *net.Conn, en *state.PlayerEntity, dime...
FILE: server/player/playerlist.go
function NewPlayerList (line 10) | func NewPlayerList(cap uintptr) PlayerList {
type PlayerList (line 16) | type PlayerList struct
method NumPlayers (line 20) | func (list *PlayerList) NumPlayers() int {
method Player (line 24) | func (list *PlayerList) Player(uuid uuid.UUID) *Player {
method PlayerByUsername (line 35) | func (list *PlayerList) PlayerByUsername(name string) *Player {
method playerAtIndex (line 46) | func (list *PlayerList) playerAtIndex(index uintptr) *Player {
method AddPlayer (line 50) | func (list *PlayerList) AddPlayer(player *Player) {
method addPlayerToSlice (line 74) | func (list *PlayerList) addPlayerToSlice(player *Player) {
FILE: server/player/state/list/playerlist.go
type WhitelistPlayer (line 5) | type WhitelistPlayer struct
type OperatorPlayer (line 10) | type OperatorPlayer struct
FILE: server/player/state/playerEntity.go
type PlayerEntity (line 14) | type PlayerEntity struct
method Abilities (line 63) | func (p *PlayerEntity) Abilities() level.PlayerAbilities {
method SetAbilities (line 67) | func (p *PlayerEntity) SetAbilities(abs level.PlayerAbilities) {
method GameMode (line 71) | func (p *PlayerEntity) GameMode() level.GameMode {
method SetGameMode (line 75) | func (p *PlayerEntity) SetGameMode(mode level.GameMode) {
method Inventory (line 87) | func (p *PlayerEntity) Inventory() *container.Container {
method SelectedItemSlot (line 92) | func (p *PlayerEntity) SelectedItemSlot() int32 {
method SetSelectedItemSlot (line 104) | func (p *PlayerEntity) SetSelectedItemSlot(slot int32) {
method sync (line 114) | func (p *PlayerEntity) sync() {
method New (line 30) | func (mgr *PlayerEntityManager) New(data level.Player) *PlayerEntity {
FILE: server/player/state/playerEntityManager.go
type PlayerEntityManager (line 11) | type PlayerEntityManager struct
method lookup (line 16) | func (mgr *PlayerEntityManager) lookup(id uuid.UUID) (*PlayerEntity, b...
method add (line 24) | func (mgr *PlayerEntityManager) add(p *PlayerEntity) {
method SaveAll (line 31) | func (mgr *PlayerEntityManager) SaveAll() {
function NewPlayerEntityManager (line 41) | func NewPlayerEntityManager() *PlayerEntityManager {
FILE: server/plugin.go
type Plugin (line 11) | type Plugin struct
method FS (line 21) | func (p Plugin) FS() fs.FS {
method Dir (line 26) | func (p Plugin) Dir() string {
method Server (line 30) | func (p Plugin) Server() *Server {
method loadPlugins (line 34) | func (srv *Server) loadPlugins() {
method loadPlugin (line 45) | func (srv *Server) loadPlugin(name string) {
FILE: server/registry/registry.go
type Registry (line 7) | type Registry struct
method Get (line 13) | func (r Registry) Get(n string) int32 {
method Lookup (line 20) | func (r Registry) Lookup(n string) (int32, bool) {
method NameOf (line 31) | func (r Registry) NameOf(id int32) (string, bool) {
FILE: server/server.go
function New (line 31) | func New(cfg properties.ServerProperties, world *world.World) (*Server, ...
type Server (line 90) | type Server struct
method setOnConnectionIntercept (line 112) | func (srv *Server) setOnConnectionIntercept(i func(conn *net.Conn, sto...
method Listener (line 116) | func (srv *Server) Listener() *net.Listener {
method provideStatus (line 120) | func (srv *Server) provideStatus(*net.Conn) status.StatusResponseData {
method SetStatusProvider (line 143) | func (srv *Server) SetStatusProvider(sp net.StatusProvider) {
method Properties (line 147) | func (srv *Server) Properties() properties.ServerProperties {
method Start (line 151) | func (srv *Server) Start(ts time.Time) {
method handleNewConnection (line 197) | func (srv *Server) handleNewConnection(conn *net.Conn) {
method Stop (line 215) | func (srv *Server) Stop() {
method formatTimestart (line 229) | func (srv *Server) formatTimestart() string {
method createTicker (line 234) | func (srv *Server) createTicker() {
FILE: server/tick/tick.go
function New (line 12) | func New(tps int /*b *session.Broadcast*/) *TickManager {
type TickManager (line 21) | type TickManager struct
method AddNew (line 30) | func (mgr *TickManager) AddNew(f func()) {
method SetFrequency (line 39) | func (mgr *TickManager) SetFrequency(tps int) error {
method Freeze (line 62) | func (mgr *TickManager) Freeze() {
method Unfreeze (line 72) | func (mgr *TickManager) Unfreeze() {
method Add (line 84) | func (mgr *TickManager) Add(ticker *time.Ticker) {
method New (line 90) | func (mgr *TickManager) New() *time.Ticker {
method Count (line 99) | func (mgr *TickManager) Count() int {
method Remove (line 105) | func (mgr *TickManager) Remove(ticker *time.Ticker) (ok bool) {
method Frequency (line 114) | func (mgr *TickManager) Frequency() time.Duration {
FILE: server/world/block/0block.go
constant AxisX (line 24) | AxisX Axis = "x"
constant AxisY (line 25) | AxisY Axis = "y"
constant AxisZ (line 26) | AxisZ Axis = "z"
constant DirectionNorth (line 32) | DirectionNorth Direction = "north"
constant DirectionSouth (line 33) | DirectionSouth Direction = "south"
constant DirectionWest (line 34) | DirectionWest Direction = "west"
constant DirectionEast (line 35) | DirectionEast Direction = "east"
function atoi (line 38) | func atoi(str string) int {
type Usable (line 45) | type Usable interface
type BlockEntityHaver (line 51) | type BlockEntityHaver interface
type BlockCustomPlaceSoundHaver (line 57) | type BlockCustomPlaceSoundHaver interface
type BreakInfo (line 62) | type BreakInfo struct
function Is (line 75) | func Is(block Block, tagName string) bool {
type Breakable (line 82) | type Breakable interface
function init (line 86) | func init() {
FILE: server/world/block/acaciaButton.go
type AcaciaButton (line 7) | type AcaciaButton struct
method Encode (line 13) | func (b AcaciaButton) Encode() (string, BlockProperties) {
method New (line 21) | func (b AcaciaButton) New(props BlockProperties) Block {
FILE: server/world/block/acaciaDoor.go
type AcaciaDoor (line 7) | type AcaciaDoor struct
method Encode (line 15) | func (b AcaciaDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b AcaciaDoor) New(props BlockProperties) Block {
FILE: server/world/block/acaciaFence.go
type AcaciaFence (line 7) | type AcaciaFence struct
method Encode (line 15) | func (b AcaciaFence) Encode() (string, BlockProperties) {
method New (line 25) | func (b AcaciaFence) New(props BlockProperties) Block {
FILE: server/world/block/acaciaFenceGate.go
type AcaciaFenceGate (line 7) | type AcaciaFenceGate struct
method Encode (line 14) | func (b AcaciaFenceGate) Encode() (string, BlockProperties) {
method New (line 23) | func (b AcaciaFenceGate) New(props BlockProperties) Block {
FILE: server/world/block/acaciaHangingSign.go
type AcaciaHangingSign (line 7) | type AcaciaHangingSign struct
method Encode (line 13) | func (b AcaciaHangingSign) Encode() (string, BlockProperties) {
method New (line 21) | func (b AcaciaHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/acaciaLeaves.go
type AcaciaLeaves (line 7) | type AcaciaLeaves struct
method Encode (line 13) | func (b AcaciaLeaves) Encode() (string, BlockProperties) {
method New (line 21) | func (b AcaciaLeaves) New(props BlockProperties) Block {
FILE: server/world/block/acaciaLog.go
type AcaciaLog (line 3) | type AcaciaLog struct
method Encode (line 7) | func (b AcaciaLog) Encode() (string, BlockProperties) {
method New (line 13) | func (b AcaciaLog) New(props BlockProperties) Block {
FILE: server/world/block/acaciaPlanks.go
type AcaciaPlanks (line 3) | type AcaciaPlanks struct
method Encode (line 6) | func (b AcaciaPlanks) Encode() (string, BlockProperties) {
method New (line 10) | func (b AcaciaPlanks) New(props BlockProperties) Block {
FILE: server/world/block/acaciaPressurePlate.go
type AcaciaPressurePlate (line 7) | type AcaciaPressurePlate struct
method Encode (line 11) | func (b AcaciaPressurePlate) Encode() (string, BlockProperties) {
method New (line 17) | func (b AcaciaPressurePlate) New(props BlockProperties) Block {
FILE: server/world/block/acaciaSapling.go
type AcaciaSapling (line 7) | type AcaciaSapling struct
method Encode (line 11) | func (b AcaciaSapling) Encode() (string, BlockProperties) {
method New (line 17) | func (b AcaciaSapling) New(props BlockProperties) Block {
FILE: server/world/block/acaciaSign.go
type AcaciaSign (line 7) | type AcaciaSign struct
method Encode (line 12) | func (b AcaciaSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b AcaciaSign) New(props BlockProperties) Block {
FILE: server/world/block/acaciaSlab.go
type AcaciaSlab (line 7) | type AcaciaSlab struct
method Encode (line 12) | func (b AcaciaSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b AcaciaSlab) New(props BlockProperties) Block {
FILE: server/world/block/acaciaStairs.go
type AcaciaStairs (line 7) | type AcaciaStairs struct
method Encode (line 14) | func (b AcaciaStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b AcaciaStairs) New(props BlockProperties) Block {
FILE: server/world/block/acaciaTrapdoor.go
type AcaciaTrapdoor (line 7) | type AcaciaTrapdoor struct
method Encode (line 15) | func (b AcaciaTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b AcaciaTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/acaciaWallHangingSign.go
type AcaciaWallHangingSign (line 7) | type AcaciaWallHangingSign struct
method Encode (line 12) | func (b AcaciaWallHangingSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b AcaciaWallHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/acaciaWallSign.go
type AcaciaWallSign (line 7) | type AcaciaWallSign struct
method Encode (line 12) | func (b AcaciaWallSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b AcaciaWallSign) New(props BlockProperties) Block {
FILE: server/world/block/acaciaWood.go
type AcaciaWood (line 3) | type AcaciaWood struct
method Encode (line 7) | func (b AcaciaWood) Encode() (string, BlockProperties) {
method New (line 13) | func (b AcaciaWood) New(props BlockProperties) Block {
FILE: server/world/block/activatorRail.go
type ActivatorRail (line 7) | type ActivatorRail struct
method Encode (line 13) | func (b ActivatorRail) Encode() (string, BlockProperties) {
method New (line 21) | func (b ActivatorRail) New(props BlockProperties) Block {
FILE: server/world/block/air.go
type Air (line 3) | type Air struct
method Encode (line 6) | func (b Air) Encode() (string, BlockProperties) {
method New (line 10) | func (b Air) New(props BlockProperties) Block {
FILE: server/world/block/allium.go
type Allium (line 3) | type Allium struct
method Encode (line 6) | func (b Allium) Encode() (string, BlockProperties) {
method New (line 10) | func (b Allium) New(props BlockProperties) Block {
FILE: server/world/block/amethystBlock.go
type AmethystBlock (line 3) | type AmethystBlock struct
method Encode (line 6) | func (b AmethystBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b AmethystBlock) New(props BlockProperties) Block {
FILE: server/world/block/amethystCluster.go
type AmethystCluster (line 7) | type AmethystCluster struct
method Encode (line 12) | func (b AmethystCluster) Encode() (string, BlockProperties) {
method New (line 19) | func (b AmethystCluster) New(props BlockProperties) Block {
FILE: server/world/block/ancientDebris.go
type AncientDebris (line 3) | type AncientDebris struct
method Encode (line 6) | func (b AncientDebris) Encode() (string, BlockProperties) {
method New (line 10) | func (b AncientDebris) New(props BlockProperties) Block {
FILE: server/world/block/andesite.go
type Andesite (line 3) | type Andesite struct
method Encode (line 6) | func (b Andesite) Encode() (string, BlockProperties) {
method New (line 10) | func (b Andesite) New(props BlockProperties) Block {
FILE: server/world/block/andesiteSlab.go
type AndesiteSlab (line 7) | type AndesiteSlab struct
method Encode (line 12) | func (b AndesiteSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b AndesiteSlab) New(props BlockProperties) Block {
FILE: server/world/block/andesiteStairs.go
type AndesiteStairs (line 7) | type AndesiteStairs struct
method Encode (line 14) | func (b AndesiteStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b AndesiteStairs) New(props BlockProperties) Block {
FILE: server/world/block/andesiteWall.go
type AndesiteWall (line 7) | type AndesiteWall struct
method Encode (line 16) | func (b AndesiteWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b AndesiteWall) New(props BlockProperties) Block {
FILE: server/world/block/anvil.go
type Anvil (line 3) | type Anvil struct
method Encode (line 7) | func (b Anvil) Encode() (string, BlockProperties) {
method New (line 13) | func (b Anvil) New(props BlockProperties) Block {
FILE: server/world/block/attachedMelonStem.go
type AttachedMelonStem (line 3) | type AttachedMelonStem struct
method Encode (line 7) | func (b AttachedMelonStem) Encode() (string, BlockProperties) {
method New (line 13) | func (b AttachedMelonStem) New(props BlockProperties) Block {
FILE: server/world/block/attachedPumpkinStem.go
type AttachedPumpkinStem (line 3) | type AttachedPumpkinStem struct
method Encode (line 7) | func (b AttachedPumpkinStem) Encode() (string, BlockProperties) {
method New (line 13) | func (b AttachedPumpkinStem) New(props BlockProperties) Block {
FILE: server/world/block/azalea.go
type Azalea (line 3) | type Azalea struct
method Encode (line 6) | func (b Azalea) Encode() (string, BlockProperties) {
method New (line 10) | func (b Azalea) New(props BlockProperties) Block {
FILE: server/world/block/azaleaLeaves.go
type AzaleaLeaves (line 7) | type AzaleaLeaves struct
method Encode (line 13) | func (b AzaleaLeaves) Encode() (string, BlockProperties) {
method New (line 21) | func (b AzaleaLeaves) New(props BlockProperties) Block {
FILE: server/world/block/azureBluet.go
type AzureBluet (line 3) | type AzureBluet struct
method Encode (line 6) | func (b AzureBluet) Encode() (string, BlockProperties) {
method New (line 10) | func (b AzureBluet) New(props BlockProperties) Block {
FILE: server/world/block/bamboo.go
type Bamboo (line 7) | type Bamboo struct
method Encode (line 13) | func (b Bamboo) Encode() (string, BlockProperties) {
method New (line 21) | func (b Bamboo) New(props BlockProperties) Block {
FILE: server/world/block/bambooBlock.go
type BambooBlock (line 3) | type BambooBlock struct
method Encode (line 7) | func (b BambooBlock) Encode() (string, BlockProperties) {
method New (line 13) | func (b BambooBlock) New(props BlockProperties) Block {
FILE: server/world/block/bambooButton.go
type BambooButton (line 7) | type BambooButton struct
method Encode (line 13) | func (b BambooButton) Encode() (string, BlockProperties) {
method New (line 21) | func (b BambooButton) New(props BlockProperties) Block {
FILE: server/world/block/bambooDoor.go
type BambooDoor (line 7) | type BambooDoor struct
method Encode (line 15) | func (b BambooDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b BambooDoor) New(props BlockProperties) Block {
FILE: server/world/block/bambooFence.go
type BambooFence (line 7) | type BambooFence struct
method Encode (line 15) | func (b BambooFence) Encode() (string, BlockProperties) {
method New (line 25) | func (b BambooFence) New(props BlockProperties) Block {
FILE: server/world/block/bambooFenceGate.go
type BambooFenceGate (line 7) | type BambooFenceGate struct
method Encode (line 14) | func (b BambooFenceGate) Encode() (string, BlockProperties) {
method New (line 23) | func (b BambooFenceGate) New(props BlockProperties) Block {
FILE: server/world/block/bambooHangingSign.go
type BambooHangingSign (line 7) | type BambooHangingSign struct
method Encode (line 13) | func (b BambooHangingSign) Encode() (string, BlockProperties) {
method New (line 21) | func (b BambooHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/bambooMosaic.go
type BambooMosaic (line 3) | type BambooMosaic struct
method Encode (line 6) | func (b BambooMosaic) Encode() (string, BlockProperties) {
method New (line 10) | func (b BambooMosaic) New(props BlockProperties) Block {
FILE: server/world/block/bambooMosaicSlab.go
type BambooMosaicSlab (line 7) | type BambooMosaicSlab struct
method Encode (line 12) | func (b BambooMosaicSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b BambooMosaicSlab) New(props BlockProperties) Block {
FILE: server/world/block/bambooMosaicStairs.go
type BambooMosaicStairs (line 7) | type BambooMosaicStairs struct
method Encode (line 14) | func (b BambooMosaicStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b BambooMosaicStairs) New(props BlockProperties) Block {
FILE: server/world/block/bambooPlanks.go
type BambooPlanks (line 3) | type BambooPlanks struct
method Encode (line 6) | func (b BambooPlanks) Encode() (string, BlockProperties) {
method New (line 10) | func (b BambooPlanks) New(props BlockProperties) Block {
FILE: server/world/block/bambooPressurePlate.go
type BambooPressurePlate (line 7) | type BambooPressurePlate struct
method Encode (line 11) | func (b BambooPressurePlate) Encode() (string, BlockProperties) {
method New (line 17) | func (b BambooPressurePlate) New(props BlockProperties) Block {
FILE: server/world/block/bambooSapling.go
type BambooSapling (line 3) | type BambooSapling struct
method Encode (line 6) | func (b BambooSapling) Encode() (string, BlockProperties) {
method New (line 10) | func (b BambooSapling) New(props BlockProperties) Block {
FILE: server/world/block/bambooSign.go
type BambooSign (line 7) | type BambooSign struct
method Encode (line 12) | func (b BambooSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b BambooSign) New(props BlockProperties) Block {
FILE: server/world/block/bambooSlab.go
type BambooSlab (line 7) | type BambooSlab struct
method Encode (line 12) | func (b BambooSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b BambooSlab) New(props BlockProperties) Block {
FILE: server/world/block/bambooStairs.go
type BambooStairs (line 7) | type BambooStairs struct
method Encode (line 14) | func (b BambooStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b BambooStairs) New(props BlockProperties) Block {
FILE: server/world/block/bambooTrapdoor.go
type BambooTrapdoor (line 7) | type BambooTrapdoor struct
method Encode (line 15) | func (b BambooTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b BambooTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/bambooWallHangingSign.go
type BambooWallHangingSign (line 7) | type BambooWallHangingSign struct
method Encode (line 12) | func (b BambooWallHangingSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b BambooWallHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/bambooWallSign.go
type BambooWallSign (line 7) | type BambooWallSign struct
method Encode (line 12) | func (b BambooWallSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b BambooWallSign) New(props BlockProperties) Block {
FILE: server/world/block/barrel.go
type Barrel (line 9) | type Barrel struct
method Encode (line 14) | func (b Barrel) Encode() (string, BlockProperties) {
method New (line 21) | func (b Barrel) New(props BlockProperties) Block {
method BlockEntity (line 28) | func (b Barrel) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/barrier.go
type Barrier (line 7) | type Barrier struct
method Encode (line 11) | func (b Barrier) Encode() (string, BlockProperties) {
method New (line 17) | func (b Barrier) New(props BlockProperties) Block {
FILE: server/world/block/basalt.go
type Basalt (line 3) | type Basalt struct
method Encode (line 7) | func (b Basalt) Encode() (string, BlockProperties) {
method New (line 13) | func (b Basalt) New(props BlockProperties) Block {
FILE: server/world/block/beacon.go
type Beacon (line 8) | type Beacon struct
method Encode (line 11) | func (b Beacon) Encode() (string, BlockProperties) {
method New (line 15) | func (b Beacon) New(props BlockProperties) Block {
method BlockEntity (line 19) | func (b Beacon) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/bedrock.go
type Bedrock (line 3) | type Bedrock struct
method Encode (line 6) | func (b Bedrock) Encode() (string, BlockProperties) {
method New (line 10) | func (b Bedrock) New(props BlockProperties) Block {
FILE: server/world/block/beeNest.go
type BeeNest (line 7) | type BeeNest struct
method Encode (line 12) | func (b BeeNest) Encode() (string, BlockProperties) {
method New (line 19) | func (b BeeNest) New(props BlockProperties) Block {
FILE: server/world/block/beehive.go
type Beehive (line 9) | type Beehive struct
method Encode (line 14) | func (b Beehive) Encode() (string, BlockProperties) {
method New (line 21) | func (b Beehive) New(props BlockProperties) Block {
method BlockEntity (line 28) | func (b Beehive) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/beetroots.go
type Beetroots (line 7) | type Beetroots struct
method Encode (line 11) | func (b Beetroots) Encode() (string, BlockProperties) {
method New (line 17) | func (b Beetroots) New(props BlockProperties) Block {
FILE: server/world/block/bell.go
type Bell (line 9) | type Bell struct
method Encode (line 15) | func (b Bell) Encode() (string, BlockProperties) {
method New (line 23) | func (b Bell) New(props BlockProperties) Block {
method BlockEntity (line 31) | func (b Bell) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/bigDripleaf.go
type BigDripleaf (line 7) | type BigDripleaf struct
method Encode (line 13) | func (b BigDripleaf) Encode() (string, BlockProperties) {
method New (line 21) | func (b BigDripleaf) New(props BlockProperties) Block {
FILE: server/world/block/bigDripleafStem.go
type BigDripleafStem (line 7) | type BigDripleafStem struct
method Encode (line 12) | func (b BigDripleafStem) Encode() (string, BlockProperties) {
method New (line 19) | func (b BigDripleafStem) New(props BlockProperties) Block {
FILE: server/world/block/birchButton.go
type BirchButton (line 7) | type BirchButton struct
method Encode (line 13) | func (b BirchButton) Encode() (string, BlockProperties) {
method New (line 21) | func (b BirchButton) New(props BlockProperties) Block {
FILE: server/world/block/birchDoor.go
type BirchDoor (line 7) | type BirchDoor struct
method Encode (line 15) | func (b BirchDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b BirchDoor) New(props BlockProperties) Block {
FILE: server/world/block/birchFence.go
type BirchFence (line 7) | type BirchFence struct
method Encode (line 15) | func (b BirchFence) Encode() (string, BlockProperties) {
method New (line 25) | func (b BirchFence) New(props BlockProperties) Block {
FILE: server/world/block/birchFenceGate.go
type BirchFenceGate (line 7) | type BirchFenceGate struct
method Encode (line 14) | func (b BirchFenceGate) Encode() (string, BlockProperties) {
method New (line 23) | func (b BirchFenceGate) New(props BlockProperties) Block {
FILE: server/world/block/birchHangingSign.go
type BirchHangingSign (line 7) | type BirchHangingSign struct
method Encode (line 13) | func (b BirchHangingSign) Encode() (string, BlockProperties) {
method New (line 21) | func (b BirchHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/birchLeaves.go
type BirchLeaves (line 7) | type BirchLeaves struct
method Encode (line 13) | func (b BirchLeaves) Encode() (string, BlockProperties) {
method New (line 21) | func (b BirchLeaves) New(props BlockProperties) Block {
FILE: server/world/block/birchLog.go
type BirchLog (line 3) | type BirchLog struct
method Encode (line 7) | func (b BirchLog) Encode() (string, BlockProperties) {
method New (line 13) | func (b BirchLog) New(props BlockProperties) Block {
FILE: server/world/block/birchPlanks.go
type BirchPlanks (line 3) | type BirchPlanks struct
method Encode (line 6) | func (b BirchPlanks) Encode() (string, BlockProperties) {
method New (line 10) | func (b BirchPlanks) New(props BlockProperties) Block {
FILE: server/world/block/birchPressurePlate.go
type BirchPressurePlate (line 7) | type BirchPressurePlate struct
method Encode (line 11) | func (b BirchPressurePlate) Encode() (string, BlockProperties) {
method New (line 17) | func (b BirchPressurePlate) New(props BlockProperties) Block {
FILE: server/world/block/birchSapling.go
type BirchSapling (line 7) | type BirchSapling struct
method Encode (line 11) | func (b BirchSapling) Encode() (string, BlockProperties) {
method New (line 17) | func (b BirchSapling) New(props BlockProperties) Block {
FILE: server/world/block/birchSign.go
type BirchSign (line 7) | type BirchSign struct
method Encode (line 12) | func (b BirchSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b BirchSign) New(props BlockProperties) Block {
FILE: server/world/block/birchSlab.go
type BirchSlab (line 7) | type BirchSlab struct
method Encode (line 12) | func (b BirchSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b BirchSlab) New(props BlockProperties) Block {
FILE: server/world/block/birchStairs.go
type BirchStairs (line 7) | type BirchStairs struct
method Encode (line 14) | func (b BirchStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b BirchStairs) New(props BlockProperties) Block {
FILE: server/world/block/birchTrapdoor.go
type BirchTrapdoor (line 7) | type BirchTrapdoor struct
method Encode (line 15) | func (b BirchTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b BirchTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/birchWallHangingSign.go
type BirchWallHangingSign (line 7) | type BirchWallHangingSign struct
method Encode (line 12) | func (b BirchWallHangingSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b BirchWallHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/birchWallSign.go
type BirchWallSign (line 7) | type BirchWallSign struct
method Encode (line 12) | func (b BirchWallSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b BirchWallSign) New(props BlockProperties) Block {
FILE: server/world/block/birchWood.go
type BirchWood (line 3) | type BirchWood struct
method Encode (line 7) | func (b BirchWood) Encode() (string, BlockProperties) {
method New (line 13) | func (b BirchWood) New(props BlockProperties) Block {
FILE: server/world/block/blackBanner.go
type BlackBanner (line 7) | type BlackBanner struct
method Encode (line 11) | func (b BlackBanner) Encode() (string, BlockProperties) {
method New (line 17) | func (b BlackBanner) New(props BlockProperties) Block {
FILE: server/world/block/blackBed.go
type BlackBed (line 7) | type BlackBed struct
method Encode (line 13) | func (b BlackBed) Encode() (string, BlockProperties) {
method New (line 21) | func (b BlackBed) New(props BlockProperties) Block {
FILE: server/world/block/blackCandle.go
type BlackCandle (line 7) | type BlackCandle struct
method Encode (line 13) | func (b BlackCandle) Encode() (string, BlockProperties) {
method New (line 21) | func (b BlackCandle) New(props BlockProperties) Block {
FILE: server/world/block/blackCandleCake.go
type BlackCandleCake (line 7) | type BlackCandleCake struct
method Encode (line 11) | func (b BlackCandleCake) Encode() (string, BlockProperties) {
method New (line 17) | func (b BlackCandleCake) New(props BlockProperties) Block {
FILE: server/world/block/blackCarpet.go
type BlackCarpet (line 3) | type BlackCarpet struct
method Encode (line 6) | func (b BlackCarpet) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlackCarpet) New(props BlockProperties) Block {
FILE: server/world/block/blackConcrete.go
type BlackConcrete (line 3) | type BlackConcrete struct
method Encode (line 6) | func (b BlackConcrete) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlackConcrete) New(props BlockProperties) Block {
FILE: server/world/block/blackConcretePowder.go
type BlackConcretePowder (line 3) | type BlackConcretePowder struct
method Encode (line 6) | func (b BlackConcretePowder) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlackConcretePowder) New(props BlockProperties) Block {
FILE: server/world/block/blackGlazedTerracotta.go
type BlackGlazedTerracotta (line 3) | type BlackGlazedTerracotta struct
method Encode (line 7) | func (b BlackGlazedTerracotta) Encode() (string, BlockProperties) {
method New (line 13) | func (b BlackGlazedTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/blackShulkerBox.go
type BlackShulkerBox (line 3) | type BlackShulkerBox struct
method Encode (line 7) | func (b BlackShulkerBox) Encode() (string, BlockProperties) {
method New (line 13) | func (b BlackShulkerBox) New(props BlockProperties) Block {
FILE: server/world/block/blackStainedGlass.go
type BlackStainedGlass (line 3) | type BlackStainedGlass struct
method Encode (line 6) | func (b BlackStainedGlass) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlackStainedGlass) New(props BlockProperties) Block {
FILE: server/world/block/blackStainedGlassPane.go
type BlackStainedGlassPane (line 7) | type BlackStainedGlassPane struct
method Encode (line 15) | func (b BlackStainedGlassPane) Encode() (string, BlockProperties) {
method New (line 25) | func (b BlackStainedGlassPane) New(props BlockProperties) Block {
FILE: server/world/block/blackTerracotta.go
type BlackTerracotta (line 3) | type BlackTerracotta struct
method Encode (line 6) | func (b BlackTerracotta) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlackTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/blackWallBanner.go
type BlackWallBanner (line 3) | type BlackWallBanner struct
method Encode (line 7) | func (b BlackWallBanner) Encode() (string, BlockProperties) {
method New (line 13) | func (b BlackWallBanner) New(props BlockProperties) Block {
FILE: server/world/block/blackWool.go
type BlackWool (line 3) | type BlackWool struct
method Encode (line 6) | func (b BlackWool) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlackWool) New(props BlockProperties) Block {
FILE: server/world/block/blackstone.go
type Blackstone (line 3) | type Blackstone struct
method Encode (line 6) | func (b Blackstone) Encode() (string, BlockProperties) {
method New (line 10) | func (b Blackstone) New(props BlockProperties) Block {
FILE: server/world/block/blackstoneSlab.go
type BlackstoneSlab (line 7) | type BlackstoneSlab struct
method Encode (line 12) | func (b BlackstoneSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b BlackstoneSlab) New(props BlockProperties) Block {
FILE: server/world/block/blackstoneStairs.go
type BlackstoneStairs (line 7) | type BlackstoneStairs struct
method Encode (line 14) | func (b BlackstoneStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b BlackstoneStairs) New(props BlockProperties) Block {
FILE: server/world/block/blackstoneWall.go
type BlackstoneWall (line 7) | type BlackstoneWall struct
method Encode (line 16) | func (b BlackstoneWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b BlackstoneWall) New(props BlockProperties) Block {
FILE: server/world/block/blastFurnace.go
type BlastFurnace (line 9) | type BlastFurnace struct
method Encode (line 14) | func (b BlastFurnace) Encode() (string, BlockProperties) {
method New (line 21) | func (b BlastFurnace) New(props BlockProperties) Block {
method BlockEntity (line 28) | func (b BlastFurnace) BlockEntity(pos pos.BlockPosition) chunk.BlockEn...
FILE: server/world/block/blueBanner.go
type BlueBanner (line 7) | type BlueBanner struct
method Encode (line 11) | func (b BlueBanner) Encode() (string, BlockProperties) {
method New (line 17) | func (b BlueBanner) New(props BlockProperties) Block {
FILE: server/world/block/blueBed.go
type BlueBed (line 7) | type BlueBed struct
method Encode (line 13) | func (b BlueBed) Encode() (string, BlockProperties) {
method New (line 21) | func (b BlueBed) New(props BlockProperties) Block {
FILE: server/world/block/blueCandle.go
type BlueCandle (line 7) | type BlueCandle struct
method Encode (line 13) | func (b BlueCandle) Encode() (string, BlockProperties) {
method New (line 21) | func (b BlueCandle) New(props BlockProperties) Block {
FILE: server/world/block/blueCandleCake.go
type BlueCandleCake (line 7) | type BlueCandleCake struct
method Encode (line 11) | func (b BlueCandleCake) Encode() (string, BlockProperties) {
method New (line 17) | func (b BlueCandleCake) New(props BlockProperties) Block {
FILE: server/world/block/blueCarpet.go
type BlueCarpet (line 3) | type BlueCarpet struct
method Encode (line 6) | func (b BlueCarpet) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueCarpet) New(props BlockProperties) Block {
FILE: server/world/block/blueConcrete.go
type BlueConcrete (line 3) | type BlueConcrete struct
method Encode (line 6) | func (b BlueConcrete) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueConcrete) New(props BlockProperties) Block {
FILE: server/world/block/blueConcretePowder.go
type BlueConcretePowder (line 3) | type BlueConcretePowder struct
method Encode (line 6) | func (b BlueConcretePowder) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueConcretePowder) New(props BlockProperties) Block {
FILE: server/world/block/blueGlazedTerracotta.go
type BlueGlazedTerracotta (line 3) | type BlueGlazedTerracotta struct
method Encode (line 7) | func (b BlueGlazedTerracotta) Encode() (string, BlockProperties) {
method New (line 13) | func (b BlueGlazedTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/blueIce.go
type BlueIce (line 3) | type BlueIce struct
method Encode (line 6) | func (b BlueIce) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueIce) New(props BlockProperties) Block {
FILE: server/world/block/blueOrchid.go
type BlueOrchid (line 3) | type BlueOrchid struct
method Encode (line 6) | func (b BlueOrchid) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueOrchid) New(props BlockProperties) Block {
FILE: server/world/block/blueShulkerBox.go
type BlueShulkerBox (line 3) | type BlueShulkerBox struct
method Encode (line 7) | func (b BlueShulkerBox) Encode() (string, BlockProperties) {
method New (line 13) | func (b BlueShulkerBox) New(props BlockProperties) Block {
FILE: server/world/block/blueStainedGlass.go
type BlueStainedGlass (line 3) | type BlueStainedGlass struct
method Encode (line 6) | func (b BlueStainedGlass) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueStainedGlass) New(props BlockProperties) Block {
FILE: server/world/block/blueStainedGlassPane.go
type BlueStainedGlassPane (line 7) | type BlueStainedGlassPane struct
method Encode (line 15) | func (b BlueStainedGlassPane) Encode() (string, BlockProperties) {
method New (line 25) | func (b BlueStainedGlassPane) New(props BlockProperties) Block {
FILE: server/world/block/blueTerracotta.go
type BlueTerracotta (line 3) | type BlueTerracotta struct
method Encode (line 6) | func (b BlueTerracotta) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/blueWallBanner.go
type BlueWallBanner (line 3) | type BlueWallBanner struct
method Encode (line 7) | func (b BlueWallBanner) Encode() (string, BlockProperties) {
method New (line 13) | func (b BlueWallBanner) New(props BlockProperties) Block {
FILE: server/world/block/blueWool.go
type BlueWool (line 3) | type BlueWool struct
method Encode (line 6) | func (b BlueWool) Encode() (string, BlockProperties) {
method New (line 10) | func (b BlueWool) New(props BlockProperties) Block {
FILE: server/world/block/boneBlock.go
type BoneBlock (line 3) | type BoneBlock struct
method Encode (line 7) | func (b BoneBlock) Encode() (string, BlockProperties) {
method New (line 13) | func (b BoneBlock) New(props BlockProperties) Block {
FILE: server/world/block/bookshelf.go
type Bookshelf (line 3) | type Bookshelf struct
method Encode (line 6) | func (b Bookshelf) Encode() (string, BlockProperties) {
method New (line 10) | func (b Bookshelf) New(props BlockProperties) Block {
FILE: server/world/block/brainCoral.go
type BrainCoral (line 7) | type BrainCoral struct
method Encode (line 11) | func (b BrainCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b BrainCoral) New(props BlockProperties) Block {
FILE: server/world/block/brainCoralBlock.go
type BrainCoralBlock (line 3) | type BrainCoralBlock struct
method Encode (line 6) | func (b BrainCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrainCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/brainCoralFan.go
type BrainCoralFan (line 7) | type BrainCoralFan struct
method Encode (line 11) | func (b BrainCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b BrainCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/brainCoralWallFan.go
type BrainCoralWallFan (line 7) | type BrainCoralWallFan struct
method Encode (line 12) | func (b BrainCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b BrainCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/brewingStand.go
type BrewingStand (line 9) | type BrewingStand struct
method Encode (line 15) | func (b BrewingStand) Encode() (string, BlockProperties) {
method New (line 23) | func (b BrewingStand) New(props BlockProperties) Block {
method BlockEntity (line 31) | func (b BrewingStand) BlockEntity(pos pos.BlockPosition) chunk.BlockEn...
FILE: server/world/block/brickSlab.go
type BrickSlab (line 7) | type BrickSlab struct
method Encode (line 12) | func (b BrickSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b BrickSlab) New(props BlockProperties) Block {
FILE: server/world/block/brickStairs.go
type BrickStairs (line 7) | type BrickStairs struct
method Encode (line 14) | func (b BrickStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b BrickStairs) New(props BlockProperties) Block {
FILE: server/world/block/brickWall.go
type BrickWall (line 7) | type BrickWall struct
method Encode (line 16) | func (b BrickWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b BrickWall) New(props BlockProperties) Block {
FILE: server/world/block/bricks.go
type Bricks (line 3) | type Bricks struct
method Encode (line 6) | func (b Bricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b Bricks) New(props BlockProperties) Block {
FILE: server/world/block/brownBanner.go
type BrownBanner (line 7) | type BrownBanner struct
method Encode (line 11) | func (b BrownBanner) Encode() (string, BlockProperties) {
method New (line 17) | func (b BrownBanner) New(props BlockProperties) Block {
FILE: server/world/block/brownBed.go
type BrownBed (line 7) | type BrownBed struct
method Encode (line 13) | func (b BrownBed) Encode() (string, BlockProperties) {
method New (line 21) | func (b BrownBed) New(props BlockProperties) Block {
FILE: server/world/block/brownCandle.go
type BrownCandle (line 7) | type BrownCandle struct
method Encode (line 13) | func (b BrownCandle) Encode() (string, BlockProperties) {
method New (line 21) | func (b BrownCandle) New(props BlockProperties) Block {
FILE: server/world/block/brownCandleCake.go
type BrownCandleCake (line 7) | type BrownCandleCake struct
method Encode (line 11) | func (b BrownCandleCake) Encode() (string, BlockProperties) {
method New (line 17) | func (b BrownCandleCake) New(props BlockProperties) Block {
FILE: server/world/block/brownCarpet.go
type BrownCarpet (line 3) | type BrownCarpet struct
method Encode (line 6) | func (b BrownCarpet) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownCarpet) New(props BlockProperties) Block {
FILE: server/world/block/brownConcrete.go
type BrownConcrete (line 3) | type BrownConcrete struct
method Encode (line 6) | func (b BrownConcrete) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownConcrete) New(props BlockProperties) Block {
FILE: server/world/block/brownConcretePowder.go
type BrownConcretePowder (line 3) | type BrownConcretePowder struct
method Encode (line 6) | func (b BrownConcretePowder) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownConcretePowder) New(props BlockProperties) Block {
FILE: server/world/block/brownGlazedTerracotta.go
type BrownGlazedTerracotta (line 3) | type BrownGlazedTerracotta struct
method Encode (line 7) | func (b BrownGlazedTerracotta) Encode() (string, BlockProperties) {
method New (line 13) | func (b BrownGlazedTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/brownMushroom.go
type BrownMushroom (line 3) | type BrownMushroom struct
method Encode (line 6) | func (b BrownMushroom) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownMushroom) New(props BlockProperties) Block {
FILE: server/world/block/brownMushroomBlock.go
type BrownMushroomBlock (line 7) | type BrownMushroomBlock struct
method Encode (line 16) | func (b BrownMushroomBlock) Encode() (string, BlockProperties) {
method New (line 27) | func (b BrownMushroomBlock) New(props BlockProperties) Block {
FILE: server/world/block/brownShulkerBox.go
type BrownShulkerBox (line 3) | type BrownShulkerBox struct
method Encode (line 7) | func (b BrownShulkerBox) Encode() (string, BlockProperties) {
method New (line 13) | func (b BrownShulkerBox) New(props BlockProperties) Block {
FILE: server/world/block/brownStainedGlass.go
type BrownStainedGlass (line 3) | type BrownStainedGlass struct
method Encode (line 6) | func (b BrownStainedGlass) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownStainedGlass) New(props BlockProperties) Block {
FILE: server/world/block/brownStainedGlassPane.go
type BrownStainedGlassPane (line 7) | type BrownStainedGlassPane struct
method Encode (line 15) | func (b BrownStainedGlassPane) Encode() (string, BlockProperties) {
method New (line 25) | func (b BrownStainedGlassPane) New(props BlockProperties) Block {
FILE: server/world/block/brownTerracotta.go
type BrownTerracotta (line 3) | type BrownTerracotta struct
method Encode (line 6) | func (b BrownTerracotta) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/brownWallBanner.go
type BrownWallBanner (line 3) | type BrownWallBanner struct
method Encode (line 7) | func (b BrownWallBanner) Encode() (string, BlockProperties) {
method New (line 13) | func (b BrownWallBanner) New(props BlockProperties) Block {
FILE: server/world/block/brownWool.go
type BrownWool (line 3) | type BrownWool struct
method Encode (line 6) | func (b BrownWool) Encode() (string, BlockProperties) {
method New (line 10) | func (b BrownWool) New(props BlockProperties) Block {
FILE: server/world/block/bubbleColumn.go
type BubbleColumn (line 7) | type BubbleColumn struct
method Encode (line 11) | func (b BubbleColumn) Encode() (string, BlockProperties) {
method New (line 17) | func (b BubbleColumn) New(props BlockProperties) Block {
FILE: server/world/block/bubbleCoral.go
type BubbleCoral (line 7) | type BubbleCoral struct
method Encode (line 11) | func (b BubbleCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b BubbleCoral) New(props BlockProperties) Block {
FILE: server/world/block/bubbleCoralBlock.go
type BubbleCoralBlock (line 3) | type BubbleCoralBlock struct
method Encode (line 6) | func (b BubbleCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b BubbleCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/bubbleCoralFan.go
type BubbleCoralFan (line 7) | type BubbleCoralFan struct
method Encode (line 11) | func (b BubbleCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b BubbleCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/bubbleCoralWallFan.go
type BubbleCoralWallFan (line 7) | type BubbleCoralWallFan struct
method Encode (line 12) | func (b BubbleCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b BubbleCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/buddingAmethyst.go
type BuddingAmethyst (line 3) | type BuddingAmethyst struct
method Encode (line 6) | func (b BuddingAmethyst) Encode() (string, BlockProperties) {
method New (line 10) | func (b BuddingAmethyst) New(props BlockProperties) Block {
FILE: server/world/block/cactus.go
type Cactus (line 7) | type Cactus struct
method Encode (line 11) | func (b Cactus) Encode() (string, BlockProperties) {
method New (line 17) | func (b Cactus) New(props BlockProperties) Block {
FILE: server/world/block/cake.go
type Cake (line 7) | type Cake struct
method Encode (line 11) | func (b Cake) Encode() (string, BlockProperties) {
method New (line 17) | func (b Cake) New(props BlockProperties) Block {
FILE: server/world/block/calcite.go
type Calcite (line 3) | type Calcite struct
method Encode (line 6) | func (b Calcite) Encode() (string, BlockProperties) {
method New (line 10) | func (b Calcite) New(props BlockProperties) Block {
FILE: server/world/block/calibratedSculkSensor.go
type CalibratedSculkSensor (line 9) | type CalibratedSculkSensor struct
method Encode (line 16) | func (b CalibratedSculkSensor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CalibratedSculkSensor) New(props BlockProperties) Block {
method BlockEntity (line 34) | func (b CalibratedSculkSensor) BlockEntity(pos pos.BlockPosition) chun...
FILE: server/world/block/campfire.go
type Campfire (line 9) | type Campfire struct
method Encode (line 16) | func (b Campfire) Encode() (string, BlockProperties) {
method New (line 25) | func (b Campfire) New(props BlockProperties) Block {
method BlockEntity (line 34) | func (b Campfire) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/candle.go
type Candle (line 7) | type Candle struct
method Encode (line 13) | func (b Candle) Encode() (string, BlockProperties) {
method New (line 21) | func (b Candle) New(props BlockProperties) Block {
FILE: server/world/block/candleCake.go
type CandleCake (line 7) | type CandleCake struct
method Encode (line 11) | func (b CandleCake) Encode() (string, BlockProperties) {
method New (line 17) | func (b CandleCake) New(props BlockProperties) Block {
FILE: server/world/block/carrots.go
type Carrots (line 7) | type Carrots struct
method Encode (line 11) | func (b Carrots) Encode() (string, BlockProperties) {
method New (line 17) | func (b Carrots) New(props BlockProperties) Block {
FILE: server/world/block/cartographyTable.go
type CartographyTable (line 3) | type CartographyTable struct
method Encode (line 6) | func (b CartographyTable) Encode() (string, BlockProperties) {
method New (line 10) | func (b CartographyTable) New(props BlockProperties) Block {
FILE: server/world/block/carvedPumpkin.go
type CarvedPumpkin (line 3) | type CarvedPumpkin struct
method Encode (line 7) | func (b CarvedPumpkin) Encode() (string, BlockProperties) {
method New (line 13) | func (b CarvedPumpkin) New(props BlockProperties) Block {
FILE: server/world/block/cauldron.go
type Cauldron (line 3) | type Cauldron struct
method Encode (line 6) | func (b Cauldron) Encode() (string, BlockProperties) {
method New (line 10) | func (b Cauldron) New(props BlockProperties) Block {
FILE: server/world/block/caveAir.go
type CaveAir (line 3) | type CaveAir struct
method Encode (line 6) | func (b CaveAir) Encode() (string, BlockProperties) {
method New (line 10) | func (b CaveAir) New(props BlockProperties) Block {
FILE: server/world/block/caveVines.go
type CaveVines (line 7) | type CaveVines struct
method Encode (line 12) | func (b CaveVines) Encode() (string, BlockProperties) {
method New (line 19) | func (b CaveVines) New(props BlockProperties) Block {
FILE: server/world/block/caveVinesPlant.go
type CaveVinesPlant (line 7) | type CaveVinesPlant struct
method Encode (line 11) | func (b CaveVinesPlant) Encode() (string, BlockProperties) {
method New (line 17) | func (b CaveVinesPlant) New(props BlockProperties) Block {
FILE: server/world/block/chain.go
type Chain (line 7) | type Chain struct
method Encode (line 12) | func (b Chain) Encode() (string, BlockProperties) {
method New (line 19) | func (b Chain) New(props BlockProperties) Block {
FILE: server/world/block/chainCommandBlock.go
type ChainCommandBlock (line 7) | type ChainCommandBlock struct
method Encode (line 12) | func (b ChainCommandBlock) Encode() (string, BlockProperties) {
method New (line 19) | func (b ChainCommandBlock) New(props BlockProperties) Block {
FILE: server/world/block/cherryButton.go
type CherryButton (line 7) | type CherryButton struct
method Encode (line 13) | func (b CherryButton) Encode() (string, BlockProperties) {
method New (line 21) | func (b CherryButton) New(props BlockProperties) Block {
FILE: server/world/block/cherryDoor.go
type CherryDoor (line 7) | type CherryDoor struct
method Encode (line 15) | func (b CherryDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CherryDoor) New(props BlockProperties) Block {
FILE: server/world/block/cherryFence.go
type CherryFence (line 7) | type CherryFence struct
method Encode (line 15) | func (b CherryFence) Encode() (string, BlockProperties) {
method New (line 25) | func (b CherryFence) New(props BlockProperties) Block {
FILE: server/world/block/cherryFenceGate.go
type CherryFenceGate (line 7) | type CherryFenceGate struct
method Encode (line 14) | func (b CherryFenceGate) Encode() (string, BlockProperties) {
method New (line 23) | func (b CherryFenceGate) New(props BlockProperties) Block {
FILE: server/world/block/cherryHangingSign.go
type CherryHangingSign (line 7) | type CherryHangingSign struct
method Encode (line 13) | func (b CherryHangingSign) Encode() (string, BlockProperties) {
method New (line 21) | func (b CherryHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/cherryLeaves.go
type CherryLeaves (line 7) | type CherryLeaves struct
method Encode (line 13) | func (b CherryLeaves) Encode() (string, BlockProperties) {
method New (line 21) | func (b CherryLeaves) New(props BlockProperties) Block {
FILE: server/world/block/cherryLog.go
type CherryLog (line 3) | type CherryLog struct
method Encode (line 7) | func (b CherryLog) Encode() (string, BlockProperties) {
method New (line 13) | func (b CherryLog) New(props BlockProperties) Block {
FILE: server/world/block/cherryPlanks.go
type CherryPlanks (line 3) | type CherryPlanks struct
method Encode (line 6) | func (b CherryPlanks) Encode() (string, BlockProperties) {
method New (line 10) | func (b CherryPlanks) New(props BlockProperties) Block {
FILE: server/world/block/cherryPressurePlate.go
type CherryPressurePlate (line 7) | type CherryPressurePlate struct
method Encode (line 11) | func (b CherryPressurePlate) Encode() (string, BlockProperties) {
method New (line 17) | func (b CherryPressurePlate) New(props BlockProperties) Block {
FILE: server/world/block/cherrySapling.go
type CherrySapling (line 7) | type CherrySapling struct
method Encode (line 11) | func (b CherrySapling) Encode() (string, BlockProperties) {
method New (line 17) | func (b CherrySapling) New(props BlockProperties) Block {
FILE: server/world/block/cherrySign.go
type CherrySign (line 7) | type CherrySign struct
method Encode (line 12) | func (b CherrySign) Encode() (string, BlockProperties) {
method New (line 19) | func (b CherrySign) New(props BlockProperties) Block {
FILE: server/world/block/cherrySlab.go
type CherrySlab (line 7) | type CherrySlab struct
method Encode (line 12) | func (b CherrySlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CherrySlab) New(props BlockProperties) Block {
FILE: server/world/block/cherryStairs.go
type CherryStairs (line 7) | type CherryStairs struct
method Encode (line 14) | func (b CherryStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b CherryStairs) New(props BlockProperties) Block {
FILE: server/world/block/cherryTrapdoor.go
type CherryTrapdoor (line 7) | type CherryTrapdoor struct
method Encode (line 15) | func (b CherryTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CherryTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/cherryWallHangingSign.go
type CherryWallHangingSign (line 7) | type CherryWallHangingSign struct
method Encode (line 12) | func (b CherryWallHangingSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b CherryWallHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/cherryWallSign.go
type CherryWallSign (line 7) | type CherryWallSign struct
method Encode (line 12) | func (b CherryWallSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b CherryWallSign) New(props BlockProperties) Block {
FILE: server/world/block/cherryWood.go
type CherryWood (line 3) | type CherryWood struct
method Encode (line 7) | func (b CherryWood) Encode() (string, BlockProperties) {
method New (line 13) | func (b CherryWood) New(props BlockProperties) Block {
FILE: server/world/block/chest.go
type Chest (line 11) | type Chest struct
method Encode (line 17) | func (g Chest) Encode() (string, BlockProperties) {
method New (line 25) | func (g Chest) New(props BlockProperties) Block {
method BlockEntity (line 36) | func (g Chest) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/chippedAnvil.go
type ChippedAnvil (line 3) | type ChippedAnvil struct
method Encode (line 7) | func (b ChippedAnvil) Encode() (string, BlockProperties) {
method New (line 13) | func (b ChippedAnvil) New(props BlockProperties) Block {
FILE: server/world/block/chiseledBookshelf.go
type ChiseledBookshelf (line 9) | type ChiseledBookshelf struct
method Encode (line 19) | func (b ChiseledBookshelf) Encode() (string, BlockProperties) {
method New (line 31) | func (b ChiseledBookshelf) New(props BlockProperties) Block {
method BlockEntity (line 43) | func (b ChiseledBookshelf) BlockEntity(pos pos.BlockPosition) chunk.Bl...
FILE: server/world/block/chiseledCopper.go
type ChiseledCopper (line 3) | type ChiseledCopper struct
method Encode (line 6) | func (b ChiseledCopper) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledCopper) New(props BlockProperties) Block {
FILE: server/world/block/chiseledDeepslate.go
type ChiseledDeepslate (line 3) | type ChiseledDeepslate struct
method Encode (line 6) | func (b ChiseledDeepslate) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledDeepslate) New(props BlockProperties) Block {
FILE: server/world/block/chiseledNetherBricks.go
type ChiseledNetherBricks (line 3) | type ChiseledNetherBricks struct
method Encode (line 6) | func (b ChiseledNetherBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledNetherBricks) New(props BlockProperties) Block {
FILE: server/world/block/chiseledPolishedBlackstone.go
type ChiseledPolishedBlackstone (line 3) | type ChiseledPolishedBlackstone struct
method Encode (line 6) | func (b ChiseledPolishedBlackstone) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledPolishedBlackstone) New(props BlockProperties) Block {
FILE: server/world/block/chiseledQuartzBlock.go
type ChiseledQuartzBlock (line 3) | type ChiseledQuartzBlock struct
method Encode (line 6) | func (b ChiseledQuartzBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledQuartzBlock) New(props BlockProperties) Block {
FILE: server/world/block/chiseledRedSandstone.go
type ChiseledRedSandstone (line 3) | type ChiseledRedSandstone struct
method Encode (line 6) | func (b ChiseledRedSandstone) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledRedSandstone) New(props BlockProperties) Block {
FILE: server/world/block/chiseledSandstone.go
type ChiseledSandstone (line 3) | type ChiseledSandstone struct
method Encode (line 6) | func (b ChiseledSandstone) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledSandstone) New(props BlockProperties) Block {
FILE: server/world/block/chiseledStoneBricks.go
type ChiseledStoneBricks (line 3) | type ChiseledStoneBricks struct
method Encode (line 6) | func (b ChiseledStoneBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledStoneBricks) New(props BlockProperties) Block {
FILE: server/world/block/chiseledTuff.go
type ChiseledTuff (line 3) | type ChiseledTuff struct
method Encode (line 6) | func (b ChiseledTuff) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledTuff) New(props BlockProperties) Block {
FILE: server/world/block/chiseledTuffBricks.go
type ChiseledTuffBricks (line 3) | type ChiseledTuffBricks struct
method Encode (line 6) | func (b ChiseledTuffBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b ChiseledTuffBricks) New(props BlockProperties) Block {
FILE: server/world/block/chorusFlower.go
type ChorusFlower (line 7) | type ChorusFlower struct
method Encode (line 11) | func (b ChorusFlower) Encode() (string, BlockProperties) {
method New (line 17) | func (b ChorusFlower) New(props BlockProperties) Block {
FILE: server/world/block/chorusPlant.go
type ChorusPlant (line 7) | type ChorusPlant struct
method Encode (line 16) | func (b ChorusPlant) Encode() (string, BlockProperties) {
method New (line 27) | func (b ChorusPlant) New(props BlockProperties) Block {
FILE: server/world/block/clay.go
type Clay (line 3) | type Clay struct
method Encode (line 6) | func (b Clay) Encode() (string, BlockProperties) {
method New (line 10) | func (b Clay) New(props BlockProperties) Block {
FILE: server/world/block/coalBlock.go
type CoalBlock (line 3) | type CoalBlock struct
method Encode (line 6) | func (b CoalBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b CoalBlock) New(props BlockProperties) Block {
FILE: server/world/block/coalOre.go
type CoalOre (line 3) | type CoalOre struct
method Encode (line 6) | func (b CoalOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b CoalOre) New(props BlockProperties) Block {
FILE: server/world/block/coarseDirt.go
type CoarseDirt (line 3) | type CoarseDirt struct
method Encode (line 6) | func (b CoarseDirt) Encode() (string, BlockProperties) {
method New (line 10) | func (b CoarseDirt) New(props BlockProperties) Block {
FILE: server/world/block/cobbledDeepslate.go
type CobbledDeepslate (line 3) | type CobbledDeepslate struct
method Encode (line 6) | func (b CobbledDeepslate) Encode() (string, BlockProperties) {
method New (line 10) | func (b CobbledDeepslate) New(props BlockProperties) Block {
FILE: server/world/block/cobbledDeepslateSlab.go
type CobbledDeepslateSlab (line 7) | type CobbledDeepslateSlab struct
method Encode (line 12) | func (b CobbledDeepslateSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CobbledDeepslateSlab) New(props BlockProperties) Block {
FILE: server/world/block/cobbledDeepslateStairs.go
type CobbledDeepslateStairs (line 7) | type CobbledDeepslateStairs struct
method Encode (line 14) | func (b CobbledDeepslateStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b CobbledDeepslateStairs) New(props BlockProperties) Block {
FILE: server/world/block/cobbledDeepslateWall.go
type CobbledDeepslateWall (line 7) | type CobbledDeepslateWall struct
method Encode (line 16) | func (b CobbledDeepslateWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b CobbledDeepslateWall) New(props BlockProperties) Block {
FILE: server/world/block/cobblestone.go
type Cobblestone (line 3) | type Cobblestone struct
method Encode (line 6) | func (b Cobblestone) Encode() (string, BlockProperties) {
method New (line 10) | func (b Cobblestone) New(props BlockProperties) Block {
FILE: server/world/block/cobblestoneSlab.go
type CobblestoneSlab (line 7) | type CobblestoneSlab struct
method Encode (line 12) | func (b CobblestoneSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CobblestoneSlab) New(props BlockProperties) Block {
FILE: server/world/block/cobblestoneStairs.go
type CobblestoneStairs (line 7) | type CobblestoneStairs struct
method Encode (line 14) | func (b CobblestoneStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b CobblestoneStairs) New(props BlockProperties) Block {
FILE: server/world/block/cobblestoneWall.go
type CobblestoneWall (line 7) | type CobblestoneWall struct
method Encode (line 16) | func (b CobblestoneWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b CobblestoneWall) New(props BlockProperties) Block {
FILE: server/world/block/cobweb.go
type Cobweb (line 3) | type Cobweb struct
method Encode (line 6) | func (b Cobweb) Encode() (string, BlockProperties) {
method New (line 10) | func (b Cobweb) New(props BlockProperties) Block {
FILE: server/world/block/cocoa.go
type Cocoa (line 7) | type Cocoa struct
method Encode (line 12) | func (b Cocoa) Encode() (string, BlockProperties) {
method New (line 19) | func (b Cocoa) New(props BlockProperties) Block {
FILE: server/world/block/commandBlock.go
type CommandBlock (line 9) | type CommandBlock struct
method Encode (line 14) | func (b CommandBlock) Encode() (string, BlockProperties) {
method New (line 21) | func (b CommandBlock) New(props BlockProperties) Block {
method BlockEntity (line 28) | func (b CommandBlock) BlockEntity(pos pos.BlockPosition) chunk.BlockEn...
FILE: server/world/block/comparator.go
type Comparator (line 9) | type Comparator struct
method Encode (line 15) | func (b Comparator) Encode() (string, BlockProperties) {
method New (line 23) | func (b Comparator) New(props BlockProperties) Block {
method BlockEntity (line 31) | func (b Comparator) BlockEntity(pos pos.BlockPosition) chunk.BlockEnti...
FILE: server/world/block/composter.go
type Composter (line 7) | type Composter struct
method Encode (line 11) | func (b Composter) Encode() (string, BlockProperties) {
method New (line 17) | func (b Composter) New(props BlockProperties) Block {
FILE: server/world/block/conduit.go
type Conduit (line 9) | type Conduit struct
method Encode (line 13) | func (b Conduit) Encode() (string, BlockProperties) {
method New (line 19) | func (b Conduit) New(props BlockProperties) Block {
method BlockEntity (line 25) | func (b Conduit) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/copperBlock.go
type CopperBlock (line 3) | type CopperBlock struct
method Encode (line 6) | func (b CopperBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b CopperBlock) New(props BlockProperties) Block {
FILE: server/world/block/copperBulb.go
type CopperBulb (line 7) | type CopperBulb struct
method Encode (line 12) | func (b CopperBulb) Encode() (string, BlockProperties) {
method New (line 19) | func (b CopperBulb) New(props BlockProperties) Block {
FILE: server/world/block/copperDoor.go
type CopperDoor (line 7) | type CopperDoor struct
method Encode (line 15) | func (b CopperDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CopperDoor) New(props BlockProperties) Block {
FILE: server/world/block/copperGrate.go
type CopperGrate (line 7) | type CopperGrate struct
method Encode (line 11) | func (b CopperGrate) Encode() (string, BlockProperties) {
method New (line 17) | func (b CopperGrate) New(props BlockProperties) Block {
FILE: server/world/block/copperOre.go
type CopperOre (line 3) | type CopperOre struct
method Encode (line 6) | func (b CopperOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b CopperOre) New(props BlockProperties) Block {
FILE: server/world/block/copperTrapdoor.go
type CopperTrapdoor (line 7) | type CopperTrapdoor struct
method Encode (line 15) | func (b CopperTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CopperTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/cornflower.go
type Cornflower (line 3) | type Cornflower struct
method Encode (line 6) | func (b Cornflower) Encode() (string, BlockProperties) {
method New (line 10) | func (b Cornflower) New(props BlockProperties) Block {
FILE: server/world/block/crackedDeepslateBricks.go
type CrackedDeepslateBricks (line 3) | type CrackedDeepslateBricks struct
method Encode (line 6) | func (b CrackedDeepslateBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrackedDeepslateBricks) New(props BlockProperties) Block {
FILE: server/world/block/crackedDeepslateTiles.go
type CrackedDeepslateTiles (line 3) | type CrackedDeepslateTiles struct
method Encode (line 6) | func (b CrackedDeepslateTiles) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrackedDeepslateTiles) New(props BlockProperties) Block {
FILE: server/world/block/crackedNetherBricks.go
type CrackedNetherBricks (line 3) | type CrackedNetherBricks struct
method Encode (line 6) | func (b CrackedNetherBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrackedNetherBricks) New(props BlockProperties) Block {
FILE: server/world/block/crackedPolishedBlackstoneBricks.go
type CrackedPolishedBlackstoneBricks (line 3) | type CrackedPolishedBlackstoneBricks struct
method Encode (line 6) | func (b CrackedPolishedBlackstoneBricks) Encode() (string, BlockProper...
method New (line 10) | func (b CrackedPolishedBlackstoneBricks) New(props BlockProperties) Bl...
FILE: server/world/block/crackedStoneBricks.go
type CrackedStoneBricks (line 3) | type CrackedStoneBricks struct
method Encode (line 6) | func (b CrackedStoneBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrackedStoneBricks) New(props BlockProperties) Block {
FILE: server/world/block/crafter.go
type Crafter (line 9) | type Crafter struct
method Encode (line 15) | func (b Crafter) Encode() (string, BlockProperties) {
method New (line 23) | func (b Crafter) New(props BlockProperties) Block {
method BlockEntity (line 31) | func (b Crafter) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/craftingTable.go
type CraftingTable (line 3) | type CraftingTable struct
method Encode (line 6) | func (b CraftingTable) Encode() (string, BlockProperties) {
method New (line 10) | func (b CraftingTable) New(props BlockProperties) Block {
FILE: server/world/block/creeperHead.go
type CreeperHead (line 7) | type CreeperHead struct
method Encode (line 12) | func (b CreeperHead) Encode() (string, BlockProperties) {
method New (line 19) | func (b CreeperHead) New(props BlockProperties) Block {
FILE: server/world/block/creeperWallHead.go
type CreeperWallHead (line 7) | type CreeperWallHead struct
method Encode (line 12) | func (b CreeperWallHead) Encode() (string, BlockProperties) {
method New (line 19) | func (b CreeperWallHead) New(props BlockProperties) Block {
FILE: server/world/block/crimsonButton.go
type CrimsonButton (line 7) | type CrimsonButton struct
method Encode (line 13) | func (b CrimsonButton) Encode() (string, BlockProperties) {
method New (line 21) | func (b CrimsonButton) New(props BlockProperties) Block {
FILE: server/world/block/crimsonDoor.go
type CrimsonDoor (line 7) | type CrimsonDoor struct
method Encode (line 15) | func (b CrimsonDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CrimsonDoor) New(props BlockProperties) Block {
FILE: server/world/block/crimsonFence.go
type CrimsonFence (line 7) | type CrimsonFence struct
method Encode (line 15) | func (b CrimsonFence) Encode() (string, BlockProperties) {
method New (line 25) | func (b CrimsonFence) New(props BlockProperties) Block {
FILE: server/world/block/crimsonFenceGate.go
type CrimsonFenceGate (line 7) | type CrimsonFenceGate struct
method Encode (line 14) | func (b CrimsonFenceGate) Encode() (string, BlockProperties) {
method New (line 23) | func (b CrimsonFenceGate) New(props BlockProperties) Block {
FILE: server/world/block/crimsonFungus.go
type CrimsonFungus (line 3) | type CrimsonFungus struct
method Encode (line 6) | func (b CrimsonFungus) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrimsonFungus) New(props BlockProperties) Block {
FILE: server/world/block/crimsonHangingSign.go
type CrimsonHangingSign (line 7) | type CrimsonHangingSign struct
method Encode (line 13) | func (b CrimsonHangingSign) Encode() (string, BlockProperties) {
method New (line 21) | func (b CrimsonHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/crimsonHyphae.go
type CrimsonHyphae (line 3) | type CrimsonHyphae struct
method Encode (line 7) | func (b CrimsonHyphae) Encode() (string, BlockProperties) {
method New (line 13) | func (b CrimsonHyphae) New(props BlockProperties) Block {
FILE: server/world/block/crimsonNylium.go
type CrimsonNylium (line 3) | type CrimsonNylium struct
method Encode (line 6) | func (b CrimsonNylium) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrimsonNylium) New(props BlockProperties) Block {
FILE: server/world/block/crimsonPlanks.go
type CrimsonPlanks (line 3) | type CrimsonPlanks struct
method Encode (line 6) | func (b CrimsonPlanks) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrimsonPlanks) New(props BlockProperties) Block {
FILE: server/world/block/crimsonPressurePlate.go
type CrimsonPressurePlate (line 7) | type CrimsonPressurePlate struct
method Encode (line 11) | func (b CrimsonPressurePlate) Encode() (string, BlockProperties) {
method New (line 17) | func (b CrimsonPressurePlate) New(props BlockProperties) Block {
FILE: server/world/block/crimsonRoots.go
type CrimsonRoots (line 3) | type CrimsonRoots struct
method Encode (line 6) | func (b CrimsonRoots) Encode() (string, BlockProperties) {
method New (line 10) | func (b CrimsonRoots) New(props BlockProperties) Block {
FILE: server/world/block/crimsonSign.go
type CrimsonSign (line 7) | type CrimsonSign struct
method Encode (line 12) | func (b CrimsonSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b CrimsonSign) New(props BlockProperties) Block {
FILE: server/world/block/crimsonSlab.go
type CrimsonSlab (line 7) | type CrimsonSlab struct
method Encode (line 12) | func (b CrimsonSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CrimsonSlab) New(props BlockProperties) Block {
FILE: server/world/block/crimsonStairs.go
type CrimsonStairs (line 7) | type CrimsonStairs struct
method Encode (line 14) | func (b CrimsonStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b CrimsonStairs) New(props BlockProperties) Block {
FILE: server/world/block/crimsonStem.go
type CrimsonStem (line 3) | type CrimsonStem struct
method Encode (line 7) | func (b CrimsonStem) Encode() (string, BlockProperties) {
method New (line 13) | func (b CrimsonStem) New(props BlockProperties) Block {
FILE: server/world/block/crimsonTrapdoor.go
type CrimsonTrapdoor (line 7) | type CrimsonTrapdoor struct
method Encode (line 15) | func (b CrimsonTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b CrimsonTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/crimsonWallHangingSign.go
type CrimsonWallHangingSign (line 7) | type CrimsonWallHangingSign struct
method Encode (line 12) | func (b CrimsonWallHangingSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b CrimsonWallHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/crimsonWallSign.go
type CrimsonWallSign (line 7) | type CrimsonWallSign struct
method Encode (line 12) | func (b CrimsonWallSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b CrimsonWallSign) New(props BlockProperties) Block {
FILE: server/world/block/cryingObsidian.go
type CryingObsidian (line 3) | type CryingObsidian struct
method Encode (line 6) | func (b CryingObsidian) Encode() (string, BlockProperties) {
method New (line 10) | func (b CryingObsidian) New(props BlockProperties) Block {
FILE: server/world/block/cutCopper.go
type CutCopper (line 3) | type CutCopper struct
method Encode (line 6) | func (b CutCopper) Encode() (string, BlockProperties) {
method New (line 10) | func (b CutCopper) New(props BlockProperties) Block {
FILE: server/world/block/cutCopperSlab.go
type CutCopperSlab (line 7) | type CutCopperSlab struct
method Encode (line 12) | func (b CutCopperSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CutCopperSlab) New(props BlockProperties) Block {
FILE: server/world/block/cutCopperStairs.go
type CutCopperStairs (line 7) | type CutCopperStairs struct
method Encode (line 14) | func (b CutCopperStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b CutCopperStairs) New(props BlockProperties) Block {
FILE: server/world/block/cutRedSandstone.go
type CutRedSandstone (line 3) | type CutRedSandstone struct
method Encode (line 6) | func (b CutRedSandstone) Encode() (string, BlockProperties) {
method New (line 10) | func (b CutRedSandstone) New(props BlockProperties) Block {
FILE: server/world/block/cutRedSandstoneSlab.go
type CutRedSandstoneSlab (line 7) | type CutRedSandstoneSlab struct
method Encode (line 12) | func (b CutRedSandstoneSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CutRedSandstoneSlab) New(props BlockProperties) Block {
FILE: server/world/block/cutSandstone.go
type CutSandstone (line 3) | type CutSandstone struct
method Encode (line 6) | func (b CutSandstone) Encode() (string, BlockProperties) {
method New (line 10) | func (b CutSandstone) New(props BlockProperties) Block {
FILE: server/world/block/cutSandstoneSlab.go
type CutSandstoneSlab (line 7) | type CutSandstoneSlab struct
method Encode (line 12) | func (b CutSandstoneSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b CutSandstoneSlab) New(props BlockProperties) Block {
FILE: server/world/block/cyanBanner.go
type CyanBanner (line 7) | type CyanBanner struct
method Encode (line 11) | func (b CyanBanner) Encode() (string, BlockProperties) {
method New (line 17) | func (b CyanBanner) New(props BlockProperties) Block {
FILE: server/world/block/cyanBed.go
type CyanBed (line 7) | type CyanBed struct
method Encode (line 13) | func (b CyanBed) Encode() (string, BlockProperties) {
method New (line 21) | func (b CyanBed) New(props BlockProperties) Block {
FILE: server/world/block/cyanCandle.go
type CyanCandle (line 7) | type CyanCandle struct
method Encode (line 13) | func (b CyanCandle) Encode() (string, BlockProperties) {
method New (line 21) | func (b CyanCandle) New(props BlockProperties) Block {
FILE: server/world/block/cyanCandleCake.go
type CyanCandleCake (line 7) | type CyanCandleCake struct
method Encode (line 11) | func (b CyanCandleCake) Encode() (string, BlockProperties) {
method New (line 17) | func (b CyanCandleCake) New(props BlockProperties) Block {
FILE: server/world/block/cyanCarpet.go
type CyanCarpet (line 3) | type CyanCarpet struct
method Encode (line 6) | func (b CyanCarpet) Encode() (string, BlockProperties) {
method New (line 10) | func (b CyanCarpet) New(props BlockProperties) Block {
FILE: server/world/block/cyanConcrete.go
type CyanConcrete (line 3) | type CyanConcrete struct
method Encode (line 6) | func (b CyanConcrete) Encode() (string, BlockProperties) {
method New (line 10) | func (b CyanConcrete) New(props BlockProperties) Block {
FILE: server/world/block/cyanConcretePowder.go
type CyanConcretePowder (line 3) | type CyanConcretePowder struct
method Encode (line 6) | func (b CyanConcretePowder) Encode() (string, BlockProperties) {
method New (line 10) | func (b CyanConcretePowder) New(props BlockProperties) Block {
FILE: server/world/block/cyanGlazedTerracotta.go
type CyanGlazedTerracotta (line 3) | type CyanGlazedTerracotta struct
method Encode (line 7) | func (b CyanGlazedTerracotta) Encode() (string, BlockProperties) {
method New (line 13) | func (b CyanGlazedTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/cyanShulkerBox.go
type CyanShulkerBox (line 3) | type CyanShulkerBox struct
method Encode (line 7) | func (b CyanShulkerBox) Encode() (string, BlockProperties) {
method New (line 13) | func (b CyanShulkerBox) New(props BlockProperties) Block {
FILE: server/world/block/cyanStainedGlass.go
type CyanStainedGlass (line 3) | type CyanStainedGlass struct
method Encode (line 6) | func (b CyanStainedGlass) Encode() (string, BlockProperties) {
method New (line 10) | func (b CyanStainedGlass) New(props BlockProperties) Block {
FILE: server/world/block/cyanStainedGlassPane.go
type CyanStainedGlassPane (line 7) | type CyanStainedGlassPane struct
method Encode (line 15) | func (b CyanStainedGlassPane) Encode() (string, BlockProperties) {
method New (line 25) | func (b CyanStainedGlassPane) New(props BlockProperties) Block {
FILE: server/world/block/cyanTerracotta.go
type CyanTerracotta (line 3) | type CyanTerracotta struct
method Encode (line 6) | func (b CyanTerracotta) Encode() (string, BlockProperties) {
method New (line 10) | func (b CyanTerracotta) New(props BlockProperties) Block {
FILE: server/world/block/cyanWallBanner.go
type CyanWallBanner (line 3) | type CyanWallBanner struct
method Encode (line 7) | func (b CyanWallBanner) Encode() (string, BlockProperties) {
method New (line 13) | func (b CyanWallBanner) New(props BlockProperties) Block {
FILE: server/world/block/cyanWool.go
type CyanWool (line 3) | type CyanWool struct
method Encode (line 6) | func (b CyanWool) Encode() (string, BlockProperties) {
method New (line 10) | func (b CyanWool) New(props BlockProperties) Block {
FILE: server/world/block/damagedAnvil.go
type DamagedAnvil (line 3) | type DamagedAnvil struct
method Encode (line 7) | func (b DamagedAnvil) Encode() (string, BlockProperties) {
method New (line 13) | func (b DamagedAnvil) New(props BlockProperties) Block {
FILE: server/world/block/dandelion.go
type Dandelion (line 3) | type Dandelion struct
method Encode (line 6) | func (b Dandelion) Encode() (string, BlockProperties) {
method New (line 10) | func (b Dandelion) New(props BlockProperties) Block {
FILE: server/world/block/darkOakButton.go
type DarkOakButton (line 7) | type DarkOakButton struct
method Encode (line 13) | func (b DarkOakButton) Encode() (string, BlockProperties) {
method New (line 21) | func (b DarkOakButton) New(props BlockProperties) Block {
FILE: server/world/block/darkOakDoor.go
type DarkOakDoor (line 7) | type DarkOakDoor struct
method Encode (line 15) | func (b DarkOakDoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b DarkOakDoor) New(props BlockProperties) Block {
FILE: server/world/block/darkOakFence.go
type DarkOakFence (line 7) | type DarkOakFence struct
method Encode (line 15) | func (b DarkOakFence) Encode() (string, BlockProperties) {
method New (line 25) | func (b DarkOakFence) New(props BlockProperties) Block {
FILE: server/world/block/darkOakFenceGate.go
type DarkOakFenceGate (line 7) | type DarkOakFenceGate struct
method Encode (line 14) | func (b DarkOakFenceGate) Encode() (string, BlockProperties) {
method New (line 23) | func (b DarkOakFenceGate) New(props BlockProperties) Block {
FILE: server/world/block/darkOakHangingSign.go
type DarkOakHangingSign (line 7) | type DarkOakHangingSign struct
method Encode (line 13) | func (b DarkOakHangingSign) Encode() (string, BlockProperties) {
method New (line 21) | func (b DarkOakHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/darkOakLeaves.go
type DarkOakLeaves (line 7) | type DarkOakLeaves struct
method Encode (line 13) | func (b DarkOakLeaves) Encode() (string, BlockProperties) {
method New (line 21) | func (b DarkOakLeaves) New(props BlockProperties) Block {
FILE: server/world/block/darkOakLog.go
type DarkOakLog (line 3) | type DarkOakLog struct
method Encode (line 7) | func (b DarkOakLog) Encode() (string, BlockProperties) {
method New (line 13) | func (b DarkOakLog) New(props BlockProperties) Block {
FILE: server/world/block/darkOakPlanks.go
type DarkOakPlanks (line 3) | type DarkOakPlanks struct
method Encode (line 6) | func (b DarkOakPlanks) Encode() (string, BlockProperties) {
method New (line 10) | func (b DarkOakPlanks) New(props BlockProperties) Block {
FILE: server/world/block/darkOakPressurePlate.go
type DarkOakPressurePlate (line 7) | type DarkOakPressurePlate struct
method Encode (line 11) | func (b DarkOakPressurePlate) Encode() (string, BlockProperties) {
method New (line 17) | func (b DarkOakPressurePlate) New(props BlockProperties) Block {
FILE: server/world/block/darkOakSapling.go
type DarkOakSapling (line 7) | type DarkOakSapling struct
method Encode (line 11) | func (b DarkOakSapling) Encode() (string, BlockProperties) {
method New (line 17) | func (b DarkOakSapling) New(props BlockProperties) Block {
FILE: server/world/block/darkOakSign.go
type DarkOakSign (line 7) | type DarkOakSign struct
method Encode (line 12) | func (b DarkOakSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b DarkOakSign) New(props BlockProperties) Block {
FILE: server/world/block/darkOakSlab.go
type DarkOakSlab (line 7) | type DarkOakSlab struct
method Encode (line 12) | func (b DarkOakSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b DarkOakSlab) New(props BlockProperties) Block {
FILE: server/world/block/darkOakStairs.go
type DarkOakStairs (line 7) | type DarkOakStairs struct
method Encode (line 14) | func (b DarkOakStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b DarkOakStairs) New(props BlockProperties) Block {
FILE: server/world/block/darkOakTrapdoor.go
type DarkOakTrapdoor (line 7) | type DarkOakTrapdoor struct
method Encode (line 15) | func (b DarkOakTrapdoor) Encode() (string, BlockProperties) {
method New (line 25) | func (b DarkOakTrapdoor) New(props BlockProperties) Block {
FILE: server/world/block/darkOakWallHangingSign.go
type DarkOakWallHangingSign (line 7) | type DarkOakWallHangingSign struct
method Encode (line 12) | func (b DarkOakWallHangingSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b DarkOakWallHangingSign) New(props BlockProperties) Block {
FILE: server/world/block/darkOakWallSign.go
type DarkOakWallSign (line 7) | type DarkOakWallSign struct
method Encode (line 12) | func (b DarkOakWallSign) Encode() (string, BlockProperties) {
method New (line 19) | func (b DarkOakWallSign) New(props BlockProperties) Block {
FILE: server/world/block/darkOakWood.go
type DarkOakWood (line 3) | type DarkOakWood struct
method Encode (line 7) | func (b DarkOakWood) Encode() (string, BlockProperties) {
method New (line 13) | func (b DarkOakWood) New(props BlockProperties) Block {
FILE: server/world/block/darkPrismarine.go
type DarkPrismarine (line 3) | type DarkPrismarine struct
method Encode (line 6) | func (b DarkPrismarine) Encode() (string, BlockProperties) {
method New (line 10) | func (b DarkPrismarine) New(props BlockProperties) Block {
FILE: server/world/block/darkPrismarineSlab.go
type DarkPrismarineSlab (line 7) | type DarkPrismarineSlab struct
method Encode (line 12) | func (b DarkPrismarineSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b DarkPrismarineSlab) New(props BlockProperties) Block {
FILE: server/world/block/darkPrismarineStairs.go
type DarkPrismarineStairs (line 7) | type DarkPrismarineStairs struct
method Encode (line 14) | func (b DarkPrismarineStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b DarkPrismarineStairs) New(props BlockProperties) Block {
FILE: server/world/block/daylightDetector.go
type DaylightDetector (line 9) | type DaylightDetector struct
method Encode (line 14) | func (b DaylightDetector) Encode() (string, BlockProperties) {
method New (line 21) | func (b DaylightDetector) New(props BlockProperties) Block {
method BlockEntity (line 28) | func (b DaylightDetector) BlockEntity(pos pos.BlockPosition) chunk.Blo...
FILE: server/world/block/deadBrainCoral.go
type DeadBrainCoral (line 7) | type DeadBrainCoral struct
method Encode (line 11) | func (b DeadBrainCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadBrainCoral) New(props BlockProperties) Block {
FILE: server/world/block/deadBrainCoralBlock.go
type DeadBrainCoralBlock (line 3) | type DeadBrainCoralBlock struct
method Encode (line 6) | func (b DeadBrainCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeadBrainCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/deadBrainCoralFan.go
type DeadBrainCoralFan (line 7) | type DeadBrainCoralFan struct
method Encode (line 11) | func (b DeadBrainCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadBrainCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/deadBrainCoralWallFan.go
type DeadBrainCoralWallFan (line 7) | type DeadBrainCoralWallFan struct
method Encode (line 12) | func (b DeadBrainCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeadBrainCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/deadBubbleCoral.go
type DeadBubbleCoral (line 7) | type DeadBubbleCoral struct
method Encode (line 11) | func (b DeadBubbleCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadBubbleCoral) New(props BlockProperties) Block {
FILE: server/world/block/deadBubbleCoralBlock.go
type DeadBubbleCoralBlock (line 3) | type DeadBubbleCoralBlock struct
method Encode (line 6) | func (b DeadBubbleCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeadBubbleCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/deadBubbleCoralFan.go
type DeadBubbleCoralFan (line 7) | type DeadBubbleCoralFan struct
method Encode (line 11) | func (b DeadBubbleCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadBubbleCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/deadBubbleCoralWallFan.go
type DeadBubbleCoralWallFan (line 7) | type DeadBubbleCoralWallFan struct
method Encode (line 12) | func (b DeadBubbleCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeadBubbleCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/deadBush.go
type DeadBush (line 3) | type DeadBush struct
method Encode (line 6) | func (b DeadBush) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeadBush) New(props BlockProperties) Block {
FILE: server/world/block/deadFireCoral.go
type DeadFireCoral (line 7) | type DeadFireCoral struct
method Encode (line 11) | func (b DeadFireCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadFireCoral) New(props BlockProperties) Block {
FILE: server/world/block/deadFireCoralBlock.go
type DeadFireCoralBlock (line 3) | type DeadFireCoralBlock struct
method Encode (line 6) | func (b DeadFireCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeadFireCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/deadFireCoralFan.go
type DeadFireCoralFan (line 7) | type DeadFireCoralFan struct
method Encode (line 11) | func (b DeadFireCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadFireCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/deadFireCoralWallFan.go
type DeadFireCoralWallFan (line 7) | type DeadFireCoralWallFan struct
method Encode (line 12) | func (b DeadFireCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeadFireCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/deadHornCoral.go
type DeadHornCoral (line 7) | type DeadHornCoral struct
method Encode (line 11) | func (b DeadHornCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadHornCoral) New(props BlockProperties) Block {
FILE: server/world/block/deadHornCoralBlock.go
type DeadHornCoralBlock (line 3) | type DeadHornCoralBlock struct
method Encode (line 6) | func (b DeadHornCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeadHornCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/deadHornCoralFan.go
type DeadHornCoralFan (line 7) | type DeadHornCoralFan struct
method Encode (line 11) | func (b DeadHornCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadHornCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/deadHornCoralWallFan.go
type DeadHornCoralWallFan (line 7) | type DeadHornCoralWallFan struct
method Encode (line 12) | func (b DeadHornCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeadHornCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/deadTubeCoral.go
type DeadTubeCoral (line 7) | type DeadTubeCoral struct
method Encode (line 11) | func (b DeadTubeCoral) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadTubeCoral) New(props BlockProperties) Block {
FILE: server/world/block/deadTubeCoralBlock.go
type DeadTubeCoralBlock (line 3) | type DeadTubeCoralBlock struct
method Encode (line 6) | func (b DeadTubeCoralBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeadTubeCoralBlock) New(props BlockProperties) Block {
FILE: server/world/block/deadTubeCoralFan.go
type DeadTubeCoralFan (line 7) | type DeadTubeCoralFan struct
method Encode (line 11) | func (b DeadTubeCoralFan) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeadTubeCoralFan) New(props BlockProperties) Block {
FILE: server/world/block/deadTubeCoralWallFan.go
type DeadTubeCoralWallFan (line 7) | type DeadTubeCoralWallFan struct
method Encode (line 12) | func (b DeadTubeCoralWallFan) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeadTubeCoralWallFan) New(props BlockProperties) Block {
FILE: server/world/block/decoratedPot.go
type DecoratedPot (line 9) | type DecoratedPot struct
method Encode (line 15) | func (b DecoratedPot) Encode() (string, BlockProperties) {
method New (line 23) | func (b DecoratedPot) New(props BlockProperties) Block {
method BlockEntity (line 31) | func (b DecoratedPot) BlockEntity(pos pos.BlockPosition) chunk.BlockEn...
FILE: server/world/block/deepslate.go
type Deepslate (line 3) | type Deepslate struct
method Encode (line 7) | func (b Deepslate) Encode() (string, BlockProperties) {
method New (line 13) | func (b Deepslate) New(props BlockProperties) Block {
FILE: server/world/block/deepslateBrickSlab.go
type DeepslateBrickSlab (line 7) | type DeepslateBrickSlab struct
method Encode (line 12) | func (b DeepslateBrickSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeepslateBrickSlab) New(props BlockProperties) Block {
FILE: server/world/block/deepslateBrickStairs.go
type DeepslateBrickStairs (line 7) | type DeepslateBrickStairs struct
method Encode (line 14) | func (b DeepslateBrickStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b DeepslateBrickStairs) New(props BlockProperties) Block {
FILE: server/world/block/deepslateBrickWall.go
type DeepslateBrickWall (line 7) | type DeepslateBrickWall struct
method Encode (line 16) | func (b DeepslateBrickWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b DeepslateBrickWall) New(props BlockProperties) Block {
FILE: server/world/block/deepslateBricks.go
type DeepslateBricks (line 3) | type DeepslateBricks struct
method Encode (line 6) | func (b DeepslateBricks) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateBricks) New(props BlockProperties) Block {
FILE: server/world/block/deepslateCoalOre.go
type DeepslateCoalOre (line 3) | type DeepslateCoalOre struct
method Encode (line 6) | func (b DeepslateCoalOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateCoalOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateCopperOre.go
type DeepslateCopperOre (line 3) | type DeepslateCopperOre struct
method Encode (line 6) | func (b DeepslateCopperOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateCopperOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateDiamondOre.go
type DeepslateDiamondOre (line 3) | type DeepslateDiamondOre struct
method Encode (line 6) | func (b DeepslateDiamondOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateDiamondOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateEmeraldOre.go
type DeepslateEmeraldOre (line 3) | type DeepslateEmeraldOre struct
method Encode (line 6) | func (b DeepslateEmeraldOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateEmeraldOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateGoldOre.go
type DeepslateGoldOre (line 3) | type DeepslateGoldOre struct
method Encode (line 6) | func (b DeepslateGoldOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateGoldOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateIronOre.go
type DeepslateIronOre (line 3) | type DeepslateIronOre struct
method Encode (line 6) | func (b DeepslateIronOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateIronOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateLapisOre.go
type DeepslateLapisOre (line 3) | type DeepslateLapisOre struct
method Encode (line 6) | func (b DeepslateLapisOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateLapisOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateRedstoneOre.go
type DeepslateRedstoneOre (line 7) | type DeepslateRedstoneOre struct
method Encode (line 11) | func (b DeepslateRedstoneOre) Encode() (string, BlockProperties) {
method New (line 17) | func (b DeepslateRedstoneOre) New(props BlockProperties) Block {
FILE: server/world/block/deepslateTileSlab.go
type DeepslateTileSlab (line 7) | type DeepslateTileSlab struct
method Encode (line 12) | func (b DeepslateTileSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b DeepslateTileSlab) New(props BlockProperties) Block {
FILE: server/world/block/deepslateTileStairs.go
type DeepslateTileStairs (line 7) | type DeepslateTileStairs struct
method Encode (line 14) | func (b DeepslateTileStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b DeepslateTileStairs) New(props BlockProperties) Block {
FILE: server/world/block/deepslateTileWall.go
type DeepslateTileWall (line 7) | type DeepslateTileWall struct
method Encode (line 16) | func (b DeepslateTileWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b DeepslateTileWall) New(props BlockProperties) Block {
FILE: server/world/block/deepslateTiles.go
type DeepslateTiles (line 3) | type DeepslateTiles struct
method Encode (line 6) | func (b DeepslateTiles) Encode() (string, BlockProperties) {
method New (line 10) | func (b DeepslateTiles) New(props BlockProperties) Block {
FILE: server/world/block/detectorRail.go
type DetectorRail (line 7) | type DetectorRail struct
method Encode (line 13) | func (b DetectorRail) Encode() (string, BlockProperties) {
method New (line 21) | func (b DetectorRail) New(props BlockProperties) Block {
FILE: server/world/block/diamondBlock.go
type DiamondBlock (line 3) | type DiamondBlock struct
method Encode (line 6) | func (b DiamondBlock) Encode() (string, BlockProperties) {
method New (line 10) | func (b DiamondBlock) New(props BlockProperties) Block {
FILE: server/world/block/diamondOre.go
type DiamondOre (line 3) | type DiamondOre struct
method Encode (line 6) | func (b DiamondOre) Encode() (string, BlockProperties) {
method New (line 10) | func (b DiamondOre) New(props BlockProperties) Block {
FILE: server/world/block/diorite.go
type Diorite (line 3) | type Diorite struct
method Encode (line 6) | func (b Diorite) Encode() (string, BlockProperties) {
method New (line 10) | func (b Diorite) New(props BlockProperties) Block {
FILE: server/world/block/dioriteSlab.go
type DioriteSlab (line 7) | type DioriteSlab struct
method Encode (line 12) | func (b DioriteSlab) Encode() (string, BlockProperties) {
method New (line 19) | func (b DioriteSlab) New(props BlockProperties) Block {
FILE: server/world/block/dioriteStairs.go
type DioriteStairs (line 7) | type DioriteStairs struct
method Encode (line 14) | func (b DioriteStairs) Encode() (string, BlockProperties) {
method New (line 23) | func (b DioriteStairs) New(props BlockProperties) Block {
FILE: server/world/block/dioriteWall.go
type DioriteWall (line 7) | type DioriteWall struct
method Encode (line 16) | func (b DioriteWall) Encode() (string, BlockProperties) {
method New (line 27) | func (b DioriteWall) New(props BlockProperties) Block {
FILE: server/world/block/dirt.go
type Dirt (line 3) | type Dirt struct
method Encode (line 6) | func (b Dirt) Encode() (string, BlockProperties) {
method New (line 10) | func (b Dirt) New(props BlockProperties) Block {
FILE: server/world/block/dirtPath.go
type DirtPath (line 3) | type DirtPath struct
method Encode (line 6) | func (b DirtPath) Encode() (string, BlockProperties) {
method New (line 10) | func (b DirtPath) New(props BlockProperties) Block {
FILE: server/world/block/dispenser.go
type Dispenser (line 9) | type Dispenser struct
method Encode (line 14) | func (b Dispenser) Encode() (string, BlockProperties) {
method New (line 21) | func (b Dispenser) New(props BlockProperties) Block {
method BlockEntity (line 28) | func (b Dispenser) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {
FILE: server/world/block/dragonEgg.go
type DragonEgg (line 3) | type DragonEgg struct
method Encode (line 6) | func (b DragonEgg) Encode() (string, BlockProperties) {
method New (line 10) | func (b DragonEgg) New(props BlockProperties) Block {
FILE: server/world/block/dragonHead.go
type DragonHead (line 7) | type DragonHead struct
method Encode (line 12) | func (b DragonHead) Encode() (string, BlockProperties) {
method New (line 19) | func (b DragonHead) New(props BlockProperties) Block {
FILE: server/world/block/dragonWallHead.go
type DragonWallHead (line 7) | type DragonWallHead struct
method Encode (line 12) | func (b DragonWallHead) Encode() (string, BlockProperties) {
method New (line 19) | func (b DragonWallHead) New(props BlockProperties) Block {
FILE: server/world/block/driedKelpBlock.go
type DriedKelpBlock (line 3) | type DriedKelpBlock struct
method Encode (line 6
Condensed preview — 1356 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,686K chars).
[
{
"path": ".github/workflows/go.yml",
"chars": 1766,
"preview": "name: Build Zeppelin\r\n\r\non:\r\n push:\r\n pull_request:\r\n workflow_dispatch:\r\n release:\r\n types: [published]\r\n\r\njobs:"
},
{
"path": "LICENSE",
"chars": 11558,
"preview": " Apache License\r\n Version 2.0, January 2004\r\n "
},
{
"path": "commands/commands.go",
"chars": 149,
"preview": "package commands\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/server/command\"\r\n\r\nvar Commands = []command.Command{\r\n\tmem, d"
},
{
"path": "commands/debug.go",
"chars": 1760,
"preview": "package commands\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/server/player\"\n\t\"math\"\n\n\t\"github.com/zeppelinmc/zeppelin/pro"
},
{
"path": "commands/gc.go",
"chars": 394,
"preview": "package commands\r\n\r\nimport (\r\n\t\"runtime\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n\t\"github.com/zeppelinmc/zep"
},
{
"path": "commands/mem.go",
"chars": 884,
"preview": "package commands\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"runtime\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\r\n\t\"github."
},
{
"path": "commands/tick.go",
"chars": 1000,
"preview": "package commands\n\nimport (\n\t\"time\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\t\"github.com/zeppelinmc/zeppelin/ser"
},
{
"path": "commands/time.go",
"chars": 659,
"preview": "package commands\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n)\n\nvar timecmd = command.Command{\n\tNode: com"
},
{
"path": "go.mod",
"chars": 728,
"preview": "module github.com/zeppelinmc/zeppelin\n\ngo 1.23\n\nrequire (\n\tgithub.com/fatih/color v1.17.0\n\tgithub.com/google/uuid v1.6.0"
},
{
"path": "go.sum",
"chars": 33743,
"preview": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1"
},
{
"path": "main.go",
"chars": 2657,
"preview": "package main\n\nimport (\n\t_ \"embed\"\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"math/rand\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/d"
},
{
"path": "properties/decode.go",
"chars": 2766,
"preview": "// Package properties provides parsing of .properties files\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\""
},
{
"path": "properties/encode.go",
"chars": 1787,
"preview": "package properties\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// Marshal encodes the properties file\nfunc"
},
{
"path": "properties/properties.go",
"chars": 4879,
"preview": "// Package properties provides encoding and decoding of .properties files\n\npackage properties\n\ntype formatter string\n\nfu"
},
{
"path": "protocol/nbt/decoder.go",
"chars": 28089,
"preview": "package nbt\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"math\"\r\n\t\"reflect\"\r\n\t\"strings\"\r\n\t\"sync\"\r\n\t\"unsafe\"\r\n)\r\n\r\nvar valueMap"
},
{
"path": "protocol/nbt/encoder.go",
"chars": 16228,
"preview": "package nbt\r\n\r\nimport (\r\n\t\"encoding/binary\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"math\"\r\n\t\"reflect\"\r\n\t\"strings\"\r\n\t\"unsafe\"\r\n)\r\n\r\ntype Encode"
},
{
"path": "protocol/nbt/qnbt/abi.go",
"chars": 3196,
"preview": "package qnbt\r\n\r\nimport (\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\ntype name struct {\r\n\tBytes *byte\r\n}\r\n\r\nfunc (n n"
},
{
"path": "protocol/nbt/qnbt/buffer.go",
"chars": 1466,
"preview": "package qnbt\r\n\r\nimport (\r\n\t\"io\"\r\n\t\"unsafe\"\r\n)\r\n\r\ntype bufferedReader struct {\r\n\tsrc io.Reader\r\n\tbuf []byte\r\n\r\n\tr, w int\r"
},
{
"path": "protocol/nbt/qnbt/decode.go",
"chars": 5128,
"preview": "// deprecated: :(\r\npackage qnbt\r\n\r\nimport (\r\n\t\"errors\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"sync\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r"
},
{
"path": "protocol/nbt/qnbt/list.go",
"chars": 5248,
"preview": "package qnbt\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"strconv\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\nfunc (d *Decoder) decodeList"
},
{
"path": "protocol/nbt/qnbt/malloc.go",
"chars": 191,
"preview": "package qnbt\r\n\r\nimport (\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\n//go:linkname mallocgc runtime.mallocgc\r\nfunc ma"
},
{
"path": "protocol/nbt/qnbt/map.go",
"chars": 523,
"preview": "package qnbt\r\n\r\nimport \"fmt\"\r\n\r\nfunc (d *Decoder) decodeMapString(m map[string]string) error {\r\n\tvar name string\r\n\tfor {"
},
{
"path": "protocol/nbt/qnbt/primitive.go",
"chars": 5441,
"preview": "package qnbt\r\n\r\nimport (\r\n\t\"encoding/binary\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt/qnbt/native\"\r\n)"
},
{
"path": "protocol/nbt/qnbt/qnbt.go",
"chars": 235,
"preview": "// qNBT is a very efficient NBT decoder!\r\n// Caveats: does not work with []any, map[string]any or maps in general (excep"
},
{
"path": "protocol/nbt/qnbt/struct.go",
"chars": 8834,
"preview": "package qnbt\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"strings\"\r\n\t\"sync\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\nvar structs = sync."
},
{
"path": "protocol/nbt/staticReader.go",
"chars": 8196,
"preview": "package nbt\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"unsafe\"\r\n)\r\n\r\n/*\r\nReader is an NBT decoder that uses no reflection. it should "
},
{
"path": "protocol/net/authentication.go",
"chars": 1803,
"preview": "package net\n\nimport (\n\t\"crypto/sha1\"\n\t\"crypto/x509\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"uns"
},
{
"path": "protocol/net/cfb8/cfb8.go",
"chars": 1508,
"preview": "package cfb8\r\n\r\nimport \"crypto/cipher\"\r\n\r\n// CFB stream with 8 bit segment size\r\n// See http://csrc.nist.gov/publication"
},
{
"path": "protocol/net/config.go",
"chars": 1090,
"preview": "package net\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"net\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/status\"\n"
},
{
"path": "protocol/net/conn.go",
"chars": 13768,
"preview": "package net\n\nimport (\n\t\"bytes\"\n\t\"crypto/md5\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"unicode/utf"
},
{
"path": "protocol/net/encryption.go",
"chars": 1542,
"preview": "package net\n\nimport (\n\t\"crypto/aes\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"fmt\"\n\n\t\"github.com/zeppelinmc/zeppelin"
},
{
"path": "protocol/net/io/buffers/buffers.go",
"chars": 244,
"preview": "package buffers\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"sync\"\r\n)\r\n\r\nvar Buffers = sync.Pool{\r\n\tNew: func() any {\r\n\t\treturn new(bytes.Bu"
},
{
"path": "protocol/net/io/compress/compress.go",
"chars": 1091,
"preview": "package compress\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"compress/gzip\"\r\n\t\"sync\"\r\n\r\n\t\"github.com/4kills/go-libdeflate/v2\"\r\n\t\"github.com"
},
{
"path": "protocol/net/io/compress/lz4.go",
"chars": 1685,
"preview": "package compress\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"encoding/binary\"\r\n\t\"fmt\"\r\n\r\n\t\"github.com/pierrec/lz4/v4\"\r\n)\r\n\r\n// Decompress a"
},
{
"path": "protocol/net/io/compress/zlib.go",
"chars": 1882,
"preview": "package compress\r\n\r\nimport (\r\n\t\"bytes\"\r\n\r\n\t\"github.com/4kills/go-libdeflate/v2\"\r\n)\r\n\r\n// Decompress zlib. If decompresse"
},
{
"path": "protocol/net/io/encoding/encoding.go",
"chars": 3354,
"preview": "// Package encoding provides encoding and decoding of minecraft data types\npackage encoding\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"uns"
},
{
"path": "protocol/net/io/encoding/reader.go",
"chars": 5298,
"preview": "package encoding\r\n\r\nimport (\r\n\t\"encoding/json\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"math\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/pr"
},
{
"path": "protocol/net/io/encoding/writer.go",
"chars": 4065,
"preview": "package encoding\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"encoding/json\"\r\n\t\"fmt\"\r\n\t\"math\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin"
},
{
"path": "protocol/net/listener.go",
"chars": 1463,
"preview": "// Package net provides tools for creating minecraft servers, such as packet sending, registry data, encryption, authent"
},
{
"path": "protocol/net/metadata/metadata.go",
"chars": 3590,
"preview": "package metadata\n\nimport (\n\t\"github.com/google/uuid\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\n\t\"github.com/ze"
},
{
"path": "protocol/net/metadata/new.go",
"chars": 1210,
"preview": "package metadata\n\n// Player returns the default player metadata object\nfunc Player(health float32) Metadata {\n\treturn Me"
},
{
"path": "protocol/net/packet/configuration/clientInfo.go",
"chars": 1930,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tChatModeEn"
},
{
"path": "protocol/net/packet/configuration/cookie.go",
"chars": 414,
"preview": "package configuration\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\r\n\r\n//clientbound\r\nconst Packe"
},
{
"path": "protocol/net/packet/configuration/disconnect.go",
"chars": 501,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/z"
},
{
"path": "protocol/net/packet/configuration/finish.go",
"chars": 399,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n)\r\n\r\nconst (\r\n\t//clientbound\r\n"
},
{
"path": "protocol/net/packet/configuration/keepAlive.go",
"chars": 429,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst "
},
{
"path": "protocol/net/packet/configuration/ping.go",
"chars": 398,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst "
},
{
"path": "protocol/net/packet/configuration/plugin.go",
"chars": 780,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst "
},
{
"path": "protocol/net/packet/configuration/registryData.go",
"chars": 1986,
"preview": "package configuration\r\n\r\nimport (\r\n\t\"reflect\"\r\n\t\"sync\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\""
},
{
"path": "protocol/net/packet/configuration/resetChat.go",
"chars": 232,
"preview": "package configuration\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n\r\n//clientbound\r\nconst PacketIdRes"
},
{
"path": "protocol/net/packet/handshake/handshake.go",
"chars": 1007,
"preview": "package handshake\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tStatus = iota "
},
{
"path": "protocol/net/packet/login/cookie.go",
"chars": 1066,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst Packet"
},
{
"path": "protocol/net/packet/login/disconnect.go",
"chars": 501,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/"
},
{
"path": "protocol/net/packet/login/encryption.go",
"chars": 1439,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst PacketId"
},
{
"path": "protocol/net/packet/login/loginStart.go",
"chars": 599,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n/"
},
{
"path": "protocol/net/packet/login/loginSuccess.go",
"chars": 1853,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nt"
},
{
"path": "protocol/net/packet/login/plugin.go",
"chars": 1605,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst Packet"
},
{
"path": "protocol/net/packet/login/setCompression.go",
"chars": 462,
"preview": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst Packet"
},
{
"path": "protocol/net/packet/packet.go",
"chars": 998,
"preview": "package packet\n\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n\n// Encodeable is a clientbound packet\n"
},
{
"path": "protocol/net/packet/play/acknowledgeBlockChange.go",
"chars": 530,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/blockAction.go",
"chars": 959,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/blockEntityData.go",
"chars": 707,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/"
},
{
"path": "protocol/net/packet/play/blockUpdate.go",
"chars": 614,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/bundleDelimiter.go",
"chars": 261,
"preview": "package play\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n\r\n// clientbound\r\nconst PacketIdBundleDelim"
},
{
"path": "protocol/net/packet/play/changeDifficulty.go",
"chars": 616,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/chatCommand.go",
"chars": 440,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/chatMessage.go",
"chars": 1453,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/chunkBatch.go",
"chars": 1152,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/chunkData.go",
"chars": 2546,
"preview": "package play\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n)\n\ntype BlockEntity struct {"
},
{
"path": "protocol/net/packet/play/clickContainer.go",
"chars": 1255,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/clientInfo.go",
"chars": 278,
"preview": "package play\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\r\n\r\n//serverbound\r\nconst Packet"
},
{
"path": "protocol/net/packet/play/closeContainer.go",
"chars": 457,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/commands.go",
"chars": 2613,
"preview": "package play\r\n\r\nimport (\r\n\t\"fmt\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Node struct {\r"
},
{
"path": "protocol/net/packet/play/confirmTeleport.go",
"chars": 518,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/damageEvent.go",
"chars": 1175,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/deleteMessage.go",
"chars": 726,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/disconnect.go",
"chars": 492,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/disguisedChatMessage.go",
"chars": 1402,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/entityAnimation.go",
"chars": 768,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/entityEvent.go",
"chars": 595,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/entitySoundEffect.go",
"chars": 1359,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/gameEvent.go",
"chars": 961,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tGameEventNoRespawnB"
},
{
"path": "protocol/net/packet/play/hurtAnimation.go",
"chars": 595,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/interact.go",
"chars": 1703,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/keepAlive.go",
"chars": 865,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/login.go",
"chars": 4064,
"preview": "package play\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n)\n\n// clientbound\nconst Packet"
},
{
"path": "protocol/net/packet/play/openScreen.go",
"chars": 833,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/playerAbilitiesCB.go",
"chars": 930,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/playerAbilitiesSB.go",
"chars": 518,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/playerChatMessage.go",
"chars": 2632,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"githu"
},
{
"path": "protocol/net/packet/play/playerCommand.go",
"chars": 1033,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/playerInfoRemove.go",
"chars": 931,
"preview": "package play\r\n\r\nimport (\r\n\t\"fmt\"\r\n\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding"
},
{
"path": "protocol/net/packet/play/playerInfoUpdate.go",
"chars": 3061,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"githu"
},
{
"path": "protocol/net/packet/play/playerSession.go",
"chars": 948,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n//"
},
{
"path": "protocol/net/packet/play/plugin.go",
"chars": 925,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/removeEntities.go",
"chars": 864,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/serverData.go",
"chars": 861,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/serverLinks.go",
"chars": 1270,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/setCenterChunk.go",
"chars": 590,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setContainerContent.go",
"chars": 910,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/setCreativeModeSlot.go",
"chars": 696,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/setDefaultSpawnPosition.go",
"chars": 666,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setEntityMetadata.go",
"chars": 6487,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/setEntityVelocity.go",
"chars": 843,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setHeadRotation.go",
"chars": 612,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setHeldItemCB.go",
"chars": 491,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setHeldItemSB.go",
"chars": 494,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setPlayerOnGround.go",
"chars": 473,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setPlayerPosition.go",
"chars": 822,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setPlayerPositionAndRotation.go",
"chars": 1144,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setPlayerRotation.go",
"chars": 717,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/setTickingState.go",
"chars": 449,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/signedChatCommand.go",
"chars": 1807,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/soundEffect.go",
"chars": 1753,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/spawnEntity.go",
"chars": 2248,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nco"
},
{
"path": "protocol/net/packet/play/stepTick.go",
"chars": 336,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/swingArm.go",
"chars": 470,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/synchronizePlayerPosition.go",
"chars": 1424,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/systemChatMessage.go",
"chars": 691,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/packet/play/updateEntityPosition.go",
"chars": 1076,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/updateEntityPositionAndRotation.go",
"chars": 1414,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/updateEntityRotation.go",
"chars": 906,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/updateRecipeBook.go",
"chars": 2113,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tUpdateRecipeBookAct"
},
{
"path": "protocol/net/packet/play/updateSectionBlocks.go",
"chars": 1659,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/updateTags.go",
"chars": 1797,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/updateTime.go",
"chars": 580,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/play/useItemOn.go",
"chars": 1735,
"preview": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketI"
},
{
"path": "protocol/net/packet/status/ping.go",
"chars": 341,
"preview": "package status\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Ping struct {\r\n\tPayloa"
},
{
"path": "protocol/net/packet/status/status.go",
"chars": 1977,
"preview": "package status\r\n\r\nimport (\r\n\t\"encoding/base64\"\r\n\t\"encoding/json\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/enc"
},
{
"path": "protocol/net/pool.go",
"chars": 3208,
"preview": "package net\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n\t\"github.com/zeppelinmc/zeppelin/protoco"
},
{
"path": "protocol/net/registry/embed.go",
"chars": 149324,
"preview": "package registry\n\nvar Registries = map[string]interface{}{\"minecraft:banner_pattern\": map[string]struct {\n\tAssetId "
},
{
"path": "protocol/net/registry/registry.go",
"chars": 14711,
"preview": "package registry\n\nimport (\n\t_ \"embed\"\n)\n\n// This packet contains registries that are sent to the client. Because Go map"
},
{
"path": "protocol/net/slot/comp_dec.go",
"chars": 1059,
"preview": "package slot\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/p"
},
{
"path": "protocol/net/slot/slot.go",
"chars": 2862,
"preview": "package slot\r\n\r\nimport (\r\n\t\"slices\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Slot struct"
},
{
"path": "protocol/net/tags/tags.go",
"chars": 50554,
"preview": "package tags\n\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\nvar Tags = &play.UpdateTags{Tags: map[st"
},
{
"path": "protocol/text/builder.go",
"chars": 1135,
"preview": "package text\r\n\r\nfunc New() TextComponent {\r\n\treturn TextComponent{}\r\n}\r\n\r\nfunc (t TextComponent) WithColor(c string) Tex"
},
{
"path": "protocol/text/color.go",
"chars": 702,
"preview": "package text\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"image/color\"\r\n)\r\n\r\n// colors\r\nconst (\r\n\tBlack = \"black\"\r\n\tDarkBlue = \"dark_"
},
{
"path": "protocol/text/text.go",
"chars": 5867,
"preview": "// Package text provides encoding and decoding of text components\npackage text\n\nimport \"fmt\"\n\nconst (\n\tTypeText "
},
{
"path": "readme.md",
"chars": 1579,
"preview": "\r\n# Zeppelin\r\n\r\nHi"
},
{
"path": "server/command/builder.go",
"chars": 2328,
"preview": "package command\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\r\n)\r\n\r\nconst (\r\n\tBool = iota\r\n\tFl"
},
{
"path": "server/command/command.go",
"chars": 752,
"preview": "// Package command provides utilities for handling and registering commands\npackage command\n\nimport (\n\t\"github.com/zeppe"
},
{
"path": "server/command/graph.go",
"chars": 1874,
"preview": "package command\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\r\n\r\nfunc (mgr *Manager) Encode() *pla"
},
{
"path": "server/command/manager.go",
"chars": 1665,
"preview": "package command\n\nimport (\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/ze"
},
{
"path": "server/container/container.go",
"chars": 2563,
"preview": "package container\r\n\r\nimport (\r\n\t\"fmt\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\r\n\t\"github.com/zeppelinmc/ze"
},
{
"path": "server/entity/entity.go",
"chars": 5907,
"preview": "package entity\n\nimport (\n\t\"maps\"\n\t\"math\"\n\t\"slices\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\ta \"github.com/zeppelinmc/zeppelin/util/atomi"
},
{
"path": "server/entity/levelEntity.go",
"chars": 623,
"preview": "package entity\n\nimport \"github.com/zeppelinmc/zeppelin/server/world/level/uuid\"\n\ntype LevelEntity struct {\n\tAir int16\n\n\t"
},
{
"path": "server/player/chunks.go",
"chars": 1386,
"preview": "package player\n\nimport (\n\t\"bytes\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\n\t\"github.com/zeppelinmc/zepp"
},
{
"path": "server/player/conn.go",
"chars": 3225,
"preview": "package player\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\n\t\"github.com/zeppelinmc/zeppelin/protocol"
},
{
"path": "server/player/handler_chat_command.go",
"chars": 590,
"preview": "package player\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/protocol/net\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/pa"
},
{
"path": "server/player/player.go",
"chars": 6482,
"preview": "package player\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net\"\n\t\"g"
},
{
"path": "server/player/playerlist.go",
"chars": 1796,
"preview": "package player\n\nimport (\n\t\"github.com/google/uuid\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.c"
},
{
"path": "server/player/state/list/playerlist.go",
"chars": 401,
"preview": "// Package list provides parsing of playerlist files (whitelist.json, ops.json etc)\n\npackage list\n\ntype WhitelistPlayer "
},
{
"path": "server/player/state/playerEntity.go",
"chars": 3320,
"preview": "package state\n\nimport (\n\ta \"sync/atomic\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/metadata\"\n\t\"github.com/zeppelinm"
},
{
"path": "server/player/state/playerEntityManager.go",
"chars": 845,
"preview": "package state\n\nimport (\n\t\"sync\"\n\n\t\"github.com/google/uuid\"\n)\n\n// the player cache is used when saving the world playerda"
},
{
"path": "server/plugin.go",
"chars": 1289,
"preview": "package server\r\n\r\nimport (\r\n\t\"io/fs\"\r\n\t\"os\"\r\n\t\"plugin\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\r\n)\r\n\r\ntype Plugin s"
},
{
"path": "server/registry/activity.go",
"chars": 812,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Activity = Registry{\n\tDefault: \"\","
},
{
"path": "server/registry/armor_material.go",
"chars": 366,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ArmorMaterial = Registry{\n\tDefault"
},
{
"path": "server/registry/attribute.go",
"chars": 1484,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Attribute = Registry{\n\tDefault: \"\""
},
{
"path": "server/registry/block.go",
"chars": 38728,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Block = Registry{\n\tDefault: \"minec"
},
{
"path": "server/registry/block_entity_type.go",
"chars": 1463,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar BlockEntityType = Registry{\n\tDefau"
},
{
"path": "server/registry/block_predicate_type.go",
"chars": 556,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar BlockPredicateType = Registry{\n\tDe"
},
{
"path": "server/registry/block_type.go",
"chars": 7676,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar BlockType = Registry{\n\tDefault: \"\""
},
{
"path": "server/registry/cat_variant.go",
"chars": 443,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CatVariant = Registry{\n\tDefault: \""
},
{
"path": "server/registry/chunk_status.go",
"chars": 506,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ChunkStatus = Registry{\n\tDefault: "
},
{
"path": "server/registry/command_argument_type.go",
"chars": 2262,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CommandArgumentType = Registry{\n\tD"
},
{
"path": "server/registry/creative_mode_tab.go",
"chars": 597,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CreativeModeTab = Registry{\n\tDefau"
},
{
"path": "server/registry/custom_stat.go",
"chars": 2777,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CustomStat = Registry{\n\tDefault: \""
},
{
"path": "server/registry/data_component_type.go",
"chars": 2041,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar DataComponentType = Registry{\n\tDef"
},
{
"path": "server/registry/decorated_pot_pattern.go",
"chars": 774,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar DecoratedPotPattern = Registry{\n\tD"
},
{
"path": "server/registry/enchantment_effect_component_type.go",
"chars": 1253,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentEffectComponentType = R"
},
{
"path": "server/registry/enchantment_entity_effect_type.go",
"chars": 577,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentEntityEffectType = Regi"
},
{
"path": "server/registry/enchantment_level_based_value_type.go",
"chars": 312,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentLevelBasedValueType = R"
},
{
"path": "server/registry/enchantment_location_based_effect_type.go",
"chars": 613,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentLocationBasedEffectType"
},
{
"path": "server/registry/enchantment_provider_type.go",
"chars": 262,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentProviderType = Registry"
},
{
"path": "server/registry/enchantment_value_effect_type.go",
"chars": 302,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentValueEffectType = Regis"
},
{
"path": "server/registry/entity_sub_predicate_type.go",
"chars": 661,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EntitySubPredicateType = Registry{"
},
{
"path": "server/registry/entity_type.go",
"chars": 3943,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EntityType = Registry{\n\tDefault: \""
},
{
"path": "server/registry/float_provider_type.go",
"chars": 277,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar FloatProviderType = Registry{\n\tDef"
},
{
"path": "server/registry/fluid.go",
"chars": 300,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Fluid = Registry{\n\tDefault: \"minec"
},
{
"path": "server/registry/frog_variant.go",
"chars": 231,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar FrogVariant = Registry{\n\tDefault: "
},
{
"path": "server/registry/game_event.go",
"chars": 2039,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar GameEvent = Registry{\n\tDefault: \"m"
},
{
"path": "server/registry/height_provider_type.go",
"chars": 352,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar HeightProviderType = Registry{\n\tDe"
},
{
"path": "server/registry/instrument.go",
"chars": 426,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Instrument = Registry{\n\tDefault: \""
},
{
"path": "server/registry/int_provider_type.go",
"chars": 340,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar IntProviderType = Registry{\n\tDefau"
},
{
"path": "server/registry/item.go",
"chars": 48344,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Item = Registry{\n\tDefault: \"minecr"
},
{
"path": "server/registry/item_sub_predicate_type.go",
"chars": 630,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ItemSubPredicateType = Registry{\n\t"
},
{
"path": "server/registry/loot_condition_type.go",
"chars": 810,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootConditionType = Registry{\n\tDef"
},
{
"path": "server/registry/loot_function_type.go",
"chars": 1525,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootFunctionType = Registry{\n\tDefa"
},
{
"path": "server/registry/loot_nbt_provider_type.go",
"chars": 217,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootNbtProviderType = Registry{\n\tD"
},
{
"path": "server/registry/loot_number_provider_type.go",
"chars": 334,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootNumberProviderType = Registry{"
},
{
"path": "server/registry/loot_pool_entry_type.go",
"chars": 369,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootPoolEntryType = Registry{\n\tDef"
},
{
"path": "server/registry/loot_score_provider_type.go",
"chars": 217,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootScoreProviderType = Registry{\n"
},
{
"path": "server/registry/map_decoration_type.go",
"chars": 1261,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar MapDecorationType = Registry{\n\tDef"
},
{
"path": "server/registry/memory_module_type.go",
"chars": 4166,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar MemoryModuleType = Registry{\n\tDefa"
},
{
"path": "server/registry/menu.go",
"chars": 879,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Menu = Registry{\n\tDefault: \"\",\n\tEn"
},
{
"path": "server/registry/mob_effect.go",
"chars": 1305,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar MobEffect = Registry{\n\tDefault: \"\""
},
{
"path": "server/registry/number_format_type.go",
"chars": 235,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar NumberFormatType = Registry{\n\tDefa"
},
{
"path": "server/registry/particle_type.go",
"chars": 3580,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ParticleType = Registry{\n\tDefault:"
},
{
"path": "server/registry/point_of_interest_type.go",
"chars": 726,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar PointOfInterestType = Registry{\n\tD"
},
{
"path": "server/registry/pos_rule_test.go",
"chars": 258,
"preview": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar PosRuleTest = Registry{\n\tDefault: "
}
]
// ... and 1156 more files (download for full content)
About this extraction
This page contains the full source code of the ZeppelinMC/Zeppelin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1356 files (1.4 MB), approximately 457.9k tokens, and a symbol index with 4870 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.