101 lines
2.1 KiB
Go
101 lines
2.1 KiB
Go
package path
|
|
|
|
import (
|
|
"github.com/Tnze/go-mc/bot/world"
|
|
"github.com/Tnze/go-mc/data/block"
|
|
)
|
|
|
|
var (
|
|
safeStepBlocks = make(map[world.BlockStatus]struct{}, 1024)
|
|
stepBlocks = []block.Block{
|
|
block.Stone,
|
|
block.Granite,
|
|
block.PolishedGranite,
|
|
block.Diorite,
|
|
block.PolishedDiorite,
|
|
block.Andesite,
|
|
block.PolishedAndesite,
|
|
block.GrassBlock,
|
|
block.Dirt,
|
|
block.CoarseDirt,
|
|
block.Cobblestone,
|
|
block.OakPlanks,
|
|
block.SprucePlanks,
|
|
block.BirchPlanks,
|
|
block.JunglePlanks,
|
|
block.AcaciaPlanks,
|
|
block.DarkOakPlanks,
|
|
block.Bedrock,
|
|
block.GoldOre,
|
|
block.IronOre,
|
|
block.CoalOre,
|
|
block.Glass,
|
|
block.LapisOre,
|
|
block.Sandstone,
|
|
block.RedstoneOre,
|
|
}
|
|
|
|
safeWalkBlocks = make(map[world.BlockStatus]struct{}, 128)
|
|
walkBlocks = []block.Block{
|
|
block.Air,
|
|
block.CaveAir,
|
|
block.Grass,
|
|
block.Torch,
|
|
block.OakSign,
|
|
block.SpruceSign,
|
|
block.BirchSign,
|
|
block.AcaciaSign,
|
|
block.JungleSign,
|
|
block.DarkOakSign,
|
|
block.OakWallSign,
|
|
block.SpruceWallSign,
|
|
block.BirchWallSign,
|
|
block.AcaciaWallSign,
|
|
block.JungleWallSign,
|
|
block.DarkOakWallSign,
|
|
block.Cornflower,
|
|
block.TallGrass,
|
|
}
|
|
|
|
additionalCostBlocks = map[*block.Block]int{
|
|
&block.Rail: 120,
|
|
&block.PoweredRail: 200,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
for _, b := range stepBlocks {
|
|
if b.MinStateID == b.MaxStateID {
|
|
safeStepBlocks[world.BlockStatus(b.MinStateID)] = struct{}{}
|
|
} else {
|
|
for i := b.MinStateID; i <= b.MaxStateID; i++ {
|
|
safeStepBlocks[world.BlockStatus(i)] = struct{}{}
|
|
}
|
|
}
|
|
}
|
|
|
|
for _, b := range walkBlocks {
|
|
if b.MinStateID == b.MaxStateID {
|
|
safeWalkBlocks[world.BlockStatus(b.MinStateID)] = struct{}{}
|
|
} else {
|
|
for i := b.MinStateID; i <= b.MaxStateID; i++ {
|
|
safeWalkBlocks[world.BlockStatus(i)] = struct{}{}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func SteppableBlock(bID world.BlockStatus) bool {
|
|
_, ok := safeStepBlocks[bID]
|
|
return ok
|
|
}
|
|
|
|
func AirLikeBlock(bID world.BlockStatus) bool {
|
|
_, ok := safeWalkBlocks[bID]
|
|
return ok
|
|
}
|
|
|
|
func IsLadder(bID world.BlockStatus) bool {
|
|
return uint32(bID) >= block.Ladder.MinStateID && uint32(bID) <= block.Ladder.MaxStateID
|
|
}
|