26 Commits
Author SHA1 Message Date
adman 69e9857bad Merge remote-tracking branch 'gitlab/master'
Go / build (push) Successful in 1m9s
2026-08-17 18:12:52 +02:00
adman d0aec490cc remove binary test files 2026-08-17 18:08:49 +02:00
adman a01cb08672 Merge remote-tracking branch 'origin/master' 2026-08-17 18:08:08 +02:00
adman 326affe364 add version flag to packet inspector 2026-08-17 18:07:51 +02:00
OpenCode 1b2552492b remove binary testdata and fuzz corpus; restore regression tests
Go / build (push) Successful in 39s
2026-08-06 15:54:37 +02:00
OpenCode 44ec148be4 remove .gitattributes and LFS, drop large replay testdata
Go / build (push) Successful in 1m1s
2026-08-06 15:52:07 +02:00
OpenCode 78442c5c68 migrate: move module path to git.anygate.cloud/anygatecloud/strom
Go / build (push) Failing after 9s
2026-08-06 15:43:20 +02:00
OpenCode ac12f5c93b chore: sync all proto_generated versions
Go / build (push) Failing after 50s
2026-08-06 15:20:42 +02:00
OpenCode e58499ed09 fix: correct bitfield decoder using mask extraction, fix command_node
- Switch bitfield decoder from shift-based to mask-based extraction (var>>pos & mask)
  fixes non-power-of-2 bitfields like 6-bit command_node flags
- Fix MultiTypeFix to handle CaseExprTypeOnlyNumber/OnlyBool variants
- Update minecraft-data command_node bitfield order for all 1.21.8+ versions
  to LSB-first convention (matches reverse encoder/decoder)
- Implement SwitchDecoder for extraNodeData via compareTo visitor
- DeclareCommands now decodes successfully (was EOF)
- Add 6 regression tests (entity_equipment, metadata, recipes, commands)
2026-08-05 22:29:08 +02:00
OpenCode f4c2762881 fix: update 26.2 SlotDisplay mapper with 3 new types from decompiled source
- Add with_any_potion (id 2), only_with_component (id 3), dyed (id 7)
- Shift existing IDs: item 2→4, item_stack 3→5, tag 4→6,
  smithing_trim 5→8, with_remainder 6→9, composite 7→10
- RecipeBookAdd now decodes successfully (was index not found)
- Verified against decompiled client jar via SlotDisplays.bootstrap()
2026-08-05 21:19:07 +02:00
OpenCode 53d366ae53 fix: implement IDSet (registryEntryHolderSet) decoder/encoder
- Replace old broken RegistryEntryHolderSetDecoder with correct varint
  discriminator: id != 0 returns raw ID, id == 0 decodes string base
- Add RegistryEntryHolderSetEncoder using type switch (string/int32)
- Add NonErroringIndex to proto_base (zero-fallback index lookup)
- DeclareRecipes now fails with index not found (mapper) instead of to do
2026-08-05 19:53:46 +02:00
OpenCode 56ac8e154e test: add 4 decode regression tests for recently fixed packets
- entity_equipment 1.8 (nbt TAG_End fix)
- entity_equipment 26.2 (topBitSetTerminatedArray fix)
- entity_metadata 1.8 (entityMetadataLoop mergeCompareTo)
- spawn_entity_living 1.8 (entityMetadata mergeCompareTo)

These ensure packets that were previously broken stay working.
2026-08-05 19:36:38 +02:00
OpenCode ac1b298989 fix: implement topBitSetTerminatedArray, fix nbt TAG_End, fix entity_equipment
- Implement topBitSetTerminatedArray decoder/encoder with MSB continuation
- Fix nbt.Tag.Decode to handle TAG_End at root level (fixes 1.8 slot NBT)
- Remove 228 now-passing decode failure tests, keep 10 still failing
- EntityEquipment now works correctly across all versions
2026-08-05 19:30:18 +02:00
OpenCode 1d8f70c7fd test: fix decode failure tests - remove 200 now-passing, fix format strings
Generator fixes resolved most decode failures. 200 tests removed
(packets now decode correctly), 38 still test known failures.
Also fixed bytes.NewBuffer->bytes.NewReader and malformed format
strings in remaining old tests.
2026-08-05 19:05:03 +02:00
OpenCode 40b584dec4 test: add 26.2 replay decode failure tests from live capture
29 tests generated from live 26.2 clientbound capture via tcpflow.
6076 packets captured, 35 decode failures (0.58%), 0 serverbound failures.
2026-08-05 19:01:37 +02:00
OpenCode eb83786f9a fix: resolve parameterized $compareTo types and fix array count type
- VisitNameAndData: return any instead of named struct when mergeCompareTo
  resolves $compareTo, fixing field type mismatches for switch/container types
- ContainerCompareTo: traverse anon/bitfield fields for compareTo resolution,
  fixes entityMetadata 'field not found' errors
- Array.Count: change from string to any to handle numeric count values
- ArrayEncoder: fix nil check to correctly write length prefix for arrays
- ArrayDecoder: use fmt.Sprint for safe Count conversion
2026-08-05 18:33:39 +02:00
OpenCode fa70ea36c6 fix: print_replay test generation & raw_to_tmcpr config state
- Fix SaveUnCodeAbleAsTest using wrong package name (1.8.9 vs v1_8)
- Fix test template using bytes.Buffer instead of bytes.NewReader
- Tests now fail when decode SUCCEEDS (bug is fixed)
- Add config state support to raw_to_tmcpr with -config flag
- Fix mca_to_tmcpr -world flag being ignored
2026-08-05 17:43:26 +02:00
OpenCode 7c978e1a7e fix: raw_to_tmcpr Configuration state + mca_to_tmcpr -world flag
- Add -config flag and Configuration state support to raw_to_tmcpr
  (required for Minecraft 1.20.2+ protocol >= 764)
- Add 'config' as valid initial state option
- Fix mca_to_tmcpr -world flag being ignored (was hardcoded dev path)
- Add TMCPR replay test data from live 1.8 capture
2026-08-05 17:36:49 +02:00
OpenCode 44bfa2280c test: add TMCPR replay test data from live 1.8 capture 2026-08-05 17:36:38 +02:00
OpenCode a54b066012 fix: preserve original hostname in handshake (DNS resolves to IP) 2026-08-05 16:06:08 +02:00
OpenCode 4b278b7ee3 fix: multiple bugfixes
- Fix data race: use atomic.Bool for running in server.go
- Fix busy loop in timer.go: use time.After when idle
- Fix division by zero in print_replay
- Fix silently swallowed errors in proto_generator
- Fix suppressed error in native_encoder
- Delete unused registry_data_hunter
2026-08-05 14:50:10 +02:00
OpenCode 0ed96837bd feat: add 1.16.5 protocol support
- Add 1.16.5 minecraft-data
- Add v1_16_5 proto_generated code
- Add OnSuccess1_16_5 handler in client/login.go
- Update proto_generator to include 1.16.5
- Update download_minecraft_data.sh
2026-08-05 11:13:58 +02:00
Admin Else c911f95665 strom: add 1.14.4 protocol support, extend legacy range to 1.14.4
- Add minecraft-data for 1.14.4 (protocol 498)
- Generate proto_generated/v1_14_4
- Extend legacy RegisterUntil range from 1.12.2 to 1.14.4
- Update download_minecraft_data.sh to use admin-else fork
  and include all supported versions
2026-08-05 10:29:07 +02:00
Admin Else f645f3d78d strom: consolidate identical handlers to single v1_8-based versions
For types identical across all versions (Compress, Disconnect, Status,
Pong), use a single handler at v1_8 registered to 26.2 instead of
per-version duplicates. For types that differ (Encrypt has extra
ShouldAuthenticate field in newer versions, Success has different
Uuid type), keep dual-range registrations.
2026-08-04 22:31:06 +02:00
Admin Else 1001c809e5 strom: fix RegisterUntilLow to panic on reverse range, use dual-range registrations
- RegisterUntilLow now panics if startIndex > endIndex (programmer
  must address version incompatibility explicitly, not silently skip)
- Replace per-version RegisterCritical handlers with dual-range
  RegisterUntil: modern range (v1_21_8->latest) + legacy range (v1_8->1.12.2)
- Remove v1_12_2 handler duplicates (covered by upward range from v1_8)
- Move legacy chat handling into chat.Module.SendMessage (protocol<764
  uses v1_8.PlayToServerPacketChat instead of v1_21_11)
- Skip chat signing init for pre-1.19 versions
2026-08-04 22:16:34 +02:00
Admin Else 1e6ce06fb0 strom: add 1.12.2 protocol support and legacy login/status handlers
- Add minecraft-data for 1.12.2 (protocol 340)
- Generate proto_generated/v1_12_2
- Add v1_12_2 legacy handlers to client.Login (OnDisconnect,
  OnCompress, OnSuccess) and client.Status (OnStatus, OnPong)
- Same pattern as v1_8: RegisterUntilLatest only registers
  upward, so legacy versions need explicit RegisterCritical handlers
