diff options
| author | raven <citrons@mondecitronne.com> | 2026-03-25 10:37:41 -0500 |
|---|---|---|
| committer | raven <citrons@mondecitronne.com> | 2026-03-25 10:42:21 -0500 |
| commit | 0401572b269d50499a0ae091b9acd474647c2c3e (patch) | |
| tree | b52bf5e51f6a1695f6b75f7aadcddf90d4ea0461 /server/block_def.go | |
| parent | 80c73873aa09f7f4cc825aa65269b7650993574c (diff) | |
custom block definitions
Diffstat (limited to 'server/block_def.go')
| -rw-r--r-- | server/block_def.go | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/server/block_def.go b/server/block_def.go new file mode 100644 index 0000000..3b0474a --- /dev/null +++ b/server/block_def.go @@ -0,0 +1,142 @@ +package server + +import ( + "iter" + "git.citrons.xyz/metronode/classic" +) + +type blockType int16 + +const ( + walkThrough = classic.WalkThrough + swimThrough = classic.SwimThrough + solid = classic.Solid + partiallySlippery = classic.PartiallySlippery + fullySlippery = classic.FullySlippery + water = classic.Water + lava = classic.Lava + rope = classic.Rope +) +type blockSolidity byte + +const ( + noSound = classic.NoSound + woodSound = classic.WoodSound + gravelSound = classic.GravelSound + grassSound = classic.GrassSound + stoneSound = classic.StoneSound + metalSound = classic.MetalSound + glassSound = classic.GlassSound + woolSound = classic.WoolSound + sandSound = classic.SandSound + snowSound = classic.SnowSound +) +type blockSound byte + +const ( + opaque = classic.Opaque + transparentGlass = classic.TransparentGlass + transparentLeaves = classic.TransparentLeaves + translucent = classic.Translucent + invisible = classic.Invisible +) +type blockOpacity byte + +const ( + cubeShape = iota + spriteShape + cuboidShape +) +type blockShape byte + +type textureId int +const fillTextures = -1 + +type blockDef struct { + Name string + Solidity blockSolidity + MovementSpeed byte + Textures [6]textureId + TransmitsLight bool + WalkSound blockSound + FullBright bool + Shape blockShape + Min [3]byte + Max [3]byte + Opacity blockOpacity + FogDensity byte + FogColor [3]byte +} + +func getBlockDefPackets() iter.Seq[classic.Packet] { + return func(yield func(classic.Packet) bool) { + for id, def := range blockDefinitions { + var packet classic.Packet + var ( + transmitsLight byte + fullBright byte + ) + if def.TransmitsLight { + transmitsLight = 1 + } + if def.FullBright { + fullBright = 1 + } + if def.Shape != spriteShape { + var (i int; texture textureId) + for i, texture = range def.Textures { + if texture == fillTextures { + break + } + } + if texture == fillTextures { + for i = i; i < len(def.Textures); i++ { + def.Textures[i] = def.Textures[i - 1] + } + } + if def.Shape == cubeShape { + def.Min = [3]byte {0, 0, 0} + def.Max = [3]byte {16, 16, 16} + } + packet = &classic.DefineBlockExt { + BlockId: byte(id), + Name: classic.PadString(def.Name), + Solidity: byte(def.Solidity), + MovementSpeed: def.MovementSpeed, + TopTextureId: byte(def.Textures[0]), + LeftTextureId: byte(def.Textures[1]), + RightTextureId: byte(def.Textures[2]), + FrontTextureId: byte(def.Textures[3]), + BackTextureId: byte(def.Textures[4]), + BottomTextureId: byte(def.Textures[5]), + TransmitsLight: transmitsLight, + WalkSound: byte(def.WalkSound), + FullBright: fullBright, + Min: def.Min, + Max: def.Max, + BlockDraw: byte(def.Opacity), + FogDensity: def.FogDensity, + FogColor: def.FogColor, + } + } else { + packet = &classic.DefineBlock { + BlockId: byte(id), + Name: classic.PadString(def.Name), + Solidity: byte(def.Solidity), + MovementSpeed: def.MovementSpeed, + SideTextureId: byte(def.Textures[0]), + TransmitsLight: transmitsLight, + WalkSound: byte(def.WalkSound), + FullBright: fullBright, + Shape: 0, + BlockDraw: byte(def.Opacity), + FogDensity: def.FogDensity, + FogColor: def.FogColor, + } + } + if !yield(packet) { + return + } + } + } +} |