2026-08-04 22:01:06 +02:00
197 changed files with 371086 additions and 879 deletions
-6
View File
@@ -1,6 +0,0 @@
**/*_test.go export-ignore
**/testdata export-ignore
*.zip filter=lfs diff=lfs merge=lfs -text
*.tmcpr filter=lfs diff=lfs merge=lfs -text
*.mcpr filter=lfs diff=lfs merge=lfs -text
*.mca filter=lfs diff=lfs merge=lfs -text
+28
View File
@@ -0,0 +1,28 @@
name: Go
on:
push:
branches: ["master"]
pull_request:
branches: ["master"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: "1.26.2"
- name: Build
run: go build -v ./...
- name: Vet
run: go vet -v ./...
- name: Test
run: go test -v ./...
+2 -1
View File
@@ -1,4 +1,5 @@
.devres/ .devres/
.idea/ .idea/
.failed_packets/ .failed_packets/
.vscode/ .vscode/proto_generator
proto_generator
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"log/slog" "log/slog"
"os" "os"
"github.com/admin-else/strom/mc/api" "git.anygate.cloud/anygatecloud/strom/mc/api"
) )
var cmd = flag.NewFlagSet("api", flag.ContinueOnError) var cmd = flag.NewFlagSet("api", flag.ContinueOnError)
+1 -1
View File
@@ -1,6 +1,6 @@
package cmd_util package cmd_util
import "github.com/admin-else/strom/mc/api" import "git.anygate.cloud/anygatecloud/strom/mc/api"
func Account(s string) (a *api.Account, err error) { func Account(s string) (a *api.Account, err error) {
if len(s) > 16 { if len(s) > 16 {
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"os" "os"
"slices" "slices"
mcdata "github.com/admin-else/strom/mc/data" mcdata "git.anygate.cloud/anygatecloud/strom/mc/data"
"github.com/admin-else/strom/mc/proto_generated" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated"
"github.com/admin-else/strom/mc/util" "git.anygate.cloud/anygatecloud/strom/mc/util"
) )
// strom data 1.21.11 blocks id 0 name => air // strom data 1.21.11 blocks id 0 name => air
+2 -2
View File
@@ -6,8 +6,8 @@ import (
"log/slog" "log/slog"
"os" "os"
"github.com/admin-else/strom/mc/level/anvil" "git.anygate.cloud/anygatecloud/strom/mc/level/anvil"
"github.com/admin-else/strom/mc/nbt" "git.anygate.cloud/anygatecloud/strom/mc/nbt"
) )
var ( var (
+15 -17
View File
@@ -9,22 +9,21 @@ import (
"runtime/debug" "runtime/debug"
"slices" "slices"
"github.com/admin-else/strom/cmd/strom/api" "git.anygate.cloud/anygatecloud/strom/cmd/strom/api"
"github.com/admin-else/strom/cmd/strom/data" "git.anygate.cloud/anygatecloud/strom/cmd/strom/data"
"github.com/admin-else/strom/cmd/strom/extract_mca" "git.anygate.cloud/anygatecloud/strom/cmd/strom/extract_mca"
"github.com/admin-else/strom/cmd/strom/mca_to_tmcpr" "git.anygate.cloud/anygatecloud/strom/cmd/strom/mca_to_tmcpr"
"github.com/admin-else/strom/cmd/strom/messenger" "git.anygate.cloud/anygatecloud/strom/cmd/strom/messenger"
"github.com/admin-else/strom/cmd/strom/offline_uuid" "git.anygate.cloud/anygatecloud/strom/cmd/strom/offline_uuid"
"github.com/admin-else/strom/cmd/strom/packet_info" "git.anygate.cloud/anygatecloud/strom/cmd/strom/packet_info"
"github.com/admin-else/strom/cmd/strom/packet_inspector" "git.anygate.cloud/anygatecloud/strom/cmd/strom/packet_inspector"
"github.com/admin-else/strom/cmd/strom/print_nbt" "git.anygate.cloud/anygatecloud/strom/cmd/strom/print_nbt"
"github.com/admin-else/strom/cmd/strom/print_replay" "git.anygate.cloud/anygatecloud/strom/cmd/strom/print_replay"
// "github.com/admin-else/strom/cmd/strom/raw_capture" // removed: use tcpflow instead for raw TCP capture // "git.anygate.cloud/anygatecloud/strom/cmd/strom/raw_capture" // removed: use tcpflow instead for raw TCP capture
"github.com/admin-else/strom/cmd/strom/raw_to_tmcpr" "git.anygate.cloud/anygatecloud/strom/cmd/strom/raw_to_tmcpr"
"github.com/admin-else/strom/cmd/strom/registry_data_hunter" "git.anygate.cloud/anygatecloud/strom/cmd/strom/serve_tmcpr"
"github.com/admin-else/strom/cmd/strom/serve_tmcpr" "git.anygate.cloud/anygatecloud/strom/cmd/strom/serve_world"
"github.com/admin-else/strom/cmd/strom/serve_world" "git.anygate.cloud/anygatecloud/strom/cmd/strom/status"
"github.com/admin-else/strom/cmd/strom/status"
) )
var ExpectedASubcommandErr = errors.New("expected a subcommand") var ExpectedASubcommandErr = errors.New("expected a subcommand")
@@ -64,7 +63,6 @@ var subcommands = map[string]func(args []string) error{
"print-replay": print_replay.Run, "print-replay": print_replay.Run,
// "raw-capture": raw_capture.Run, // removed: use tcpflow instead for raw TCP capture, then raw-to-tmcpr // "raw-capture": raw_capture.Run, // removed: use tcpflow instead for raw TCP capture, then raw-to-tmcpr
"raw-to-tmcpr": raw_to_tmcpr.Run, "raw-to-tmcpr": raw_to_tmcpr.Run,
"registry-data-hunter": registry_data_hunter.Run,
"serve-world": serve_world.Run, "serve-world": serve_world.Run,
"mca-to-tmcpr": mca_to_tmcpr.Run, "mca-to-tmcpr": mca_to_tmcpr.Run,
"serve-tmcpr": serve_tmcpr.Run, "serve-tmcpr": serve_tmcpr.Run,
+8 -7
View File
@@ -6,13 +6,14 @@ import (
"fmt" "fmt"
"log/slog" "log/slog"
"os" "os"
"path/filepath"
"github.com/admin-else/strom/mc/level" "git.anygate.cloud/anygatecloud/strom/mc/level"
"github.com/admin-else/strom/mc/level/anvil" "git.anygate.cloud/anygatecloud/strom/mc/level/anvil"
"github.com/admin-else/strom/mc/nbt" "git.anygate.cloud/anygatecloud/strom/mc/nbt"
"github.com/admin-else/strom/mc/proto/replay" "git.anygate.cloud/anygatecloud/strom/mc/proto/replay"
"github.com/admin-else/strom/mc/proto_generated/v1_21_11" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_11"
"github.com/admin-else/strom/mc/util" "git.anygate.cloud/anygatecloud/strom/mc/util"
) )
var ( var (
@@ -51,7 +52,7 @@ func GetChunkFromMca(x, z int32, version string) (b []byte, err error) {
z += anvil.ChunksWidthRegionFile z += anvil.ChunksWidthRegionFile
} }
f, err := os.Open(fmt.Sprintf("./.devres/anvil_testdata/securechattestworld/region/r.%v.%v.mca", xmca, zmca)) f, err := os.Open(filepath.Join(*worldPath, "region", fmt.Sprintf("r.%v.%v.mca", xmca, zmca)))
if err != nil { if err != nil {
return return
} }
+10 -10
View File
@@ -7,16 +7,16 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/admin-else/strom/cmd/strom/cmd_util" "git.anygate.cloud/anygatecloud/strom/cmd/strom/cmd_util"
"github.com/admin-else/strom/mc/bot/chat" "git.anygate.cloud/anygatecloud/strom/mc/bot/chat"
"github.com/admin-else/strom/mc/bot/keepalive" "git.anygate.cloud/anygatecloud/strom/mc/bot/keepalive"
"github.com/admin-else/strom/mc/bot/world" "git.anygate.cloud/anygatecloud/strom/mc/bot/world"
"github.com/admin-else/strom/mc/client" "git.anygate.cloud/anygatecloud/strom/mc/client"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/data"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_generated/v1_21_11" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_11"
"github.com/admin-else/strom/mc/proto_generated/v1_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
) )
func stror(a, b string) string { func stror(a, b string) string {
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"flag" "flag"
"fmt" "fmt"
"github.com/admin-else/strom/mc/crypto" "git.anygate.cloud/anygatecloud/strom/mc/crypto"
) )
var cmd = flag.NewFlagSet("offline-uuid", flag.ContinueOnError) var cmd = flag.NewFlagSet("offline-uuid", flag.ContinueOnError)
+4 -4
View File
@@ -5,10 +5,10 @@ import (
"fmt" "fmt"
"strconv" "strconv"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/data"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated"
) )
var cmd = flag.NewFlagSet("packet-info", flag.ContinueOnError) var cmd = flag.NewFlagSet("packet-info", flag.ContinueOnError)
+11 -10
View File
@@ -7,15 +7,15 @@ import (
"os" "os"
"time" "time"
"github.com/admin-else/strom/mc/api" "git.anygate.cloud/anygatecloud/strom/mc/api"
"github.com/admin-else/strom/mc/client" "git.anygate.cloud/anygatecloud/strom/mc/client"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/nbt" "git.anygate.cloud/anygatecloud/strom/mc/nbt"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_11" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_11"
"github.com/admin-else/strom/mc/server" "git.anygate.cloud/anygatecloud/strom/mc/server"
"github.com/admin-else/strom/mc/text" "git.anygate.cloud/anygatecloud/strom/mc/text"
) )
var Cmd = flag.NewFlagSet("packet-inspector", flag.ContinueOnError) var Cmd = flag.NewFlagSet("packet-inspector", flag.ContinueOnError)
@@ -26,6 +26,7 @@ var Token = Cmd.String("token", "", "token to use")
var TargetAddr = Cmd.String("addr", "127.0.0.1:25565", "address to connect to") var TargetAddr = Cmd.String("addr", "127.0.0.1:25565", "address to connect to")
var ListenAddr = Cmd.String("listen", "127.0.0.1:25566", "address to listen on") var ListenAddr = Cmd.String("listen", "127.0.0.1:25566", "address to listen on")
var TrueForward = Cmd.Bool("true-forward", false, "forward packets without modification -name and custom server status wont work") var TrueForward = Cmd.Bool("true-forward", false, "forward packets without modification -name and custom server status wont work")
var Version = Cmd.String("protocol-version", "", "protocol version to use; empty for auto")
type Proxy struct { type Proxy struct {
Client, Servee *proto.Conn Client, Servee *proto.Conn
@@ -182,7 +183,7 @@ func Run(args []string) (err error) {
if err != nil { if err != nil {
return return
} }
c, err := client.Connect(nil, *TargetAddr, "") c, err := client.Connect(nil, *TargetAddr, *Version)
if err != nil { if err != nil {
return return
} }
+1 -1
View File
@@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"os" "os"
"github.com/admin-else/strom/mc/nbt" "git.anygate.cloud/anygatecloud/strom/mc/nbt"
) )
var ( var (
+4 -4
View File
@@ -4,15 +4,15 @@ import (
"bytes" "bytes"
"testing" "testing"
generated "github.com/admin-else/strom/mc/proto_generated/%v" generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/%v"
) )
// Error: %v // Error: %v
func TestFailedPacket%10X(t *testing.T) { func TestFailedPacket%10X(t *testing.T) {
p := &generated.%v{} p := &generated.%v{}
b := bytes.NewBuffer(%#v) b := bytes.NewReader(%#v)
err := p.Decode(b) err := p.Decode(b)
if err != nil { if err == nil {
t.Fatal(err) t.Fatalf("expected decode error but got nil")
} }
} }
+8 -10
View File
@@ -15,9 +15,8 @@ import (
"reflect" "reflect"
"strings" "strings"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_base"
) )
var ( var (
@@ -29,8 +28,6 @@ var (
DirectionFlag = cmd.String("direction", "clientbound", "Packet direction: clientbound (ToClient) or serverbound (ToServer)") DirectionFlag = cmd.String("direction", "clientbound", "Packet direction: clientbound (ToClient) or serverbound (ToServer)")
) )
// TODO: maybe use the proto replay api
//go:embed failed_packet.go.tmpl //go:embed failed_packet.go.tmpl
var TestSrcF string var TestSrcF string
@@ -46,11 +43,8 @@ func SaveUnCodeAbleAsTest(packet *proto.UnCodablePacket) (err error) {
return return
} }
ret, err := data.LookUpVersionByProtocolVersion(packet.Info.ProtocolVersion) typeStr := reflect.TypeOf(packet.Info.Type).String()
if err != nil { goPackage := typeStr[1:strings.LastIndex(typeStr, ".")]
return
}
goPackage := "v" + strings.ReplaceAll(ret.MinecraftVersion, ".", "_")
typeName := reflect.TypeOf(packet.Info.Type).Elem().Name() typeName := reflect.TypeOf(packet.Info.Type).Elem().Name()
src := fmt.Sprintf(TestSrcF, goPackage, packet.Err, h, typeName, packet.Data) src := fmt.Sprintf(TestSrcF, goPackage, packet.Err, h, typeName, packet.Data)
@@ -212,6 +206,10 @@ func Run(args []string) (err error) {
} }
totalPackets++ totalPackets++
} }
if totalPackets > 0 {
fmt.Printf("Total packets: %d, failed packets: %d, %%failed: %.2f%%\n", totalPackets, failedPackets, float64(failedPackets)/float64(totalPackets)*100) fmt.Printf("Total packets: %d, failed packets: %d, %%failed: %.2f%%\n", totalPackets, failedPackets, float64(failedPackets)/float64(totalPackets)*100)
} else {
fmt.Printf("Total packets: %d, failed packets: %d\n", totalPackets, failedPackets)
}
return return
} }
File diff suppressed because one or more lines are too long
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacket0F8B37C94207F7BF(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x42, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacket6C9AD835672C5C51(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xde, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacketA5D61E1C0F23E7FA(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x56, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacketCAA58159889F7E8A(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x2e, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacketD18FC4C0B2DF2972(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1b, 0xf2, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacketE81E82016DB04F28(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x6, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Error: unexpected EOF
func TestFailedPacketFE935CF2E584C649(t *testing.T) {
p := &generated.PlayToClientPacketUpdateTime{}
b := bytes.NewReader([]byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x1a, 0x0})
err := p.Decode(b)
if err == nil {
t.Fatalf("expected decode error but got nil")
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Decode regression: recipe_book_add (26.2) - SlotDisplay type fix
func TestRegressionPacket25D845B5D0023D22(t *testing.T) {
p := &generated.PlayToClientPacketRecipeBookAdd{}
b := bytes.NewReader([]byte{0x1, 0xbe, 0x2, 0x1, 0x2, 0x2, 0x4, 0x6, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x6, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x6, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x6, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x5, 0xe8, 0x2, 0x1, 0x0, 0x0, 0x4, 0xe8, 0x2, 0x0, 0x3, 0x1, 0x4, 0x0, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x0, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x0, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x0, 0x10, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x70, 0x6c, 0x61, 0x6e, 0x6b, 0x73, 0x2, 0x1})
err := p.Decode(b)
if err != nil {
t.Fatalf("regression: decode failed: %v", err)
}
}
@@ -0,0 +1,17 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Decode regression: declare_commands (26.2) - bitfield + extraNodeData fix
func TestRegressionPacket78C731784E6E834A(t *testing.T) {
p := &generated.PlayToClientPacketDeclareCommands{}
b := bytes.NewReader([]byte{0x1a, 0x0, 0xa, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0x1, 0x1, 0xb, 0x2, 0x6d, 0x65, 0x5, 0x1, 0xc, 0x4, 0x68, 0x65, 0x6c, 0x70, 0x5, 0x1, 0xd, 0x4, 0x6c, 0x69, 0x73, 0x74, 0x1, 0x1, 0xe, 0x3, 0x6d, 0x73, 0x67, 0x9, 0x0, 0x4, 0x4, 0x74, 0x65, 0x6c, 0x6c, 0x9, 0x0, 0x4, 0x1, 0x77, 0x1, 0x2, 0xf, 0x10, 0x6, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x1, 0x1, 0x11, 0x7, 0x74, 0x65, 0x61, 0x6d, 0x6d, 0x73, 0x67, 0x9, 0x0, 0x8, 0x2, 0x74, 0x6d, 0x1, 0x1, 0x12, 0x7, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x6, 0x0, 0x6, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x14, 0x6, 0x0, 0x7, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5, 0x2, 0x5, 0x0, 0x5, 0x75, 0x75, 0x69, 0x64, 0x73, 0x2, 0x1, 0x13, 0x7, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x6, 0x2, 0x1, 0x1, 0x14, 0x5, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1, 0x1, 0x15, 0x4, 0x72, 0x6f, 0x6c, 0x6c, 0x6, 0x0, 0x7, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x14, 0x16, 0x2, 0x16, 0x17, 0x9, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x14, 0x6d, 0x69, 0x6e, 0x65, 0x63, 0x72, 0x61, 0x66, 0x74, 0x3a, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x6, 0x0, 0x7, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x14, 0x6, 0x0, 0x5, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x6, 0x0, 0x5, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x27, 0x1, 0x1, 0x18, 0x3, 0x61, 0x64, 0x64, 0x1, 0x1, 0x19, 0x3, 0x73, 0x65, 0x74, 0x6, 0x0, 0x5, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3, 0x0, 0x6, 0x0, 0x5, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3, 0x0, 0x0})
err := p.Decode(b)
if err != nil {
t.Fatalf("regression: decode failed: %v", err)
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
)
// Decode regression: spawn_entity_living (1.8) - entityMetadata mergeCompareTo
func TestRegressionPacket2B76AF8B937B1E8F(t *testing.T) {
p := &generated.PlayToClientPacketSpawnEntityLiving{}
b := bytes.NewReader([]byte{0x4c, 0x65, 0xff, 0xff, 0xed, 0x66, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x29, 0xe6, 0x91, 0x0, 0x91, 0x0, 0x0, 0xfd, 0x8d, 0x0, 0x0, 0x0, 0x0, 0x21, 0x1, 0x2c, 0x82, 0x0, 0x12, 0x4, 0x3, 0x0, 0x4, 0x0, 0x66, 0x41, 0x20, 0x0, 0x0, 0x47, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x9, 0x0, 0xc, 0x0, 0xf, 0x0, 0x7f})
err := p.Decode(b)
if err != nil {
t.Fatalf("regression: decode failed: %v", err)
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
)
// Decode regression: entity_equipment (1.8) - nbt TAG_End fix
func TestRegressionPacket0C20C77EA68496BD(t *testing.T) {
p := &generated.PlayToClientPacketEntityEquipment{}
b := bytes.NewReader([]byte{0x89, 0x16, 0x0, 0x0, 0x1, 0x5, 0x1, 0x0, 0x0, 0x0})
err := p.Decode(b)
if err != nil {
t.Fatalf("regression: decode failed: %v", err)
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
)
// Decode regression: entity_metadata (1.8) - entityMetadataLoop mergeCompareTo
func TestRegressionPacketDF2DF88561529208(t *testing.T) {
p := &generated.PlayToClientPacketEntityMetadata{}
b := bytes.NewReader([]byte{0x69, 0x0, 0x0, 0x21, 0x1, 0x2c, 0x82, 0x0, 0x3, 0x0, 0x4, 0x0, 0x66, 0x40, 0x80, 0x0, 0x0, 0x47, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x9, 0x0, 0xc, 0x0, 0xf, 0x0, 0x7f})
err := p.Decode(b)
if err != nil {
t.Fatalf("regression: decode failed: %v", err)
}
}
@@ -0,0 +1,18 @@
package failed_packets_test
import (
"bytes"
"testing"
generated "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
)
// Decode regression: entity_equipment (26.2) - topBitSetTerminatedArray
func TestRegressionPacket1D0089BBE86A1648(t *testing.T) {
p := &generated.PlayToClientPacketEntityEquipment{}
b := bytes.NewReader([]byte{0x81, 0x2, 0x0, 0x1, 0x9a, 0x7, 0x0, 0x0})
err := p.Decode(b)
if err != nil {
t.Fatalf("regression: decode failed: %v", err)
}
}
+21 -8
View File
@@ -10,8 +10,8 @@ import (
"os" "os"
"time" "time"
"github.com/admin-else/strom/mc/proto/replay" "git.anygate.cloud/anygatecloud/strom/mc/proto/replay"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
) )
var Cmd = flag.NewFlagSet("raw-to-tmcpr", flag.ContinueOnError) var Cmd = flag.NewFlagSet("raw-to-tmcpr", flag.ContinueOnError)
@@ -20,8 +20,9 @@ var ClientboundIn = Cmd.String("clientbound", "", "raw tcpflow file for clientbo
var ServerboundIn = Cmd.String("serverbound", "", "raw tcpflow file for serverbound (client->server) direction") var ServerboundIn = Cmd.String("serverbound", "", "raw tcpflow file for serverbound (client->server) direction")
var ClientboundOut = Cmd.String("clientbound-out", "clientbound.tmcpr", "output TMCPR file for clientbound") var ClientboundOut = Cmd.String("clientbound-out", "clientbound.tmcpr", "output TMCPR file for clientbound")
var ServerboundOut = Cmd.String("serverbound-out", "serverbound.tmcpr", "output TMCPR file for serverbound") var ServerboundOut = Cmd.String("serverbound-out", "serverbound.tmcpr", "output TMCPR file for serverbound")
var ClientboundState = Cmd.String("clientbound-state", "login", "initial state for clientbound: handshake, login, status, play") var ClientboundState = Cmd.String("clientbound-state", "login", "initial state for clientbound: handshake, login, config, status, play")
var ServerboundState = Cmd.String("serverbound-state", "handshake", "initial state for serverbound: handshake, login, status, play") var ServerboundState = Cmd.String("serverbound-state", "handshake", "initial state for serverbound: handshake, login, config, status, play")
var UseConfig = Cmd.Bool("config", false, "use Configuration state transitions (for protocol >= 764, Minecraft 1.20.2+)")
type captureReader struct { type captureReader struct {
r io.Reader r io.Reader
@@ -32,6 +33,7 @@ type captureReader struct {
haveStartTime bool haveStartTime bool
direction proto_base.Direction direction proto_base.Direction
pendingThreshold int32 pendingThreshold int32
useConfig bool
} }
func (cr *captureReader) setStartTime() { func (cr *captureReader) setStartTime() {
@@ -123,13 +125,21 @@ func (cr *captureReader) trackState(packetBytes []byte) {
cr.threshold = threshold cr.threshold = threshold
} }
} else if packetId == 0x02 { } else if packetId == 0x02 {
if cr.useConfig {
cr.state = proto_base.Configuration
} else {
cr.state = proto_base.Play cr.state = proto_base.Play
} }
}
} else if cr.direction == proto_base.ToServer && packetId == 0 { } else if cr.direction == proto_base.ToServer && packetId == 0 {
if cr.pendingThreshold >= 0 { if cr.pendingThreshold >= 0 {
cr.threshold = cr.pendingThreshold cr.threshold = cr.pendingThreshold
} }
} }
case proto_base.Configuration:
if cr.direction == proto_base.ToClient && packetId == 0x02 {
cr.state = proto_base.Play
}
case proto_base.Status: case proto_base.Status:
case proto_base.Play: case proto_base.Play:
} }
@@ -172,12 +182,14 @@ func Run(args []string) (err error) {
return proto_base.Handshaking, nil return proto_base.Handshaking, nil
case "login": case "login":
return proto_base.Login, nil return proto_base.Login, nil
case "config":
return proto_base.Configuration, nil
case "play": case "play":
return proto_base.Play, nil return proto_base.Play, nil
case "status": case "status":
return proto_base.Status, nil return proto_base.Status, nil
default: default:
return 0, fmt.Errorf("unknown state: %s (valid: handshake, login, status, play)", name) return 0, fmt.Errorf("unknown state: %s (valid: handshake, login, config, status, play)", name)
} }
} }
@@ -188,7 +200,7 @@ func Run(args []string) (err error) {
if err != nil { if err != nil {
return err return err
} }
compressionThreshold, err = processFile(*ClientboundIn, *ClientboundOut, state, proto_base.ToClient, -1) compressionThreshold, err = processFile(*ClientboundIn, *ClientboundOut, state, proto_base.ToClient, -1, *UseConfig)
if err != nil { if err != nil {
return fmt.Errorf("clientbound: %w", err) return fmt.Errorf("clientbound: %w", err)
} }
@@ -199,7 +211,7 @@ func Run(args []string) (err error) {
if err != nil { if err != nil {
return err return err
} }
_, err = processFile(*ServerboundIn, *ServerboundOut, state, proto_base.ToServer, compressionThreshold) _, err = processFile(*ServerboundIn, *ServerboundOut, state, proto_base.ToServer, compressionThreshold, *UseConfig)
if err != nil { if err != nil {
return fmt.Errorf("serverbound: %w", err) return fmt.Errorf("serverbound: %w", err)
} }
@@ -208,7 +220,7 @@ func Run(args []string) (err error) {
return return
} }
func processFile(inPath, outPath string, initial proto_base.State, dir proto_base.Direction, initialThreshold int32) (finalThreshold int32, err error) { func processFile(inPath, outPath string, initial proto_base.State, dir proto_base.Direction, initialThreshold int32, useConfig bool) (finalThreshold int32, err error) {
in, err := os.Open(inPath) in, err := os.Open(inPath)
if err != nil { if err != nil {
return initialThreshold, fmt.Errorf("open input: %w", err) return initialThreshold, fmt.Errorf("open input: %w", err)
@@ -228,6 +240,7 @@ func processFile(inPath, outPath string, initial proto_base.State, dir proto_bas
threshold: -1, threshold: -1,
direction: dir, direction: dir,
pendingThreshold: initialThreshold, pendingThreshold: initialThreshold,
useConfig: useConfig,
} }
if dir == proto_base.ToClient { if dir == proto_base.ToClient {
cr.threshold = initialThreshold cr.threshold = initialThreshold
-152
View File
@@ -1,152 +0,0 @@
package registry_data_hunter
import (
"encoding/json"
"errors"
"log/slog"
"os"
"github.com/admin-else/strom/mc/api"
"github.com/admin-else/strom/mc/client"
"github.com/admin-else/strom/mc/data"
"github.com/admin-else/strom/mc/event"
"github.com/admin-else/strom/mc/nbt"
"github.com/admin-else/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/server"
"github.com/admin-else/strom/mc/text"
)
func wontFail[T any](v T, err error) T {
if err != nil {
panic(err)
}
return v
}
var (
Version = "1.21.11"
SaveAs = "data/registry/" + Version + ".nbt"
CompatibleProtocolVersion = wontFail(data.LookUpVersionByName(Version)).Version
FinishedConfigErr = errors.New("finished configuration")
)
var Status = wontFail(json.Marshal(server.StatusResponse{
Version: server.StatusResponseVersion{
Name: nil,
Protocol: CompatibleProtocolVersion,
},
Description: text.Pretty("Registry data hunter"),
}))
type Proxy struct {
Client, Servee *proto.Conn
Data *nbt.Tag
}
func (p *Proxy) OnAnything(e event.Anything) (err error) {
packet, ok := e.Val.(proto_base.EncodeDecodeAble)
if !ok {
return
}
packetInfo, ok := proto.LookupPacketInfoByType(packet)
if !ok {
return
}
switch packetInfo.Direction {
case proto_base.ToServer:
err = p.Client.Send(packet)
case proto_base.ToClient:
err = p.Servee.Send(packet)
}
return
}
func (p *Proxy) OnFinishConfiguration(_ *v1_21_8.ConfigurationToClientPacketFinishConfiguration) (err error) {
err = FinishedConfigErr
return
}
func (p *Proxy) OnSelectKnownPacks(data *v1_21_8.ConfigurationToClientPacketCommonSelectKnownPacks) (err error) {
var entries []any
for _, entry := range data.Packs {
e := map[string]any{"Namespace": entry.Namespace, "Id": entry.Id, "Version": entry.Version}
entries = append(entries, e)
}
p.Data.Value.(map[string]any)["KnownPacks"] = entries
return
}
func (p *Proxy) OnData(data *v1_21_8.ConfigurationToClientPacketRegistryData) (err error) {
d := p.Data.Value.(map[string]any)["Registries"].([]any)
var entries []any
for _, entry := range data.Entries {
if entry.Value != nil {
entries = append(entries, map[string]any{"TagType": entry.Key, "Value": entry.Value.Value})
} else {
entries = append(entries, map[string]any{"TagType": entry.Key})
}
}
d = append(d, map[string]any{"Id": data.Id, "Entries": entries})
p.Data.Value.(map[string]any)["Registries"] = d
return
}
func (p *Proxy) OnTags(data *v1_21_8.ConfigurationToClientPacketTags) (err error) {
var tags []any
for _, tag := range data.Tags {
var entries []any
for _, entry := range tag.Tags.Val {
entries = append(entries, map[string]any{"TagName": entry.TagName, "Entries": entry.Entries})
}
tags = append(tags, map[string]any{"TagType": tag.TagType, "Entries": entries})
}
p.Data.Value.(map[string]any)["Tags"] = tags
return
}
func handleClient(c *proto.Conn) (err error) {
acc := api.NewOfflineAccount("RegistryHunter")
_, err = server.ServeLogin(c, server.WithOtherAccount(acc), server.WithCompatibleVersions(CompatibleProtocolVersion), server.WithRawStatus(Status))
if err != nil {
return
}
sockPuppet, err := client.Login(":25565", acc)
if err != nil {
return
}
defer sockPuppet.Close()
errChan := make(chan error)
p := &Proxy{Client: sockPuppet, Servee: c}
p.Data.Value = map[string]any{"Registries": []any{}}
p.Client.RegisterCritical(p.OnAnything)
p.Servee.RegisterCritical(p.OnAnything)
p.Client.RegisterCriticalUntilLatest(p.OnData)
p.Client.RegisterCriticalUntilLatest(p.OnTags)
p.Client.RegisterCriticalUntilLatest(p.OnSelectKnownPacks)
p.Client.RegisterCriticalUntilLatest(p.OnFinishConfiguration)
go func() {
errChan <- p.Client.StartConn()
}()
go func() {
errChan <- p.Servee.StartConn()
}()
err = <-errChan
f, err := os.Create(SaveAs)
if err != nil {
return
}
defer f.Close()
err = nbt.WriteUnstructuredFile(f, p.Data)
slog.Info("saved", "file", SaveAs)
return
}
func Run(args []string) error {
slog.SetLogLoggerLevel(slog.LevelDebug)
return server.StartServerWithOnConn(":25566", handleClient)
}
+5 -5
View File
@@ -9,11 +9,11 @@ import (
"os" "os"
"time" "time"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto/replay" "git.anygate.cloud/anygatecloud/strom/mc/proto/replay"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/server" "git.anygate.cloud/anygatecloud/strom/mc/server"
) )
type Server struct { type Server struct {
+8 -8
View File
@@ -8,14 +8,14 @@ import (
"os" "os"
"time" "time"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/level" "git.anygate.cloud/anygatecloud/strom/mc/level"
"github.com/admin-else/strom/mc/level/anvil" "git.anygate.cloud/anygatecloud/strom/mc/level/anvil"
"github.com/admin-else/strom/mc/nbt" "git.anygate.cloud/anygatecloud/strom/mc/nbt"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/server" "git.anygate.cloud/anygatecloud/strom/mc/server"
"github.com/admin-else/strom/mc/util" "git.anygate.cloud/anygatecloud/strom/mc/util"
) )
type Server struct { type Server struct {
+5 -5
View File
@@ -6,11 +6,11 @@ import (
"log/slog" "log/slog"
"time" "time"
"github.com/admin-else/strom/mc/client" "git.anygate.cloud/anygatecloud/strom/mc/client"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
) )
var cmd = flag.NewFlagSet("status", flag.ContinueOnError) var cmd = flag.NewFlagSet("status", flag.ContinueOnError)
+1 -1
View File
@@ -1,4 +1,4 @@
module github.com/admin-else/strom module git.anygate.cloud/anygatecloud/strom
go 1.26.2 go 1.26.2
+1 -1
View File
@@ -1,7 +1,7 @@
package api package api
import ( import (
"github.com/admin-else/strom/mc/crypto" "git.anygate.cloud/anygatecloud/strom/mc/crypto"
) )
// NewOfflineAccount creates an offline-mode Account with a UUID derived from the // NewOfflineAccount creates an offline-mode Account with a UUID derived from the
+12 -4
View File
@@ -12,9 +12,10 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/admin-else/strom/mc/api" "git.anygate.cloud/anygatecloud/strom/mc/api"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_generated/v1_21_11" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_11"
"git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
"github.com/google/uuid" "github.com/google/uuid"
) )
@@ -43,6 +44,9 @@ func Start(c *proto.Conn, acc *api.Account) (*Module, error) {
} }
func (m *Module) initSigning(acc *api.Account) (err error) { func (m *Module) initSigning(acc *api.Account) (err error) {
if m.Conn.ProtocolVersion < 764 {
return nil
}
keys, err := acc.FetchKeys() keys, err := acc.FetchKeys()
if err != nil { if err != nil {
return fmt.Errorf("fetch profile keys: %w", err) return fmt.Errorf("fetch profile keys: %w", err)
@@ -80,8 +84,12 @@ func (m *Module) initSigning(acc *api.Account) (err error) {
} }
// SendMessage sends a chat message. If signing is enabled, the message is signed; // SendMessage sends a chat message. If signing is enabled, the message is signed;
// otherwise it is sent unsigned. // otherwise it is sent unsigned. For pre-1.19 protocol versions, uses the legacy
// chat packet format (plain string).
func (m *Module) SendMessage(message string) (err error) { func (m *Module) SendMessage(message string) (err error) {
if m.Conn.ProtocolVersion < 764 {
return m.Conn.Send(&v1_8.PlayToServerPacketChat{Message: message})
}
if m.canSign { if m.canSign {
return m.sendSigned(message) return m.sendSigned(message)
} }
+2 -2
View File
@@ -1,8 +1,8 @@
package keepalive package keepalive
import ( import (
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
) )
type mod struct { type mod struct {
+3 -3
View File
@@ -5,9 +5,9 @@ import (
"errors" "errors"
"sync" "sync"
"github.com/admin-else/strom/mc/level" "git.anygate.cloud/anygatecloud/strom/mc/level"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_generated/v1_21_11" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_11"
) )
var ( var (
+4 -4
View File
@@ -5,10 +5,10 @@ import (
"errors" "errors"
"net" "net"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/data"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/server" "git.anygate.cloud/anygatecloud/strom/mc/server"
) )
// Connect connects to the given address note that it does not resolve the SRV records it's just a raw net.Dial // Connect connects to the given address note that it does not resolve the SRV records it's just a raw net.Dial
+4 -4
View File
@@ -4,10 +4,10 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
) )
type ConfigIgnorer struct { type ConfigIgnorer struct {
+3 -3
View File
@@ -4,9 +4,9 @@ import (
"net" "net"
"strconv" "strconv"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
) )
// MakeHandshakePacket creates a handshake packet using the connection's remote address as the server host. // MakeHandshakePacket creates a handshake packet using the connection's remote address as the server host.
+41 -42
View File
@@ -9,15 +9,16 @@ import (
"errors" "errors"
"net" "net"
"github.com/admin-else/strom/mc/api" "git.anygate.cloud/anygatecloud/strom/mc/api"
"github.com/admin-else/strom/mc/crypto" "git.anygate.cloud/anygatecloud/strom/mc/crypto"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_16_5"
"github.com/admin-else/strom/mc/proto_generated/v1_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/proto_generated/v26_2" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
"github.com/admin-else/strom/mc/text" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v26_2"
"git.anygate.cloud/anygatecloud/strom/mc/text"
"github.com/google/uuid" "github.com/google/uuid"
) )
@@ -56,28 +57,36 @@ func (s *LoginClient) OnClose(_ event.Close) (err error) {
return return
} }
func (s *LoginClient) OnCompress(compress *v1_21_8.LoginToClientPacketCompress) (err error) { func (s *LoginClient) OnCompress(packet *v1_8.LoginToClientPacketCompress) (err error) {
s.SetCompressionThreshold(compress.Threshold) s.SetCompressionThreshold(packet.Threshold)
return return
} }
func (s *LoginClient) OnEncryptV1_8(packet *v1_8.LoginToClientPacketEncryptionBegin) (err error) {
return s.doEncrypt(packet.ServerId, packet.PublicKey, packet.VerifyToken, true)
}
func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBegin) (err error) { func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBegin) (err error) {
return s.doEncrypt(packet.ServerId, packet.PublicKey, packet.VerifyToken, packet.ShouldAuthenticate)
}
func (s *LoginClient) doEncrypt(serverId string, publicKey []byte, verifyToken []byte, shouldAuthenticate bool) (err error) {
sharedSecret := make([]byte, 16) sharedSecret := make([]byte, 16)
_, _ = rand.Read(sharedSecret) //never fails _, _ = rand.Read(sharedSecret) //never fails
if packet.ShouldAuthenticate { if shouldAuthenticate {
if s.Account.Ygg == "" { if s.Account.Ygg == "" {
err = NoTokenErr err = NoTokenErr
return return
} }
serverId := crypto.AuthDigest([]byte(packet.ServerId), sharedSecret, packet.PublicKey) hash := crypto.AuthDigest([]byte(serverId), sharedSecret, publicKey)
err = s.Account.JoinServer(serverId) err = s.Account.JoinServer(hash)
if err != nil { if err != nil {
return return
} }
} }
pubAny, err := x509.ParsePKIXPublicKey(packet.PublicKey) pubAny, err := x509.ParsePKIXPublicKey(publicKey)
if err != nil { if err != nil {
return return
} }
@@ -86,7 +95,7 @@ func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBeg
err = BadPublicKeyTypeErr err = BadPublicKeyTypeErr
return return
} }
verifyTokenEnc, err := rsa.EncryptPKCS1v15(rand.Reader, pub, packet.VerifyToken) verifyTokenEnc, err := rsa.EncryptPKCS1v15(rand.Reader, pub, verifyToken)
if err != nil { if err != nil {
return return
} }
@@ -101,10 +110,9 @@ func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBeg
} }
err = s.SetSecret(sharedSecret) err = s.SetSecret(sharedSecret)
return return
} }
func (s *LoginClient) OnDisconnect(packet *v1_21_8.LoginToClientPacketDisconnect) (err error) { func (s *LoginClient) OnDisconnect(packet *v1_8.LoginToClientPacketDisconnect) (err error) {
var reason text.Component var reason text.Component
err = json.Unmarshal([]byte(packet.Reason), &reason) err = json.Unmarshal([]byte(packet.Reason), &reason)
if err != nil { if err != nil {
@@ -114,21 +122,6 @@ func (s *LoginClient) OnDisconnect(packet *v1_21_8.LoginToClientPacketDisconnect
return return
} }
func (s *LoginClient) OnDisconnectV1_8(packet *v1_8.LoginToClientPacketDisconnect) (err error) {
var reason text.Component
err = json.Unmarshal([]byte(packet.Reason), &reason)
if err != nil {
return
}
err = KickedDuringLoginErr{reason}
return
}
func (s *LoginClient) OnCompressV1_8(packet *v1_8.LoginToClientPacketCompress) (err error) {
s.SetCompressionThreshold(packet.Threshold)
return
}
func (s *LoginClient) OnSuccessV1_8(success *v1_8.LoginToClientPacketSuccess) (err error) { func (s *LoginClient) OnSuccessV1_8(success *v1_8.LoginToClientPacketSuccess) (err error) {
s.GivenAccount = &v1_21_8.LoginToClientPacketSuccess{ s.GivenAccount = &v1_21_8.LoginToClientPacketSuccess{
Uuid: uuid.MustParse(success.Uuid), Uuid: uuid.MustParse(success.Uuid),
@@ -162,6 +155,13 @@ func (s *LoginClient) OnSuccess26_2(success *v26_2.LoginToClientPacketSuccess) (
}) })
} }
func (s *LoginClient) OnSuccess1_16_5(success *v1_16_5.LoginToClientPacketSuccess) (err error) {
return s.OnSuccess(&v1_21_8.LoginToClientPacketSuccess{
Uuid: success.Uuid,
Username: success.Username,
})
}
func (s *LoginClient) OnStart() (err error) { func (s *LoginClient) OnStart() (err error) {
return return
} }
@@ -181,14 +181,11 @@ func LoginRawAddr(c *proto.Conn, account *api.Account, hostAddr string) (err err
} }
lc.RegisterCritical(lc.OnDefault) lc.RegisterCritical(lc.OnDefault)
lc.RegisterCritical(lc.OnClose) lc.RegisterCritical(lc.OnClose)
lc.RegisterCriticalUntilLatest(lc.OnCompress) lc.RegisterUntil("26.2", lc.OnCompress, lc.OnDisconnect, lc.OnEncrypt)
lc.RegisterCriticalUntilLatest(lc.OnEncrypt) lc.RegisterUntil("26.1", lc.OnSuccess)
lc.RegisterCriticalUntilLatest(lc.OnDisconnect) lc.RegisterUntilLatest(lc.OnSuccess26_2)
lc.RegisterCriticalUntil("26.1", lc.OnSuccess) lc.RegisterUntil("1.14.4", lc.OnEncryptV1_8, lc.OnSuccessV1_8)
lc.RegisterCriticalUntilLatest(lc.OnSuccess26_2) lc.RegisterUntil("1.16.5", lc.OnSuccess1_16_5)
lc.RegisterCritical(lc.OnCompressV1_8)
lc.RegisterCritical(lc.OnDisconnectV1_8)
lc.RegisterCritical(lc.OnSuccessV1_8)
var p proto_base.EncodeDecodeAble var p proto_base.EncodeDecodeAble
if hostAddr != "" { if hostAddr != "" {
@@ -286,6 +283,8 @@ func Login(connectTo string, account *api.Account, settings ...func(ls *loginSet
setting(ls) setting(ls)
} }
hostAddr := connectTo
if ls.Conn != nil { if ls.Conn != nil {
if ls.Version == "" { if ls.Version == "" {
return nil, ErrWithConnRequiresVersion return nil, ErrWithConnRequiresVersion
@@ -327,7 +326,7 @@ func Login(connectTo string, account *api.Account, settings ...func(ls *loginSet
} }
} }
err = LoginRawAddr(c, account, connectTo) err = LoginRawAddr(c, account, hostAddr)
if err != nil { if err != nil {
return return
} }
+4 -4
View File
@@ -4,10 +4,10 @@ import (
"reflect" "reflect"
"testing" "testing"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/data"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
) )
func assertClientSendConvertible(t *testing.T, srcType reflect.Type, name string, state proto_base.State, direction proto_base.Direction, targetVersion int32) { func assertClientSendConvertible(t *testing.T, srcType reflect.Type, name string, state proto_base.State, direction proto_base.Direction, targetVersion int32) {
+9 -29
View File
@@ -5,12 +5,12 @@ import (
"encoding/json" "encoding/json"
"time" "time"
"github.com/admin-else/strom/mc/event" "git.anygate.cloud/anygatecloud/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "git.anygate.cloud/anygatecloud/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "git.anygate.cloud/anygatecloud/strom/mc/proto_base"
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/proto_generated/v1_8" "git.anygate.cloud/anygatecloud/strom/mc/proto_generated/v1_8"
"github.com/admin-else/strom/mc/server" "git.anygate.cloud/anygatecloud/strom/mc/server"
) )
type StatusClient struct { type StatusClient struct {
@@ -20,7 +20,7 @@ type StatusClient struct {
DoPingRoundTripTime bool DoPingRoundTripTime bool
} }
func (s *StatusClient) OnStatus(p *v1_21_8.StatusToClientPacketServerInfo) (err error) { func (s *StatusClient) OnStatus(p *v1_8.StatusToClientPacketServerInfo) (err error) {
s.Status = p.Response s.Status = p.Response
s.PingSendTime = time.Now() s.PingSendTime = time.Now()
if s.DoPingRoundTripTime { if s.DoPingRoundTripTime {
@@ -31,24 +31,7 @@ func (s *StatusClient) OnStatus(p *v1_21_8.StatusToClientPacketServerInfo) (err
return return
} }
func (s *StatusClient) OnPong(p *v1_21_8.StatusToClientPacketPing) (err error) { func (s *StatusClient) OnPong(p *v1_8.StatusToClientPacketPing) (err error) {
s.PingReceiveTime = time.Now()
err = event.HandlerDoneErr{}
return
}
func (s *StatusClient) OnStatusV1_8(p *v1_8.StatusToClientPacketServerInfo) (err error) {
s.Status = p.Response
s.PingSendTime = time.Now()
if s.DoPingRoundTripTime {
err = s.Send(&v1_21_8.StatusToServerPacketPing{Time: s.PingSendTime.UnixMilli()})
} else {
err = event.HandlerDoneErr{}
}
return
}
func (s *StatusClient) OnPongV1_8(p *v1_8.StatusToClientPacketPing) (err error) {
s.PingReceiveTime = time.Now() s.PingReceiveTime = time.Now()
err = event.HandlerDoneErr{} err = event.HandlerDoneErr{}
return return
@@ -75,10 +58,7 @@ func StatusRawWithVersion(ctx context.Context, addr, version string) (s *StatusC
s = &StatusClient{ s = &StatusClient{
Conn: c, Conn: c,
} }
s.RegisterCriticalUntilLatest(s.OnStatus) s.RegisterUntil("26.2", s.OnStatus, s.OnPong)
s.RegisterCriticalUntilLatest(s.OnPong)
s.RegisterCritical(s.OnStatusV1_8)
s.RegisterCritical(s.OnPongV1_8)
p, err := MakeHandshakePacketAddr(s.Conn, proto_base.Status, addr) p, err := MakeHandshakePacketAddr(s.Conn, proto_base.Status, addr)
if err != nil { if err != nil {
+1 -1
View File
@@ -3,7 +3,7 @@ package data_test
import ( import (
"testing" "testing"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/data"
) )
func TestLookupBiomeById(t *testing.T) { func TestLookupBiomeById(t *testing.T) {
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"slices" "slices"
"strconv" "strconv"
"github.com/admin-else/strom/mc/util" "git.anygate.cloud/anygatecloud/strom/mc/util"
) )
// { // {
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"github.com/admin-else/strom/mc/data" "git.anygate.cloud/anygatecloud/strom/mc/data"
) )
func TestLookupBlockByStateId(t *testing.T) { func TestLookupBlockByStateId(t *testing.T) {
+10 -1
View File
@@ -6,7 +6,7 @@ set -xeuo pipefail
cd "$(dirname "$0")" cd "$(dirname "$0")"
rm -rf minecraft-data/ rm -rf minecraft-data/
git clone --depth 1 git@github.com:PrismarineJS/minecraft-data.git git clone --depth 1 git@github.com:admin-else/minecraft-data.git
mv minecraft-data minecraft-data-untrimmed mv minecraft-data minecraft-data-untrimmed
mkdir minecraft-data mkdir minecraft-data
@@ -20,8 +20,17 @@ copy-mc() {
copy-mc common copy-mc common
# Legacy versions
copy-mc 1.8
copy-mc 1.12.2
copy-mc 1.14.4
copy-mc 1.16.5
# Modern versions
copy-mc 1.21.8 copy-mc 1.21.8
copy-mc 1.21.9 copy-mc 1.21.9
copy-mc 1.21.11 copy-mc 1.21.11
copy-mc 26.1
copy-mc 26.2
rm -rf minecraft-data-untrimmed rm -rf minecraft-data-untrimmed
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
{
"minecraftVersion": "1.12.2",
"version":340,
"majorVersion": "1.12"
}
@@ -0,0 +1,953 @@
[
{
"id": 0,
"name": "ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Ocean",
"color": 112,
"rainfall": 0.5
},
{
"id": 1,
"name": "plains",
"category": "plains",
"temperature": 0.8,
"precipitation": "rain",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Plains",
"color": 9286496,
"rainfall": 0.4,
"child": 129
},
{
"id": 2,
"name": "desert",
"category": "desert",
"temperature": 2,
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Desert",
"color": 16421912,
"rainfall": 0,
"child": 130
},
{
"id": 3,
"name": "mountains",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Mountains",
"color": 6316128,
"rainfall": 0.3,
"child": 131
},
{
"id": 4,
"name": "forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Forest",
"color": 353825,
"rainfall": 0.8,
"child": 132
},
{
"id": 5,
"name": "taiga",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Taiga",
"color": 747097,
"rainfall": 0.8,
"child": 133
},
{
"id": 6,
"name": "swamp",
"category": "swamp",
"temperature": 0.8,
"precipitation": "rain",
"depth": -0.2,
"dimension": "overworld",
"displayName": "Swamp",
"color": 522674,
"rainfall": 0.9,
"child": 134
},
{
"id": 7,
"name": "river",
"category": "river",
"temperature": 0.5,
"precipitation": "rain",
"depth": -0.5,
"dimension": "overworld",
"displayName": "River",
"color": 255,
"rainfall": 0.5
},
{
"id": 8,
"name": "nether_wastes",
"category": "nether",
"temperature": 2,
"precipitation": "none",
"depth": 0.1,
"climates": [
{
"temperature": 0,
"humidity": 0,
"altitude": 0,
"weirdness": 0,
"offset": 0
}
],
"dimension": "nether",
"displayName": "Nether Wastes",
"color": 12532539,
"rainfall": 0
},
{
"id": 9,
"name": "the_end",
"category": "the_end",
"temperature": 0.5,
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "The End",
"color": 8421631,
"rainfall": 0.5
},
{
"id": 10,
"name": "frozen_ocean",
"category": "ocean",
"temperature": 0,
"precipitation": "snow",
"depth": -1,
"dimension": "overworld",
"displayName": "Frozen Ocean",
"color": 7368918,
"rainfall": 0.5
},
{
"id": 11,
"name": "frozen_river",
"category": "river",
"temperature": 0,
"precipitation": "snow",
"depth": -0.5,
"dimension": "overworld",
"displayName": "Frozen River",
"color": 10526975,
"rainfall": 0.5
},
{
"id": 12,
"name": "snowy_tundra",
"category": "icy",
"temperature": 0,
"precipitation": "snow",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Snowy Tundra",
"color": 16777215,
"rainfall": 0.5,
"child": 140
},
{
"id": 13,
"name": "snowy_mountains",
"category": "icy",
"temperature": 0,
"precipitation": "snow",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Snowy Mountains",
"color": 10526880,
"rainfall": 0.5
},
{
"id": 14,
"name": "mushroom_fields",
"category": "mushroom",
"temperature": 0.9,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Mushroom Fields",
"color": 16711935,
"rainfall": 1
},
{
"id": 15,
"name": "mushroom_field_shore",
"category": "mushroom",
"temperature": 0.9,
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "Mushroom Fields Shore",
"color": 10486015,
"rainfall": 1
},
{
"id": 16,
"name": "beach",
"category": "beach",
"temperature": 0.8,
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "Beach",
"color": 16440917,
"rainfall": 0.4
},
{
"id": 17,
"name": "desert_hills",
"category": "desert",
"temperature": 2,
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Desert Hills",
"color": 13786898,
"rainfall": 0
},
{
"id": 18,
"name": "wooded_hills",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Wooded Hills",
"color": 2250012,
"rainfall": 0.8
},
{
"id": 19,
"name": "taiga_hills",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Taiga Hills",
"color": 1456435,
"rainfall": 0.8
},
{
"id": 20,
"name": "mountain_edge",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 0.8,
"dimension": "overworld",
"displayName": "Mountain Edge",
"color": 7501978,
"rainfall": 0.3
},
{
"id": 21,
"name": "jungle",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Jungle",
"color": 5470985,
"rainfall": 0.9,
"child": 149
},
{
"id": 22,
"name": "jungle_hills",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Jungle Hills",
"color": 2900485,
"rainfall": 0.9
},
{
"id": 23,
"name": "jungle_edge",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Jungle Edge",
"color": 6458135,
"rainfall": 0.8,
"child": 151
},
{
"id": 24,
"name": "deep_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Ocean",
"color": 48,
"rainfall": 0.5
},
{
"id": 25,
"name": "stone_shore",
"category": "none",
"temperature": 0.2,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Stone Shore",
"color": 10658436,
"rainfall": 0.3
},
{
"id": 26,
"name": "snowy_beach",
"category": "beach",
"temperature": 0.05,
"precipitation": "snow",
"depth": 0,
"dimension": "overworld",
"displayName": "Snowy Beach",
"color": 16445632,
"rainfall": 0.3
},
{
"id": 27,
"name": "birch_forest",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Birch Forest",
"color": 3175492,
"rainfall": 0.6,
"child": 155
},
{
"id": 28,
"name": "birch_forest_hills",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Birch Forest Hills",
"color": 2055986,
"rainfall": 0.6,
"child": 156
},
{
"id": 29,
"name": "dark_forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Dark Forest",
"color": 4215066,
"rainfall": 0.8,
"child": 157
},
{
"id": 30,
"name": "snowy_taiga",
"category": "taiga",
"temperature": -0.5,
"precipitation": "snow",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Snowy Taiga",
"color": 3233098,
"rainfall": 0.4,
"child": 158
},
{
"id": 31,
"name": "snowy_taiga_hills",
"category": "taiga",
"temperature": -0.5,
"precipitation": "snow",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Snowy Taiga Hills",
"color": 2375478,
"rainfall": 0.4
},
{
"id": 32,
"name": "giant_tree_taiga",
"category": "taiga",
"temperature": 0.3,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Giant Tree Taiga",
"color": 5858897,
"rainfall": 0.8,
"child": 160
},
{
"id": 33,
"name": "giant_tree_taiga_hills",
"category": "taiga",
"temperature": 0.3,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Giant Tree Taiga Hills",
"color": 4542270,
"rainfall": 0.8,
"child": 161
},
{
"id": 34,
"name": "wooded_mountains",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Wooded Mountains",
"color": 5271632,
"rainfall": 0.3,
"child": 162
},
{
"id": 35,
"name": "savanna",
"category": "savanna",
"temperature": 1.2,
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Savanna",
"color": 12431967,
"rainfall": 0,
"child": 163
},
{
"id": 36,
"name": "savanna_plateau",
"category": "savanna",
"temperature": 1,
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Savanna Plateau",
"color": 10984804,
"rainfall": 0,
"child": 164
},
{
"id": 37,
"name": "badlands",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Badlands",
"color": 14238997,
"rainfall": 0,
"child": 165
},
{
"id": 38,
"name": "wooded_badlands_plateau",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Wooded Badlands Plateau",
"color": 11573093,
"rainfall": 0,
"child": 166
},
{
"id": 39,
"name": "badlands_plateau",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Badlands Plateau",
"color": 13274213,
"rainfall": 0,
"child": 167
},
{
"id": 40,
"name": "small_end_islands",
"category": "the_end",
"temperature": 0.5,
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "Small End Islands",
"color": 42,
"rainfall": 0.5
},
{
"id": 41,
"name": "end_midlands",
"category": "the_end",
"temperature": 0.5,
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "End Midlands",
"color": 15464630,
"rainfall": 0.5
},
{
"id": 42,
"name": "end_highlands",
"category": "the_end",
"temperature": 0.5,
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "End Highlands",
"color": 12828041,
"rainfall": 0.5
},
{
"id": 43,
"name": "end_barrens",
"category": "the_end",
"temperature": 0.5,
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "End Barrens",
"color": 9474162,
"rainfall": 0.5
},
{
"id": 44,
"name": "warm_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Warm Ocean",
"color": 172,
"rainfall": 0.5
},
{
"id": 45,
"name": "lukewarm_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Lukewarm Ocean",
"color": 144,
"rainfall": 0.5
},
{
"id": 46,
"name": "cold_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Cold Ocean",
"color": 2105456,
"rainfall": 0.5
},
{
"id": 47,
"name": "deep_warm_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Warm Ocean",
"color": 80,
"rainfall": 0.5
},
{
"id": 48,
"name": "deep_lukewarm_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Lukewarm Ocean",
"color": 64,
"rainfall": 0.5
},
{
"id": 49,
"name": "deep_cold_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Cold Ocean",
"color": 2105400,
"rainfall": 0.5
},
{
"id": 50,
"name": "deep_frozen_ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Frozen Ocean",
"color": 4210832,
"rainfall": 0.5
},
{
"id": 127,
"name": "the_void",
"category": "none",
"temperature": 0.5,
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "the_void",
"rainfall": 0.5,
"color": 0
},
{
"id": 129,
"name": "sunflower_plains",
"category": "plains",
"temperature": 0.8,
"precipitation": "rain",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Sunflower Plains",
"color": 11918216,
"parent": "plains",
"rainfall": 0.4
},
{
"id": 130,
"name": "desert_lakes",
"category": "desert",
"temperature": 2,
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Desert Lakes",
"color": 16759872,
"parent": "desert",
"rainfall": 0
},
{
"id": 131,
"name": "gravelly_mountains",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Gravelly Mountains",
"color": 8947848,
"parent": "mountains",
"rainfall": 0.3
},
{
"id": 132,
"name": "flower_forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Flower Forest",
"color": 2985545,
"parent": "forest",
"rainfall": 0.8
},
{
"id": 133,
"name": "taiga_mountains",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.3,
"dimension": "overworld",
"displayName": "Taiga Mountains",
"color": 3378817,
"parent": "taiga",
"rainfall": 0.8
},
{
"id": 134,
"name": "swamp_hills",
"category": "swamp",
"temperature": 0.8,
"precipitation": "rain",
"depth": -0.1,
"dimension": "overworld",
"displayName": "Swamp Hills",
"color": 3145690,
"parent": "swamp",
"rainfall": 0.9
},
{
"id": 140,
"name": "ice_spikes",
"category": "icy",
"temperature": 0,
"precipitation": "snow",
"depth": 0.425,
"dimension": "overworld",
"displayName": "Ice Spikes",
"color": 11853020,
"parent": "snowy_tundra",
"rainfall": 0.5
},
{
"id": 149,
"name": "modified_jungle",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Modified Jungle",
"color": 8102705,
"parent": "jungle",
"rainfall": 0.9
},
{
"id": 151,
"name": "modified_jungle_edge",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Modified Jungle Edge",
"color": 9089855,
"parent": "jungle_edge",
"rainfall": 0.8
},
{
"id": 155,
"name": "tall_birch_forest",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Tall Birch Forest",
"color": 5807212,
"parent": "birch_forest",
"rainfall": 0.6
},
{
"id": 156,
"name": "tall_birch_hills",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.55,
"dimension": "overworld",
"displayName": "Tall Birch Hills",
"color": 4687706,
"parent": "birch_forest_hills",
"rainfall": 0.6
},
{
"id": 157,
"name": "dark_forest_hills",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Dark Forest Hills",
"color": 6846786,
"parent": "dark_forest",
"rainfall": 0.8
},
{
"id": 158,
"name": "snowy_taiga_mountains",
"category": "taiga",
"temperature": -0.5,
"precipitation": "snow",
"depth": 0.3,
"dimension": "overworld",
"displayName": "Snowy Taiga Mountains",
"color": 5864818,
"parent": "snowy_taiga",
"rainfall": 0.4
},
{
"id": 160,
"name": "giant_spruce_taiga",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Giant Spruce Taiga",
"color": 8490617,
"parent": "giant_tree_taiga",
"rainfall": 0.8
},
{
"id": 161,
"name": "giant_spruce_taiga_hills",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Giant Spruce Taiga Hills",
"color": 7173990,
"parent": "giant_tree_taiga_hills",
"rainfall": 0.8
},
{
"id": 162,
"name": "modified_gravelly_mountains",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Gravelly Mountains+",
"color": 7903352,
"parent": "wooded_mountains",
"rainfall": 0.3
},
{
"id": 163,
"name": "shattered_savanna",
"category": "savanna",
"temperature": 1.1,
"precipitation": "none",
"depth": 0.3625,
"dimension": "overworld",
"displayName": "Shattered Savanna",
"color": 15063687,
"parent": "savanna",
"rainfall": 0
},
{
"id": 164,
"name": "shattered_savanna_plateau",
"category": "savanna",
"temperature": 1,
"precipitation": "none",
"depth": 1.05,
"dimension": "overworld",
"displayName": "Shattered Savanna Plateau",
"color": 13616524,
"parent": "savanna_plateau",
"rainfall": 0
},
{
"id": 165,
"name": "eroded_badlands",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Eroded Badlands",
"color": 16739645,
"parent": "badlands",
"rainfall": 0
},
{
"id": 166,
"name": "modified_wooded_badlands_plateau",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Modified Wooded Badlands Plateau",
"color": 14204813,
"parent": "wooded_badlands_plateau",
"rainfall": 0
},
{
"id": 167,
"name": "modified_badlands_plateau",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Modified Badlands Plateau",
"color": 15905933,
"parent": "badlands_plateau",
"rainfall": 0
},
{
"id": 168,
"name": "bamboo_jungle",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Bamboo Jungle",
"color": 7769620,
"rainfall": 0.9
},
{
"id": 169,
"name": "bamboo_jungle_hills",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Bamboo Jungle Hills",
"color": 3884810,
"rainfall": 0.9
}
]
@@ -0,0 +1,946 @@
{"blocks":{"air":0,
"stone":1,
"granite":1,
"polished_granite":1,
"diorite":1,
"polished_diorite":1,
"andesite":1,
"polished_andesite":1,
"grass_block":1,
"dirt":1,
"coarse_dirt":1,
"podzol":1,
"cobblestone":1,
"oak_planks":1,
"spruce_planks":1,
"birch_planks":1,
"jungle_planks":1,
"acacia_planks":1,
"dark_oak_planks":1,
"oak_sapling":0,
"spruce_sapling":0,
"birch_sapling":0,
"jungle_sapling":0,
"acacia_sapling":0,
"dark_oak_sapling":0,
"bedrock":1,
"water":0,
"lava":0,
"sand":1,
"red_sand":1,
"gravel":1,
"gold_ore":1,
"iron_ore":1,
"coal_ore":1,
"oak_log":1,
"spruce_log":1,
"birch_log":1,
"jungle_log":1,
"acacia_log":1,
"dark_oak_log":1,
"stripped_spruce_log":1,
"stripped_birch_log":1,
"stripped_jungle_log":1,
"stripped_acacia_log":1,
"stripped_dark_oak_log":1,
"stripped_oak_log":1,
"oak_wood":1,
"spruce_wood":1,
"birch_wood":1,
"jungle_wood":1,
"acacia_wood":1,
"dark_oak_wood":1,
"stripped_oak_wood":1,
"stripped_spruce_wood":1,
"stripped_birch_wood":1,
"stripped_jungle_wood":1,
"stripped_acacia_wood":1,
"stripped_dark_oak_wood":1,
"oak_leaves":1,
"spruce_leaves":1,
"birch_leaves":1,
"jungle_leaves":1,
"acacia_leaves":1,
"dark_oak_leaves":1,
"sponge":1,
"wet_sponge":1,
"glass":1,
"lapis_ore":1,
"lapis_block":1,
"dispenser":1,
"sandstone":1,
"chiseled_sandstone":1,
"cut_sandstone":1,
"note_block":1,
"white_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"orange_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"magenta_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"light_blue_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"yellow_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"lime_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"pink_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"gray_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"light_gray_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"cyan_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"purple_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"blue_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"brown_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"green_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"red_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"black_bed":[3,2,3,2,2,3,2,3,4,5,4,5,5,4,5,4],
"powered_rail":0,
"detector_rail":0,
"sticky_piston":[6,7,8,9,10,11,1,1,1,1,1,1],
"cobweb":0,
"grass":0,
"fern":0,
"dead_bush":0,
"seagrass":0,
"tall_seagrass":0,
"piston":[6,7,8,9,10,11,1,1,1,1,1,1],
"piston_head":[13,13,12,12,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23],
"white_wool":1,
"orange_wool":1,
"magenta_wool":1,
"light_blue_wool":1,
"yellow_wool":1,
"lime_wool":1,
"pink_wool":1,
"gray_wool":1,
"light_gray_wool":1,
"cyan_wool":1,
"purple_wool":1,
"blue_wool":1,
"brown_wool":1,
"green_wool":1,
"red_wool":1,
"black_wool":1,
"moving_piston":0,
"dandelion":0,
"poppy":0,
"blue_orchid":0,
"allium":0,
"azure_bluet":0,
"red_tulip":0,
"orange_tulip":0,
"white_tulip":0,
"pink_tulip":0,
"oxeye_daisy":0,
"cornflower":0,
"wither_rose":0,
"lily_of_the_valley":0,
"brown_mushroom":0,
"red_mushroom":0,
"gold_block":1,
"iron_block":1,
"bricks":1,
"tnt":1,
"bookshelf":1,
"mossy_cobblestone":1,
"obsidian":1,
"torch":0,
"wall_torch":0,
"fire":0,
"spawner":1,
"oak_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"chest":[48,48,49,49,50,50,48,48,50,50,49,49,48,48,51,51,52,52,48,48,52,52,51,51],
"redstone_wire":0,
"diamond_ore":1,
"diamond_block":1,
"crafting_table":1,
"wheat":0,
"farmland":53,
"furnace":1,
"oak_sign":0,
"spruce_sign":0,
"birch_sign":0,
"acacia_sign":0,
"jungle_sign":0,
"dark_oak_sign":0,
"oak_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"ladder":[54,54,57,57,56,56,55,55],
"rail":0,
"cobblestone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"oak_wall_sign":0,
"spruce_wall_sign":0,
"birch_wall_sign":0,
"acacia_wall_sign":0,
"jungle_wall_sign":0,
"dark_oak_wall_sign":0,
"lever":0,
"stone_pressure_plate":0,
"iron_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"oak_pressure_plate":0,
"spruce_pressure_plate":0,
"birch_pressure_plate":0,
"jungle_pressure_plate":0,
"acacia_pressure_plate":0,
"dark_oak_pressure_plate":0,
"redstone_ore":1,
"redstone_torch":0,
"redstone_wall_torch":0,
"stone_button":0,
"snow":[0,58,59,60,61,62,10,63],
"ice":1,
"snow_block":1,
"cactus":64,
"clay":1,
"sugar_cane":0,
"jukebox":1,
"oak_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"pumpkin":1,
"netherrack":1,
"soul_sand":63,
"glowstone":1,
"nether_portal":0,
"carved_pumpkin":1,
"jack_o_lantern":1,
"cake":[81,82,83,84,85,86,87],
"repeater":58,
"white_stained_glass":1,
"orange_stained_glass":1,
"magenta_stained_glass":1,
"light_blue_stained_glass":1,
"yellow_stained_glass":1,
"lime_stained_glass":1,
"pink_stained_glass":1,
"gray_stained_glass":1,
"light_gray_stained_glass":1,
"cyan_stained_glass":1,
"purple_stained_glass":1,
"blue_stained_glass":1,
"brown_stained_glass":1,
"green_stained_glass":1,
"red_stained_glass":1,
"black_stained_glass":1,
"oak_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"spruce_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"birch_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"jungle_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"acacia_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"dark_oak_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"stone_bricks":1,
"mossy_stone_bricks":1,
"cracked_stone_bricks":1,
"chiseled_stone_bricks":1,
"infested_stone":1,
"infested_cobblestone":1,
"infested_stone_bricks":1,
"infested_mossy_stone_bricks":1,
"infested_cracked_stone_bricks":1,
"infested_chiseled_stone_bricks":1,
"brown_mushroom_block":1,
"red_mushroom_block":1,
"mushroom_stem":1,
"iron_bars":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"melon":1,
"attached_pumpkin_stem":0,
"attached_melon_stem":0,
"pumpkin_stem":0,
"melon_stem":0,
"vine":0,
"oak_fence_gate":[0,0,72,72,0,0,72,72,0,0,72,72,0,0,72,72,0,0,75,75,0,0,75,75,0,0,75,75,0,0,75,75],
"brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"stone_brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"mycelium":1,
"lily_pad":106,
"nether_bricks":1,
"nether_brick_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"nether_brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"nether_wart":0,
"enchanting_table":10,
"brewing_stand":107,
"cauldron":108,
"end_portal":0,
"end_portal_frame":[110,110,110,110,109,109,109,109],
"end_stone":1,
"dragon_egg":111,
"redstone_lamp":1,
"cocoa":[112,113,114,115,116,117,118,119,120,121,122,123],
"sandstone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"emerald_ore":1,
"ender_chest":48,
"tripwire_hook":0,
"tripwire":0,
"emerald_block":1,
"spruce_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"birch_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"jungle_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"command_block":1,
"beacon":1,
"cobblestone_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"mossy_cobblestone_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"flower_pot":156,
"potted_oak_sapling":156,
"potted_spruce_sapling":156,
"potted_birch_sapling":156,
"potted_jungle_sapling":156,
"potted_acacia_sapling":156,
"potted_dark_oak_sapling":156,
"potted_fern":156,
"potted_dandelion":156,
"potted_poppy":156,
"potted_blue_orchid":156,
"potted_allium":156,
"potted_azure_bluet":156,
"potted_red_tulip":156,
"potted_orange_tulip":156,
"potted_white_tulip":156,
"potted_pink_tulip":156,
"potted_oxeye_daisy":156,
"potted_cornflower":156,
"potted_lily_of_the_valley":156,
"potted_wither_rose":156,
"potted_red_mushroom":156,
"potted_brown_mushroom":156,
"potted_dead_bush":156,
"potted_cactus":156,
"carrots":0,
"potatoes":0,
"oak_button":0,
"spruce_button":0,
"birch_button":0,
"jungle_button":0,
"acacia_button":0,
"dark_oak_button":0,
"skeleton_skull":157,
"skeleton_wall_skull":[158,159,160,161],
"wither_skeleton_skull":157,
"wither_skeleton_wall_skull":[158,159,160,161],
"zombie_head":157,
"zombie_wall_head":[158,159,160,161],
"player_head":157,
"player_wall_head":[158,159,160,161],
"creeper_head":157,
"creeper_wall_head":[158,159,160,161],
"dragon_head":157,
"dragon_wall_head":[158,159,160,161],
"anvil":[162,162,163,163],
"chipped_anvil":[162,162,163,163],
"damaged_anvil":[162,162,163,163],
"trapped_chest":[48,48,49,49,50,50,48,48,50,50,49,49,48,48,51,51,52,52,48,48,52,52,51,51],
"light_weighted_pressure_plate":0,
"heavy_weighted_pressure_plate":0,
"comparator":58,
"daylight_detector":60,
"redstone_block":1,
"nether_quartz_ore":1,
"hopper":[164,165,166,167,168,164,165,166,167,168],
"quartz_block":1,
"chiseled_quartz_block":1,
"quartz_pillar":1,
"quartz_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"activator_rail":0,
"dropper":1,
"white_terracotta":1,
"orange_terracotta":1,
"magenta_terracotta":1,
"light_blue_terracotta":1,
"yellow_terracotta":1,
"lime_terracotta":1,
"pink_terracotta":1,
"gray_terracotta":1,
"light_gray_terracotta":1,
"cyan_terracotta":1,
"purple_terracotta":1,
"blue_terracotta":1,
"brown_terracotta":1,
"green_terracotta":1,
"red_terracotta":1,
"black_terracotta":1,
"white_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"orange_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"magenta_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"light_blue_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"yellow_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"lime_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"pink_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"gray_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"light_gray_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"cyan_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"purple_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"blue_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"brown_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"green_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"red_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"black_stained_glass_pane":[91,92,91,92,93,94,93,94,95,96,95,96,97,98,97,98,99,100,99,100,101,102,101,102,103,104,103,104,105,90,105,90],
"acacia_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"dark_oak_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"slime_block":1,
"barrier":1,
"iron_trapdoor":[54,54,54,54,89,89,89,89,54,54,54,54,88,88,88,88,57,57,57,57,89,89,89,89,57,57,57,57,88,88,88,88,56,56,56,56,89,89,89,89,56,56,56,56,88,88,88,88,55,55,55,55,89,89,89,89,55,55,55,55,88,88,88,88],
"prismarine":1,
"prismarine_bricks":1,
"dark_prismarine":1,
"prismarine_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"prismarine_brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"dark_prismarine_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"prismarine_slab":[169,169,61,61,1,1],
"prismarine_brick_slab":[169,169,61,61,1,1],
"dark_prismarine_slab":[169,169,61,61,1,1],
"sea_lantern":1,
"hay_block":1,
"white_carpet":170,
"orange_carpet":170,
"magenta_carpet":170,
"light_blue_carpet":170,
"yellow_carpet":170,
"lime_carpet":170,
"pink_carpet":170,
"gray_carpet":170,
"light_gray_carpet":170,
"cyan_carpet":170,
"purple_carpet":170,
"blue_carpet":170,
"brown_carpet":170,
"green_carpet":170,
"red_carpet":170,
"black_carpet":170,
"terracotta":1,
"coal_block":1,
"packed_ice":1,
"sunflower":0,
"lilac":0,
"rose_bush":0,
"peony":0,
"tall_grass":0,
"large_fern":0,
"white_banner":0,
"orange_banner":0,
"magenta_banner":0,
"light_blue_banner":0,
"yellow_banner":0,
"lime_banner":0,
"pink_banner":0,
"gray_banner":0,
"light_gray_banner":0,
"cyan_banner":0,
"purple_banner":0,
"blue_banner":0,
"brown_banner":0,
"green_banner":0,
"red_banner":0,
"black_banner":0,
"white_wall_banner":0,
"orange_wall_banner":0,
"magenta_wall_banner":0,
"light_blue_wall_banner":0,
"yellow_wall_banner":0,
"lime_wall_banner":0,
"pink_wall_banner":0,
"gray_wall_banner":0,
"light_gray_wall_banner":0,
"cyan_wall_banner":0,
"purple_wall_banner":0,
"blue_wall_banner":0,
"brown_wall_banner":0,
"green_wall_banner":0,
"red_wall_banner":0,
"black_wall_banner":0,
"red_sandstone":1,
"chiseled_red_sandstone":1,
"cut_red_sandstone":1,
"red_sandstone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"oak_slab":[169,169,61,61,1,1],
"spruce_slab":[169,169,61,61,1,1],
"birch_slab":[169,169,61,61,1,1],
"jungle_slab":[169,169,61,61,1,1],
"acacia_slab":[169,169,61,61,1,1],
"dark_oak_slab":[169,169,61,61,1,1],
"stone_slab":[169,169,61,61,1,1],
"smooth_stone_slab":[169,169,61,61,1,1],
"sandstone_slab":[169,169,61,61,1,1],
"cut_sandstone_slab":[169,169,61,61,1,1],
"petrified_oak_slab":[169,169,61,61,1,1],
"cobblestone_slab":[169,169,61,61,1,1],
"brick_slab":[169,169,61,61,1,1],
"stone_brick_slab":[169,169,61,61,1,1],
"nether_brick_slab":[169,169,61,61,1,1],
"quartz_slab":[169,169,61,61,1,1],
"red_sandstone_slab":[169,169,61,61,1,1],
"cut_red_sandstone_slab":[169,169,61,61,1,1],
"purpur_slab":[169,169,61,61,1,1],
"smooth_stone":1,
"smooth_sandstone":1,
"smooth_quartz":1,
"smooth_red_sandstone":1,
"spruce_fence_gate":[0,0,72,72,0,0,72,72,0,0,72,72,0,0,72,72,0,0,75,75,0,0,75,75,0,0,75,75,0,0,75,75],
"birch_fence_gate":[0,0,72,72,0,0,72,72,0,0,72,72,0,0,72,72,0,0,75,75,0,0,75,75,0,0,75,75,0,0,75,75],
"jungle_fence_gate":[0,0,72,72,0,0,72,72,0,0,72,72,0,0,72,72,0,0,75,75,0,0,75,75,0,0,75,75,0,0,75,75],
"acacia_fence_gate":[0,0,72,72,0,0,72,72,0,0,72,72,0,0,72,72,0,0,75,75,0,0,75,75,0,0,75,75,0,0,75,75],
"dark_oak_fence_gate":[0,0,72,72,0,0,72,72,0,0,72,72,0,0,72,72,0,0,75,75,0,0,75,75,0,0,75,75,0,0,75,75],
"spruce_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"birch_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"jungle_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"acacia_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"dark_oak_fence":[66,67,66,67,68,69,68,69,70,71,70,71,72,73,72,73,74,75,74,75,76,77,76,77,78,79,78,79,80,65,80,65],
"spruce_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"birch_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"jungle_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"acacia_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"dark_oak_door":[55,55,54,54,56,56,54,54,55,55,54,54,56,56,54,54,56,56,57,57,55,55,57,57,56,56,57,57,55,55,57,57,54,54,56,56,57,57,56,56,54,54,56,56,57,57,56,56,57,57,55,55,54,54,55,55,57,57,55,55,54,54,55,55],
"end_rod":[172,173,172,173,171,171],
"chorus_plant":[175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,174],
"chorus_flower":1,
"purpur_block":1,
"purpur_pillar":1,
"purpur_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"end_stone_bricks":1,
"beetroots":0,
"grass_path":53,
"end_gateway":0,
"repeating_command_block":1,
"chain_command_block":1,
"frosted_ice":1,
"magma_block":1,
"nether_wart_block":1,
"red_nether_bricks":1,
"bone_block":1,
"structure_void":0,
"observer":1,
"shulker_box":1,
"white_shulker_box":1,
"orange_shulker_box":1,
"magenta_shulker_box":1,
"light_blue_shulker_box":1,
"yellow_shulker_box":1,
"lime_shulker_box":1,
"pink_shulker_box":1,
"gray_shulker_box":1,
"light_gray_shulker_box":1,
"cyan_shulker_box":1,
"purple_shulker_box":1,
"blue_shulker_box":1,
"brown_shulker_box":1,
"green_shulker_box":1,
"red_shulker_box":1,
"black_shulker_box":1,
"white_glazed_terracotta":1,
"orange_glazed_terracotta":1,
"magenta_glazed_terracotta":1,
"light_blue_glazed_terracotta":1,
"yellow_glazed_terracotta":1,
"lime_glazed_terracotta":1,
"pink_glazed_terracotta":1,
"gray_glazed_terracotta":1,
"light_gray_glazed_terracotta":1,
"cyan_glazed_terracotta":1,
"purple_glazed_terracotta":1,
"blue_glazed_terracotta":1,
"brown_glazed_terracotta":1,
"green_glazed_terracotta":1,
"red_glazed_terracotta":1,
"black_glazed_terracotta":1,
"white_concrete":1,
"orange_concrete":1,
"magenta_concrete":1,
"light_blue_concrete":1,
"yellow_concrete":1,
"lime_concrete":1,
"pink_concrete":1,
"gray_concrete":1,
"light_gray_concrete":1,
"cyan_concrete":1,
"purple_concrete":1,
"blue_concrete":1,
"brown_concrete":1,
"green_concrete":1,
"red_concrete":1,
"black_concrete":1,
"white_concrete_powder":1,
"orange_concrete_powder":1,
"magenta_concrete_powder":1,
"light_blue_concrete_powder":1,
"yellow_concrete_powder":1,
"lime_concrete_powder":1,
"pink_concrete_powder":1,
"gray_concrete_powder":1,
"light_gray_concrete_powder":1,
"cyan_concrete_powder":1,
"purple_concrete_powder":1,
"blue_concrete_powder":1,
"brown_concrete_powder":1,
"green_concrete_powder":1,
"red_concrete_powder":1,
"black_concrete_powder":1,
"kelp":0,
"kelp_plant":0,
"dried_kelp_block":1,
"turtle_egg":[238,238,238,239,239,239,239,239,239,239,239,239],
"dead_tube_coral_block":1,
"dead_brain_coral_block":1,
"dead_bubble_coral_block":1,
"dead_fire_coral_block":1,
"dead_horn_coral_block":1,
"tube_coral_block":1,
"brain_coral_block":1,
"bubble_coral_block":1,
"fire_coral_block":1,
"horn_coral_block":1,
"dead_tube_coral":0,
"dead_brain_coral":0,
"dead_bubble_coral":0,
"dead_fire_coral":0,
"dead_horn_coral":0,
"tube_coral":0,
"brain_coral":0,
"bubble_coral":0,
"fire_coral":0,
"horn_coral":0,
"dead_tube_coral_fan":0,
"dead_brain_coral_fan":0,
"dead_bubble_coral_fan":0,
"dead_fire_coral_fan":0,
"dead_horn_coral_fan":0,
"tube_coral_fan":0,
"brain_coral_fan":0,
"bubble_coral_fan":0,
"fire_coral_fan":0,
"horn_coral_fan":0,
"dead_tube_coral_wall_fan":0,
"dead_brain_coral_wall_fan":0,
"dead_bubble_coral_wall_fan":0,
"dead_fire_coral_wall_fan":0,
"dead_horn_coral_wall_fan":0,
"tube_coral_wall_fan":0,
"brain_coral_wall_fan":0,
"bubble_coral_wall_fan":0,
"fire_coral_wall_fan":0,
"horn_coral_wall_fan":0,
"sea_pickle":[240,240,241,241,242,242,243,243],
"blue_ice":1,
"conduit":244,
"bamboo_sapling":0,
"bamboo":245,
"potted_bamboo":156,
"void_air":0,
"cave_air":0,
"bubble_column":0,
"polished_granite_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"smooth_red_sandstone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"mossy_stone_brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"polished_diorite_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"mossy_cobblestone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"end_stone_brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"stone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"smooth_sandstone_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"smooth_quartz_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"granite_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"andesite_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"red_nether_brick_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"polished_andesite_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"diorite_stairs":[25,25,26,26,27,27,28,28,29,29,24,24,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,36,36,26,26,38,38,28,28,45,45,41,41,30,30,43,43,32,32,46,46,27,27,35,35,29,29,37,37,47,47,31,31,40,40,33,33,42,42],
"polished_granite_slab":[169,169,61,61,1,1],
"smooth_red_sandstone_slab":[169,169,61,61,1,1],
"mossy_stone_brick_slab":[169,169,61,61,1,1],
"polished_diorite_slab":[169,169,61,61,1,1],
"mossy_cobblestone_slab":[169,169,61,61,1,1],
"end_stone_brick_slab":[169,169,61,61,1,1],
"smooth_sandstone_slab":[169,169,61,61,1,1],
"smooth_quartz_slab":[169,169,61,61,1,1],
"granite_slab":[169,169,61,61,1,1],
"andesite_slab":[169,169,61,61,1,1],
"red_nether_brick_slab":[169,169,61,61,1,1],
"polished_andesite_slab":[169,169,61,61,1,1],
"diorite_slab":[169,169,61,61,1,1],
"brick_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"prismarine_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"red_sandstone_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"mossy_stone_brick_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"granite_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"stone_brick_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"nether_brick_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"andesite_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"red_nether_brick_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"sandstone_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"end_stone_brick_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"diorite_wall":[125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138,139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,124,153,124,154,155,154,155],
"scaffolding":246,
"loom":1,
"barrel":1,
"smoker":1,
"blast_furnace":1,
"cartography_table":1,
"fletching_table":1,
"grindstone":[248,248,249,249,247,250,251,252,253,253,254,254],
"lectern":255,
"smithing_table":1,
"stonecutter":256,
"bell":[257,257,258,258,259,259,259,259,260,261,262,263,264,264,265,265],
"lantern":[267,266],
"campfire":268,
"sweet_berry_bush":0,
"structure_block":1,
"jigsaw":1,
"composter":269},
"shapes":{"0":[],
"1":[[0.0,0.0,0.0,1.0,1.0,1.0]],
"2":[[0.0,0.0,0.8125,0.1875,0.5625,1.0],[0.0,0.1875,0.0,1.0,0.5625,0.8125],[0.1875,0.1875,0.8125,1.0,0.5625,1.0],[0.8125,0.0,0.8125,1.0,0.1875,1.0]],
"3":[[0.0,0.0,0.0,0.1875,0.5625,0.1875],[0.0,0.1875,0.1875,1.0,0.5625,1.0],[0.1875,0.1875,0.0,1.0,0.5625,0.1875],[0.8125,0.0,0.0,1.0,0.1875,0.1875]],
"4":[[0.0,0.0,0.0,0.1875,0.5625,0.1875],[0.0,0.0,0.8125,0.1875,0.5625,1.0],[0.0,0.1875,0.1875,1.0,0.5625,0.8125],[0.1875,0.1875,0.0,1.0,0.5625,0.1875],[0.1875,0.1875,0.8125,1.0,0.5625,1.0]],
"5":[[0.0,0.1875,0.0,1.0,0.5625,1.0],[0.8125,0.0,0.0,1.0,0.1875,0.1875],[0.8125,0.0,0.8125,1.0,0.1875,1.0]],
"6":[[0.0,0.0,0.25,1.0,1.0,1.0]],
"7":[[0.0,0.0,0.0,0.75,1.0,1.0]],
"8":[[0.0,0.0,0.0,1.0,1.0,0.75]],
"9":[[0.25,0.0,0.0,1.0,1.0,1.0]],
"10":[[0.0,0.0,0.0,1.0,0.75,1.0]],
"11":[[0.0,0.25,0.0,1.0,1.0,1.0]],
"12":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.25]],
"13":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.0]],
"14":[[0.0,0.375,0.375,1.0,0.625,0.625],[0.75,0.0,0.0,1.0,0.375,1.0],[0.75,0.375,0.0,1.0,1.0,0.375],[0.75,0.375,0.625,1.0,1.0,1.0],[0.75,0.625,0.375,1.0,1.0,0.625]],
"15":[[-0.25,0.375,0.375,1.0,0.625,0.625],[0.75,0.0,0.0,1.0,0.375,1.0],[0.75,0.375,0.0,1.0,1.0,0.375],[0.75,0.375,0.625,1.0,1.0,1.0],[0.75,0.625,0.375,1.0,1.0,0.625]],
"16":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,0.0,0.625,0.625,0.75]],
"17":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,-0.25,0.625,0.625,0.75]],
"18":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.0,0.625,0.625]],
"19":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.25,0.625,0.625]],
"20":[[0.0,0.75,0.0,1.0,1.0,1.0],[0.375,0.0,0.375,0.625,0.75,0.625]],
"21":[[0.0,0.75,0.0,1.0,1.0,1.0],[0.375,-0.25,0.375,0.625,0.75,0.625]],
"22":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.0,0.625]],
"23":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.25,0.625]],
"24":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],
"25":[[0.0,0.0,0.0,1.0,1.0,0.5],[0.0,0.5,0.5,1.0,1.0,1.0]],
"26":[[0.0,0.0,0.0,0.5,1.0,1.0],[0.5,0.0,0.0,1.0,1.0,0.5],[0.5,0.5,0.5,1.0,1.0,1.0]],
"27":[[0.0,0.0,0.0,1.0,1.0,0.5],[0.0,0.5,0.5,1.0,1.0,1.0],[0.5,0.0,0.5,1.0,0.5,1.0]],
"28":[[0.0,0.0,0.0,0.5,1.0,0.5],[0.0,0.5,0.5,1.0,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],
"29":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,0.5,0.5]],
"30":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],
"31":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5],[0.5,0.5,0.5,1.0,1.0,1.0]],
"32":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,0.5]],
"33":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],
"34":[[0.0,0.0,0.5,1.0,1.0,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],
"35":[[0.0,0.0,0.5,1.0,1.0,1.0],[0.0,0.5,0.0,1.0,1.0,0.5],[0.5,0.0,0.0,1.0,0.5,0.5]],
"36":[[0.0,0.0,0.0,0.5,1.0,1.0],[0.5,0.0,0.5,1.0,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],
"37":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.5,1.0,0.5,1.0]],
"38":[[0.0,0.0,0.5,0.5,1.0,1.0],[0.0,0.5,0.0,1.0,1.0,0.5],[0.5,0.5,0.5,1.0,1.0,1.0]],
"39":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0]],
"40":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],
"41":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0],[0.5,0.5,0.5,1.0,1.0,1.0]],
"42":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.5,1.0,1.0,1.0]],
"43":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,0.5,1.0,1.0]],
"44":[[0.0,0.0,0.0,0.5,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],
"45":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],
"46":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,0.5,1.0]],
"47":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],
"48":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],
"49":[[0.0625,0.0,0.0625,1.0,0.875,0.9375]],
"50":[[0.0,0.0,0.0625,0.9375,0.875,0.9375]],
"51":[[0.0625,0.0,0.0,0.9375,0.875,0.9375]],
"52":[[0.0625,0.0,0.0625,0.9375,0.875,1.0]],
"53":[[0.0,0.0,0.0,1.0,0.9375,1.0]],
"54":[[0.0,0.0,0.8125,1.0,1.0,1.0]],
"55":[[0.0,0.0,0.0,0.1875,1.0,1.0]],
"56":[[0.8125,0.0,0.0,1.0,1.0,1.0]],
"57":[[0.0,0.0,0.0,1.0,1.0,0.1875]],
"58":[[0.0,0.0,0.0,1.0,0.125,1.0]],
"59":[[0.0,0.0,0.0,1.0,0.25,1.0]],
"60":[[0.0,0.0,0.0,1.0,0.375,1.0]],
"61":[[0.0,0.0,0.0,1.0,0.5,1.0]],
"62":[[0.0,0.0,0.0,1.0,0.625,1.0]],
"63":[[0.0,0.0,0.0,1.0,0.875,1.0]],
"64":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],
"65":[[0.375,0.0,0.375,0.625,1.5,0.625]],
"66":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],
"67":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],
"68":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],
"69":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],
"70":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],
"71":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],
"72":[[0.0,0.0,0.375,1.0,1.5,0.625]],
"73":[[0.375,0.0,0.375,1.0,1.5,0.625]],
"74":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],
"75":[[0.375,0.0,0.0,0.625,1.5,1.0]],
"76":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],
"77":[[0.375,0.0,0.0,0.625,1.5,0.625]],
"78":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],
"79":[[0.375,0.0,0.375,0.625,1.5,1.0]],
"80":[[0.0,0.0,0.375,0.625,1.5,0.625]],
"81":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375]],
"82":[[0.1875,0.0,0.0625,0.9375,0.5,0.9375]],
"83":[[0.3125,0.0,0.0625,0.9375,0.5,0.9375]],
"84":[[0.4375,0.0,0.0625,0.9375,0.5,0.9375]],
"85":[[0.5625,0.0,0.0625,0.9375,0.5,0.9375]],
"86":[[0.6875,0.0,0.0625,0.9375,0.5,0.9375]],
"87":[[0.8125,0.0,0.0625,0.9375,0.5,0.9375]],
"88":[[0.0,0.0,0.0,1.0,0.1875,1.0]],
"89":[[0.0,0.8125,0.0,1.0,1.0,1.0]],
"90":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],
"91":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],
"92":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],
"93":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],
"94":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],
"95":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],
"96":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],
"97":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],
"98":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],
"99":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],
"100":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],
"101":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],
"102":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],
"103":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],
"104":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],
"105":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],
"106":[[0.0625,0.0,0.0625,0.9375,0.09375,0.9375]],
"107":[[0.0625,0.0,0.0625,0.9375,0.125,0.9375],[0.4375,0.125,0.4375,0.5625,0.875,0.5625]],
"108":[[0.0,0.0,0.0,0.125,1.0,0.25],[0.0,0.0,0.75,0.125,1.0,1.0],[0.0,0.1875,0.25,1.0,0.25,0.75],[0.0,0.25,0.25,0.125,1.0,0.75],[0.125,0.0,0.0,0.25,1.0,0.125],[0.125,0.0,0.875,0.25,1.0,1.0],[0.125,0.1875,0.125,1.0,0.25,0.25],[0.125,0.1875,0.75,1.0,0.25,0.875],[0.25,0.1875,0.0,1.0,1.0,0.125],[0.25,0.1875,0.875,1.0,1.0,1.0],[0.75,0.0,0.0,1.0,0.1875,0.125],[0.75,0.0,0.875,1.0,0.1875,1.0],[0.875,0.0,0.125,1.0,0.1875,0.25],[0.875,0.0,0.75,1.0,0.1875,0.875],[0.875,0.25,0.125,1.0,1.0,0.875]],
"109":[[0.0,0.0,0.0,1.0,0.8125,1.0]],
"110":[[0.0,0.0,0.0,1.0,0.8125,1.0],[0.25,0.8125,0.25,0.75,1.0,0.75]],
"111":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],
"112":[[0.375,0.4375,0.0625,0.625,0.75,0.3125]],
"113":[[0.375,0.4375,0.6875,0.625,0.75,0.9375]],
"114":[[0.0625,0.4375,0.375,0.3125,0.75,0.625]],
"115":[[0.6875,0.4375,0.375,0.9375,0.75,0.625]],
"116":[[0.3125,0.3125,0.0625,0.6875,0.75,0.4375]],
"117":[[0.3125,0.3125,0.5625,0.6875,0.75,0.9375]],
"118":[[0.0625,0.3125,0.3125,0.4375,0.75,0.6875]],
"119":[[0.5625,0.3125,0.3125,0.9375,0.75,0.6875]],
"120":[[0.25,0.1875,0.0625,0.75,0.75,0.5625]],
"121":[[0.25,0.1875,0.4375,0.75,0.75,0.9375]],
"122":[[0.0625,0.1875,0.25,0.5625,0.75,0.75]],
"123":[[0.4375,0.1875,0.25,0.9375,0.75,0.75]],
"124":[[0.25,0.0,0.25,0.75,1.5,0.75]],
"125":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],
"126":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],
"127":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],
"128":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],
"129":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],
"130":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],
"131":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],
"132":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],
"133":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],
"134":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],
"135":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],
"136":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],
"137":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],
"138":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],
"139":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],
"140":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],
"141":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],
"142":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],
"143":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],
"144":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],
"145":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],
"146":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],
"147":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],
"148":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],
"149":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],
"150":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],
"151":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],
"152":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],
"153":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],
"154":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],
"155":[[0.5,0.0,0.5,0.5,1.5,0.5]],
"156":[[0.3125,0.0,0.3125,0.6875,0.375,0.6875]],
"157":[[0.25,0.0,0.25,0.75,0.5,0.75]],
"158":[[0.25,0.25,0.5,0.75,0.75,1.0]],
"159":[[0.25,0.25,0.0,0.75,0.75,0.5]],
"160":[[0.5,0.25,0.25,1.0,0.75,0.75]],
"161":[[0.0,0.25,0.25,0.5,0.75,0.75]],
"162":[[0.125,0.0,0.125,0.875,0.25,0.875],[0.1875,0.625,0.0,0.8125,1.0,1.0],[0.25,0.25,0.1875,0.75,0.3125,0.8125],[0.375,0.3125,0.25,0.625,0.625,0.75]],
"163":[[0.0,0.625,0.1875,1.0,1.0,0.8125],[0.125,0.0,0.125,0.875,0.25,0.875],[0.1875,0.25,0.25,0.8125,0.3125,0.75],[0.25,0.3125,0.375,0.75,0.625,0.625]],
"164":[[0.0,0.625,0.0,1.0,0.6875,1.0],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.25,0.25,0.25,0.75,0.625,0.75],[0.375,0.0,0.375,0.625,0.25,0.625],[0.875,0.6875,0.125,1.0,1.0,0.875]],
"165":[[0.0,0.625,0.0,1.0,0.6875,1.0],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.25,0.25,0.25,0.75,0.625,0.75],[0.375,0.25,0.0,0.625,0.5,0.25],[0.875,0.6875,0.125,1.0,1.0,0.875]],
"166":[[0.0,0.625,0.0,1.0,0.6875,1.0],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.25,0.25,0.25,0.75,0.625,0.75],[0.375,0.25,0.75,0.625,0.5,1.0],[0.875,0.6875,0.125,1.0,1.0,0.875]],
"167":[[0.0,0.25,0.375,0.75,0.5,0.625],[0.0,0.625,0.0,1.0,0.6875,1.0],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.25,0.25,0.25,0.75,0.625,0.375],[0.25,0.25,0.625,0.75,0.625,0.75],[0.25,0.5,0.375,0.75,0.625,0.625],[0.875,0.6875,0.125,1.0,1.0,0.875]],
"168":[[0.0,0.625,0.0,1.0,0.6875,1.0],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.25,0.25,0.25,0.75,0.625,0.75],[0.75,0.25,0.375,1.0,0.5,0.625],[0.875,0.6875,0.125,1.0,1.0,0.875]],
"169":[[0.0,0.5,0.0,1.0,1.0,1.0]],
"170":[[0.0,0.0,0.0,1.0,0.0625,1.0]],
"171":[[0.375,0.0,0.375,0.625,1.0,0.625]],
"172":[[0.375,0.375,0.0,0.625,0.625,1.0]],
"173":[[0.0,0.375,0.375,1.0,0.625,0.625]],
"174":[[0.1875,0.1875,0.1875,0.8125,0.8125,0.8125]],
"175":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"176":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"177":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"178":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"179":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"180":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"181":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],
"182":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"183":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"184":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"185":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"186":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"187":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"188":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"189":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125]],
"190":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"191":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"192":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"193":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"194":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"195":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"196":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],
"197":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],
"198":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],
"199":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"200":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"201":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"202":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"203":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"204":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125]],
"205":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.0,0.1875,0.8125,0.1875,0.8125]],
"206":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125]],
"207":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"208":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"209":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"210":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"211":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"212":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"213":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],
"214":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"215":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"216":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"217":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"218":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],
"219":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"220":[[0.1875,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"221":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125]],
"222":[[0.1875,0.1875,0.1875,1.0,0.8125,0.8125]],
"223":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"224":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"225":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"226":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0]],
"227":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"228":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"229":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],
"230":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125]],
"231":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"232":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"233":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],
"234":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0]],
"235":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],
"236":[[0.1875,0.1875,0.1875,0.8125,1.0,0.8125]],
"237":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125]],
"238":[[0.1875,0.0,0.1875,0.75,0.4375,0.75]],
"239":[[0.0625,0.0,0.0625,0.9375,0.4375,0.9375]],
"240":[[0.375,0.0,0.375,0.625,0.375,0.625]],
"241":[[0.1875,0.0,0.1875,0.8125,0.375,0.8125]],
"242":[[0.125,0.0,0.125,0.875,0.375,0.875]],
"243":[[0.125,0.0,0.125,0.875,0.4375,0.875]],
"244":[[0.3125,0.3125,0.3125,0.6875,0.6875,0.6875]],
"245":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],
"246":[[0.0,0.0,0.0,0.125,1.0,0.125],[0.0,0.0,0.875,0.125,1.0,1.0],[0.0,0.875,0.125,1.0,1.0,0.875],[0.125,0.875,0.0,1.0,1.0,0.125],[0.125,0.875,0.875,1.0,1.0,1.0],[0.875,0.0,0.0,1.0,0.875,0.125],[0.875,0.0,0.875,1.0,0.875,1.0]],
"247":[[0.125,0.3125,0.1875,0.875,0.6875,0.5625],[0.125,0.375,0.5625,0.25,0.625,1.0],[0.25,0.125,0.0,0.75,0.3125,0.75],[0.25,0.3125,0.0,0.75,0.875,0.1875],[0.25,0.3125,0.5625,0.75,0.875,0.75],[0.25,0.6875,0.1875,0.75,0.875,0.5625],[0.75,0.375,0.5625,0.875,0.625,1.0]],
"248":[[0.125,0.0,0.375,0.25,0.8125,0.625],[0.125,0.4375,0.3125,0.875,0.8125,0.375],[0.125,0.4375,0.625,0.875,0.8125,0.6875],[0.25,0.25,0.125,0.75,0.4375,0.875],[0.25,0.4375,0.125,0.75,1.0,0.3125],[0.25,0.4375,0.375,0.875,0.8125,0.625],[0.25,0.4375,0.6875,0.75,1.0,0.875],[0.25,0.8125,0.3125,0.75,1.0,0.6875],[0.75,0.0,0.375,0.875,0.4375,0.625]],
"249":[[0.125,0.25,0.25,0.875,1.0,0.75],[0.3125,0.4375,0.125,0.6875,0.8125,0.25],[0.3125,0.4375,0.75,0.6875,0.8125,0.875],[0.375,0.0,0.125,0.625,0.4375,0.25],[0.375,0.0,0.75,0.625,0.4375,0.875]],
"250":[[0.125,0.3125,0.4375,0.875,0.6875,0.8125],[0.125,0.375,0.0,0.25,0.625,0.4375],[0.25,0.125,0.25,0.75,0.3125,1.0],[0.25,0.3125,0.25,0.75,0.875,0.4375],[0.25,0.3125,0.8125,0.75,0.875,1.0],[0.25,0.6875,0.4375,0.75,0.875,0.8125],[0.75,0.375,0.0,0.875,0.625,0.4375]],
"251":[[0.0,0.125,0.25,0.75,0.875,0.75],[0.1875,0.3125,0.125,0.5625,0.6875,0.25],[0.1875,0.3125,0.75,0.5625,0.6875,0.875],[0.5625,0.375,0.125,1.0,0.625,0.25],[0.5625,0.375,0.75,1.0,0.625,0.875]],
"252":[[0.0,0.375,0.125,0.8125,0.625,0.25],[0.0,0.375,0.75,0.8125,0.625,0.875],[0.25,0.125,0.25,1.0,0.875,0.75],[0.4375,0.3125,0.125,0.8125,0.375,0.25],[0.4375,0.3125,0.75,0.8125,0.375,0.875],[0.4375,0.625,0.125,0.8125,0.6875,0.25],[0.4375,0.625,0.75,0.8125,0.6875,0.875]],
"253":[[0.125,0.1875,0.3125,0.875,0.5625,0.6875],[0.125,0.5625,0.375,0.875,0.75,0.625],[0.125,0.75,0.375,0.25,1.0,0.625],[0.25,0.0,0.125,0.75,0.1875,0.875],[0.25,0.1875,0.125,0.75,0.75,0.3125],[0.25,0.1875,0.6875,0.75,0.75,0.875],[0.25,0.5625,0.3125,0.75,0.75,0.375],[0.25,0.5625,0.625,0.75,0.75,0.6875],[0.75,0.75,0.375,0.875,1.0,0.625]],
"254":[[0.125,0.0,0.25,0.875,0.75,0.75],[0.3125,0.1875,0.125,0.6875,0.5625,0.25],[0.3125,0.1875,0.75,0.6875,0.5625,0.875],[0.375,0.5625,0.125,0.625,1.0,0.25],[0.375,0.5625,0.75,0.625,1.0,0.875]],
"255":[[0.0,0.0,0.0,1.0,0.125,1.0],[0.25,0.125,0.25,0.75,0.875,0.75]],
"256":[[0.0,0.0,0.0,1.0,0.5625,1.0]],
"257":[[0.0,0.0,0.25,1.0,1.0,0.75]],
"258":[[0.25,0.0,0.0,0.75,1.0,1.0]],
"259":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.4375,0.5625,1.0,0.5625]],
"260":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.0,0.5625,0.9375,0.8125]],
"261":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.1875,0.5625,0.9375,1.0]],
"262":[[0.0,0.8125,0.4375,0.8125,0.9375,0.5625],[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875]],
"263":[[0.1875,0.8125,0.4375,1.0,0.9375,0.5625],[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875]],
"264":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.0,0.5625,0.9375,1.0]],
"265":[[0.0,0.8125,0.4375,1.0,0.9375,0.5625],[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875]],
"266":[[0.3125,0.0,0.3125,0.6875,0.4375,0.6875],[0.375,0.4375,0.375,0.625,0.5625,0.625]],
"267":[[0.3125,0.0625,0.3125,0.6875,0.5,0.6875],[0.375,0.5,0.375,0.625,0.625,0.625]],
"268":[[0.0,0.0,0.0,1.0,0.4375,1.0]],
"269":[[0.0,0.0,0.0,1.0,0.125,1.0],[0.0,0.125,0.0,0.125,1.0,1.0],[0.125,0.125,0.0,1.0,1.0,0.125],[0.125,0.125,0.875,1.0,1.0,1.0],[0.875,0.125,0.125,1.0,1.0,0.875]]}}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,200 @@
[
{
"id": 1,
"name": "Speed",
"displayName": "Speed",
"type": "good"
},
{
"id": 2,
"name": "Slowness",
"displayName": "Slowness",
"type": "bad"
},
{
"id": 3,
"name": "Haste",
"displayName": "Haste",
"type": "good"
},
{
"id": 4,
"name": "MiningFatigue",
"displayName": "Mining Fatigue",
"type": "bad"
},
{
"id": 5,
"name": "Strength",
"displayName": "Strength",
"type": "good"
},
{
"id": 6,
"name": "InstantHealth",
"displayName": "Instant Health",
"type": "good"
},
{
"id": 7,
"name": "InstantDamage",
"displayName": "Instant Damage",
"type": "bad"
},
{
"id": 8,
"name": "JumpBoost",
"displayName": "Jump Boost",
"type": "good"
},
{
"id": 9,
"name": "Nausea",
"displayName": "Nausea",
"type": "bad"
},
{
"id": 10,
"name": "Regeneration",
"displayName": "Regeneration",
"type": "good"
},
{
"id": 11,
"name": "Resistance",
"displayName": "Resistance",
"type": "good"
},
{
"id": 12,
"name": "FireResistance",
"displayName": "Fire Resistance",
"type": "good"
},
{
"id": 13,
"name": "WaterBreathing",
"displayName": "Water Breathing",
"type": "good"
},
{
"id": 14,
"name": "Invisibility",
"displayName": "Invisibility",
"type": "good"
},
{
"id": 15,
"name": "Blindness",
"displayName": "Blindness",
"type": "bad"
},
{
"id": 16,
"name": "NightVision",
"displayName": "Night Vision",
"type": "good"
},
{
"id": 17,
"name": "Hunger",
"displayName": "Hunger",
"type": "bad"
},
{
"id": 18,
"name": "Weakness",
"displayName": "Weakness",
"type": "bad"
},
{
"id": 19,
"name": "Poison",
"displayName": "Poison",
"type": "bad"
},
{
"id": 20,
"name": "Wither",
"displayName": "Wither",
"type": "bad"
},
{
"id": 21,
"name": "HealthBoost",
"displayName": "Health Boost",
"type": "good"
},
{
"id": 22,
"name": "Absorption",
"displayName": "Absorption",
"type": "good"
},
{
"id": 23,
"name": "Saturation",
"displayName": "Saturation",
"type": "good"
},
{
"id": 24,
"name": "Glowing",
"displayName": "Glowing",
"type": "bad"
},
{
"id": 25,
"name": "Levitation",
"displayName": "Levitation",
"type": "bad"
},
{
"id": 26,
"name": "Luck",
"displayName": "Luck",
"type": "good"
},
{
"id": 27,
"name": "BadLuck",
"displayName": "Bad Luck",
"type": "bad"
},
{
"id": 28,
"name": "SlowFalling",
"displayName": "Slow Falling",
"type": "good"
},
{
"id": 29,
"name": "ConduitPower",
"displayName": "Conduit Power",
"type": "good"
},
{
"id": 30,
"name": "DolphinsGrace",
"displayName": "Dolphin's Grace",
"type": "good"
},
{
"id": 31,
"name": "DolphinsGrace",
"displayName": "Dolphin's Grace",
"type": "good"
},
{
"id": 32,
"name": "BadOmen",
"displayName": "Bad Omen",
"type": "good"
},
{
"id": 32,
"name": "HeroOfTheVillage",
"displayName": "Hero Of The Village",
"type": "good"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+392
View File
@@ -0,0 +1,392 @@
[
{
"id": 524,
"displayName": "Apple",
"name": "apple",
"stackSize": 64,
"foodPoints": 4,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 547,
"displayName": "Mushroom Stew",
"name": "mushroom_stew",
"stackSize": 1,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 562,
"displayName": "Bread",
"name": "bread",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 584,
"displayName": "Raw Porkchop",
"name": "porkchop",
"stackSize": 64,
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 585,
"displayName": "Cooked Porkchop",
"name": "cooked_porkchop",
"stackSize": 64,
"foodPoints": 8,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 587,
"displayName": "Golden Apple",
"name": "golden_apple",
"stackSize": 64,
"foodPoints": 4,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 588,
"displayName": "Enchanted Golden Apple",
"name": "enchanted_golden_apple",
"stackSize": 64,
"foodPoints": 4,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 625,
"displayName": "Raw Cod",
"name": "cod",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 626,
"displayName": "Raw Salmon",
"name": "salmon",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 627,
"displayName": "Tropical Fish",
"name": "tropical_fish",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 628,
"displayName": "Pufferfish",
"name": "pufferfish",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 629,
"displayName": "Cooked Cod",
"name": "cooked_cod",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 630,
"displayName": "Cooked Salmon",
"name": "cooked_salmon",
"stackSize": 64,
"foodPoints": 6,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.5999999999999999
},
{
"id": 653,
"displayName": "Cake",
"name": "cake",
"stackSize": 1,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 670,
"displayName": "Cookie",
"name": "cookie",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 673,
"displayName": "Melon Slice",
"name": "melon_slice",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 674,
"displayName": "Dried Kelp",
"name": "dried_kelp",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 677,
"displayName": "Raw Beef",
"name": "beef",
"stackSize": 64,
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 678,
"displayName": "Steak",
"name": "cooked_beef",
"stackSize": 64,
"foodPoints": 8,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 679,
"displayName": "Raw Chicken",
"name": "chicken",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 680,
"displayName": "Cooked Chicken",
"name": "cooked_chicken",
"stackSize": 64,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 681,
"displayName": "Rotten Flesh",
"name": "rotten_flesh",
"stackSize": 64,
"foodPoints": 4,
"saturation": 0.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.2
},
{
"id": 689,
"displayName": "Spider Eye",
"name": "spider_eye",
"stackSize": 64,
"foodPoints": 2,
"saturation": 3.2,
"effectiveQuality": 5.2,
"saturationRatio": 1.6
},
{
"id": 762,
"displayName": "Carrot",
"name": "carrot",
"stackSize": 64,
"foodPoints": 3,
"saturation": 3.6,
"effectiveQuality": 6.6,
"saturationRatio": 1.2
},
{
"id": 763,
"displayName": "Potato",
"name": "potato",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 764,
"displayName": "Baked Potato",
"name": "baked_potato",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 765,
"displayName": "Poisonous Potato",
"name": "poisonous_potato",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 767,
"displayName": "Golden Carrot",
"name": "golden_carrot",
"stackSize": 64,
"foodPoints": 6,
"saturation": 14.4,
"effectiveQuality": 20.4,
"saturationRatio": 2.4
},
{
"id": 776,
"displayName": "Pumpkin Pie",
"name": "pumpkin_pie",
"stackSize": 64,
"foodPoints": 8,
"saturation": 4.8,
"effectiveQuality": 12.8,
"saturationRatio": 0.6
},
{
"id": 786,
"displayName": "Raw Rabbit",
"name": "rabbit",
"stackSize": 64,
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 787,
"displayName": "Cooked Rabbit",
"name": "cooked_rabbit",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 788,
"displayName": "Rabbit Stew",
"name": "rabbit_stew",
"stackSize": 1,
"foodPoints": 10,
"saturation": 12,
"effectiveQuality": 22,
"saturationRatio": 1.2
},
{
"id": 799,
"displayName": "Raw Mutton",
"name": "mutton",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 800,
"displayName": "Cooked Mutton",
"name": "cooked_mutton",
"stackSize": 64,
"foodPoints": 6,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.5999999999999999
},
{
"id": 818,
"displayName": "Chorus Fruit",
"name": "chorus_fruit",
"stackSize": 64,
"foodPoints": 4,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 820,
"displayName": "Beetroot",
"name": "beetroot",
"stackSize": 64,
"foodPoints": 1,
"saturation": 1.2,
"effectiveQuality": 2.2,
"saturationRatio": 1.2
},
{
"id": 822,
"displayName": "Beetroot Soup",
"name": "beetroot_soup",
"stackSize": 1,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 857,
"displayName": "Suspicious Stew",
"name": "suspicious_stew",
"stackSize": 1,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 875,
"displayName": "Sweet Berries",
"name": "sweet_berries",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
}
]
@@ -0,0 +1,42 @@
[
{
"id": 0,
"name": "harp"
},
{
"id": 1,
"name": "basedrum"
},
{
"id": 2,
"name": "snare"
},
{
"id": 3,
"name": "hat"
},
{
"id": 4,
"name": "bass"
},
{
"id": 5,
"name": "flute"
},
{
"id": 6,
"name": "bell"
},
{
"id": 7,
"name": "guitar"
},
{
"id": 8,
"name": "chime"
},
{
"id": 9,
"name": "xylophone"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,61 @@
{
"rock": {
"521": 6,
"535": 2,
"539": 4,
"543": 8,
"550": 12
},
"wood": {
"522": 6,
"536": 2,
"540": 4,
"544": 8,
"551": 12
},
"plant": {
"522": 6,
"532": 1.5,
"533": 1.5,
"536": 2,
"537": 1.5,
"540": 4,
"541": 1.5,
"544": 8,
"548": 1.5,
"551": 12
},
"melon": {
"532": 1.5,
"533": 1.5,
"537": 1.5,
"541": 1.5,
"548": 1.5
},
"leaves": {
"532": 1.5,
"533": 1.5,
"537": 1.5,
"541": 1.5,
"548": 1.5,
"672": 6
},
"dirt": {
"520": 6,
"534": 2,
"538": 4,
"542": 8,
"549": 12
},
"web": {
"532": 15,
"533": 15,
"537": 15,
"541": 15,
"548": 15,
"672": 15
},
"wool": {
"672": 4.8
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
{
"minecraftVersion": "1.14.4",
"version": 498,
"majorVersion": "1.14"
}
@@ -0,0 +1,229 @@
[
{
"id": "",
"name": "Player",
"slots": [
{
"name": "craft result",
"index": 0
},
{
"name": "craft grid",
"index": 1,
"size": 4
},
{
"name": "armor",
"index": 5,
"size": 4
},
{
"name": "helmet",
"index": 5
},
{
"name": "chestplate",
"index": 6
},
{
"name": "leggings",
"index": 7
},
{
"name": "boots",
"index": 8
}
]
},
{
"id": "EntityHorse",
"name": "Horse",
"slots": [
{
"name": "saddle",
"index": 0
},
{
"name": "armor",
"index": 1
},
{
"name": "storage",
"index": 2,
"size": 15
}
],
"openedWith": [
{
"type": "entity",
"id": 100
}
]
},
{
"id": "minecraft:anvil",
"name": "Anvil",
"slots": [
{
"name": "tool",
"index": 0
},
{
"name": "combined",
"index": 1
},
{
"name": "result",
"index": 2
}
],
"properties": [
"repair cost"
]
},
{
"id": "minecraft:beacon",
"name": "Beacon",
"slots": [
{
"name": "input",
"index": 0
}
],
"properties": [
"level",
"effect 1",
"effect 2"
],
"openedWith": [
{
"type": "block",
"id": 138
}
]
},
{
"id": "minecraft:brewing_stand",
"name": "Brewing Stand",
"slots": [
{
"name": "ingredient",
"index": 0
},
{
"name": "result",
"index": 1,
"size": 3
}
],
"properties": [
"brew time"
],
"openedWith": [
{
"type": "block",
"id": 117
}
]
},
{
"id": "minecraft:chest",
"name": "Chest"
},
{
"id": "minecraft:container",
"name": "Container"
},
{
"id": "minecraft:crafting_table",
"name": "Workbench",
"slots": [
{
"name": "craft result",
"index": 0
},
{
"name": "craft grid",
"index": 1,
"size": 9
}
]
},
{
"id": "minecraft:dispenser",
"name": "Dispenser"
},
{
"id": "minecraft:dropper",
"name": "Dropper"
},
{
"id": "minecraft:enchanting_table",
"name": "Enchantment Table",
"slots": [
{
"name": "enchanted",
"index": 0
},
{
"name": "lapis",
"index": 1
}
],
"properties": [
"xp 1",
"xp 2",
"xp 3",
"seed",
"tooltip 1",
"tooltip 2",
"tooltip 3"
]
},
{
"id": "minecraft:furnace",
"name": "Furnace",
"slots": [
{
"name": "smelted",
"index": 0
},
{
"name": "fuel",
"index": 1
},
{
"name": "result",
"index": 2
}
],
"properties": [
"fuel",
"fuel max",
"progress",
"progress max"
]
},
{
"id": "minecraft:hopper",
"name": "Hopper"
},
{
"id": "minecraft:villager",
"name": "NPC Trade",
"slots": [
{
"name": "give 1",
"index": 0
},
{
"name": "give 2",
"index": 1
},
{
"name": "take",
"index": 2
}
]
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,200 @@
[
{
"id": 1,
"name": "Speed",
"displayName": "Speed",
"type": "good"
},
{
"id": 2,
"name": "Slowness",
"displayName": "Slowness",
"type": "bad"
},
{
"id": 3,
"name": "Haste",
"displayName": "Haste",
"type": "good"
},
{
"id": 4,
"name": "MiningFatigue",
"displayName": "Mining Fatigue",
"type": "bad"
},
{
"id": 5,
"name": "Strength",
"displayName": "Strength",
"type": "good"
},
{
"id": 6,
"name": "InstantHealth",
"displayName": "Instant Health",
"type": "good"
},
{
"id": 7,
"name": "InstantDamage",
"displayName": "Instant Damage",
"type": "bad"
},
{
"id": 8,
"name": "JumpBoost",
"displayName": "Jump Boost",
"type": "good"
},
{
"id": 9,
"name": "Nausea",
"displayName": "Nausea",
"type": "bad"
},
{
"id": 10,
"name": "Regeneration",
"displayName": "Regeneration",
"type": "good"
},
{
"id": 11,
"name": "Resistance",
"displayName": "Resistance",
"type": "good"
},
{
"id": 12,
"name": "FireResistance",
"displayName": "Fire Resistance",
"type": "good"
},
{
"id": 13,
"name": "WaterBreathing",
"displayName": "Water Breathing",
"type": "good"
},
{
"id": 14,
"name": "Invisibility",
"displayName": "Invisibility",
"type": "good"
},
{
"id": 15,
"name": "Blindness",
"displayName": "Blindness",
"type": "bad"
},
{
"id": 16,
"name": "NightVision",
"displayName": "Night Vision",
"type": "good"
},
{
"id": 17,
"name": "Hunger",
"displayName": "Hunger",
"type": "bad"
},
{
"id": 18,
"name": "Weakness",
"displayName": "Weakness",
"type": "bad"
},
{
"id": 19,
"name": "Poison",
"displayName": "Poison",
"type": "bad"
},
{
"id": 20,
"name": "Wither",
"displayName": "Wither",
"type": "bad"
},
{
"id": 21,
"name": "HealthBoost",
"displayName": "Health Boost",
"type": "good"
},
{
"id": 22,
"name": "Absorption",
"displayName": "Absorption",
"type": "good"
},
{
"id": 23,
"name": "Saturation",
"displayName": "Saturation",
"type": "good"
},
{
"id": 24,
"name": "Glowing",
"displayName": "Glowing",
"type": "bad"
},
{
"id": 25,
"name": "Levitation",
"displayName": "Levitation",
"type": "bad"
},
{
"id": 26,
"name": "Luck",
"displayName": "Luck",
"type": "good"
},
{
"id": 27,
"name": "BadLuck",
"displayName": "Bad Luck",
"type": "bad"
},
{
"id": 28,
"name": "SlowFalling",
"displayName": "Slow Falling",
"type": "good"
},
{
"id": 29,
"name": "ConduitPower",
"displayName": "Conduit Power",
"type": "good"
},
{
"id": 30,
"name": "DolphinsGrace",
"displayName": "Dolphin's Grace",
"type": "good"
},
{
"id": 31,
"name": "DolphinsGrace",
"displayName": "Dolphin's Grace",
"type": "good"
},
{
"id": 32,
"name": "BadOmen",
"displayName": "Bad Omen",
"type": "good"
},
{
"id": 32,
"name": "HeroOfTheVillage",
"displayName": "Hero Of The Village",
"type": "good"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+402
View File
@@ -0,0 +1,402 @@
[
{
"id": 576,
"displayName": "Apple",
"name": "apple",
"stackSize": 64,
"foodPoints": 4,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 601,
"displayName": "Mushroom Stew",
"name": "mushroom_stew",
"stackSize": 1,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 621,
"displayName": "Bread",
"name": "bread",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 647,
"displayName": "Raw Porkchop",
"name": "porkchop",
"stackSize": 64,
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 648,
"displayName": "Cooked Porkchop",
"name": "cooked_porkchop",
"stackSize": 64,
"foodPoints": 8,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 650,
"displayName": "Golden Apple",
"name": "golden_apple",
"stackSize": 64,
"foodPoints": 4,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 651,
"displayName": "Enchanted Golden Apple",
"name": "enchanted_golden_apple",
"stackSize": 64,
"foodPoints": 4,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 687,
"displayName": "Raw Cod",
"name": "cod",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 688,
"displayName": "Raw Salmon",
"name": "salmon",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 689,
"displayName": "Tropical Fish",
"name": "tropical_fish",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 690,
"displayName": "Pufferfish",
"name": "pufferfish",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 691,
"displayName": "Cooked Cod",
"name": "cooked_cod",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 692,
"displayName": "Cooked Salmon",
"name": "cooked_salmon",
"stackSize": 64,
"foodPoints": 6,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.5999999999999999
},
{
"id": 715,
"displayName": "Cake",
"name": "cake",
"stackSize": 1,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 732,
"displayName": "Cookie",
"name": "cookie",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 735,
"displayName": "Melon Slice",
"name": "melon_slice",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 736,
"displayName": "Dried Kelp",
"name": "dried_kelp",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 739,
"displayName": "Raw Beef",
"name": "beef",
"stackSize": 64,
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 740,
"displayName": "Steak",
"name": "cooked_beef",
"stackSize": 64,
"foodPoints": 8,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 741,
"displayName": "Raw Chicken",
"name": "chicken",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 742,
"displayName": "Cooked Chicken",
"name": "cooked_chicken",
"stackSize": 64,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 743,
"displayName": "Rotten Flesh",
"name": "rotten_flesh",
"stackSize": 64,
"foodPoints": 4,
"saturation": 0.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.2
},
{
"id": 751,
"displayName": "Spider Eye",
"name": "spider_eye",
"stackSize": 64,
"foodPoints": 2,
"saturation": 3.2,
"effectiveQuality": 5.2,
"saturationRatio": 1.6
},
{
"id": 829,
"displayName": "Carrot",
"name": "carrot",
"stackSize": 64,
"foodPoints": 3,
"saturation": 3.6,
"effectiveQuality": 6.6,
"saturationRatio": 1.2
},
{
"id": 830,
"displayName": "Potato",
"name": "potato",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 831,
"displayName": "Baked Potato",
"name": "baked_potato",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 832,
"displayName": "Poisonous Potato",
"name": "poisonous_potato",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 834,
"displayName": "Golden Carrot",
"name": "golden_carrot",
"stackSize": 64,
"foodPoints": 6,
"saturation": 14.4,
"effectiveQuality": 20.4,
"saturationRatio": 2.4
},
{
"id": 844,
"displayName": "Pumpkin Pie",
"name": "pumpkin_pie",
"stackSize": 64,
"foodPoints": 8,
"saturation": 4.8,
"effectiveQuality": 12.8,
"saturationRatio": 0.6
},
{
"id": 854,
"displayName": "Raw Rabbit",
"name": "rabbit",
"stackSize": 64,
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 855,
"displayName": "Cooked Rabbit",
"name": "cooked_rabbit",
"stackSize": 64,
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 856,
"displayName": "Rabbit Stew",
"name": "rabbit_stew",
"stackSize": 1,
"foodPoints": 10,
"saturation": 12,
"effectiveQuality": 22,
"saturationRatio": 1.2
},
{
"id": 867,
"displayName": "Raw Mutton",
"name": "mutton",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 868,
"displayName": "Cooked Mutton",
"name": "cooked_mutton",
"stackSize": 64,
"foodPoints": 6,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.5999999999999999
},
{
"id": 886,
"displayName": "Chorus Fruit",
"name": "chorus_fruit",
"stackSize": 64,
"foodPoints": 4,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 888,
"displayName": "Beetroot",
"name": "beetroot",
"stackSize": 64,
"foodPoints": 1,
"saturation": 1.2,
"effectiveQuality": 2.2,
"saturationRatio": 1.2
},
{
"id": 890,
"displayName": "Beetroot Soup",
"name": "beetroot_soup",
"stackSize": 1,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 926,
"displayName": "Suspicious Stew",
"name": "suspicious_stew",
"stackSize": 1,
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 947,
"displayName": "Sweet Berries",
"name": "sweet_berries",
"stackSize": 64,
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 954,
"displayName": "Honey Bottle",
"name": "honey_bottle",
"stackSize": 16,
"foodPoints": 6,
"saturation": 1.2,
"effectiveQuality": 7.2,
"saturationRatio": 0.19999999999999998
}
]
@@ -0,0 +1,66 @@
[
{
"id": 0,
"name": "harp"
},
{
"id": 1,
"name": "basedrum"
},
{
"id": 2,
"name": "snare"
},
{
"id": 3,
"name": "hat"
},
{
"id": 4,
"name": "bass"
},
{
"id": 5,
"name": "flute"
},
{
"id": 6,
"name": "bell"
},
{
"id": 7,
"name": "guitar"
},
{
"id": 8,
"name": "chime"
},
{
"id": 9,
"name": "xylophone"
},
{
"id": 10,
"name": "iron_xylophone"
},
{
"id": 11,
"name": "cow_bell"
},
{
"id": 12,
"name": "didgeridoo"
},
{
"id": 13,
"name": "bit"
},
{
"id": 14,
"name": "banjo"
},
{
"id": 15,
"name": "pling"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,69 @@
{
"rock": {
"573": 6,
"589": 2,
"593": 4,
"597": 8,
"608": 9,
"604": 12
},
"wood": {
"574": 6,
"590": 2,
"594": 4,
"598": 8,
"609": 9,
"605": 12
},
"plant": {
"574": 6,
"586": 1.5,
"587": 1.5,
"590": 2,
"591": 1.5,
"594": 4,
"595": 1.5,
"598": 8,
"609": 9,
"606": 1.5,
"602": 1.5,
"605": 12
},
"melon": {
"586": 1.5,
"587": 1.5,
"591": 1.5,
"595": 1.5,
"606": 1.5,
"602": 1.5
},
"leaves": {
"586": 1.5,
"587": 1.5,
"591": 1.5,
"595": 1.5,
"602": 1.5,
"606": 1.5,
"734": 6
},
"dirt": {
"572": 6,
"588": 2,
"592": 4,
"596": 8,
"607": 9,
"603": 12
},
"web": {
"586": 15,
"587": 15,
"591": 15,
"595": 15,
"602": 15,
"606": 15,
"734": 15
},
"wool": {
"734": 4.8
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
{
"minecraftVersion": "1.16.1",
"version": 736,
"majorVersion": "1.16"
}
@@ -0,0 +1,229 @@
[
{
"id": "",
"name": "Player",
"slots": [
{
"name": "craft result",
"index": 0
},
{
"name": "craft grid",
"index": 1,
"size": 4
},
{
"name": "armor",
"index": 5,
"size": 4
},
{
"name": "helmet",
"index": 5
},
{
"name": "chestplate",
"index": 6
},
{
"name": "leggings",
"index": 7
},
{
"name": "boots",
"index": 8
}
]
},
{
"id": "EntityHorse",
"name": "Horse",
"slots": [
{
"name": "saddle",
"index": 0
},
{
"name": "armor",
"index": 1
},
{
"name": "storage",
"index": 2,
"size": 15
}
],
"openedWith": [
{
"type": "entity",
"id": 100
}
]
},
{
"id": "minecraft:anvil",
"name": "Anvil",
"slots": [
{
"name": "tool",
"index": 0
},
{
"name": "combined",
"index": 1
},
{
"name": "result",
"index": 2
}
],
"properties": [
"repair cost"
]
},
{
"id": "minecraft:beacon",
"name": "Beacon",
"slots": [
{
"name": "input",
"index": 0
}
],
"properties": [
"level",
"effect 1",
"effect 2"
],
"openedWith": [
{
"type": "block",
"id": 138
}
]
},
{
"id": "minecraft:brewing_stand",
"name": "Brewing Stand",
"slots": [
{
"name": "ingredient",
"index": 0
},
{
"name": "result",
"index": 1,
"size": 3
}
],
"properties": [
"brew time"
],
"openedWith": [
{
"type": "block",
"id": 117
}
]
},
{
"id": "minecraft:chest",
"name": "Chest"
},
{
"id": "minecraft:container",
"name": "Container"
},
{
"id": "minecraft:crafting_table",
"name": "Workbench",
"slots": [
{
"name": "craft result",
"index": 0
},
{
"name": "craft grid",
"index": 1,
"size": 9
}
]
},
{
"id": "minecraft:dispenser",
"name": "Dispenser"
},
{
"id": "minecraft:dropper",
"name": "Dropper"
},
{
"id": "minecraft:enchanting_table",
"name": "Enchantment Table",
"slots": [
{
"name": "enchanted",
"index": 0
},
{
"name": "lapis",
"index": 1
}
],
"properties": [
"xp 1",
"xp 2",
"xp 3",
"seed",
"tooltip 1",
"tooltip 2",
"tooltip 3"
]
},
{
"id": "minecraft:furnace",
"name": "Furnace",
"slots": [
{
"name": "smelted",
"index": 0
},
{
"name": "fuel",
"index": 1
},
{
"name": "result",
"index": 2
}
],
"properties": [
"fuel",
"fuel max",
"progress",
"progress max"
]
},
{
"id": "minecraft:hopper",
"name": "Hopper"
},
{
"id": "minecraft:villager",
"name": "NPC Trade",
"slots": [
{
"name": "give 1",
"index": 0
},
{
"name": "give 2",
"index": 1
},
{
"name": "take",
"index": 2
}
]
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,69 @@
{
"rock": {
"600": 6,
"585": 2,
"590": 4,
"605": 8,
"610": 9,
"595": 12
},
"wood": {
"601": 6,
"586": 2,
"591": 4,
"606": 8,
"611": 9,
"596": 12
},
"plant": {
"601": 6,
"598": 1.5,
"583": 1.5,
"586": 2,
"588": 1.5,
"591": 4,
"603": 1.5,
"606": 8,
"611": 9,
"608": 1.5,
"593": 1.5,
"596": 12
},
"melon": {
"598": 1.5,
"583": 1.5,
"588": 1.5,
"603": 1.5,
"608": 1.5,
"593": 1.5
},
"leaves": {
"598": 1.5,
"583": 1.5,
"588": 1.5,
"603": 1.5,
"608": 1.5,
"593": 1.5,
"734": 6
},
"dirt": {
"599": 6,
"584": 2,
"589": 4,
"604": 8,
"609": 9,
"594": 12
},
"web": {
"598": 15,
"583": 15,
"588": 15,
"603": 15,
"593": 15,
"608": 15,
"734": 15
},
"wool": {
"734": 4.8
}
}

Some files were not shown because too many files have changed in this diff Show More