28 Commits
Author SHA1 Message Date
Admin Else acb5fe8d90 port messenger to more versions 2026-08-04 19:28:43 +02:00
Admin Else d9bca7e517 strom: fix generator for pointer-receiver Encode, use nbt.Tag for named NBT
- Delete raw_capture subcommand (use tcpflow + raw-to-tmcpr instead)
- Fix DefaultEncoder to use temp variable for non-addressable value encoding,
  eliminating manual post-generation patches
- Map nbt and optionalNbt types to nbt.Tag (named NBT) instead of nbt.Anon
  (anonymous NBT) — 1.8 uses named NBT with root tag names
2026-08-04 16:40:47 +02:00
Admin Else b162d0d401 strom: add 1.8 protocol support, raw-to-tmcpr, disable raw-capture
- Add minecraft-data for version 1.8 (protocol 47)
- Generate proto_generated/v1_8 from 1.8 protocol.json
- Fix generator compatibility: missing CompareTo natives (i16, i32, u16, u32,
  i64, string, nbt, optionalNbt), parameterized type placeholder handling ()
- Add raw-to-tmcpr subcommand: converts raw tcpflow captures to TMCPR
  with zlib decompression and state-aware compression threshold tracking
- Extend print-replay: 1.8 state transitions (success->Play, login_start->Play,
  handshake/status initial states, set_protocol NextState detection)
- Comment out broken raw-capture subcommand (use tcpflow instead)
- Fix nbt.Anon Encode/Decode on value receivers
2026-08-04 16:10:15 +02:00
Admin Else 3273244c42 format 2026-08-02 20:21:15 +02:00
adman f579645b88 client: add StatusRawWithVersion for version-aware status pings 2026-07-31 19:34:16 +02:00
adman 33754d7c71 server: guard against nil KnownPacks in ServeConfig 2026-07-31 15:49:05 +02:00
adman 8bd54a04f2 client: add ConnectWithConn, WithConn, WithDialer, LoginRawAddr
- ConnectWithConn wraps an existing net.Conn into a versioned proto.Conn
- DialFunc is a context-aware dial function type
- WithConn uses a pre-established net.Conn (version required, no DNS)
- WithDialer replaces net.Dialer with a custom dial function
- LoginRawAddr accepts an explicit handshake host address
- Login() wired to support all three connection modes
2026-07-31 14:30:25 +02:00
adman 492dae8e83 Add WithIgnoreConfig option to skip CONFIGURATION auto-completion 2026-07-31 12:10:32 +02:00
adman d9543de951 add check for bad servers 2026-07-30 02:40:43 +02:00
adman f1f5374a5c more context 2026-07-30 02:36:37 +02:00
adman 0d6b6e1ab9 docs: add godoc comments to all exported functions and methods 2026-07-30 00:20:55 +02:00
adman 56c97a2b3f docs: add API reference for all user-facing packages 2026-07-30 00:10:57 +02:00
adman 9063a0328d fix: make RegisterCritical variadic for API consistency with RegisterCriticalUntilLatest 2026-07-30 00:05:39 +02:00
adman 84b28d4c12 enforce MaxPacketSize constraint for raw and compressed packets 2026-07-28 16:37:45 +02:00
adman 30cfc507ba less pollution 2026-07-27 15:05:50 +02:00
adman d84618c116 update minecraft data to fix bundle delimiter 2026-07-23 22:32:59 +02:00
adman 5a55520126 migrate proto_generated to be runable from repo root 2026-07-23 22:26:23 +02:00
adman 8ac5e00c8e regenerate protocol 2026-07-23 22:23:22 +02:00
adman d46c678b89 make mincraft data sync scripts executable from anywhere 2026-07-23 22:20:53 +02:00
adman 0b714edcf5 Sync minecraft-data 2026-07-23 22:14:19 +02:00
adman 45151add64 Remove proto_base.Void 2026-07-23 22:11:29 +02:00
adman b90830881f Fix 26.2 login_success protocol handling and add convertibility tests
- Server sends v26_2 login_success with SessionId for protocol >= 776

- Client adds v26_2 login_success handler and scopes v1_21_8 handler to <= 26.1

- Fix WithOtherAccount guard in login server

- Add smart-convert assumption tests for login server/client

- Improve translatePacketVersion error messages
2026-07-23 17:00:13 +02:00
adman 94301a4a50 Add 26.2 protocol support to strom 2026-07-23 15:06:49 +02:00
adman aa5d15a4dc Regenerate 26.1 protocol with corrected play packet IDs (clientbound + serverbound) 2026-07-23 00:09:43 +02:00
adman d388e2c350 add 26.1 support, raw-capture subcommand, and local minecraft-data copy script 2026-07-22 23:22:14 +02:00
adman 126ff5bca0 improve packet replay things 2026-07-20 12:56:19 +02:00
adman a347aedfc2 untrack big testdata 2026-07-16 22:56:44 +02:00
adman e324a95727 cmd take account with env var 2026-07-16 22:16:04 +02:00
455 changed files with 657877 additions and 52318 deletions
+4
View File
@@ -19,6 +19,8 @@ import (
"github.com/admin-else/strom/cmd/strom/packet_inspector" "github.com/admin-else/strom/cmd/strom/packet_inspector"
"github.com/admin-else/strom/cmd/strom/print_nbt" "github.com/admin-else/strom/cmd/strom/print_nbt"
"github.com/admin-else/strom/cmd/strom/print_replay" "github.com/admin-else/strom/cmd/strom/print_replay"
// "github.com/admin-else/strom/cmd/strom/raw_capture" // removed: use tcpflow instead for raw TCP capture
"github.com/admin-else/strom/cmd/strom/raw_to_tmcpr"
"github.com/admin-else/strom/cmd/strom/registry_data_hunter" "github.com/admin-else/strom/cmd/strom/registry_data_hunter"
"github.com/admin-else/strom/cmd/strom/serve_tmcpr" "github.com/admin-else/strom/cmd/strom/serve_tmcpr"
"github.com/admin-else/strom/cmd/strom/serve_world" "github.com/admin-else/strom/cmd/strom/serve_world"
@@ -60,6 +62,8 @@ var subcommands = map[string]func(args []string) error{
"extract-mca": extract_mca.Run, "extract-mca": extract_mca.Run,
"data": data.Run, "data": data.Run,
"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-to-tmcpr": raw_to_tmcpr.Run,
"registry-data-hunter": registry_data_hunter.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,
+1 -1
View File
@@ -51,7 +51,7 @@ func GetChunkFromMca(x, z int32, version string) (b []byte, err error) {
z += anvil.ChunksWidthRegionFile z += anvil.ChunksWidthRegionFile
} }
f, err := os.Open(fmt.Sprintf("./level/anvil/testdata/securechattestworld/region/r.%v.%v.mca", xmca, zmca)) f, err := os.Open(fmt.Sprintf("./.devres/anvil_testdata/securechattestworld/region/r.%v.%v.mca", xmca, zmca))
if err != nil { if err != nil {
return return
} }
+56 -18
View File
@@ -3,6 +3,7 @@ package messenger
import ( import (
"flag" "flag"
"fmt" "fmt"
"os"
"strconv" "strconv"
"strings" "strings"
@@ -15,18 +16,28 @@ import (
"github.com/admin-else/strom/mc/event" "github.com/admin-else/strom/mc/event"
"github.com/admin-else/strom/mc/proto" "github.com/admin-else/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_generated/v1_21_11" "github.com/admin-else/strom/mc/proto_generated/v1_21_11"
"github.com/admin-else/strom/mc/proto_generated/v1_8"
) )
func stror(a, b string) string {
if a != "" {
return a
}
return b
}
var ( var (
cmd = flag.NewFlagSet("status", flag.ContinueOnError) cmd = flag.NewFlagSet("status", flag.ContinueOnError)
connectToFlag = cmd.String("addr", "", "server address to connect to") connectToFlag = cmd.String("addr", "", "server address to connect to")
accFlag = cmd.String("acc", "strom_messenger", "the name to use if longer will be treated as ygg token") accFlag = cmd.String("acc", stror(os.Getenv("STROM_ACC"), "strom_messenger"), "the name to use if longer will be treated as ygg token")
versionFlag = cmd.String("version", "26.2", "minecraft version to use (e.g. 1.8, 1.21.11)")
) )
type Messenger struct { type Messenger struct {
*proto.Conn *proto.Conn
chat *chat.Module chat *chat.Module
world *world.Module world *world.Module
legacy bool
} }
func (m *Messenger) OnChat(e *v1_21_11.PlayToClientPacketPlayerChat) (err error) { func (m *Messenger) OnChat(e *v1_21_11.PlayToClientPacketPlayerChat) (err error) {
@@ -44,15 +55,27 @@ func (m *Messenger) OnChatSystem(e *v1_21_11.PlayToClientPacketSystemChat) (err
return return
} }
func (m *Messenger) OnChatLegacy(e *v1_8.PlayToClientPacketChat) (err error) {
m.Log.Info("chat", "m", e.Message)
return
}
func (m *Messenger) OnStdin(e event.Stdin) (err error) { func (m *Messenger) OnStdin(e event.Stdin) (err error) {
input := strings.TrimSpace(e.Val) input := strings.TrimSpace(e.Val)
if strings.HasPrefix(input, ">say ") { if strings.HasPrefix(input, ">say ") {
return m.chat.SendMessage(strings.TrimSpace(strings.TrimPrefix(input, ">say"))) return m.sendChat(strings.TrimSpace(strings.TrimPrefix(input, ">say")))
} }
if strings.HasPrefix(input, ">getblock ") { if !m.legacy && strings.HasPrefix(input, ">getblock ") {
return m.handleGetBlock(strings.TrimSpace(strings.TrimPrefix(input, ">getblock"))) return m.handleGetBlock(strings.TrimSpace(strings.TrimPrefix(input, ">getblock")))
} }
return m.chat.SendMessage(input) return m.sendChat(input)
}
func (m *Messenger) sendChat(message string) (err error) {
if m.legacy {
return m.Send(&v1_8.PlayToServerPacketChat{Message: message})
}
return m.chat.SendMessage(message)
} }
func (m *Messenger) handleGetBlock(args string) (err error) { func (m *Messenger) handleGetBlock(args string) (err error) {
@@ -97,30 +120,45 @@ func Run(args []string) (err error) {
if err != nil { if err != nil {
return return
} }
c, err := client.Login(*connectToFlag, acc) c, err := client.Login(*connectToFlag, acc, client.WithVersion(*versionFlag))
if err != nil { if err != nil {
return return
} }
defer c.Close() defer c.Close()
chatMod, err := chat.Start(c, acc) isLegacy := c.ProtocolVersion < 764
if err != nil {
return var chatMod *chat.Module
if !isLegacy {
chatMod, err = chat.Start(c, acc)
if err != nil {
return
}
} }
// Shareable world storage. Other bots can subscribe to the same World.
w := world.NewWorld(c.Version, -64, 384)
m := &Messenger{ m := &Messenger{
Conn: c, Conn: c,
chat: chatMod, chat: chatMod,
world: world.Start(c, w), legacy: isLegacy,
}
if !isLegacy {
w := world.NewWorld(c.Version, -64, 384)
m.world = world.Start(c, w)
} }
event.StartListingStdin(m.Loop) event.StartListingStdin(m.Loop)
m.Register(m.OnStdin) m.Register(m.OnStdin)
m.RegisterUntilLatest(m.OnChat, m.OnChatUnsigned, m.OnChatSystem)
keepalive.Start(m.Conn) if isLegacy {
m.Register(m.OnChatLegacy)
} else {
m.RegisterUntilLatest(m.OnChat, m.OnChatUnsigned, m.OnChatSystem)
}
if !isLegacy {
keepalive.Start(m.Conn)
}
return m.StartConn() return m.StartConn()
} }
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"bytes" "bytes"
"testing" "testing"
generated "github.com/admin-else/strom/proto_generated/%v" generated "github.com/admin-else/strom/mc/proto_generated/%v"
) )
// Error: %v // Error: %v
+80 -24
View File
@@ -8,6 +8,7 @@ import (
"errors" "errors"
"flag" "flag"
"fmt" "fmt"
"go/format"
"io" "io"
"log/slog" "log/slog"
"os" "os"
@@ -24,7 +25,8 @@ var (
FileFlag = cmd.String("file", "", "The tmcpr file to print") FileFlag = cmd.String("file", "", "The tmcpr file to print")
ProtocolVersion = cmd.Int("protocol", -1, "The protocol version") ProtocolVersion = cmd.Int("protocol", -1, "The protocol version")
CreateTestsPath = cmd.String("create-tests", "", "") CreateTestsPath = cmd.String("create-tests", "", "")
StateFlag = cmd.String("state", "login", "Initial state: login, config, play") StateFlag = cmd.String("state", "login", "Initial state: handshake, login, config, status, play")
DirectionFlag = cmd.String("direction", "clientbound", "Packet direction: clientbound (ToClient) or serverbound (ToServer)")
) )
// TODO: maybe use the proto replay api // TODO: maybe use the proto replay api
@@ -32,32 +34,43 @@ var (
//go:embed failed_packet.go.tmpl //go:embed failed_packet.go.tmpl
var TestSrcF string var TestSrcF string
func SaveUnCodeAbleAsTest(packet *proto.UnCodablePacket) { func SaveUnCodeAbleAsTest(packet *proto.UnCodablePacket) (err error) {
if packet.Info.Type == nil {
slog.Warn("skipping test for unknown packet id", "packet_id", packet.Info.PacketId, "state", packet.Info.State, "error", packet.Err)
return
}
hUntrimmed := sha256.Sum256(packet.Data) hUntrimmed := sha256.Sum256(packet.Data)
h := hUntrimmed[:8] h := hUntrimmed[:8]
f, err := os.Create(fmt.Sprintf(*CreateTestsPath+"/%v_%10x_test.go", len(packet.Data), h)) if err = os.MkdirAll(*CreateTestsPath, 0755); err != nil {
if err != nil { return
panic(err)
} }
ret, err := data.LookUpVersionByProtocolVersion(packet.Info.ProtocolVersion) ret, err := data.LookUpVersionByProtocolVersion(packet.Info.ProtocolVersion)
if err != nil { if err != nil {
panic(err) return
} }
goPackage := "v" + strings.ReplaceAll(ret.MinecraftVersion, ".", "_") goPackage := "v" + strings.ReplaceAll(ret.MinecraftVersion, ".", "_")
typeName := reflect.TypeOf(packet.Info.Type).Elem().Name()
//goland:noinspection GoUnhandledErrorResult src := fmt.Sprintf(TestSrcF, goPackage, packet.Err, h, typeName, packet.Data)
defer f.Close() formatted, formatErr := format.Source([]byte(src))
_, err = fmt.Fprintf(f, TestSrcF, goPackage, packet.Err, h, reflect.TypeOf(packet.Info.Type).Elem().Name(), packet.Data) if formatErr != nil {
if err != nil { formatted = []byte(src)
panic(err)
} }
slog.Info("Packet failed to parse", "error", packet.Err, "saved", f.Name(), "data", fmt.Sprintf("%q", packet.Data))
filePath := fmt.Sprintf(*CreateTestsPath+"/%v_%10x_test.go", len(packet.Data), h)
if err = os.WriteFile(filePath, formatted, 0644); err != nil {
return
}
slog.Info("Packet failed to parse", "error", packet.Err, "saved", filePath, "data", fmt.Sprintf("%q", packet.Data))
return
} }
var state = proto_base.Login var state = proto_base.Login
var direction = proto_base.ToClient
func UnpackPacket(r io.Reader) (packet proto_base.EncodeDecodeAble, err error) { func UnpackPacket(r io.Reader) (packet proto_base.EncodeDecodeAble, i proto_base.PacketInfo, err error) {
var timestamp, length uint32 var timestamp, length uint32
err = binary.Read(r, binary.BigEndian, &timestamp) err = binary.Read(r, binary.BigEndian, &timestamp)
if err != nil { if err != nil {
@@ -87,7 +100,8 @@ func UnpackPacket(r io.Reader) (packet proto_base.EncodeDecodeAble, err error) {
// indexafterid represents how many bytes we've read so far // indexafterid represents how many bytes we've read so far
indexafterid := int(b.Size()) - b.Len() indexafterid := int(b.Size()) - b.Len()
i, ok := proto.LookUpTypeByPacketInfo(proto_base.ToClient, state, packetId, int32(*ProtocolVersion)) var ok bool
i, ok = proto.LookUpTypeByPacketInfo(direction, state, packetId, int32(*ProtocolVersion))
if !ok { if !ok {
packet = &proto.UnCodablePacket{Err: proto.BadPacketIdErr, Data: packetData, Info: i} packet = &proto.UnCodablePacket{Err: proto.BadPacketIdErr, Data: packetData, Info: i}
return return
@@ -98,13 +112,42 @@ func UnpackPacket(r io.Reader) (packet proto_base.EncodeDecodeAble, err error) {
packet = &proto.UnCodablePacket{Err: err, Data: packetData[indexafterid:], Info: i} packet = &proto.UnCodablePacket{Err: err, Data: packetData[indexafterid:], Info: i}
return return
} }
if b.Len() != 0 {
packet = &proto.UnCodablePacket{Err: proto.PacketNotFullyDecodedErr, Data: packetData[indexafterid:], Info: i}
return
}
trackState(packet, i)
return
}
func trackState(packet proto_base.EncodeDecodeAble, i proto_base.PacketInfo) {
switch i.Name { switch i.Name {
case "set_protocol":
v := reflect.ValueOf(packet).Elem()
nsField := v.FieldByName("NextState")
if nsField.IsValid() && nsField.Kind() == reflect.Int32 {
switch nsField.Int() {
case 1:
state = proto_base.Status
case 2:
state = proto_base.Login
}
}
case "login_start":
if int32(*ProtocolVersion) <= 47 {
state = proto_base.Play
}
case "success": case "success":
state = proto_base.Configuration if int32(*ProtocolVersion) >= 764 {
state = proto_base.Configuration
} else {
state = proto_base.Play
}
case "finish_configuration": case "finish_configuration":
state = proto_base.Play state = proto_base.Play
case "login_acknowledged":
state = proto_base.Configuration
} }
return
} }
func Run(args []string) (err error) { func Run(args []string) (err error) {
@@ -119,15 +162,27 @@ func Run(args []string) (err error) {
return fmt.Errorf("no file specified") return fmt.Errorf("no file specified")
} }
switch *StateFlag { switch *StateFlag {
case "handshake":
state = proto_base.Handshaking
case "login": case "login":
state = proto_base.Login state = proto_base.Login
case "config": case "config":
state = proto_base.Configuration state = proto_base.Configuration
case "play": case "play":
state = proto_base.Play state = proto_base.Play
case "status":
state = proto_base.Status
default: default:
return fmt.Errorf("unknown state: %s", *StateFlag) return fmt.Errorf("unknown state: %s", *StateFlag)
} }
switch *DirectionFlag {
case "clientbound", "to-client":
direction = proto_base.ToClient
case "serverbound", "to-server":
direction = proto_base.ToServer
default:
return fmt.Errorf("unknown direction: %s", *DirectionFlag)
}
f, err := os.Open(*FileFlag) f, err := os.Open(*FileFlag)
if err != nil { if err != nil {
return return
@@ -137,21 +192,22 @@ func Run(args []string) (err error) {
var totalPackets, failedPackets int var totalPackets, failedPackets int
for { for {
var packet proto_base.EncodeDecodeAble var packet proto_base.EncodeDecodeAble
packet, err = UnpackPacket(f) var info proto_base.PacketInfo
packet, info, err = UnpackPacket(f)
unCodablePacket, ok := packet.(*proto.UnCodablePacket) unCodablePacket, ok := packet.(*proto.UnCodablePacket)
if ok { if ok {
slog.Error("failed to decode packet", "error", err, "packet_name", info.Name)
if *CreateTestsPath != "" { if *CreateTestsPath != "" {
SaveUnCodeAbleAsTest(unCodablePacket) err = SaveUnCodeAbleAsTest(unCodablePacket)
if err != nil {
slog.Error("failed to save uncodable packet as test", "error", err)
}
} }
failedPackets++ failedPackets++
} }
if err != nil { fmt.Printf("Packet: %#v\n", packet)
fmt.Println(err) if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
} else {
fmt.Printf("Packet: %#v\n", packet)
}
if errors.Is(err, io.EOF) {
break break
} }
totalPackets++ totalPackets++
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2d90ee976987678593a6b1d09136bb9b4fd131390796ea6e413376a6ddc63226
size 75035693
-1
View File
@@ -1 +0,0 @@
[{"realTimestamp":9845034,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}},{"realTimestamp":9845138,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}},{"realTimestamp":9844902,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}},{"realTimestamp":9908896,"value":{"position":{"x":-1.6053634059630886,"y":91.672484820985,"z":-10.594536888795163,"yaw":-1151.6353,"pitch":16.142092,"roll":0.0}}},{"realTimestamp":9844750,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}},{"realTimestamp":9853735,"value":{"position":{"x":-31.05268144454021,"y":88.0,"z":-25.371850030366133,"yaw":-624.37897,"pitch":16.105839,"roll":0.0}}},{"realTimestamp":9845690,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}},{"realTimestamp":9938194,"value":{"position":{"x":39.88206777447001,"y":103.87657142499006,"z":58.09267383764874,"yaw":-1781.1023,"pitch":37.354122,"roll":0.0}}},{"realTimestamp":9846991,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-628.46875,"pitch":36.04,"roll":0.0}}},{"realTimestamp":9908638,"value":{"position":{"x":-1.5870303355717672,"y":91.672484820985,"z":-11.359450846926011,"yaw":-1142.6902,"pitch":20.997843,"roll":0.0}}},{"realTimestamp":9845490,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}},{"realTimestamp":9845990,"value":{"position":{"x":-31.946051078575692,"y":93.0,"z":29.523387113769626,"yaw":-627.44653,"pitch":37.573395,"roll":0.0}}}]
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d972b9b5f9d962199fe262eccef32a4b94504283fae97f9963702e7ab1550129
size 437123
-1
View File
@@ -1 +0,0 @@
{"singleplayer":false,"serverName":"protect-test-server.anygate.cloud","customServerName":"proxied test server","duration":3368,"date":1776531741320,"mcversion":"1.21.11","fileFormat":"MCPR","fileFormatVersion":14,"protocol":774,"generator":"ReplayMod v1.21.11-2.6.26","selfId":-1,"players":[]}
-1
View File
@@ -1 +0,0 @@
{"requiredMods":[{"modID":"viafabricplus","modName":"ViaFabricPlus","modVersion":"4.4.4"}]}
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cef58ec0e3d1d25e34c2effc5c09241ee4c1b39c085ed9e11b7097dfd5c2d033
size 3429878
@@ -1 +0,0 @@
234002168
-1
View File
@@ -1 +0,0 @@
{"singleplayer":false,"serverName":"protect-beta.anygate.cloud","customServerName":"protect-beta.anygate.cloud","duration":10198341,"date":1776535673280,"mcversion":"1.21.11","fileFormat":"MCPR","fileFormatVersion":14,"protocol":774,"generator":"ReplayMod v1.21.11-2.6.26","selfId":-1,"players":["fe2d6f64-7ab0-3373-a526-af097abbcb39"]}
-1
View File
@@ -1 +0,0 @@
{"requiredMods":[{"modID":"viafabricplus","modName":"ViaFabricPlus","modVersion":"4.4.4"}]}
-3
View File
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:be007aa681f7959708e89e39e05390e228753291823a18274068d310a50aa78b
size 526306397
-1
View File
@@ -1 +0,0 @@
270566013
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0da58f5cdd65ef241df8c61f9e633af7317faa77034183d4fb648b039c1e14ed
size 842
-1
View File
@@ -1 +0,0 @@
{"singleplayer":false,"serverName":"protect-test-server.anygate.cloud","customServerName":"proxied test server","duration":476,"date":1776803431635,"mcversion":"1.21.11","fileFormat":"MCPR","fileFormatVersion":14,"protocol":774,"generator":"ReplayMod v1.21.11-2.6.26","selfId":-1,"players":[]}
-1
View File
@@ -1 +0,0 @@
{"requiredMods":[{"modID":"viafabricplus","modName":"ViaFabricPlus","modVersion":"4.4.4"}]}
-3
View File
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:52fa049f97918289e018fa4c3bf5ff789d4f99f44f590ad875ce1f65e5fa9563
size 37
@@ -1 +0,0 @@
1105715802
+243
View File
@@ -0,0 +1,243 @@
package raw_to_tmcpr
import (
"bytes"
"compress/zlib"
"errors"
"flag"
"fmt"
"io"
"os"
"time"
"github.com/admin-else/strom/mc/proto/replay"
"github.com/admin-else/strom/mc/proto_base"
)
var Cmd = flag.NewFlagSet("raw-to-tmcpr", flag.ContinueOnError)
var ClientboundIn = Cmd.String("clientbound", "", "raw tcpflow file for clientbound (server->client) 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 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 ServerboundState = Cmd.String("serverbound-state", "handshake", "initial state for serverbound: handshake, login, status, play")
type captureReader struct {
r io.Reader
out *replay.Writer
state proto_base.State
threshold int32
startTime time.Time
haveStartTime bool
direction proto_base.Direction
pendingThreshold int32
}
func (cr *captureReader) setStartTime() {
if !cr.haveStartTime {
cr.startTime = time.Now()
cr.haveStartTime = true
}
}
func (cr *captureReader) timestamp() uint32 {
return uint32(time.Since(cr.startTime).Milliseconds())
}
func readPacketBytes(r io.Reader, threshold int32) ([]byte, error) {
packetLen, err := proto_base.DecodeVarInt(r)
if err != nil {
return nil, fmt.Errorf("read packet length: %w", err)
}
rawBytes := make([]byte, packetLen)
_, err = io.ReadFull(r, rawBytes)
if err != nil {
return nil, fmt.Errorf("read packet data: %w", err)
}
if threshold >= 0 {
buf := bytes.NewReader(rawBytes)
uncompressedLen, err := proto_base.DecodeVarInt(buf)
if err != nil {
return nil, fmt.Errorf("read uncompressed length: %w", err)
}
if uncompressedLen == 0 {
return io.ReadAll(buf)
} else {
zReader, err := zlib.NewReader(buf)
if err != nil {
return nil, fmt.Errorf("zlib reader: %w", err)
}
defer zReader.Close()
decompressed, err := io.ReadAll(zReader)
if err != nil {
return nil, fmt.Errorf("decompress: %w", err)
}
return decompressed, nil
}
}
return rawBytes, nil
}
func (cr *captureReader) trackState(packetBytes []byte) {
buf := bytes.NewReader(packetBytes)
packetId, err := proto_base.DecodeVarInt(buf)
if err != nil {
return
}
switch cr.state {
case proto_base.Handshaking:
if cr.direction == proto_base.ToServer && packetId == 0 {
_, err = proto_base.DecodeVarInt(buf) // protocol version
if err != nil {
return
}
_, err = proto_base.DecodeString(buf) // server address
if err != nil {
return
}
portBytes := make([]byte, 2)
_, err = io.ReadFull(buf, portBytes)
if err != nil {
return
}
nextState, err := proto_base.DecodeVarInt(buf)
if err != nil {
return
}
if nextState == 2 {
cr.state = proto_base.Login
} else if nextState == 1 {
cr.state = proto_base.Status
}
}
case proto_base.Login:
if cr.direction == proto_base.ToClient {
if packetId == 0x03 {
threshold, err := proto_base.DecodeVarInt(buf)
if err == nil {
cr.threshold = threshold
}
} else if packetId == 0x02 {
cr.state = proto_base.Play
}
} else if cr.direction == proto_base.ToServer && packetId == 0 {
if cr.pendingThreshold >= 0 {
cr.threshold = cr.pendingThreshold
}
}
case proto_base.Status:
case proto_base.Play:
}
}
func (cr *captureReader) process() (count int, err error) {
for {
packetBytes, err := readPacketBytes(cr.r, cr.threshold)
if err != nil {
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
return count, nil
}
return count, err
}
cr.setStartTime()
cr.trackState(packetBytes)
err = cr.out.WriteRaw(packetBytes, cr.timestamp())
if err != nil {
return count, fmt.Errorf("write TMCPR: %w", err)
}
count++
}
}
func Run(args []string) (err error) {
err = Cmd.Parse(args)
if err != nil {
return
}
if *ClientboundIn == "" && *ServerboundIn == "" {
return fmt.Errorf("at least one of -clientbound or -serverbound must be specified")
}
parseState := func(name string) (proto_base.State, error) {
switch name {
case "handshake":
return proto_base.Handshaking, nil
case "login":
return proto_base.Login, nil
case "play":
return proto_base.Play, nil
case "status":
return proto_base.Status, nil
default:
return 0, fmt.Errorf("unknown state: %s (valid: handshake, login, status, play)", name)
}
}
var compressionThreshold int32 = -1
if *ClientboundIn != "" {
state, err := parseState(*ClientboundState)
if err != nil {
return err
}
compressionThreshold, err = processFile(*ClientboundIn, *ClientboundOut, state, proto_base.ToClient, -1)
if err != nil {
return fmt.Errorf("clientbound: %w", err)
}
}
if *ServerboundIn != "" {
state, err := parseState(*ServerboundState)
if err != nil {
return err
}
_, err = processFile(*ServerboundIn, *ServerboundOut, state, proto_base.ToServer, compressionThreshold)
if err != nil {
return fmt.Errorf("serverbound: %w", err)
}
}
return
}
func processFile(inPath, outPath string, initial proto_base.State, dir proto_base.Direction, initialThreshold int32) (finalThreshold int32, err error) {
in, err := os.Open(inPath)
if err != nil {
return initialThreshold, fmt.Errorf("open input: %w", err)
}
defer in.Close()
out, err := os.Create(outPath)
if err != nil {
return initialThreshold, fmt.Errorf("create output: %w", err)
}
defer out.Close()
cr := &captureReader{
r: in,
out: replay.NewWriter(out),
state: initial,
threshold: -1,
direction: dir,
pendingThreshold: initialThreshold,
}
if dir == proto_base.ToClient {
cr.threshold = initialThreshold
}
count, err := cr.process()
if err != nil {
return cr.threshold, err
}
fmt.Printf("%s: %d packets written to %s (threshold=%d)\n", inPath, count, outPath, cr.threshold)
return cr.threshold, nil
}
+1 -1
View File
@@ -52,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("./level/anvil/testdata/securechattestworld/region/r.%v.%v.mca", xmca, zmca)) f, err := os.Open(fmt.Sprintf("./.devres/anvil_testdata/securechattestworld/region/r.%v.%v.mca", xmca, zmca))
if err != nil { if err != nil {
return return
} }
+5
View File
@@ -289,6 +289,9 @@ func (a *Account) CheckGiftCodeValidity(giftCode string) (valid bool, err error)
return return
} }
// NewAccountFromYGG creates an Account by authenticating the YGG token against
// Mojang's API. It makes an HTTP call to fetch the player profile and returns
// an Account with name and UUID populated, or an error if authentication fails.
func NewAccountFromYGG(ygg string) (a *Account, err error) { func NewAccountFromYGG(ygg string) (a *Account, err error) {
a = &Account{ a = &Account{
Ygg: ygg, Ygg: ygg,
@@ -303,6 +306,8 @@ func NewAccountFromYGG(ygg string) (a *Account, err error) {
return return
} }
// NewAccount creates an Account from explicit name, UUID, and YGG token without
// making any HTTP calls. The account uses Mojang's default API servers.
func NewAccount(name string, uuid uuid.UUID, ygg string) (a *Account) { func NewAccount(name string, uuid uuid.UUID, ygg string) (a *Account) {
return &Account{ return &Account{
Name: name, Name: name,
+2
View File
@@ -4,6 +4,8 @@ import (
"github.com/admin-else/strom/mc/crypto" "github.com/admin-else/strom/mc/crypto"
) )
// NewOfflineAccount creates an offline-mode Account with a UUID derived from the
// player name. No HTTP calls are made; the UUID is computed locally.
func NewOfflineAccount(name string) *Account { func NewOfflineAccount(name string) *Account {
return &Account{ return &Account{
Name: name, Name: name,
+13
View File
@@ -9,6 +9,8 @@ import (
"strings" "strings"
) )
// BlockedServers fetches the list of SHA-1 hashes of blocked server IPs from
// Mojang's session server. The returned strings are hex-encoded hashes.
func BlockedServers() (s []string, err error) { func BlockedServers() (s []string, err error) {
resp, err := http.Get("https://sessionserver.mojang.com/blockedservers") resp, err := http.Get("https://sessionserver.mojang.com/blockedservers")
if err != nil { if err != nil {
@@ -36,6 +38,9 @@ type ProfileResp struct {
Properties []ProfileProperty `json:"properties"` Properties []ProfileProperty `json:"properties"`
} }
// HasJoined checks with Mojang's session server whether a player has joined a
// given server. name is the player name, server is the server hash, and ip is
// the optional player IP address. Returns the player's profile on success.
func HasJoined(name, server, ip string) (p ProfileResp, err error) { func HasJoined(name, server, ip string) (p ProfileResp, err error) {
url := "https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + name + "&serverId=" + server url := "https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + name + "&serverId=" + server
if ip != "" { if ip != "" {
@@ -62,6 +67,8 @@ type MojangPublicKeysResp struct {
AuthenticationKeys []string `json:"authenticationKeys"` AuthenticationKeys []string `json:"authenticationKeys"`
} }
// MojangPublicKeys fetches Mojang's public keys for profile property signing and
// player certificate verification from the session server.
func MojangPublicKeys() (keys MojangPublicKeysResp, err error) { func MojangPublicKeys() (keys MojangPublicKeysResp, err error) {
resp, err := http.Get("https://sessionserver.mojang.com/session/minecraft/profile/public_key_by_token") resp, err := http.Get("https://sessionserver.mojang.com/session/minecraft/profile/public_key_by_token")
if err != nil { if err != nil {
@@ -72,6 +79,8 @@ func MojangPublicKeys() (keys MojangPublicKeysResp, err error) {
return return
} }
// Profile fetches a player's profile by UUID from Mojang's session server.
// If unsigned is false, signed profile properties are included in the response.
func Profile(id string, unsinged bool) (p ProfileResp, err error) { func Profile(id string, unsinged bool) (p ProfileResp, err error) {
url := "https://sessionserver.mojang.com/session/minecraft/profile/" + id url := "https://sessionserver.mojang.com/session/minecraft/profile/" + id
if !unsinged { if !unsinged {
@@ -91,6 +100,8 @@ type IdName struct {
Name string `json:"name"` Name string `json:"name"`
} }
// NameToId resolves a Minecraft player name to a UUID and canonical name by
// making an HTTP GET to Mojang's API.
func NameToId(name string) (idName IdName, err error) { func NameToId(name string) (idName IdName, err error) {
// may also use these: // may also use these:
//https://api.mojang.com/users/profiles/minecraft/<player name> //https://api.mojang.com/users/profiles/minecraft/<player name>
@@ -105,6 +116,8 @@ func NameToId(name string) (idName IdName, err error) {
return return
} }
// NameToIdBulk resolves multiple Minecraft player names to UUIDs and canonical
// names in a single HTTP POST to Mojang's API.
func NameToIdBulk(names []string) (idNames []IdName, err error) { func NameToIdBulk(names []string) (idNames []IdName, err error) {
b := bytes.NewBuffer(nil) b := bytes.NewBuffer(nil)
err = json.NewEncoder(b).Encode(names) err = json.NewEncoder(b).Encode(names)
+1
View File
@@ -13,6 +13,7 @@ func (m *mod) onKeepAlive(p *v1_21_8.PlayToClientPacketKeepAlive) (err error) {
return m.Send(&v1_21_8.PlayToServerPacketKeepAlive{KeepAliveId: p.KeepAliveId}) return m.Send(&v1_21_8.PlayToServerPacketKeepAlive{KeepAliveId: p.KeepAliveId})
} }
// Start begins responding to keep-alive packets on the connection.
func Start(c *proto.Conn) { func Start(c *proto.Conn) {
m := &mod{Conn: c} m := &mod{Conn: c}
m.RegisterUntilLatest(m.onKeepAlive) m.RegisterUntilLatest(m.onKeepAlive)
+25
View File
@@ -2,6 +2,7 @@ package client
import ( import (
"context" "context"
"errors"
"net" "net"
"github.com/admin-else/strom/mc/data" "github.com/admin-else/strom/mc/data"
@@ -21,6 +22,10 @@ func Connect(ctx context.Context, addr string, version string) (ret *proto.Conn,
if err != nil { if err != nil {
return return
} }
if s.Version.Protocol == 0 {
err = errors.New("server didnt return protocol version")
return
}
protocolVersion = s.Version.Protocol protocolVersion = s.Version.Protocol
} else { } else {
var v data.VersionInfo var v data.VersionInfo
@@ -55,3 +60,23 @@ func ConnectVersionLess(ctx context.Context, addr string) (ret *proto.Conn, err
ret.W = ret.Conn ret.W = ret.Conn
return return
} }
// ConnectWithConn wraps an existing net.Conn into a proto.Conn with the given
// Minecraft version. The version must be non-empty.
func ConnectWithConn(ctx context.Context, conn net.Conn, version string) (ret *proto.Conn, err error) {
if ctx == nil {
ctx = context.Background()
}
ret = proto.NewConnCtx(ctx)
ret.Actor = proto_base.Client
ret.Conn = conn
ret.R = conn
ret.W = conn
v, err := data.LookUpVersionByName(version)
if err != nil {
return
}
ret.ProtocolVersion = v.Version
ret.Version = version
return
}
+1
View File
@@ -47,6 +47,7 @@ func (c *ConfigIgnorer) OnKeepAlive(packet *v1_21_8.ConfigurationToClientPacketK
return return
} }
// IgnoreConfig acknowledges configuration packets on the connection and transitions it to the Play state once configuration is complete.
func IgnoreConfig(c *proto.Conn) (err error) { func IgnoreConfig(c *proto.Conn) (err error) {
ci := &ConfigIgnorer{c} ci := &ConfigIgnorer{c}
ci.RegisterCritical(ci.Default) ci.RegisterCritical(ci.Default)
+1
View File
@@ -9,6 +9,7 @@ import (
"github.com/admin-else/strom/mc/proto_generated/v1_21_8" "github.com/admin-else/strom/mc/proto_generated/v1_21_8"
) )
// MakeHandshakePacket creates a handshake packet using the connection's remote address as the server host.
func MakeHandshakePacket(c *proto.Conn, nextState proto_base.State) (p *v1_21_8.HandshakingToServerPacketSetProtocol, err error) { func MakeHandshakePacket(c *proto.Conn, nextState proto_base.State) (p *v1_21_8.HandshakingToServerPacketSetProtocol, err error) {
return MakeHandshakePacketAddr(c, nextState, c.RemoteAddr().String()) return MakeHandshakePacketAddr(c, nextState, c.RemoteAddr().String())
} }
+143 -15
View File
@@ -7,6 +7,7 @@ import (
"crypto/x509" "crypto/x509"
"encoding/json" "encoding/json"
"errors" "errors"
"net"
"github.com/admin-else/strom/mc/api" "github.com/admin-else/strom/mc/api"
"github.com/admin-else/strom/mc/crypto" "github.com/admin-else/strom/mc/crypto"
@@ -14,7 +15,10 @@ import (
"github.com/admin-else/strom/mc/proto" "github.com/admin-else/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "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/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/proto_generated/v1_8"
"github.com/admin-else/strom/mc/proto_generated/v26_2"
"github.com/admin-else/strom/mc/text" "github.com/admin-else/strom/mc/text"
"github.com/google/uuid"
) )
type LoginClient struct { type LoginClient struct {
@@ -110,22 +114,67 @@ func (s *LoginClient) OnDisconnect(packet *v1_21_8.LoginToClientPacketDisconnect
return return
} }
func (s *LoginClient) OnSuccess(success *v1_21_8.LoginToClientPacketSuccess) (err error) { func (s *LoginClient) OnDisconnectV1_8(packet *v1_8.LoginToClientPacketDisconnect) (err error) {
s.GivenAccount = success var reason text.Component
err = s.Send(&v1_21_8.LoginToServerPacketLoginAcknowledged{}) err = json.Unmarshal([]byte(packet.Reason), &reason)
if err != nil { if err != nil {
return return
} }
s.SetState(proto_base.Configuration) 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) {
s.GivenAccount = &v1_21_8.LoginToClientPacketSuccess{
Uuid: uuid.MustParse(success.Uuid),
Username: success.Username,
}
s.SetState(proto_base.Play)
err = event.HandlerDoneErr{} err = event.HandlerDoneErr{}
return return
} }
func (s *LoginClient) OnSuccess(success *v1_21_8.LoginToClientPacketSuccess) (err error) {
s.GivenAccount = success
if s.ProtocolVersion >= 764 {
err = s.Send(&v1_21_8.LoginToServerPacketLoginAcknowledged{})
if err != nil {
return
}
s.SetState(proto_base.Configuration)
} else {
s.SetState(proto_base.Play)
}
err = event.HandlerDoneErr{}
return
}
func (s *LoginClient) OnSuccess26_2(success *v26_2.LoginToClientPacketSuccess) (err error) {
return s.OnSuccess(&v1_21_8.LoginToClientPacketSuccess{
Uuid: success.Uuid,
Username: success.Username,
Properties: success.Properties,
})
}
func (s *LoginClient) OnStart() (err error) { func (s *LoginClient) OnStart() (err error) {
return return
} }
// LoginRaw performs the login handshake on an already-established connection without DNS resolution or configuration handling.
// The handshake address is derived from the connection's RemoteAddr.
func LoginRaw(c *proto.Conn, account *api.Account) (err error) { func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
return LoginRawAddr(c, account, "")
}
// LoginRawAddr performs the login handshake on an already-established connection using the given address for the handshake packet.
// If hostAddr is empty, the handshake address is derived from the connection's RemoteAddr.
func LoginRawAddr(c *proto.Conn, account *api.Account, hostAddr string) (err error) {
lc := &LoginClient{ lc := &LoginClient{
Conn: c, Conn: c,
Account: account, Account: account,
@@ -135,9 +184,18 @@ func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
lc.RegisterCriticalUntilLatest(lc.OnCompress) lc.RegisterCriticalUntilLatest(lc.OnCompress)
lc.RegisterCriticalUntilLatest(lc.OnEncrypt) lc.RegisterCriticalUntilLatest(lc.OnEncrypt)
lc.RegisterCriticalUntilLatest(lc.OnDisconnect) lc.RegisterCriticalUntilLatest(lc.OnDisconnect)
lc.RegisterCriticalUntilLatest(lc.OnSuccess) lc.RegisterCriticalUntil("26.1", lc.OnSuccess)
lc.RegisterCriticalUntilLatest(lc.OnSuccess26_2)
lc.RegisterCritical(lc.OnCompressV1_8)
lc.RegisterCritical(lc.OnDisconnectV1_8)
lc.RegisterCritical(lc.OnSuccessV1_8)
p, err := MakeHandshakePacket(lc.Conn, proto_base.Login) var p proto_base.EncodeDecodeAble
if hostAddr != "" {
p, err = MakeHandshakePacketAddr(lc.Conn, proto_base.Login, hostAddr)
} else {
p, err = MakeHandshakePacket(lc.Conn, proto_base.Login)
}
if err != nil { if err != nil {
return return
} }
@@ -147,7 +205,11 @@ func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
return return
} }
lc.SetState(proto_base.Login) lc.SetState(proto_base.Login)
err = lc.Send(&v1_21_8.LoginToServerPacketLoginStart{Username: lc.Account.Name, PlayerUUID: lc.Account.Uuid}) if lc.Conn.ProtocolVersion < 759 {
err = lc.Send(&v1_8.LoginToServerPacketLoginStart{Username: lc.Account.Name})
} else {
err = lc.Send(&v1_21_8.LoginToServerPacketLoginStart{Username: lc.Account.Name, PlayerUUID: lc.Account.Uuid})
}
err = lc.StartConn() err = lc.StartConn()
if err != nil { if err != nil {
@@ -156,31 +218,67 @@ func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
return return
} }
// WithoutDns returns a login setting that disables SRV DNS resolution during login.
func WithoutDns() func(ls *loginSettings) { func WithoutDns() func(ls *loginSettings) {
return func(ls *loginSettings) { return func(ls *loginSettings) {
ls.NoDns = true ls.NoDns = true
} }
} }
// WithContext returns a login setting that sets the context used for the connection dial and DNS resolution.
func WithContext(ctx context.Context) func(ls *loginSettings) { func WithContext(ctx context.Context) func(ls *loginSettings) {
return func(ls *loginSettings) { return func(ls *loginSettings) {
ls.Ctx = ctx ls.Ctx = ctx
} }
} }
// WithVersion returns a login setting that forces a specific Minecraft version string for the connection.
func WithVersion(version string) func(ls *loginSettings) { func WithVersion(version string) func(ls *loginSettings) {
return func(ls *loginSettings) { return func(ls *loginSettings) {
ls.Version = version ls.Version = version
} }
} }
func WithIgnoreConfig() func(ls *loginSettings) {
return func(ls *loginSettings) {
ls.IgnoreConfig = true
}
}
// DialFunc is a context-aware dial function used by Login to establish a TCP connection.
type DialFunc func(ctx context.Context, network, addr string) (net.Conn, error)
// WithConn returns a login setting that uses an already-established net.Conn instead of dialling.
// WithVersion must also be set; auto-detection is not possible with a pre-established connection.
func WithConn(conn net.Conn) func(ls *loginSettings) {
return func(ls *loginSettings) {
ls.Conn = conn
}
}
// WithDialer returns a login setting that uses the given dial function instead of net.Dialer.
// Auto version detection via status ping is still supported when no explicit version is set.
func WithDialer(d DialFunc) func(ls *loginSettings) {
return func(ls *loginSettings) {
ls.Dialer = d
}
}
var (
ErrWithConnRequiresVersion = errors.New("WithVersion is required when using WithConn")
ErrWithConnNoStatus = errors.New("auto version detection is not supported with WithConn")
)
type loginSettings struct { type loginSettings struct {
NoDns bool NoDns bool
Ctx context.Context Ctx context.Context
Version string Version string
IgnoreConfig bool IgnoreConfig bool
Conn net.Conn
Dialer DialFunc
} }
// Login resolves the address with SRV DNS, connects, performs the login handshake, and handles the configuration phase, returning an authenticated connection ready for play.
func Login(connectTo string, account *api.Account, settings ...func(ls *loginSettings)) (c *proto.Conn, err error) { func Login(connectTo string, account *api.Account, settings ...func(ls *loginSettings)) (c *proto.Conn, err error) {
ls := &loginSettings{} ls := &loginSettings{}
@@ -188,22 +286,52 @@ func Login(connectTo string, account *api.Account, settings ...func(ls *loginSet
setting(ls) setting(ls)
} }
if !ls.NoDns { if ls.Conn != nil {
connectTo, _, _, err = DoDNSChecked(ls.Ctx, connectTo, nil) if ls.Version == "" {
return nil, ErrWithConnRequiresVersion
}
c, err = ConnectWithConn(ls.Ctx, ls.Conn, ls.Version)
if err != nil {
return
}
} else if ls.Dialer != nil {
if ls.Version == "" {
return nil, ErrWithConnRequiresVersion
}
if !ls.NoDns {
connectTo, _, _, err = DoDNSChecked(ls.Ctx, connectTo, nil)
if err != nil {
return
}
}
var conn net.Conn
conn, err = ls.Dialer(ls.Ctx, "tcp", connectTo)
if err != nil {
return
}
c, err = ConnectWithConn(ls.Ctx, conn, ls.Version)
if err != nil {
conn.Close()
return
}
} else {
if !ls.NoDns {
connectTo, _, _, err = DoDNSChecked(ls.Ctx, connectTo, nil)
if err != nil {
return
}
}
c, err = Connect(ls.Ctx, connectTo, ls.Version)
if err != nil { if err != nil {
return return
} }
} }
c, err = Connect(ls.Ctx, connectTo, ls.Version) err = LoginRawAddr(c, account, connectTo)
if err != nil { if err != nil {
return return
} }
err = LoginRaw(c, account) if !ls.IgnoreConfig && c.ProtocolVersion >= 764 {
if err != nil {
return
}
if !ls.IgnoreConfig {
err = IgnoreConfig(c) err = IgnoreConfig(c)
} }
return return
+55
View File
@@ -0,0 +1,55 @@
package client_test
import (
"reflect"
"testing"
"github.com/admin-else/strom/mc/data"
"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"
)
func assertClientSendConvertible(t *testing.T, srcType reflect.Type, name string, state proto_base.State, direction proto_base.Direction, targetVersion int32) {
t.Helper()
targetInfo, ok := proto.LookupPacketInfoByNameProtocolVersionStateAndDirection(name, targetVersion, state, direction)
if !ok {
t.Fatalf("packet %s not found for version %d", name, targetVersion)
}
targetType := reflect.TypeOf(targetInfo.Type)
if !proto.SmartConvertibleTo(srcType, targetType) {
t.Fatalf("%s is not smart-convertible from v1_21_8 to version %d", name, targetVersion)
}
}
func assertClientReceiveConvertible(t *testing.T, dstType reflect.Type, name string, state proto_base.State, direction proto_base.Direction, targetVersion int32) {
t.Helper()
targetInfo, ok := proto.LookupPacketInfoByNameProtocolVersionStateAndDirection(name, targetVersion, state, direction)
if !ok {
t.Fatalf("packet %s not found for version %d", name, targetVersion)
}
targetType := reflect.TypeOf(targetInfo.Type)
if !proto.SmartConvertibleTo(targetType, dstType) {
t.Fatalf("%s is not smart-convertible from version %d to v1_21_8", name, targetVersion)
}
}
func TestLoginClientSendAssumptions(t *testing.T) {
v26_1Version := data.MustLookupProtocolVersion("26.1")
// Packets sent by LoginClient as v1_21_8.
assertClientSendConvertible(t, reflect.TypeFor[*v1_21_8.HandshakingToServerPacketSetProtocol](), "set_protocol", proto_base.Handshaking, proto_base.ToServer, v26_1Version)
assertClientSendConvertible(t, reflect.TypeFor[*v1_21_8.LoginToServerPacketLoginStart](), "login_start", proto_base.Login, proto_base.ToServer, v26_1Version)
assertClientSendConvertible(t, reflect.TypeFor[*v1_21_8.LoginToServerPacketLoginAcknowledged](), "login_acknowledged", proto_base.Login, proto_base.ToServer, v26_1Version)
assertClientSendConvertible(t, reflect.TypeFor[*v1_21_8.LoginToServerPacketEncryptionBegin](), "encryption_begin", proto_base.Login, proto_base.ToServer, v26_1Version)
}
func TestLoginClientReceiveAssumptions(t *testing.T) {
v26_1Version := data.MustLookupProtocolVersion("26.1")
// Packets received by LoginClient via RegisterCriticalUntilLatest.
// login_success is excluded because 26.2 is not convertible.
assertClientReceiveConvertible(t, reflect.TypeFor[*v1_21_8.LoginToClientPacketCompress](), "compress", proto_base.Login, proto_base.ToClient, v26_1Version)
assertClientReceiveConvertible(t, reflect.TypeFor[*v1_21_8.LoginToClientPacketEncryptionBegin](), "encryption_begin", proto_base.Login, proto_base.ToClient, v26_1Version)
assertClientReceiveConvertible(t, reflect.TypeFor[*v1_21_8.LoginToClientPacketDisconnect](), "disconnect", proto_base.Login, proto_base.ToClient, v26_1Version)
}
+30 -4
View File
@@ -9,6 +9,7 @@ import (
"github.com/admin-else/strom/mc/proto" "github.com/admin-else/strom/mc/proto"
"github.com/admin-else/strom/mc/proto_base" "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/proto_generated/v1_21_8"
"github.com/admin-else/strom/mc/proto_generated/v1_8"
"github.com/admin-else/strom/mc/server" "github.com/admin-else/strom/mc/server"
) )
@@ -36,16 +37,38 @@ func (s *StatusClient) OnPong(p *v1_21_8.StatusToClientPacketPing) (err error) {
return 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()
err = event.HandlerDoneErr{}
return
}
// StatusRaw returns a StatusClient that is not connected to a server. // StatusRaw returns a StatusClient that is not connected to a server.
// So ignore the resource leak warning. And maybe attach a warn ignore comment. // So ignore the resource leak warning. And maybe attach a warn ignore comment.
// It does not resolve SRV records. // It does not resolve SRV records.
func StatusRaw(ctx context.Context, addr string) (s *StatusClient, err error) { func StatusRaw(ctx context.Context, addr string) (s *StatusClient, err error) {
return StatusRawWithVersion(ctx, addr, "1.21.8")
}
// StatusRawWithVersion is like StatusRaw but uses the given Minecraft version for the handshake.
func StatusRawWithVersion(ctx context.Context, addr, version string) (s *StatusClient, err error) {
c, err := ConnectVersionLess(ctx, addr) c, err := ConnectVersionLess(ctx, addr)
if err != nil { if err != nil {
return return
} }
defer c.Close() defer c.Close()
err = c.SetVersion("1.21.8") err = c.SetVersion(version)
if err != nil { if err != nil {
return return
} }
@@ -54,6 +77,8 @@ func StatusRaw(ctx context.Context, addr string) (s *StatusClient, err error) {
} }
s.RegisterCriticalUntilLatest(s.OnStatus) s.RegisterCriticalUntilLatest(s.OnStatus)
s.RegisterCriticalUntilLatest(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 {
@@ -71,11 +96,12 @@ func StatusRaw(ctx context.Context, addr string) (s *StatusClient, err error) {
} }
// StatusNoDns is like Status but does not resolve SRV records. // StatusNoDns is like Status but does not resolve SRV records.
func StatusNoDns(addr string) (status server.StatusResponse, err error) { func StatusNoDns(ctx context.Context, addr string) (status server.StatusResponse, err error) {
s, err := StatusRaw(context.Background(), addr) s, err := StatusRaw(ctx, addr)
if err != nil { if err != nil {
return return
} }
defer s.Close()
err = json.Unmarshal([]byte(s.Status), &status) err = json.Unmarshal([]byte(s.Status), &status)
return return
} }
@@ -86,5 +112,5 @@ func Status(ctx context.Context, addr string) (status server.StatusResponse, err
if err != nil { if err != nil {
return return
} }
return StatusNoDns(addr) return StatusNoDns(ctx, addr)
} }
+2
View File
@@ -41,10 +41,12 @@ type CFB8 struct {
mutex sync.Mutex mutex sync.Mutex
} }
// NewCFB8Decrypt creates a new CFB8 stream cipher in decrypt mode.
func NewCFB8Decrypt(c cipher.Block, iv []byte) *CFB8 { func NewCFB8Decrypt(c cipher.Block, iv []byte) *CFB8 {
return newCFB8(c, iv, true) return newCFB8(c, iv, true)
} }
// NewCFB8Encrypt creates a new CFB8 stream cipher in encrypt mode.
func NewCFB8Encrypt(c cipher.Block, iv []byte) *CFB8 { func NewCFB8Encrypt(c cipher.Block, iv []byte) *CFB8 {
return newCFB8(c, iv, false) return newCFB8(c, iv, false)
} }
+1
View File
@@ -21,6 +21,7 @@ func uuidV3(space []byte, data []byte) uuid.UUID {
return u return u
} }
// FromOfflinePlayer generates a UUID for an offline-mode (cracked) player from their display name.
func FromOfflinePlayer(displayName string) uuid.UUID { func FromOfflinePlayer(displayName string) uuid.UUID {
return uuidV3([]byte("OfflinePlayer:"), []byte(displayName)) return uuidV3([]byte("OfflinePlayer:"), []byte(displayName))
} }
+3
View File
@@ -28,6 +28,7 @@ type Biome struct {
var BiomesCache = make(map[string][]*Biome) var BiomesCache = make(map[string][]*Biome)
// BiomesForVersion returns the biome definitions for the given Minecraft version, caching them after the first load.
func BiomesForVersion(v string) (ret []*Biome) { func BiomesForVersion(v string) (ret []*Biome) {
var ok bool var ok bool
if ret, ok = BiomesCache[v]; ok { if ret, ok = BiomesCache[v]; ok {
@@ -39,6 +40,7 @@ func BiomesForVersion(v string) (ret []*Biome) {
return b return b
} }
// LookupBiomeById returns the biome with the given numeric ID in the given version.
func LookupBiomeById(version string, id int32) (biome *Biome, ok bool) { func LookupBiomeById(version string, id int32) (biome *Biome, ok bool) {
for _, b := range BiomesForVersion(version) { for _, b := range BiomesForVersion(version) {
if b.Id == id { if b.Id == id {
@@ -52,6 +54,7 @@ func LookupBiomeById(version string, id int32) (biome *Biome, ok bool) {
var UnknownBiomeNameErr = errors.New("unknown biome Name") var UnknownBiomeNameErr = errors.New("unknown biome Name")
// LookupBiomeByName returns the biome with the given name in the given version.
func LookupBiomeByName(version string, name string) (biome *Biome, ok bool) { func LookupBiomeByName(version string, name string) (biome *Biome, ok bool) {
for _, b := range BiomesForVersion(version) { for _, b := range BiomesForVersion(version) {
if b.Name == name { if b.Name == name {
+5
View File
@@ -59,6 +59,7 @@ type BlockState struct {
var BlocksCache = make(map[string][]*Block) var BlocksCache = make(map[string][]*Block)
var BlocksCacheIdMap = make(map[string]map[int32]*Block) var BlocksCacheIdMap = make(map[string]map[int32]*Block)
// BlocksForVersion returns the block definitions for the given Minecraft version, caching them after the first load.
func BlocksForVersion(v string) (ret []*Block) { func BlocksForVersion(v string) (ret []*Block) {
var ok bool var ok bool
if ret, ok = BlocksCache[v]; ok { if ret, ok = BlocksCache[v]; ok {
@@ -84,6 +85,7 @@ func BlocksForVersion(v string) (ret []*Block) {
return b return b
} }
// LookupBlockByStateId returns the block for the given global palette state ID in the given version.
func LookupBlockByStateId(version string, stateId int32) (block *Block, ok bool) { func LookupBlockByStateId(version string, stateId int32) (block *Block, ok bool) {
idmap, found := BlocksCacheIdMap[version] idmap, found := BlocksCacheIdMap[version]
if !found { if !found {
@@ -101,6 +103,7 @@ func LookupBlockByStateId(version string, stateId int32) (block *Block, ok bool)
var UnknownBlockNameErr = errors.New("unknown block Name") var UnknownBlockNameErr = errors.New("unknown block Name")
// LookupBlockByName returns the block with the given name in the given version.
func LookupBlockByName(version string, name string) (block *Block, ok bool) { func LookupBlockByName(version string, name string) (block *Block, ok bool) {
for _, b := range BlocksForVersion(version) { for _, b := range BlocksForVersion(version) {
if b.Name == name { if b.Name == name {
@@ -111,6 +114,7 @@ func LookupBlockByName(version string, name string) (block *Block, ok bool) {
return return
} }
// StateIdFromBlocKAndStateMap returns the global palette state ID for the given block name and state property map in the given version.
func StateIdFromBlocKAndStateMap(version string, name string, stateMap map[string]string) (stateId int32, err error) { func StateIdFromBlocKAndStateMap(version string, name string, stateMap map[string]string) (stateId int32, err error) {
b, ok := LookupBlockByName(version, name) b, ok := LookupBlockByName(version, name)
if !ok { if !ok {
@@ -135,6 +139,7 @@ var BadBlockStateTypeErr = errors.New("bad block state type")
var BadEnumErr = errors.New("bad enum") var BadEnumErr = errors.New("bad enum")
var SupplyAllStatesErr = errors.New("supply all states") var SupplyAllStatesErr = errors.New("supply all states")
// FromBlockState converts a global palette state ID back into a block definition and a map of state properties.
func FromBlockState(version string, stateId int32) (b *Block, stateData map[string]string, err error) { func FromBlockState(version string, stateId int32) (b *Block, stateData map[string]string, err error) {
b, ok := LookupBlockByStateId(version, stateId) b, ok := LookupBlockByStateId(version, stateId)
if !ok { if !ok {
+27
View File
@@ -0,0 +1,27 @@
#!/usr/bin/sh
set -xeuo pipefail
# Copy minecraft-data from the local AnyGate checkout instead of cloning upstream.
# This is used when upstream does not yet have the target version or when we want
# to test local changes before pushing.
LOCAL_MINECRAFT_DATA="${LOCAL_MINECRAFT_DATA:-$HOME/src/anygate/minecraft-data}"
cd "$(dirname "$0")"
rm -rf minecraft-data/
mkdir -p minecraft-data/pc
cp "$LOCAL_MINECRAFT_DATA/data/dataPaths.json" minecraft-data/
copy-mc() {
cp -r "$LOCAL_MINECRAFT_DATA/data/pc/$1" minecraft-data/pc
}
copy-mc common
copy-mc 1.21.8
copy-mc 1.21.9
copy-mc 1.21.11
copy-mc 26.1
copy-mc 26.2
+2
View File
@@ -12,6 +12,7 @@ import (
//go:embed minecraft-data/pc minecraft-data/dataPaths.json //go:embed minecraft-data/pc minecraft-data/dataPaths.json
var MinecraftData embed.FS var MinecraftData embed.FS
// LoadJson reads a JSON file from the embedded minecraft-data FS and unmarshals it into data.
func LoadJson(path string, data any) (err error) { func LoadJson(path string, data any) (err error) {
b, err := MinecraftData.ReadFile(path) b, err := MinecraftData.ReadFile(path)
if err != nil { if err != nil {
@@ -21,6 +22,7 @@ func LoadJson(path string, data any) (err error) {
return return
} }
// LoadVersionedJson loads a version-specific JSON data file from the embedded minecraft-data FS and unmarshals it into data.
func LoadVersionedJson(version, dataName string, data any) (err error) { func LoadVersionedJson(version, dataName string, data any) (err error) {
b, err := MinecraftData.ReadFile("minecraft-data/" + Paths.Data[version][dataName] + "/" + dataName + ".json") b, err := MinecraftData.ReadFile("minecraft-data/" + Paths.Data[version][dataName] + "/" + dataName + ".json")
if err != nil { if err != nil {
+2
View File
@@ -3,6 +3,8 @@ set -xeuo pipefail
# Go get / install does not clone git submodules so we have to do it like this # Go get / install does not clone git submodules so we have to do it like this
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:PrismarineJS/minecraft-data.git
mv minecraft-data minecraft-data-untrimmed mv minecraft-data minecraft-data-untrimmed
+3
View File
@@ -19,6 +19,7 @@ type Item struct {
var ItemsCache = make(map[string][]*Item) var ItemsCache = make(map[string][]*Item)
var ItemsCacheMutex = &sync.RWMutex{} var ItemsCacheMutex = &sync.RWMutex{}
// ItemsForVersion returns the item definitions for the given Minecraft version, caching them after the first load.
func ItemsForVersion(v string) (ret []*Item) { func ItemsForVersion(v string) (ret []*Item) {
var ok bool var ok bool
ItemsCacheMutex.RLock() ItemsCacheMutex.RLock()
@@ -35,6 +36,7 @@ func ItemsForVersion(v string) (ret []*Item) {
return b return b
} }
// LookupItemById returns the item with the given numeric ID in the given version.
func LookupItemById(version string, id int32) (item *Item, ok bool) { func LookupItemById(version string, id int32) (item *Item, ok bool) {
for _, i := range ItemsForVersion(version) { for _, i := range ItemsForVersion(version) {
if i.Id == id { if i.Id == id {
@@ -46,6 +48,7 @@ func LookupItemById(version string, id int32) (item *Item, ok bool) {
return return
} }
// LookupItemByName returns the item with the given name in the given version.
func LookupItemByName(version string, name string) (item *Item, ok bool) { func LookupItemByName(version string, name string) (item *Item, ok bool) {
for _, i := range ItemsForVersion(version) { for _, i := range ItemsForVersion(version) {
if i.Name == name { if i.Name == name {
+122 -22
View File
@@ -1583,7 +1583,8 @@
"tints": "pc/1.21.5", "tints": "pc/1.21.5",
"version": "pc/1.21.5", "version": "pc/1.21.5",
"windows": "pc/1.16.1", "windows": "pc/1.16.1",
"proto": "pc/1.21.5" "proto": "pc/1.21.5",
"multi_noise_biome_source_parameter_list": "pc/1.21.5"
}, },
"1.21.6": { "1.21.6": {
"attributes": "pc/1.21.6", "attributes": "pc/1.21.6",
@@ -1610,7 +1611,8 @@
"tints": "pc/1.21.6", "tints": "pc/1.21.6",
"version": "pc/1.21.6", "version": "pc/1.21.6",
"windows": "pc/1.16.1", "windows": "pc/1.16.1",
"proto": "pc/1.21.6" "proto": "pc/1.21.6",
"multi_noise_biome_source_parameter_list": "pc/1.21.6"
}, },
"1.21.8": { "1.21.8": {
"attributes": "pc/1.21.8", "attributes": "pc/1.21.8",
@@ -1630,7 +1632,6 @@
"loginPacket": "pc/1.21.3", "loginPacket": "pc/1.21.3",
"mapIcons": "pc/1.20.2", "mapIcons": "pc/1.20.2",
"materials": "pc/1.21.8", "materials": "pc/1.21.8",
"multi_noise_biome_source_parameter_list": "pc/1.21.8",
"particles": "pc/1.21.8", "particles": "pc/1.21.8",
"protocol": "pc/1.21.8", "protocol": "pc/1.21.8",
"recipes": "pc/1.21.8", "recipes": "pc/1.21.8",
@@ -1638,7 +1639,8 @@
"tints": "pc/1.21.8", "tints": "pc/1.21.8",
"version": "pc/1.21.8", "version": "pc/1.21.8",
"windows": "pc/1.16.1", "windows": "pc/1.16.1",
"proto": "pc/1.21.8" "proto": "pc/1.21.8",
"multi_noise_biome_source_parameter_list": "pc/1.21.8"
}, },
"1.21.9": { "1.21.9": {
"attributes": "pc/1.21.9", "attributes": "pc/1.21.9",
@@ -1658,7 +1660,6 @@
"loginPacket": "pc/1.21.9", "loginPacket": "pc/1.21.9",
"mapIcons": "pc/1.20.2", "mapIcons": "pc/1.20.2",
"materials": "pc/1.21.9", "materials": "pc/1.21.9",
"multi_noise_biome_source_parameter_list": "pc/1.21.9",
"particles": "pc/1.21.9", "particles": "pc/1.21.9",
"protocol": "pc/1.21.9", "protocol": "pc/1.21.9",
"recipes": "pc/1.21.9", "recipes": "pc/1.21.9",
@@ -1666,7 +1667,8 @@
"tints": "pc/1.21.9", "tints": "pc/1.21.9",
"version": "pc/1.21.9", "version": "pc/1.21.9",
"windows": "pc/1.16.1", "windows": "pc/1.16.1",
"proto": "pc/1.21.9" "proto": "pc/1.21.9",
"multi_noise_biome_source_parameter_list": "pc/1.21.9"
}, },
"1.21.10": { "1.21.10": {
"attributes": "pc/1.21.9", "attributes": "pc/1.21.9",
@@ -1713,7 +1715,6 @@
"loginPacket": "pc/1.21.11", "loginPacket": "pc/1.21.11",
"mapIcons": "pc/1.20.2", "mapIcons": "pc/1.20.2",
"materials": "pc/1.21.11", "materials": "pc/1.21.11",
"multi_noise_biome_source_parameter_list": "pc/1.21.11",
"particles": "pc/1.21.11", "particles": "pc/1.21.11",
"protocol": "pc/1.21.11", "protocol": "pc/1.21.11",
"recipes": "pc/1.21.11", "recipes": "pc/1.21.11",
@@ -1721,7 +1722,62 @@
"tints": "pc/1.21.11", "tints": "pc/1.21.11",
"version": "pc/1.21.11", "version": "pc/1.21.11",
"windows": "pc/1.16.1", "windows": "pc/1.16.1",
"proto": "pc/1.21.11",
"multi_noise_biome_source_parameter_list": "pc/1.21.11"
},
"26.1": {
"attributes": "pc/26.1",
"blockCollisionShapes": "pc/26.1",
"blocks": "pc/26.1",
"blockLoot": "pc/1.20",
"biomes": "pc/26.1",
"commands": "pc/1.20.3",
"effects": "pc/26.1",
"enchantments": "pc/26.1",
"entities": "pc/26.1",
"entityLoot": "pc/1.20",
"foods": "pc/26.1",
"instruments": "pc/26.1",
"items": "pc/26.1",
"language": "pc/26.1",
"loginPacket": "pc/1.21.11",
"mapIcons": "pc/1.20.2",
"materials": "pc/26.1",
"particles": "pc/26.1",
"protocol": "pc/26.1",
"recipes": "pc/26.1",
"sounds": "pc/26.1",
"tints": "pc/26.1",
"version": "pc/26.1",
"windows": "pc/1.16.1",
"proto": "pc/latest" "proto": "pc/latest"
},
"26.2": {
"attributes": "pc/26.2",
"blockCollisionShapes": "pc/26.2",
"blocks": "pc/26.2",
"blockLoot": "pc/1.20",
"biomes": "pc/26.2",
"commands": "pc/1.20.3",
"effects": "pc/26.2",
"enchantments": "pc/26.2",
"entities": "pc/26.2",
"entityLoot": "pc/1.20",
"foods": "pc/26.2",
"instruments": "pc/26.2",
"items": "pc/26.2",
"language": "pc/26.2",
"loginPacket": "pc/1.21.11",
"mapIcons": "pc/1.20.2",
"materials": "pc/26.2",
"particles": "pc/26.2",
"protocol": "pc/26.2",
"recipes": "pc/26.2",
"sounds": "pc/26.2",
"tints": "pc/26.2",
"version": "pc/26.2",
"windows": "pc/1.16.1",
"proto": "pc/26.2"
} }
}, },
"bedrock": { "bedrock": {
@@ -2767,12 +2823,12 @@
"language": "bedrock/1.21.70" "language": "bedrock/1.21.70"
}, },
"1.26.0": { "1.26.0": {
"blocks": "bedrock/1.21.111", "blocks": "bedrock/1.26.0",
"blockStates": "bedrock/1.21.111", "blockStates": "bedrock/1.26.0",
"blockCollisionShapes": "bedrock/1.21.111", "blockCollisionShapes": "bedrock/1.26.0",
"biomes": "bedrock/1.21.60", "biomes": "bedrock/1.21.60",
"entities": "bedrock/1.21.80", "entities": "bedrock/1.21.80",
"items": "bedrock/1.21.111", "items": "bedrock/1.26.0",
"recipes": "bedrock/1.19.10", "recipes": "bedrock/1.19.10",
"instruments": "bedrock/1.17.0", "instruments": "bedrock/1.17.0",
"materials": "pc/1.17", "materials": "pc/1.17",
@@ -2781,33 +2837,77 @@
"protocol": "bedrock/1.26.0", "protocol": "bedrock/1.26.0",
"windows": "bedrock/1.16.201", "windows": "bedrock/1.16.201",
"steve": "bedrock/1.21.70", "steve": "bedrock/1.21.70",
"blocksB2J": "bedrock/1.21.111", "blocksB2J": "bedrock/1.26.0",
"blocksJ2B": "bedrock/1.21.111", "blocksJ2B": "bedrock/1.26.0",
"proto": "bedrock/1.26.0", "proto": "bedrock/1.26.0",
"types": "bedrock/latest", "types": "bedrock/latest",
"version": "bedrock/1.26.0", "version": "bedrock/1.26.0",
"language": "bedrock/1.21.70" "language": "bedrock/1.21.70"
}, },
"26.10": { "1.26.10": {
"blocks": "bedrock/1.21.111", "blocks": "bedrock/1.26.10",
"blockStates": "bedrock/1.21.111", "blockStates": "bedrock/1.26.10",
"blockCollisionShapes": "bedrock/1.21.111", "blockCollisionShapes": "bedrock/1.26.10",
"biomes": "bedrock/1.21.60", "biomes": "bedrock/1.21.60",
"entities": "bedrock/1.21.80", "entities": "bedrock/1.21.80",
"items": "bedrock/1.21.111", "items": "bedrock/1.26.10",
"recipes": "bedrock/1.19.10", "recipes": "bedrock/1.19.10",
"instruments": "bedrock/1.17.0", "instruments": "bedrock/1.17.0",
"materials": "pc/1.17", "materials": "pc/1.17",
"enchantments": "bedrock/1.19.1", "enchantments": "bedrock/1.19.1",
"effects": "pc/1.17", "effects": "pc/1.17",
"protocol": "bedrock/26.10", "protocol": "bedrock/1.26.10",
"windows": "bedrock/1.16.201", "windows": "bedrock/1.16.201",
"steve": "bedrock/1.21.70", "steve": "bedrock/1.21.70",
"blocksB2J": "bedrock/1.21.111", "blocksB2J": "bedrock/1.26.0",
"blocksJ2B": "bedrock/1.21.111", "blocksJ2B": "bedrock/1.26.0",
"proto": "bedrock/1.26.10",
"types": "bedrock/latest",
"version": "bedrock/1.26.10",
"language": "bedrock/1.21.70"
},
"1.26.20": {
"blocks": "bedrock/1.26.20",
"blockStates": "bedrock/1.26.20",
"blockCollisionShapes": "bedrock/1.26.20",
"biomes": "bedrock/1.21.60",
"entities": "bedrock/1.21.80",
"items": "bedrock/1.26.20",
"recipes": "bedrock/1.19.10",
"instruments": "bedrock/1.17.0",
"materials": "pc/1.17",
"enchantments": "bedrock/1.19.1",
"effects": "pc/1.17",
"protocol": "bedrock/1.26.20",
"windows": "bedrock/1.16.201",
"steve": "bedrock/1.21.70",
"blocksB2J": "bedrock/1.26.20",
"blocksJ2B": "bedrock/1.26.20",
"proto": "bedrock/1.26.20",
"types": "bedrock/latest",
"version": "bedrock/1.26.20",
"language": "bedrock/1.21.70"
},
"1.26.30": {
"blocks": "bedrock/1.26.30",
"blockStates": "bedrock/1.26.30",
"blockCollisionShapes": "bedrock/1.26.30",
"biomes": "bedrock/1.21.60",
"entities": "bedrock/1.21.80",
"items": "bedrock/1.26.30",
"recipes": "bedrock/1.19.10",
"instruments": "bedrock/1.17.0",
"materials": "pc/1.17",
"enchantments": "bedrock/1.19.1",
"effects": "pc/1.17",
"protocol": "bedrock/1.26.30",
"windows": "bedrock/1.16.201",
"steve": "bedrock/1.21.70",
"blocksB2J": "bedrock/1.26.30",
"blocksJ2B": "bedrock/1.26.30",
"proto": "bedrock/latest", "proto": "bedrock/latest",
"types": "bedrock/latest", "types": "bedrock/latest",
"version": "bedrock/26.10", "version": "bedrock/1.26.30",
"language": "bedrock/1.21.70" "language": "bedrock/1.21.70"
} }
} }
@@ -1,156 +1,4 @@
{ {
"minecraft:nether": [
{
"biome": "minecraft:nether_wastes",
"parameters": {
"temperature": [
0,
0
],
"humidity": [
0,
0
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.0
}
},
{
"biome": "minecraft:soul_sand_valley",
"parameters": {
"temperature": [
0,
0
],
"humidity": [
-5000,
-5000
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.0
}
},
{
"biome": "minecraft:crimson_forest",
"parameters": {
"temperature": [
4000,
4000
],
"humidity": [
0,
0
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.0
}
},
{
"biome": "minecraft:warped_forest",
"parameters": {
"temperature": [
0,
0
],
"humidity": [
5000,
5000
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.375
}
},
{
"biome": "minecraft:basalt_deltas",
"parameters": {
"temperature": [
-5000,
-5000
],
"humidity": [
0,
0
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.175
}
}
],
"minecraft:overworld": [ "minecraft:overworld": [
{ {
"biome": "minecraft:mushroom_fields", "biome": "minecraft:mushroom_fields",
@@ -227942,5 +227790,157 @@
"offset": 0.0 "offset": 0.0
} }
} }
],
"minecraft:nether": [
{
"biome": "minecraft:nether_wastes",
"parameters": {
"temperature": [
0,
0
],
"humidity": [
0,
0
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.0
}
},
{
"biome": "minecraft:soul_sand_valley",
"parameters": {
"temperature": [
0,
0
],
"humidity": [
-5000,
-5000
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.0
}
},
{
"biome": "minecraft:crimson_forest",
"parameters": {
"temperature": [
4000,
4000
],
"humidity": [
0,
0
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.0
}
},
{
"biome": "minecraft:warped_forest",
"parameters": {
"temperature": [
0,
0
],
"humidity": [
5000,
5000
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.375
}
},
{
"biome": "minecraft:basalt_deltas",
"parameters": {
"temperature": [
-5000,
-5000
],
"humidity": [
0,
0
],
"continentalness": [
0,
0
],
"erosion": [
0,
0
],
"depth": [
0,
0
],
"weirdness": [
0,
0
],
"offset": 0.175
}
}
] ]
} }
File diff suppressed because it is too large Load Diff
+79 -67
View File
@@ -447,87 +447,61 @@
] ]
], ],
"attribute_modifiers": [ "attribute_modifiers": [
"array", "container",
{ [
"countType": "varint", {
"type": [ "name": "attributes",
"container", "type": [
[ "array",
{ {
"name": "typeId", "countType": "varint",
"type": "varint"
},
{
"name": "name",
"type": "string"
},
{
"name": "value",
"type": "f64"
},
{
"name": "operation",
"type": [
"mapper",
{
"type": "varint",
"mappings": {
"0": "add",
"1": "multiply_base",
"2": "multiply_total"
}
}
]
},
{
"name": "slot",
"type": [
"mapper",
{
"type": "varint",
"mappings": {
"0": "any",
"1": "main_hand",
"2": "off_hand",
"3": "hand",
"4": "feet",
"5": "legs",
"6": "chest",
"7": "head",
"8": "armor",
"9": "body",
"10": "saddle"
}
}
]
},
{
"name": "display",
"type": [ "type": [
"container", "container",
[ [
{ {
"name": "type", "name": "typeId",
"type": "varint"
},
{
"name": "name",
"type": "string"
},
{
"name": "value",
"type": "f64"
},
{
"name": "operation",
"type": [ "type": [
"mapper", "mapper",
{ {
"type": "varint", "type": "varint",
"mappings": { "mappings": {
"0": "default", "0": "add",
"1": "hidden", "1": "multiply_base",
"2": "override" "2": "multiply_total"
} }
} }
] ]
}, },
{ {
"name": "component", "name": "slot",
"type": [ "type": [
"switch", "mapper",
{ {
"compareTo": "type", "type": "varint",
"fields": { "mappings": {
"override": "anonymousNbt" "0": "any",
"1": "main_hand",
"2": "off_hand",
"3": "hand",
"4": "feet",
"5": "legs",
"6": "chest",
"7": "head",
"8": "armor",
"9": "body",
"10": "saddle"
} }
} }
] ]
@@ -536,8 +510,42 @@
] ]
} }
] ]
] },
} {
"name": "display",
"type": [
"container",
[
{
"name": "type",
"type": [
"mapper",
{
"type": "varint",
"mappings": {
"0": "default",
"1": "hidden",
"2": "override"
}
}
]
},
{
"name": "component",
"type": [
"switch",
{
"compareTo": "type",
"fields": {
"override": "anonymousNbt"
}
}
]
}
]
]
}
]
], ],
"custom_model_data": [ "custom_model_data": [
"container", "container",
@@ -5706,6 +5714,10 @@
"play": { "play": {
"toClient": { "toClient": {
"types": { "types": {
"packet_bundle_delimiter": [
"container",
[]
],
"SlotDisplay": [ "SlotDisplay": [
"container", "container",
[ [
@@ -10121,7 +10133,7 @@
{ {
"compareTo": "name", "compareTo": "name",
"fields": { "fields": {
"bundle_delimiter": "void", "bundle_delimiter": "packet_bundle_delimiter",
"spawn_entity": "packet_spawn_entity", "spawn_entity": "packet_spawn_entity",
"animation": "packet_animation", "animation": "packet_animation",
"statistics": "packet_statistics", "statistics": "packet_statistics",
+7 -4
View File
@@ -1595,6 +1595,9 @@
if select_known_packs: packet_common_select_known_packs if select_known_packs: packet_common_select_known_packs
if custom_click_action: packet_common_custom_click_action if custom_click_action: packet_common_custom_click_action
^play.toClient.types: ^play.toClient.types:
# MC: ClientboundBundleDelimiterPacket
packet_bundle_delimiter:
# empty
SlotDisplay: SlotDisplay:
type: varint => type: varint =>
- empty - empty
@@ -2844,7 +2847,7 @@
- clear_dialog - clear_dialog
- show_dialog - show_dialog
params: name ? params: name ?
if bundle_delimiter: void if bundle_delimiter: packet_bundle_delimiter
if spawn_entity: packet_spawn_entity if spawn_entity: packet_spawn_entity
if animation: packet_animation if animation: packet_animation
if statistics: packet_statistics if statistics: packet_statistics
@@ -3031,7 +3034,7 @@
"count": 3 "count": 3
} }
] ]
checksum: i8 checksum: u8
# MC: ServerboundChatPacket # MC: ServerboundChatPacket
packet_chat_message: packet_chat_message:
message: string message: string
@@ -3050,7 +3053,7 @@
"count": 3 "count": 3
} }
] ]
checksum: i8 checksum: u8
# MC: ServerboundChatSessionUpdatePacket # MC: ServerboundChatSessionUpdatePacket
packet_chat_session_update: packet_chat_session_update:
sessionUUID: UUID sessionUUID: UUID
@@ -3076,7 +3079,7 @@
# MC: ServerboundContainerButtonClickPacket # MC: ServerboundContainerButtonClickPacket
packet_enchant_item: packet_enchant_item:
windowId: ContainerID windowId: ContainerID
enchantment: i8 enchantment: varint
# MC: ServerboundContainerClickPacket # MC: ServerboundContainerClickPacket
packet_window_click: packet_window_click:
windowId: ContainerID windowId: ContainerID
@@ -4377,6 +4377,10 @@
"play": { "play": {
"toClient": { "toClient": {
"types": { "types": {
"packet_bundle_delimiter": [
"container",
[]
],
"SlotDisplay": [ "SlotDisplay": [
"container", "container",
[ [
@@ -8702,7 +8706,7 @@
{ {
"compareTo": "name", "compareTo": "name",
"fields": { "fields": {
"bundle_delimiter": "void", "bundle_delimiter": "packet_bundle_delimiter",
"spawn_entity": "packet_spawn_entity", "spawn_entity": "packet_spawn_entity",
"animation": "packet_animation", "animation": "packet_animation",
"statistics": "packet_statistics", "statistics": "packet_statistics",
@@ -8996,7 +9000,7 @@
}, },
{ {
"name": "checksum", "name": "checksum",
"type": "i8" "type": "u8"
} }
] ]
], ],
@@ -9042,7 +9046,7 @@
}, },
{ {
"name": "checksum", "name": "checksum",
"type": "i8" "type": "u8"
} }
] ]
], ],
@@ -9115,7 +9119,7 @@
}, },
{ {
"name": "enchantment", "name": "enchantment",
"type": "i8" "type": "varint"
} }
] ]
], ],
+6 -3
View File
@@ -1835,6 +1835,9 @@
if custom_click_action: packet_common_custom_click_action if custom_click_action: packet_common_custom_click_action
if accept_code_of_conduct: packet_accept_code_of_conduct if accept_code_of_conduct: packet_accept_code_of_conduct
^play.toClient.types: ^play.toClient.types:
# MC: ClientboundBundleDelimiterPacket
packet_bundle_delimiter:
# empty
SlotDisplay: SlotDisplay:
type: varint => type: varint =>
- empty - empty
@@ -3114,7 +3117,7 @@
- clear_dialog - clear_dialog
- show_dialog - show_dialog
params: name ? params: name ?
if bundle_delimiter: void if bundle_delimiter: packet_bundle_delimiter
if spawn_entity: packet_spawn_entity if spawn_entity: packet_spawn_entity
if animation: packet_animation if animation: packet_animation
if statistics: packet_statistics if statistics: packet_statistics
@@ -3305,7 +3308,7 @@
"count": 3 "count": 3
} }
] ]
checksum: i8 checksum: u8
# MC: ServerboundChatPacket # MC: ServerboundChatPacket
packet_chat_message: packet_chat_message:
message: string message: string
@@ -3350,7 +3353,7 @@
# MC: ServerboundContainerButtonClickPacket # MC: ServerboundContainerButtonClickPacket
packet_enchant_item: packet_enchant_item:
windowId: ContainerID windowId: ContainerID
enchantment: i8 enchantment: varint
# MC: ServerboundContainerClickPacket # MC: ServerboundContainerClickPacket
packet_window_click: packet_window_click:
windowId: ContainerID windowId: ContainerID
@@ -5416,6 +5416,10 @@
"play": { "play": {
"toClient": { "toClient": {
"types": { "types": {
"packet_bundle_delimiter": [
"container",
[]
],
"SlotDisplay": [ "SlotDisplay": [
"container", "container",
[ [
@@ -9831,7 +9835,7 @@
{ {
"compareTo": "name", "compareTo": "name",
"fields": { "fields": {
"bundle_delimiter": "void", "bundle_delimiter": "packet_bundle_delimiter",
"spawn_entity": "packet_spawn_entity", "spawn_entity": "packet_spawn_entity",
"animation": "packet_animation", "animation": "packet_animation",
"statistics": "packet_statistics", "statistics": "packet_statistics",
@@ -10130,7 +10134,7 @@
}, },
{ {
"name": "checksum", "name": "checksum",
"type": "i8" "type": "u8"
} }
] ]
], ],
@@ -10249,7 +10253,7 @@
}, },
{ {
"name": "enchantment", "name": "enchantment",
"type": "i8" "type": "varint"
} }
] ]
], ],
@@ -0,0 +1,86 @@
[
{
"name": "maxHealth",
"resource": "generic.maxHealth",
"default": 20,
"min": 1,
"max": 1024
},
{
"name": "followRange",
"resource": "generic.followRange",
"default": 32,
"min": 0,
"max": 2048
},
{
"name": "knockbackResistance",
"resource": "generic.knockbackResistance",
"default": 0,
"min": 0,
"max": 1
},
{
"name": "movementSpeed",
"resource": "generic.movementSpeed",
"default": 0.7,
"min": 0,
"max": 1024
},
{
"name": "attackDamage",
"resource": "generic.attackDamage",
"default": 2,
"min": 0,
"max": 2048
},
{
"name": "horseJumpStrength",
"resource": "horse.jumpStrength",
"default": 0.7,
"min": 0,
"max": 2
},
{
"name": "zombieSpawnReinforcements",
"resource": "zombie.spawnReinforcements",
"default": 0,
"min": 0,
"max": 1
},
{
"name": "attackSpeed",
"resource": "generic.attackSpeed",
"default": 4,
"min": 0,
"max": 1024
},
{
"name": "flyingSpeed",
"resource": "generic.flyingSpeed",
"default": 0.4,
"min": 0,
"max": 1024
},
{
"name": "attackKnockback",
"resource": "generic.attackKnockback",
"default": 0,
"min": 0,
"max": 5
},
{
"name": "armorHealth",
"resource": "generic.armor",
"default": 0,
"min": 0,
"max": 30
},
{
"name": "armorToughness",
"resource": "generic.armorToughness",
"default": 0,
"min": 0,
"max": 20
}
]
+817
View File
@@ -0,0 +1,817 @@
[
{
"id": 0,
"name": "ocean",
"name_legacy": "ocean",
"category": "ocean",
"temperature": 0.5,
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Ocean",
"color": 112,
"rainfall": 0.5
},
{
"id": 1,
"name": "plains",
"name_legacy": "plains",
"category": "plains",
"temperature": 0.8,
"precipitation": "rain",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Plains",
"color": 9286496,
"rainfall": 0.4
},
{
"id": 2,
"name": "desert",
"name_legacy": "desert",
"category": "desert",
"temperature": 2,
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Desert",
"color": 16421912,
"rainfall": 0
},
{
"id": 3,
"name": "mountains",
"name_legacy": "mountains",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Extreme Hills",
"color": 6316128,
"rainfall": 0.3
},
{
"id": 4,
"name": "forest",
"name_legacy": "forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Forest",
"color": 353825,
"rainfall": 0.8
},
{
"id": 5,
"name": "taiga",
"name_legacy": "taiga",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Taiga",
"color": 747097,
"rainfall": 0.8
},
{
"id": 6,
"name": "swamp",
"name_legacy": "swamp",
"category": "swamp",
"temperature": 0.8,
"precipitation": "rain",
"depth": -0.2,
"dimension": "overworld",
"displayName": "Swampland",
"color": 522674,
"rainfall": 0.9
},
{
"id": 7,
"name": "river",
"name_legacy": "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",
"name_legacy": "nether_wastes",
"category": "nether",
"temperature": 2,
"precipitation": "none",
"depth": 0.1,
"dimension": "nether",
"displayName": "Hell",
"color": 12532539,
"rainfall": 0,
"climates": [
{
"temperature": 0,
"humidity": 0,
"altitude": 0,
"weirdness": 0,
"offset": 0
}
]
},
{
"id": 9,
"name": "the_end",
"name_legacy": "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",
"name_legacy": "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",
"name_legacy": "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",
"name_legacy": "snowy_tundra",
"category": "icy",
"temperature": 0,
"precipitation": "snow",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Ice Plains",
"color": 16777215,
"rainfall": 0.5
},
{
"id": 13,
"name": "snowy_mountains",
"name_legacy": "snowy_mountains",
"category": "icy",
"temperature": 0,
"precipitation": "snow",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Ice Mountains",
"color": 10526880,
"rainfall": 0.5
},
{
"id": 14,
"name": "mushroom_fields",
"name_legacy": "mushroom_fields",
"category": "mushroom",
"temperature": 0.9,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Mushroom Island",
"color": 16711935,
"rainfall": 1
},
{
"id": 15,
"name": "mushroom_field_shore",
"name_legacy": "mushroom_field_shore",
"category": "mushroom",
"temperature": 0.9,
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "Mushroom Island Shore",
"color": 10486015,
"rainfall": 1
},
{
"id": 16,
"name": "beach",
"name_legacy": "beach",
"category": "beach",
"temperature": 0.8,
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "Beach",
"color": 16440917,
"rainfall": 0.4
},
{
"id": 17,
"name": "desert_hills",
"name_legacy": "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",
"name_legacy": "wooded_hills",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Forest Hills",
"color": 2250012,
"rainfall": 0.8
},
{
"id": 19,
"name": "taiga_hills",
"name_legacy": "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",
"name_legacy": "mountain_edge",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 0.8,
"dimension": "overworld",
"displayName": "Extreme Hills Edge",
"color": 7501978,
"rainfall": 0.3
},
{
"id": 21,
"name": "jungle",
"name_legacy": "jungle",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Jungle",
"color": 5470985,
"rainfall": 0.9
},
{
"id": 22,
"name": "jungle_hills",
"name_legacy": "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",
"name_legacy": "jungle_edge",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Jungle Edge",
"color": 6458135,
"rainfall": 0.8
},
{
"id": 24,
"name": "deep_ocean",
"name_legacy": "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",
"name_legacy": "stone_shore",
"category": "none",
"temperature": 0.2,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Stone Beach",
"color": 10658436,
"rainfall": 0.3
},
{
"id": 26,
"name": "snowy_beach",
"name_legacy": "snowy_beach",
"category": "beach",
"temperature": 0.05,
"precipitation": "snow",
"depth": 0,
"dimension": "overworld",
"displayName": "Cold Beach",
"color": 16445632,
"rainfall": 0.3
},
{
"id": 27,
"name": "birch_forest",
"name_legacy": "birch_forest",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Birch Forest",
"color": 3175492,
"rainfall": 0.6
},
{
"id": 28,
"name": "birch_forest_hills",
"name_legacy": "birch_forest_hills",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Birch Forest Hills",
"color": 2055986,
"rainfall": 0.6
},
{
"id": 29,
"name": "dark_forest",
"name_legacy": "dark_forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Roofed Forest",
"color": 4215066,
"rainfall": 0.8
},
{
"id": 30,
"name": "snowy_taiga",
"name_legacy": "snowy_taiga",
"category": "taiga",
"temperature": -0.5,
"precipitation": "snow",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Cold Taiga",
"color": 3233098,
"rainfall": 0.4
},
{
"id": 31,
"name": "snowy_taiga_hills",
"name_legacy": "snowy_taiga_hills",
"category": "taiga",
"temperature": -0.5,
"precipitation": "snow",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Cold Taiga Hills",
"color": 2375478,
"rainfall": 0.4
},
{
"id": 32,
"name": "giant_tree_taiga",
"name_legacy": "giant_tree_taiga",
"category": "taiga",
"temperature": 0.3,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Mega Taiga",
"color": 5858897,
"rainfall": 0.8
},
{
"id": 33,
"name": "giant_tree_taiga_hills",
"name_legacy": "giant_tree_taiga_hills",
"category": "taiga",
"temperature": 0.3,
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Mega Taiga Hills",
"color": 4542270,
"rainfall": 0.8
},
{
"id": 34,
"name": "wooded_mountains",
"name_legacy": "wooded_mountains",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Extreme Hills+",
"color": 5271632,
"rainfall": 0.3
},
{
"id": 35,
"name": "savanna",
"name_legacy": "savanna",
"category": "savanna",
"temperature": 1.2,
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Savanna",
"color": 12431967,
"rainfall": 0
},
{
"id": 36,
"name": "savanna_plateau",
"name_legacy": "savanna_plateau",
"category": "savanna",
"temperature": 1,
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Savanna Plateau",
"color": 10984804,
"rainfall": 0
},
{
"id": 37,
"name": "badlands",
"name_legacy": "badlands",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Mesa",
"color": 14238997,
"rainfall": 0
},
{
"id": 38,
"name": "wooded_badlands_plateau",
"name_legacy": "wooded_badlands_plateau",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Mesa Plateau F",
"color": 11573093,
"rainfall": 0
},
{
"id": 39,
"name": "badlands_plateau",
"name_legacy": "badlands_plateau",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Mesa Plateau",
"color": 13274213,
"rainfall": 0
},
{
"id": 129,
"name": "sunflower_plains",
"name_legacy": "mutated_plains",
"category": "plains",
"temperature": 0.8,
"precipitation": "rain",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Plains M",
"color": 11918216,
"rainfall": 0.4
},
{
"id": 130,
"name": "desert_lakes",
"name_legacy": "mutated_desert",
"category": "desert",
"temperature": 2,
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Desert M",
"color": 16759872,
"rainfall": 0
},
{
"id": 131,
"name": "gravelly_mountains",
"name_legacy": "mutated_extreme_hills",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Extreme Hills M",
"color": 8947848,
"rainfall": 0.3
},
{
"id": 132,
"name": "flower_forest",
"name_legacy": "mutated_forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Forest M",
"color": 2985545,
"rainfall": 0.8
},
{
"id": 133,
"name": "taiga_mountains",
"name_legacy": "mutated_taiga",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.3,
"dimension": "overworld",
"displayName": "Taiga M",
"color": 3378817,
"rainfall": 0.8
},
{
"id": 134,
"name": "swamp_hills",
"name_legacy": "mutated_swampland",
"category": "swamp",
"temperature": 0.8,
"precipitation": "rain",
"depth": -0.1,
"dimension": "overworld",
"displayName": "Swampland M",
"color": 3145690,
"rainfall": 0.9
},
{
"id": 140,
"name": "ice_spikes",
"name_legacy": "mutated_ice_flats",
"category": "icy",
"temperature": 0,
"precipitation": "snow",
"depth": 0.425,
"dimension": "overworld",
"displayName": "Ice Plains M",
"color": 11853020,
"rainfall": 0.5
},
{
"id": 149,
"name": "modified_jungle",
"name_legacy": "mutated_jungle",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Jungle M",
"color": 8102705,
"rainfall": 0.9
},
{
"id": 151,
"name": "modified_jungle_edge",
"name_legacy": "mutated_jungle_edge",
"category": "jungle",
"temperature": 0.95,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "JungleEdge M",
"color": 9089855,
"rainfall": 0.8
},
{
"id": 155,
"name": "tall_birch_forest",
"name_legacy": "mutated_birch_forest",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Birch Forest M",
"color": 5807212,
"rainfall": 0.6
},
{
"id": 156,
"name": "tall_birch_hills",
"name_legacy": "mutated_birch_forest_hills",
"category": "forest",
"temperature": 0.6,
"precipitation": "rain",
"depth": 0.55,
"dimension": "overworld",
"displayName": "Birch Forest Hills M",
"color": 4687706,
"rainfall": 0.6
},
{
"id": 157,
"name": "dark_forest_hills",
"name_legacy": "mutated_roofed_forest",
"category": "forest",
"temperature": 0.7,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Roofed Forest M",
"color": 6846786,
"rainfall": 0.8
},
{
"id": 158,
"name": "snowy_taiga_mountains",
"name_legacy": "mutated_taiga_cold",
"category": "taiga",
"temperature": -0.5,
"precipitation": "snow",
"depth": 0.3,
"dimension": "overworld",
"displayName": "Cold Taiga M",
"color": 5864818,
"rainfall": 0.4
},
{
"id": 160,
"name": "giant_spruce_taiga",
"name_legacy": "mutated_redwood_taiga",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Mega Taiga M",
"color": 8490617,
"rainfall": 0.8
},
{
"id": 161,
"name": "giant_spruce_taiga_hills",
"name_legacy": "mutated_redwood_taiga_hills",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Mega Taiga Hills M",
"color": 7173990,
"rainfall": 0.8
},
{
"id": 161,
"name": "giant_spruce_taiga_hills",
"name_legacy": "mutated_redwood_taiga_hills",
"category": "taiga",
"temperature": 0.25,
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Redwood Taiga Hills M",
"color": 7173990,
"rainfall": 0.8
},
{
"id": 162,
"name": "modified_gravelly_mountains",
"name_legacy": "mutated_extreme_hills_with_trees",
"category": "extreme_hills",
"temperature": 0.2,
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Extreme Hills+ M",
"color": 7903352,
"rainfall": 0.3
},
{
"id": 163,
"name": "shattered_savanna",
"name_legacy": "mutated_savanna",
"category": "savanna",
"temperature": 1.1,
"precipitation": "none",
"depth": 0.3625,
"dimension": "overworld",
"displayName": "Savanna M",
"color": 15063687,
"rainfall": 0
},
{
"id": 164,
"name": "shattered_savanna_plateau",
"name_legacy": "mutated_savanna_rock",
"category": "savanna",
"temperature": 1,
"precipitation": "none",
"depth": 1.05,
"dimension": "overworld",
"displayName": "Savanna Plateau M",
"color": 13616524,
"rainfall": 0
},
{
"id": 165,
"name": "eroded_badlands",
"name_legacy": "mutated_mesa",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Mesa M",
"color": 16739645,
"rainfall": 0
},
{
"id": 166,
"name": "modified_wooded_badlands_plateau",
"name_legacy": "mutated_mesa_rock",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Mesa Plateau F M",
"color": 14204813,
"rainfall": 0
},
{
"id": 167,
"name": "modified_badlands_plateau",
"name_legacy": "mutated_mesa_clear_rock",
"category": "mesa",
"temperature": 2,
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Mesa Plateau M",
"color": 15905933,
"rainfall": 0
}
]
@@ -0,0 +1,274 @@
{"blocks":{"air":0,
"stone":1,
"grass":1,
"dirt":1,
"cobblestone":1,
"planks":1,
"sapling":0,
"bedrock":1,
"flowing_water":0,
"water":0,
"flowing_lava":0,
"lava":0,
"sand":1,
"gravel":1,
"gold_ore":1,
"iron_ore":1,
"coal_ore":1,
"log":1,
"leaves":1,
"sponge":1,
"glass":1,
"lapis_ore":1,
"lapis_block":1,
"dispenser":1,
"sandstone":1,
"noteblock":1,
"bed":2,
"golden_rail":0,
"detector_rail":0,
"sticky_piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
"web":0,
"tallgrass":0,
"deadbush":0,
"piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
"piston_head":[10,11,9,12,13,14,0,0,10,11,9,12,13,14,0,0],
"wool":1,
"piston_extension":0,
"yellow_flower":0,
"red_flower":0,
"brown_mushroom":0,
"red_mushroom":0,
"gold_block":1,
"iron_block":1,
"double_stone_slab":1,
"stone_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
"brick_block":1,
"tnt":1,
"bookshelf":1,
"mossy_cobblestone":1,
"obsidian":1,
"torch":0,
"fire":0,
"mob_spawner":1,
"oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"chest":25,
"redstone_wire":0,
"diamond_ore":1,
"diamond_block":1,
"crafting_table":1,
"wheat":0,
"farmland":26,
"furnace":1,
"lit_furnace":1,
"standing_sign":0,
"wooden_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
"ladder":[27,27,27,29,30,28,27,27,27,29,30,28,27,27,27,29],
"rail":0,
"stone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"wall_sign":0,
"lever":0,
"stone_pressure_plate":0,
"iron_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
"wooden_pressure_plate":0,
"redstone_ore":1,
"lit_redstone_ore":1,
"unlit_redstone_torch":0,
"redstone_torch":0,
"stone_button":0,
"snow_layer":[0,31,32,33,15,34,4,35,0,31,32,33,15,34,4,35],
"ice":1,
"snow":1,
"cactus":36,
"clay":1,
"reeds":0,
"jukebox":1,
"fence":37,
"pumpkin":1,
"netherrack":1,
"soul_sand":35,
"glowstone":1,
"portal":0,
"lit_pumpkin":1,
"cake":[38,39,40,41,42,43,44,0,0,0,0,0,0,0,0,0],
"unpowered_repeater":31,
"powered_repeater":31,
"stained_glass":1,
"trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
"monster_egg":1,
"stonebrick":1,
"brown_mushroom_block":1,
"red_mushroom_block":1,
"iron_bars":47,
"glass_pane":47,
"melon_block":1,
"pumpkin_stem":0,
"melon_stem":0,
"vine":0,
"fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
"brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"stone_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"mycelium":1,
"waterlily":50,
"nether_brick":1,
"nether_brick_fence":37,
"nether_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"nether_wart":0,
"enchanting_table":4,
"brewing_stand":51,
"cauldron":52,
"end_portal":0,
"end_portal_frame":[81,81,81,81,82,82,82,82,81,81,81,81,82,82,82,82],
"end_stone":1,
"dragon_egg":53,
"redstone_lamp":1,
"lit_redstone_lamp":1,
"double_wooden_slab":1,
"wooden_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
"cocoa":[55,56,54,57,58,59,60,61,62,63,64,65,0,0,0,0],
"sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"emerald_ore":1,
"ender_chest":25,
"tripwire_hook":0,
"tripwire":0,
"emerald_block":1,
"spruce_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"birch_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"jungle_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"command_block":1,
"beacon":1,
"cobblestone_wall":66,
"flower_pot":67,
"carrots":0,
"potatoes":0,
"wooden_button":0,
"skull":[69,69,68,70,71,72,69,69,69,69,68,70,71,72,69,69],
"anvil":[73,74,73,74,73,74,73,74,73,74,73,74,0,0,0,0],
"trapped_chest":25,
"light_weighted_pressure_plate":0,
"heavy_weighted_pressure_plate":0,
"unpowered_comparator":31,
"powered_comparator":31,
"daylight_detector":33,
"redstone_block":1,
"quartz_ore":1,
"hopper":75,
"quartz_block":1,
"quartz_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"activator_rail":0,
"dropper":1,
"stained_hardened_clay":1,
"stained_glass_pane":47,
"leaves2":1,"log2":1,"acacia_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"dark_oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"slime":1,
"barrier":1,
"iron_trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
"prismarine":1,
"sea_lantern":1,
"hay_block":1,
"carpet":76,
"hardened_clay":1,
"coal_block":1,
"packed_ice":1,
"double_plant":0,
"standing_banner":0,
"wall_banner":0,
"daylight_detector_inverted":33,
"red_sandstone":1,
"red_sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
"double_stone_slab2":1,"stone_slab2":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
"spruce_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
"birch_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
"jungle_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
"dark_oak_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
"acacia_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
"spruce_fence":37,
"birch_fence":37,
"jungle_fence":37,
"dark_oak_fence":37,
"acacia_fence":37,
"spruce_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
"birch_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
"jungle_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
"acacia_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
"dark_oak_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28]},
"shapes":{"0":[],
"1":[[0.0,0.0,0.0,1.0,1.0,1.0]],
"2":[[0.0,0.0,0.0,1.0,0.5625,1.0]],
"3":[[0.0,0.25,0.0,1.0,1.0,1.0]],
"4":[[0.0,0.0,0.0,1.0,0.75,1.0]],
"5":[[0.0,0.0,0.25,1.0,1.0,1.0]],
"6":[[0.0,0.0,0.0,1.0,1.0,0.75]],
"7":[[0.25,0.0,0.0,1.0,1.0,1.0]],
"8":[[0.0,0.0,0.0,0.75,1.0,1.0]],
"9":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.25]],
"10":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.25,0.625]],
"11":[[0.0,0.75,0.0,1.0,1.0,1.0],[0.375,-0.25,0.375,0.625,0.75,0.625]],
"12":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,-0.25,0.625,0.625,0.75]],
"13":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.25,0.625,0.625]],
"14":[[0.75,0.0,0.0,1.0,1.0,1.0],[-0.25,0.375,0.375,0.75,0.625,0.625]],
"15":[[0.0,0.0,0.0,1.0,0.5,1.0]],
"16":[[0.0,0.5,0.0,1.0,1.0,1.0]],
"17":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],
"18":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],
"19":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],
"20":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0]],
"21":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,0.5,1.0]],
"22":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,0.5,0.5,1.0]],
"23":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.5,1.0,0.5,1.0]],
"24":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,0.5,0.5]],
"25":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],
"26":[[0.0,0.0,0.0,1.0,0.9375,1.0]],
"27":[[0.0,0.0,0.8125,1.0,1.0,1.0]],
"28":[[0.0,0.0,0.0,0.1875,1.0,1.0]],
"29":[[0.0,0.0,0.0,1.0,1.0,0.1875]],
"30":[[0.8125,0.0,0.0,1.0,1.0,1.0]],
"31":[[0.0,0.0,0.0,1.0,0.125,1.0]],
"32":[[0.0,0.0,0.0,1.0,0.25,1.0]],
"33":[[0.0,0.0,0.0,1.0,0.375,1.0]],
"34":[[0.0,0.0,0.0,1.0,0.625,1.0]],
"35":[[0.0,0.0,0.0,1.0,0.875,1.0]],
"36":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],
"37":[[0.375,0.0,0.375,0.625,1.5,0.625]],
"38":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375]],
"39":[[0.1875,0.0,0.0625,0.9375,0.5,0.9375]],
"40":[[0.3125,0.0,0.0625,0.9375,0.5,0.9375]],
"41":[[0.4375,0.0,0.0625,0.9375,0.5,0.9375]],
"42":[[0.5625,0.0,0.0625,0.9375,0.5,0.9375]],
"43":[[0.6875,0.0,0.0625,0.9375,0.5,0.9375]],
"44":[[0.8125,0.0,0.0625,0.9375,0.5,0.9375]],
"45":[[0.0,0.0,0.0,1.0,0.1875,1.0]],
"46":[[0.0,0.8125,0.0,1.0,1.0,1.0]],
"47":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],
"48":[[0.0,0.0,0.375,1.0,1.5,0.625]],
"49":[[0.375,0.0,0.0,0.625,1.5,1.0]],
"50":[[0.0625,0.0,0.0625,0.9375,0.09375,0.9375]],
"51":[[0.4375,0.0,0.4375,0.5625,0.875,0.5625],[0.0,0.0,0.0,1.0,0.125,1.0]],
"52":[[0.0,0.0,0.0,1.0,0.3125,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.875,1.0,1.0,1.0]],
"53":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],
"54":[[0.375,0.4375,0.0625,0.625,0.75,0.3125]],
"55":[[0.375,0.4375,0.6875,0.625,0.75,0.9375]],
"56":[[0.0625,0.4375,0.375,0.3125,0.75,0.625]],
"57":[[0.6875,0.4375,0.375,0.9375,0.75,0.625]],
"58":[[0.3125,0.3125,0.5625,0.6875,0.75,0.9375]],
"59":[[0.0625,0.3125,0.3125,0.4375,0.75,0.6875]],
"60":[[0.3125,0.3125,0.0625,0.6875,0.75,0.4375]],
"61":[[0.5625,0.3125,0.3125,0.9375,0.75,0.6875]],
"62":[[0.25,0.1875,0.4375,0.75,0.75,0.9375]],
"63":[[0.0625,0.1875,0.25,0.5625,0.75,0.75]],
"64":[[0.25,0.1875,0.0625,0.75,0.75,0.5625]],
"65":[[0.4375,0.1875,0.25,0.9375,0.75,0.75]],
"66":[[0.25,0.0,0.25,0.75,1.5,0.75]],
"67":[[0.3125,0.0,0.3125,0.6875,0.375,0.6875]],
"68":[[0.25,0.25,0.5,0.75,0.75,1.0]],
"69":[[0.25,0.0,0.25,0.75,0.5,0.75]],
"70":[[0.25,0.25,0.0,0.75,0.75,0.5]],
"71":[[0.5,0.25,0.25,1.0,0.75,0.75]],
"72":[[0.0,0.25,0.25,0.5,0.75,0.75]],
"73":[[0.125,0.0,0.0,0.875,1.0,1.0]],
"74":[[0.0,0.0,0.125,1.0,1.0,0.875]],
"75":[[0.0,0.0,0.0,1.0,0.625,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.0,0.0,0.875,1.0,1.0,1.0]],
"76":[[0.0,0.0,0.0,1.0,0.0625,1.0]],
"81":[[0.0,0.0,0.0,1.0,0.8125,1.0]],
"82":[[0.0,0.0,0.0,1.0,0.8125,1.0],[0.3125,0.8125,0.3125,0.6875,1.0,0.6875]]}}
File diff suppressed because it is too large Load Diff
+140
View File
@@ -0,0 +1,140 @@
[
{
"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"
}
]
@@ -0,0 +1,560 @@
[
{
"id": 0,
"name": "protection",
"displayName": "Protection",
"maxLevel": 4,
"minCost": {
"a": 11,
"b": -10
},
"maxCost": {
"a": 11,
"b": 1
},
"exclude": [
"blast_protection",
"fire_protection",
"projectile_protection"
],
"category": "armor",
"weight": 10,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 1,
"name": "fire_protection",
"displayName": "Fire Protection",
"maxLevel": 4,
"minCost": {
"a": 8,
"b": 2
},
"maxCost": {
"a": 8,
"b": 10
},
"exclude": [
"blast_protection",
"protection",
"projectile_protection"
],
"category": "armor",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 2,
"name": "feather_falling",
"displayName": "Feather Falling",
"maxLevel": 4,
"minCost": {
"a": 6,
"b": -1
},
"maxCost": {
"a": 6,
"b": 5
},
"exclude": [],
"category": "armor_feet",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 3,
"name": "blast_protection",
"displayName": "Blast Protection",
"maxLevel": 4,
"minCost": {
"a": 8,
"b": -3
},
"maxCost": {
"a": 8,
"b": 5
},
"exclude": [
"fire_protection",
"protection",
"projectile_protection"
],
"category": "armor",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 4,
"name": "projectile_protection",
"displayName": "Projectile Protection",
"maxLevel": 4,
"minCost": {
"a": 6,
"b": -3
},
"maxCost": {
"a": 6,
"b": 3
},
"exclude": [
"protection",
"blast_protection",
"fire_protection"
],
"category": "armor",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 5,
"name": "respiration",
"displayName": "Respiration",
"maxLevel": 3,
"minCost": {
"a": 10,
"b": 0
},
"maxCost": {
"a": 10,
"b": 30
},
"exclude": [],
"category": "armor_head",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 6,
"name": "aqua_affinity",
"displayName": "Aqua Affinity",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 41
},
"exclude": [],
"category": "armor_head",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 7,
"name": "thorns",
"displayName": "Thorns",
"maxLevel": 3,
"minCost": {
"a": 20,
"b": -10
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "armor_chest",
"weight": 1,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 8,
"name": "depth_strider",
"displayName": "Depth Strider",
"maxLevel": 3,
"minCost": {
"a": 10,
"b": 0
},
"maxCost": {
"a": 10,
"b": 15
},
"exclude": [
"frost_walker"
],
"category": "armor_feet",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 16,
"name": "sharpness",
"displayName": "Sharpness",
"maxLevel": 5,
"minCost": {
"a": 11,
"b": -10
},
"maxCost": {
"a": 11,
"b": 10
},
"exclude": [
"smite",
"bane_of_arthropods"
],
"category": "weapon",
"weight": 10,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 17,
"name": "smite",
"displayName": "Smite",
"maxLevel": 5,
"minCost": {
"a": 8,
"b": -3
},
"maxCost": {
"a": 8,
"b": 17
},
"exclude": [
"sharpness",
"bane_of_arthropods"
],
"category": "weapon",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 18,
"name": "bane_of_arthropods",
"displayName": "Bane of Arthropods",
"maxLevel": 5,
"minCost": {
"a": 8,
"b": -3
},
"maxCost": {
"a": 8,
"b": 17
},
"exclude": [
"smite",
"sharpness"
],
"category": "weapon",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 19,
"name": "knockback",
"displayName": "Knockback",
"maxLevel": 2,
"minCost": {
"a": 20,
"b": -15
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "weapon",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 20,
"name": "fire_aspect",
"displayName": "Fire Aspect",
"maxLevel": 2,
"minCost": {
"a": 20,
"b": -10
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "weapon",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 21,
"name": "looting",
"displayName": "Looting",
"maxLevel": 3,
"minCost": {
"a": 9,
"b": 6
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "weapon",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 32,
"name": "efficiency",
"displayName": "Efficiency",
"maxLevel": 5,
"minCost": {
"a": 10,
"b": -9
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "digger",
"weight": 10,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 33,
"name": "silk_touch",
"displayName": "Silk Touch",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 15
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [
"fortune"
],
"category": "digger",
"weight": 1,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 34,
"name": "unbreaking",
"displayName": "Unbreaking",
"maxLevel": 3,
"minCost": {
"a": 8,
"b": -3
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "breakable",
"weight": 5,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 35,
"name": "fortune",
"displayName": "Fortune",
"maxLevel": 3,
"minCost": {
"a": 9,
"b": 6
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [
"silk_touch"
],
"category": "digger",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 48,
"name": "power",
"displayName": "Power",
"maxLevel": 5,
"minCost": {
"a": 10,
"b": -9
},
"maxCost": {
"a": 10,
"b": 6
},
"exclude": [],
"category": "bow",
"weight": 10,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 49,
"name": "punch",
"displayName": "Punch",
"maxLevel": 2,
"minCost": {
"a": 20,
"b": -8
},
"maxCost": {
"a": 20,
"b": 17
},
"exclude": [],
"category": "bow",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 50,
"name": "flame",
"displayName": "Flame",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 20
},
"maxCost": {
"a": 0,
"b": 50
},
"exclude": [],
"category": "bow",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 51,
"name": "infinity",
"displayName": "Infinity",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 20
},
"maxCost": {
"a": 0,
"b": 50
},
"exclude": [
"mending"
],
"category": "bow",
"weight": 1,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 61,
"name": "luck_of_the_sea",
"displayName": "Luck of the Sea",
"maxLevel": 3,
"minCost": {
"a": 9,
"b": 6
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "fishing_rod",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
},
{
"id": 62,
"name": "lure",
"displayName": "Lure",
"maxLevel": 3,
"minCost": {
"a": 9,
"b": 6
},
"maxCost": {
"a": 10,
"b": 51
},
"exclude": [],
"category": "fishing_rod",
"weight": 2,
"treasureOnly": false,
"curse": false,
"tradeable": true,
"discoverable": true
}
]
+580
View File
@@ -0,0 +1,580 @@
[
{
"id": 48,
"internalId": 48,
"name": "Mob",
"displayName": "Mob",
"type": "mob",
"width": null,
"height": null,
"category": "Generic"
},
{
"id": 49,
"internalId": 49,
"name": "Monster",
"displayName": "Monster",
"type": "mob",
"width": null,
"height": null,
"category": "Generic"
},
{
"id": 50,
"internalId": 50,
"name": "Creeper",
"displayName": "Creeper",
"type": "mob",
"width": 0.6,
"height": 1.8,
"category": "Hostile mobs"
},
{
"id": 51,
"internalId": 51,
"name": "Skeleton",
"displayName": "Skeleton",
"type": "mob",
"width": 0.6,
"height": 1.95,
"category": "Hostile mobs"
},
{
"id": 52,
"internalId": 52,
"name": "Spider",
"displayName": "Spider",
"type": "mob",
"width": 1.4,
"height": 0.9,
"category": "Hostile mobs"
},
{
"id": 53,
"internalId": 53,
"name": "Giant",
"displayName": "Giant",
"type": "mob",
"width": 3.5999999999999996,
"height": 10.8,
"category": "Hostile mobs"
},
{
"id": 54,
"internalId": 54,
"name": "Zombie",
"displayName": "Zombie",
"type": "mob",
"width": 0.6,
"height": 1.8,
"category": "Hostile mobs"
},
{
"id": 55,
"internalId": 55,
"name": "Slime",
"displayName": "Slime",
"type": "mob",
"width": 0.51000005,
"height": 0.51000005,
"category": "Hostile mobs"
},
{
"id": 56,
"internalId": 56,
"name": "Ghast",
"displayName": "Ghast",
"type": "mob",
"width": 4,
"height": 4,
"category": "Hostile mobs"
},
{
"id": 57,
"internalId": 57,
"name": "PigZombie",
"displayName": "Zombie Pigman",
"type": "mob",
"width": 0.6,
"height": 1.8,
"category": "Hostile mobs"
},
{
"id": 58,
"internalId": 58,
"name": "Enderman",
"displayName": "Enderman",
"type": "mob",
"width": 0.6,
"height": 2.9,
"category": "Hostile mobs"
},
{
"id": 59,
"internalId": 59,
"name": "CaveSpider",
"displayName": "Cave Spider",
"type": "mob",
"width": 0.7,
"height": 0.5,
"category": "Hostile mobs"
},
{
"id": 60,
"internalId": 60,
"name": "Silverfish",
"displayName": "Silverfish",
"type": "mob",
"width": 0.4,
"height": 0.3,
"category": "Hostile mobs"
},
{
"id": 61,
"internalId": 61,
"name": "Blaze",
"displayName": "Blaze",
"type": "mob",
"width": 0.6,
"height": 1.8,
"category": "Hostile mobs"
},
{
"id": 62,
"internalId": 62,
"name": "LavaSlime",
"displayName": "Magma Cube",
"type": "mob",
"width": 0.51000005,
"height": 0.51000005,
"category": "Hostile mobs"
},
{
"id": 63,
"internalId": 63,
"name": "EnderDragon",
"displayName": "Ender Dragon",
"type": "mob",
"width": 16,
"height": 8,
"category": "Hostile mobs"
},
{
"id": 64,
"internalId": 64,
"name": "WitherBoss",
"displayName": "Wither",
"type": "mob",
"width": 0.9,
"height": 3.5,
"category": "Hostile mobs"
},
{
"id": 65,
"internalId": 65,
"name": "Bat",
"displayName": "Bat",
"type": "mob",
"width": 0.5,
"height": 0.9,
"category": "Passive mobs"
},
{
"id": 66,
"internalId": 66,
"name": "Witch",
"displayName": "Witch",
"type": "mob",
"width": 0.6,
"height": 1.8,
"category": "Hostile mobs"
},
{
"id": 67,
"internalId": 67,
"name": "Endermite",
"displayName": "Endermite",
"type": "mob",
"width": 0.4,
"height": 0.3,
"category": "Hostile mobs"
},
{
"id": 68,
"internalId": 68,
"name": "Guardian",
"displayName": "Guardian",
"type": "mob",
"width": 0.85,
"height": 0.85,
"category": "Hostile mobs"
},
{
"id": 90,
"internalId": 90,
"name": "Pig",
"displayName": "Pig",
"type": "mob",
"width": 0.9,
"height": 0.9,
"category": "Passive mobs"
},
{
"id": 91,
"internalId": 91,
"name": "Sheep",
"displayName": "Sheep",
"type": "mob",
"width": 0.9,
"height": 1.3,
"category": "Passive mobs"
},
{
"id": 92,
"internalId": 92,
"name": "Cow",
"displayName": "Cow",
"type": "mob",
"width": 0.9,
"height": 1.3,
"category": "Passive mobs"
},
{
"id": 93,
"internalId": 93,
"name": "Chicken",
"displayName": "Chicken",
"type": "mob",
"width": 0.4,
"height": 0.7,
"category": "Passive mobs"
},
{
"id": 94,
"internalId": 94,
"name": "Squid",
"displayName": "Squid",
"type": "mob",
"width": 0.95,
"height": 0.95,
"category": "Passive mobs"
},
{
"id": 95,
"internalId": 95,
"name": "Wolf",
"displayName": "Wolf",
"type": "mob",
"width": 0.6,
"height": 0.8,
"category": "Passive mobs"
},
{
"id": 96,
"internalId": 96,
"name": "MushroomCow",
"displayName": "Mooshroom",
"type": "mob",
"width": 0.9,
"height": 1.3,
"category": "Passive mobs"
},
{
"id": 97,
"internalId": 97,
"name": "SnowMan",
"displayName": "Snow Golem",
"type": "mob",
"width": 0.7,
"height": 1.9,
"category": "Passive mobs"
},
{
"id": 98,
"internalId": 98,
"name": "Ozelot",
"displayName": "Ocelot",
"type": "mob",
"width": 0.6,
"height": 0.8,
"category": "Passive mobs"
},
{
"id": 99,
"internalId": 99,
"name": "VillagerGolem",
"displayName": "Iron Golem",
"type": "mob",
"width": 1.4,
"height": 2.9,
"category": "Passive mobs"
},
{
"id": 100,
"internalId": 100,
"name": "EntityHorse",
"displayName": "Horse",
"type": "mob",
"width": 1.4,
"height": 1.6,
"category": "Passive mobs"
},
{
"id": 101,
"internalId": 101,
"name": "Rabbit",
"displayName": "Rabbit",
"type": "mob",
"width": 0.6,
"height": 0.7,
"category": "Passive mobs"
},
{
"id": 120,
"internalId": 120,
"name": "Villager",
"displayName": "Villager",
"type": "mob",
"width": 0.6,
"height": 1.8,
"category": "NPCs"
},
{
"id": 1,
"internalId": 41,
"name": "Boat",
"displayName": "Boat",
"type": "object",
"width": 1.5,
"height": 0.6,
"category": "Vehicles"
},
{
"id": 2,
"internalId": 1,
"name": "Item",
"displayName": "Dropped item",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Drops"
},
{
"id": 10,
"internalId": 42,
"name": "MinecartRideable",
"displayName": "Minecart",
"type": "object",
"width": 0.98,
"height": 0.7,
"category": "Vehicles"
},
{
"id": 11,
"internalId": 42,
"name": "MinecartRideable",
"displayName": "Minecart",
"type": "object",
"width": 0.98,
"height": 0.7,
"category": "Vehicles"
},
{
"id": 12,
"internalId": 42,
"name": "MinecartRideable",
"displayName": "Minecart",
"type": "object",
"width": 0.98,
"height": 0.7,
"category": "Vehicles"
},
{
"id": 50,
"internalId": 20,
"name": "PrimedTnt",
"displayName": "Primed TNT",
"type": "object",
"width": 0.98,
"height": 0.98,
"category": "Blocks"
},
{
"id": 51,
"internalId": 200,
"name": "EnderCrystal",
"displayName": "Ender Crystal",
"type": "object",
"width": 2,
"height": 2,
"category": "Immobile"
},
{
"id": 60,
"internalId": 10,
"name": "Arrow",
"displayName": "Shot arrow",
"type": "object",
"width": 0.5,
"height": 0.5,
"category": "Projectiles"
},
{
"id": 61,
"internalId": 11,
"name": "Snowball",
"displayName": "Thrown snowball",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 62,
"internalId": 7,
"name": "ThrownEgg",
"displayName": "Thrown egg",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 63,
"internalId": 12,
"name": "Fireball",
"displayName": "Ghast fireball",
"type": "object",
"width": 1,
"height": 1,
"category": "Projectiles"
},
{
"id": 64,
"internalId": 13,
"name": "SmallFireball",
"displayName": "Blaze fireball",
"type": "object",
"width": 0.3125,
"height": 0.3125,
"category": "Projectiles"
},
{
"id": 65,
"internalId": 14,
"name": "ThrownEnderpearl",
"displayName": "Thrown Ender Pearl",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 66,
"internalId": 19,
"name": "WitherSkull",
"displayName": "Wither Skull",
"type": "object",
"width": 0.3125,
"height": 0.3125,
"category": "Projectiles"
},
{
"id": 70,
"internalId": 21,
"name": "FallingSand",
"displayName": "Falling block",
"type": "object",
"width": 0.98,
"height": 0.98,
"category": "Blocks"
},
{
"id": 71,
"internalId": 18,
"name": "ItemFrame",
"displayName": "Item Frame",
"type": "object",
"width": null,
"height": null,
"category": "Immobile"
},
{
"id": 72,
"internalId": 15,
"name": "EyeOfEnderSignal",
"displayName": "Thrown Eye of Ender",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 73,
"internalId": 16,
"name": "ThrownPotion",
"displayName": "Thrown splash potion",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 74,
"internalId": 21,
"name": "FallingSand",
"displayName": "Falling block",
"type": "object",
"width": 0.98,
"height": 0.98,
"category": "Blocks"
},
{
"id": 75,
"internalId": 17,
"name": "ThrownExpBottle",
"displayName": "Thrown Bottle o' Enchanting",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 76,
"internalId": 22,
"name": "FireworksRocketEntity",
"displayName": "Firework Rocket",
"type": "object",
"width": 0.25,
"height": 0.25,
"category": "Projectiles"
},
{
"id": 77,
"internalId": 8,
"name": "LeashKnot",
"displayName": "Lead knot",
"type": "object",
"width": 0.5,
"height": 0.5,
"category": "Immobile"
},
{
"id": 78,
"internalId": 30,
"name": "ArmorStand",
"displayName": "Armor Stand",
"type": "object",
"width": 0.5,
"height": 2,
"category": "Immobile"
},
{
"id": 90,
"name": "Fishing Float",
"displayName": "Fishing Float",
"type": "object",
"width": 0.25,
"height": 0.25
}
]
+310
View File
@@ -0,0 +1,310 @@
[
{
"id": 103,
"displayName": "Melon",
"name": "melon_block",
"stackSize": 64,
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 141,
"displayName": "Carrot",
"name": "carrots",
"stackSize": 64,
"foodPoints": 3,
"saturation": 4.8,
"effectiveQuality": 7.8,
"saturationRatio": 1.5999999999999999
},
{
"id": 142,
"displayName": "Potato",
"name": "potatoes",
"stackSize": 64,
"foodPoints": 1,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 260,
"displayName": "Apple",
"stackSize": 64,
"name": "apple",
"foodPoints": 4,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 282,
"displayName": "Mushroom Stew",
"stackSize": 1,
"name": "mushroom_stew",
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 297,
"displayName": "Bread",
"stackSize": 64,
"name": "bread",
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 319,
"displayName": "Raw Porkchop",
"stackSize": 64,
"name": "porkchop",
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 320,
"displayName": "Cooked Porkchop",
"stackSize": 64,
"name": "cooked_porkchop",
"foodPoints": 8,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 322,
"displayName": "Golden Apple",
"stackSize": 64,
"name": "golden_apple",
"variations": [
{
"metadata": 0,
"displayName": "Golden Apple"
},
{
"metadata": 1,
"displayName": "Enchanted Golden Apple"
}
],
"foodPoints": 4,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 349,
"displayName": "Raw Fish",
"stackSize": 64,
"name": "fish",
"variations": [
{
"metadata": 0,
"displayName": "Raw Fish"
},
{
"metadata": 1,
"displayName": "Raw Salmon"
},
{
"metadata": 2,
"displayName": "Clownfish"
},
{
"metadata": 3,
"displayName": "Pufferfish"
}
],
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 350,
"displayName": "Cooked Fish",
"stackSize": 64,
"name": "cooked_fish",
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 354,
"displayName": "Cake",
"stackSize": 1,
"name": "cake",
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 357,
"displayName": "Cookie",
"stackSize": 64,
"name": "cookie",
"foodPoints": 2,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 363,
"displayName": "Raw Beef",
"stackSize": 64,
"name": "beef",
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 364,
"displayName": "Steak",
"stackSize": 64,
"name": "cooked_beef",
"foodPoints": 8,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 365,
"displayName": "Raw Chicken",
"stackSize": 64,
"name": "chicken",
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 366,
"displayName": "Cooked Chicken",
"stackSize": 64,
"name": "cooked_chicken",
"foodPoints": 6,
"saturation": 7.2,
"effectiveQuality": 13.2,
"saturationRatio": 1.2
},
{
"id": 367,
"displayName": "Rotten Flesh",
"stackSize": 64,
"name": "rotten_flesh",
"foodPoints": 4,
"saturation": 0.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.2
},
{
"id": 375,
"displayName": "Spider Eye",
"stackSize": 64,
"name": "spider_eye",
"foodPoints": 2,
"saturation": 3.2,
"effectiveQuality": 5.2,
"saturationRatio": 1.6
},
{
"id": 393,
"displayName": "Baked Potato",
"stackSize": 64,
"name": "baked_potato",
"foodPoints": 5,
"saturation": 7.2,
"effectiveQuality": 12.2,
"saturationRatio": 1.44
},
{
"id": 394,
"displayName": "Poisonous Potato",
"stackSize": 64,
"name": "poisonous_potato",
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 396,
"displayName": "Golden Carrot",
"stackSize": 64,
"name": "golden_carrot",
"foodPoints": 6,
"saturation": 14.4,
"effectiveQuality": 20.4,
"saturationRatio": 2.4
},
{
"id": 400,
"displayName": "Pumpkin Pie",
"stackSize": 64,
"name": "pumpkin_pie",
"foodPoints": 8,
"saturation": 4.8,
"effectiveQuality": 12.8,
"saturationRatio": 0.6
},
{
"id": 411,
"displayName": "Raw Rabbit",
"stackSize": 64,
"name": "rabbit",
"foodPoints": 3,
"saturation": 1.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 412,
"displayName": "Cooked Rabbit",
"stackSize": 64,
"name": "cooked_rabbit",
"foodPoints": 5,
"saturation": 6,
"effectiveQuality": 11,
"saturationRatio": 1.2
},
{
"id": 413,
"displayName": "Rabbit Stew",
"stackSize": 1,
"name": "rabbit_stew",
"foodPoints": 10,
"saturation": 12,
"effectiveQuality": 22,
"saturationRatio": 1.2
},
{
"id": 423,
"displayName": "Raw Mutton",
"stackSize": 64,
"name": "mutton",
"foodPoints": 2,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 424,
"displayName": "Cooked Mutton",
"stackSize": 64,
"name": "cooked_mutton",
"foodPoints": 6,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.5999999999999999
}
]
@@ -0,0 +1,22 @@
[
{
"id": 0,
"name": "harp"
},
{
"id": 1,
"name": "doubleBass"
},
{
"id": 2,
"name": "snareDrum"
},
{
"id": 3,
"name": "sticks"
},
{
"id": 4,
"name": "bassDrum"
}
]
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": {
"257": 6,
"270": 2,
"274": 4,
"278": 8,
"285": 12
},
"wood": {
"258": 6,
"271": 2,
"275": 4,
"279": 8,
"286": 12
},
"plant": {
"258": 6,
"267": 1.5,
"268": 1.5,
"271": 2,
"272": 1.5,
"275": 4,
"276": 1.5,
"279": 8,
"283": 1.5,
"286": 12
},
"melon": {
"267": 1.5,
"268": 1.5,
"272": 1.5,
"276": 1.5,
"283": 1.5
},
"leaves": {
"267": 1.5,
"268": 1.5,
"272": 1.5,
"276": 1.5,
"283": 1.5,
"359": 6
},
"dirt": {
"256": 6,
"269": 2,
"273": 4,
"277": 8,
"284": 12
},
"web": {
"267": 15,
"268": 15,
"272": 15,
"276": 15,
"283": 15,
"359": 15
},
"wool": {
"359": 4.8
}
}
@@ -0,0 +1,170 @@
[
{
"id": 0,
"name": "explode"
},
{
"id": 1,
"name": "largeexplode"
},
{
"id": 2,
"name": "hugeexplosion"
},
{
"id": 3,
"name": "fireworksSpark"
},
{
"id": 4,
"name": "bubble"
},
{
"id": 5,
"name": "splash"
},
{
"id": 6,
"name": "wake"
},
{
"id": 7,
"name": "suspended"
},
{
"id": 8,
"name": "depthsuspend"
},
{
"id": 9,
"name": "crit"
},
{
"id": 10,
"name": "magicCrit"
},
{
"id": 11,
"name": "smoke"
},
{
"id": 12,
"name": "largesmoke"
},
{
"id": 13,
"name": "spell"
},
{
"id": 14,
"name": "instantSpell"
},
{
"id": 15,
"name": "mobSpell"
},
{
"id": 16,
"name": "mobSpellAmbient"
},
{
"id": 17,
"name": "witchMagic"
},
{
"id": 18,
"name": "dripWater"
},
{
"id": 19,
"name": "dripLava"
},
{
"id": 20,
"name": "angryVillager"
},
{
"id": 21,
"name": "happyVillager"
},
{
"id": 22,
"name": "townaura"
},
{
"id": 23,
"name": "note"
},
{
"id": 24,
"name": "portal"
},
{
"id": 25,
"name": "enchantmenttable"
},
{
"id": 26,
"name": "flame"
},
{
"id": 27,
"name": "lava"
},
{
"id": 28,
"name": "footstep"
},
{
"id": 29,
"name": "cloud"
},
{
"id": 30,
"name": "reddust"
},
{
"id": 31,
"name": "snowballpoof"
},
{
"id": 32,
"name": "snowshovel"
},
{
"id": 33,
"name": "slime"
},
{
"id": 34,
"name": "heart"
},
{
"id": 35,
"name": "barrier"
},
{
"id": 36,
"name": "iconcrack_"
},
{
"id": 37,
"name": "blockcrack_"
},
{
"id": 38,
"name": "blockdust_"
},
{
"id": 39,
"name": "droplet"
},
{
"id": 40,
"name": "take"
},
{
"id": 41,
"name": "mobappearance"
}
]
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 @@
{
"version":47,
"minecraftVersion":"1.8.8",
"majorVersion":"1.8"
}
+229
View File
@@ -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": 3
},
{
"name": "result",
"index": 0,
"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
}
]
}
]
@@ -0,0 +1,247 @@
[
{
"name": "armor",
"resource": "minecraft:armor",
"min": 0.0,
"max": 30.0,
"default": 0.0
},
{
"name": "armorToughness",
"resource": "minecraft:armor_toughness",
"min": 0.0,
"max": 20.0,
"default": 0.0
},
{
"name": "attackDamage",
"resource": "minecraft:attack_damage",
"min": 0.0,
"max": 2048.0,
"default": 2.0
},
{
"name": "attackKnockback",
"resource": "minecraft:attack_knockback",
"min": 0.0,
"max": 5.0,
"default": 0.0
},
{
"name": "attackSpeed",
"resource": "minecraft:attack_speed",
"min": 0.0,
"max": 1024.0,
"default": 4.0
},
{
"name": "blockBreakSpeed",
"resource": "minecraft:block_break_speed",
"min": 0.0,
"max": 1024.0,
"default": 1.0
},
{
"name": "blockInteractionRange",
"resource": "minecraft:block_interaction_range",
"min": 0.0,
"max": 64.0,
"default": 4.5
},
{
"name": "burningTime",
"resource": "minecraft:burning_time",
"min": 0.0,
"max": 1024.0,
"default": 1.0
},
{
"name": "cameraDistance",
"resource": "minecraft:camera_distance",
"min": 0.0,
"max": 32.0,
"default": 4.0
},
{
"name": "explosionKnockbackResistance",
"resource": "minecraft:explosion_knockback_resistance",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "entityInteractionRange",
"resource": "minecraft:entity_interaction_range",
"min": 0.0,
"max": 64.0,
"default": 3.0
},
{
"name": "fallDamageMultiplier",
"resource": "minecraft:fall_damage_multiplier",
"min": 0.0,
"max": 100.0,
"default": 1.0
},
{
"name": "flyingSpeed",
"resource": "minecraft:flying_speed",
"min": 0.0,
"max": 1024.0,
"default": 0.4
},
{
"name": "followRange",
"resource": "minecraft:follow_range",
"min": 0.0,
"max": 2048.0,
"default": 32.0
},
{
"name": "gravity",
"resource": "minecraft:gravity",
"min": -1.0,
"max": 1.0,
"default": 0.08
},
{
"name": "jumpStrength",
"resource": "minecraft:jump_strength",
"min": 0.0,
"max": 32.0,
"default": 0.41999998688697815
},
{
"name": "knockbackResistance",
"resource": "minecraft:knockback_resistance",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "luck",
"resource": "minecraft:luck",
"min": -1024.0,
"max": 1024.0,
"default": 0.0
},
{
"name": "maxAbsorption",
"resource": "minecraft:max_absorption",
"min": 0.0,
"max": 2048.0,
"default": 0.0
},
{
"name": "maxHealth",
"resource": "minecraft:max_health",
"min": 1.0,
"max": 1024.0,
"default": 20.0
},
{
"name": "miningEfficiency",
"resource": "minecraft:mining_efficiency",
"min": 0.0,
"max": 1024.0,
"default": 0.0
},
{
"name": "movementEfficiency",
"resource": "minecraft:movement_efficiency",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "movementSpeed",
"resource": "minecraft:movement_speed",
"min": 0.0,
"max": 1024.0,
"default": 0.7
},
{
"name": "oxygenBonus",
"resource": "minecraft:oxygen_bonus",
"min": 0.0,
"max": 1024.0,
"default": 0.0
},
{
"name": "safeFallDistance",
"resource": "minecraft:safe_fall_distance",
"min": -1024.0,
"max": 1024.0,
"default": 3.0
},
{
"name": "scale",
"resource": "minecraft:scale",
"min": 0.0625,
"max": 16.0,
"default": 1.0
},
{
"name": "sneakingSpeed",
"resource": "minecraft:sneaking_speed",
"min": 0.0,
"max": 1.0,
"default": 0.3
},
{
"name": "spawnReinforcements",
"resource": "minecraft:spawn_reinforcements",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "stepHeight",
"resource": "minecraft:step_height",
"min": 0.0,
"max": 10.0,
"default": 0.6
},
{
"name": "submergedMiningSpeed",
"resource": "minecraft:submerged_mining_speed",
"min": 0.0,
"max": 20.0,
"default": 0.2
},
{
"name": "sweepingDamageRatio",
"resource": "minecraft:sweeping_damage_ratio",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "temptRange",
"resource": "minecraft:tempt_range",
"min": 0.0,
"max": 2048.0,
"default": 10.0
},
{
"name": "waterMovementEfficiency",
"resource": "minecraft:water_movement_efficiency",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "waypointTransmitRange",
"resource": "minecraft:waypoint_transmit_range",
"min": 0.0,
"max": 6.0E7,
"default": 0.0
},
{
"name": "waypointReceiveRange",
"resource": "minecraft:waypoint_receive_range",
"min": 0.0,
"max": 6.0E7,
"default": 0.0
}
]
+652
View File
@@ -0,0 +1,652 @@
[
{
"id": 0,
"name": "badlands",
"category": "mesa",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Badlands",
"color": 7254527
},
{
"id": 1,
"name": "bamboo_jungle",
"category": "jungle",
"temperature": 0.95,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Bamboo Jungle",
"color": 7842047
},
{
"id": 2,
"name": "basalt_deltas",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Basalt Deltas",
"color": 0
},
{
"id": 3,
"name": "beach",
"category": "beach",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Beach",
"color": 7907327
},
{
"id": 4,
"name": "birch_forest",
"category": "forest",
"temperature": 0.6,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Birch Forest",
"color": 8037887
},
{
"id": 5,
"name": "cherry_grove",
"category": "forest",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Cherry Grove",
"color": 8103167
},
{
"id": 6,
"name": "cold_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Cold Ocean",
"color": 8103167
},
{
"id": 7,
"name": "crimson_forest",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Crimson Forest",
"color": 0
},
{
"id": 8,
"name": "dark_forest",
"category": "forest",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Dark Forest",
"color": 7972607
},
{
"id": 9,
"name": "deep_cold_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Cold Ocean",
"color": 8103167
},
{
"id": 10,
"name": "deep_dark",
"category": "underground",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Dark",
"color": 7907327
},
{
"id": 11,
"name": "deep_frozen_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Frozen Ocean",
"color": 8103167
},
{
"id": 12,
"name": "deep_lukewarm_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Lukewarm Ocean",
"color": 8103167
},
{
"id": 13,
"name": "deep_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Ocean",
"color": 8103167
},
{
"id": 14,
"name": "desert",
"category": "desert",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Desert",
"color": 7254527
},
{
"id": 15,
"name": "dripstone_caves",
"category": "underground",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Dripstone Caves",
"color": 7907327
},
{
"id": 16,
"name": "end_barrens",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "End Barrens",
"color": 0
},
{
"id": 17,
"name": "end_highlands",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "End Highlands",
"color": 0
},
{
"id": 18,
"name": "end_midlands",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "End Midlands",
"color": 0
},
{
"id": 19,
"name": "eroded_badlands",
"category": "mesa",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Eroded Badlands",
"color": 7254527
},
{
"id": 20,
"name": "flower_forest",
"category": "forest",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Flower Forest",
"color": 7972607
},
{
"id": 21,
"name": "forest",
"category": "forest",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Forest",
"color": 7972607
},
{
"id": 22,
"name": "frozen_ocean",
"category": "ocean",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Frozen Ocean",
"color": 8364543
},
{
"id": 23,
"name": "frozen_peaks",
"category": "ice",
"temperature": -0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Frozen Peaks",
"color": 8756735
},
{
"id": 24,
"name": "frozen_river",
"category": "ice",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Frozen River",
"color": 8364543
},
{
"id": 25,
"name": "grove",
"category": "forest",
"temperature": -0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Grove",
"color": 8495359
},
{
"id": 26,
"name": "ice_spikes",
"category": "ice",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Ice Spikes",
"color": 8364543
},
{
"id": 27,
"name": "jagged_peaks",
"category": "mountain",
"temperature": -0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Jagged Peaks",
"color": 8756735
},
{
"id": 28,
"name": "jungle",
"category": "jungle",
"temperature": 0.95,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Jungle",
"color": 7842047
},
{
"id": 29,
"name": "lukewarm_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Lukewarm Ocean",
"color": 8103167
},
{
"id": 30,
"name": "lush_caves",
"category": "underground",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Lush Caves",
"color": 8103167
},
{
"id": 31,
"name": "mangrove_swamp",
"category": "forest",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Mangrove Swamp",
"color": 7907327
},
{
"id": 32,
"name": "meadow",
"category": "mountain",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Meadow",
"color": 8103167
},
{
"id": 33,
"name": "mushroom_fields",
"category": "mushroom",
"temperature": 0.9,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Mushroom Fields",
"color": 7842047
},
{
"id": 34,
"name": "nether_wastes",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Nether Wastes",
"color": 0
},
{
"id": 35,
"name": "ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Ocean",
"color": 8103167
},
{
"id": 36,
"name": "old_growth_birch_forest",
"category": "forest",
"temperature": 0.6,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Old Growth Birch Forest",
"color": 8037887
},
{
"id": 37,
"name": "old_growth_pine_taiga",
"category": "taiga",
"temperature": 0.3,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Old Growth Pine Taiga",
"color": 8168447
},
{
"id": 38,
"name": "old_growth_spruce_taiga",
"category": "taiga",
"temperature": 0.25,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Old Growth Spruce Taiga",
"color": 8233983
},
{
"id": 39,
"name": "pale_garden",
"category": "none",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Pale Garden",
"color": 12171705
},
{
"id": 40,
"name": "plains",
"category": "plains",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Plains",
"color": 7907327
},
{
"id": 41,
"name": "river",
"category": "river",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "River",
"color": 8103167
},
{
"id": 42,
"name": "savanna",
"category": "savanna",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Savanna",
"color": 7254527
},
{
"id": 43,
"name": "savanna_plateau",
"category": "savanna",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Savanna Plateau",
"color": 7254527
},
{
"id": 44,
"name": "small_end_islands",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "Small End Islands",
"color": 0
},
{
"id": 45,
"name": "snowy_beach",
"category": "beach",
"temperature": 0.05,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Beach",
"color": 8364543
},
{
"id": 46,
"name": "snowy_plains",
"category": "plains",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Plains",
"color": 8364543
},
{
"id": 47,
"name": "snowy_slopes",
"category": "mountain",
"temperature": -0.3,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Slopes",
"color": 8560639
},
{
"id": 48,
"name": "snowy_taiga",
"category": "taiga",
"temperature": -0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Taiga",
"color": 8625919
},
{
"id": 49,
"name": "soul_sand_valley",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Soul Sand Valley",
"color": 0
},
{
"id": 50,
"name": "sparse_jungle",
"category": "jungle",
"temperature": 0.95,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Sparse Jungle",
"color": 7842047
},
{
"id": 51,
"name": "stony_peaks",
"category": "mountain",
"temperature": 1.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Stony Peaks",
"color": 7776511
},
{
"id": 52,
"name": "stony_shore",
"category": "beach",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Stony Shore",
"color": 8233727
},
{
"id": 53,
"name": "sunflower_plains",
"category": "plains",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Sunflower Plains",
"color": 7907327
},
{
"id": 54,
"name": "swamp",
"category": "swamp",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Swamp",
"color": 7907327
},
{
"id": 55,
"name": "taiga",
"category": "taiga",
"temperature": 0.25,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Taiga",
"color": 8233983
},
{
"id": 56,
"name": "the_end",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "The End",
"color": 0
},
{
"id": 57,
"name": "the_void",
"category": "none",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "The Void",
"color": 8103167
},
{
"id": 58,
"name": "warm_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Warm Ocean",
"color": 8103167
},
{
"id": 59,
"name": "warped_forest",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Warped Forest",
"color": 0
},
{
"id": 60,
"name": "windswept_forest",
"category": "forest",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Windswept Forest",
"color": 8233727
},
{
"id": 61,
"name": "windswept_gravelly_hills",
"category": "extreme_hills",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Windswept Gravelly Hills",
"color": 8233727
},
{
"id": 62,
"name": "windswept_hills",
"category": "extreme_hills",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Windswept Hills",
"color": 8233727
},
{
"id": 63,
"name": "windswept_savanna",
"category": "savanna",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Windswept Savanna",
"color": 7254527
},
{
"id": 64,
"name": "wooded_badlands",
"category": "mesa",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Wooded Badlands",
"color": 7254527
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+242
View File
@@ -0,0 +1,242 @@
[
{
"id": 0,
"name": "Speed",
"displayName": "Speed",
"type": "good"
},
{
"id": 1,
"name": "Slowness",
"displayName": "Slowness",
"type": "bad"
},
{
"id": 2,
"name": "Haste",
"displayName": "Haste",
"type": "good"
},
{
"id": 3,
"name": "MiningFatigue",
"displayName": "Mining Fatigue",
"type": "bad"
},
{
"id": 4,
"name": "Strength",
"displayName": "Strength",
"type": "good"
},
{
"id": 5,
"name": "InstantHealth",
"displayName": "Instant Health",
"type": "good"
},
{
"id": 6,
"name": "InstantDamage",
"displayName": "Instant Damage",
"type": "bad"
},
{
"id": 7,
"name": "JumpBoost",
"displayName": "Jump Boost",
"type": "good"
},
{
"id": 8,
"name": "Nausea",
"displayName": "Nausea",
"type": "bad"
},
{
"id": 9,
"name": "Regeneration",
"displayName": "Regeneration",
"type": "good"
},
{
"id": 10,
"name": "Resistance",
"displayName": "Resistance",
"type": "good"
},
{
"id": 11,
"name": "FireResistance",
"displayName": "Fire Resistance",
"type": "good"
},
{
"id": 12,
"name": "WaterBreathing",
"displayName": "Water Breathing",
"type": "good"
},
{
"id": 13,
"name": "Invisibility",
"displayName": "Invisibility",
"type": "good"
},
{
"id": 14,
"name": "Blindness",
"displayName": "Blindness",
"type": "bad"
},
{
"id": 15,
"name": "NightVision",
"displayName": "Night Vision",
"type": "good"
},
{
"id": 16,
"name": "Hunger",
"displayName": "Hunger",
"type": "bad"
},
{
"id": 17,
"name": "Weakness",
"displayName": "Weakness",
"type": "bad"
},
{
"id": 18,
"name": "Poison",
"displayName": "Poison",
"type": "bad"
},
{
"id": 19,
"name": "Wither",
"displayName": "Wither",
"type": "bad"
},
{
"id": 20,
"name": "HealthBoost",
"displayName": "Health Boost",
"type": "good"
},
{
"id": 21,
"name": "Absorption",
"displayName": "Absorption",
"type": "good"
},
{
"id": 22,
"name": "Saturation",
"displayName": "Saturation",
"type": "good"
},
{
"id": 23,
"name": "Glowing",
"displayName": "Glowing",
"type": "bad"
},
{
"id": 24,
"name": "Levitation",
"displayName": "Levitation",
"type": "bad"
},
{
"id": 25,
"name": "Luck",
"displayName": "Luck",
"type": "good"
},
{
"id": 26,
"name": "BadLuck",
"displayName": "Bad Luck",
"type": "bad"
},
{
"id": 27,
"name": "SlowFalling",
"displayName": "Slow Falling",
"type": "good"
},
{
"id": 28,
"name": "ConduitPower",
"displayName": "Conduit Power",
"type": "good"
},
{
"id": 29,
"name": "DolphinsGrace",
"displayName": "Dolphin's Grace",
"type": "good"
},
{
"id": 30,
"name": "BadOmen",
"displayName": "Bad Omen",
"type": "bad"
},
{
"id": 31,
"name": "HeroOfTheVillage",
"displayName": "Hero of the Village",
"type": "good"
},
{
"id": 32,
"name": "Darkness",
"displayName": "Darkness",
"type": "bad"
},
{
"id": 33,
"name": "TrialOmen",
"displayName": "Trial Omen",
"type": "bad"
},
{
"id": 34,
"name": "RaidOmen",
"displayName": "Raid Omen",
"type": "bad"
},
{
"id": 35,
"name": "WindCharged",
"displayName": "Wind Charged",
"type": "bad"
},
{
"id": 36,
"name": "Weaving",
"displayName": "Weaving",
"type": "bad"
},
{
"id": 37,
"name": "Oozing",
"displayName": "Oozing",
"type": "bad"
},
{
"id": 38,
"name": "Infested",
"displayName": "Infested",
"type": "bad"
},
{
"id": 39,
"name": "BreathOfTheNautilus",
"displayName": "Breath of the Nautilus",
"type": "good"
}
]
@@ -0,0 +1,980 @@
[
{
"id": 0,
"name": "aqua_affinity",
"displayName": "Aqua Affinity",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "head_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 1,
"name": "bane_of_arthropods",
"displayName": "Bane of Arthropods",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"breach",
"density",
"impaling",
"sharpness",
"smite"
],
"category": "weapon",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 2,
"name": "binding_curse",
"displayName": "Curse of Binding",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": true,
"curse": true,
"exclude": [],
"category": "equippable",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 3,
"name": "blast_protection",
"displayName": "Blast Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"fire_protection",
"projectile_protection",
"protection"
],
"category": "armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 4,
"name": "breach",
"displayName": "Breach",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"density",
"impaling",
"sharpness",
"smite"
],
"category": "mace",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 5,
"name": "channeling",
"displayName": "Channeling",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"riptide"
],
"category": "trident",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 6,
"name": "density",
"displayName": "Density",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"impaling",
"sharpness",
"smite"
],
"category": "mace",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 7,
"name": "depth_strider",
"displayName": "Depth Strider",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"frost_walker"
],
"category": "foot_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 8,
"name": "efficiency",
"displayName": "Efficiency",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "mining",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 9,
"name": "feather_falling",
"displayName": "Feather Falling",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "foot_armor",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 10,
"name": "fire_aspect",
"displayName": "Fire Aspect",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "fire_aspect",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 11,
"name": "fire_protection",
"displayName": "Fire Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"blast_protection",
"projectile_protection",
"protection"
],
"category": "armor",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 12,
"name": "flame",
"displayName": "Flame",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "bow",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 13,
"name": "fortune",
"displayName": "Fortune",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"silk_touch"
],
"category": "mining_loot",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 14,
"name": "frost_walker",
"displayName": "Frost Walker",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [
"depth_strider"
],
"category": "foot_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 15,
"name": "impaling",
"displayName": "Impaling",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"density",
"sharpness",
"smite"
],
"category": "trident",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 16,
"name": "infinity",
"displayName": "Infinity",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"mending"
],
"category": "bow",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 17,
"name": "knockback",
"displayName": "Knockback",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "melee_weapon",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 18,
"name": "looting",
"displayName": "Looting",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "melee_weapon",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 19,
"name": "loyalty",
"displayName": "Loyalty",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"riptide"
],
"category": "trident",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 20,
"name": "luck_of_the_sea",
"displayName": "Luck of the Sea",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "fishing",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 21,
"name": "lunge",
"displayName": "Lunge",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "lunge",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 22,
"name": "lure",
"displayName": "Lure",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "fishing",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 23,
"name": "mending",
"displayName": "Mending",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [
"infinity"
],
"category": "durability",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 24,
"name": "multishot",
"displayName": "Multishot",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"piercing"
],
"category": "crossbow",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 25,
"name": "piercing",
"displayName": "Piercing",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"multishot"
],
"category": "crossbow",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 26,
"name": "power",
"displayName": "Power",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "bow",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 27,
"name": "projectile_protection",
"displayName": "Projectile Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"blast_protection",
"fire_protection",
"protection"
],
"category": "armor",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 28,
"name": "protection",
"displayName": "Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"blast_protection",
"fire_protection",
"projectile_protection"
],
"category": "armor",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 29,
"name": "punch",
"displayName": "Punch",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "bow",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 30,
"name": "quick_charge",
"displayName": "Quick Charge",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "crossbow",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 31,
"name": "respiration",
"displayName": "Respiration",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "head_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 32,
"name": "riptide",
"displayName": "Riptide",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"channeling",
"loyalty"
],
"category": "trident",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 33,
"name": "sharpness",
"displayName": "Sharpness",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"density",
"impaling",
"smite"
],
"category": "sharp_weapon",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 34,
"name": "silk_touch",
"displayName": "Silk Touch",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"fortune"
],
"category": "mining_loot",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 35,
"name": "smite",
"displayName": "Smite",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"density",
"impaling",
"sharpness"
],
"category": "weapon",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 36,
"name": "soul_speed",
"displayName": "Soul Speed",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [],
"category": "foot_armor",
"weight": 1,
"tradeable": false,
"discoverable": false
},
{
"id": 37,
"name": "sweeping_edge",
"displayName": "Sweeping Edge",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "sweeping",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 38,
"name": "swift_sneak",
"displayName": "Swift Sneak",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [],
"category": "leg_armor",
"weight": 1,
"tradeable": false,
"discoverable": false
},
{
"id": 39,
"name": "thorns",
"displayName": "Thorns",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "armor",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 40,
"name": "unbreaking",
"displayName": "Unbreaking",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "durability",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 41,
"name": "vanishing_curse",
"displayName": "Curse of Vanishing",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": true,
"curse": true,
"exclude": [],
"category": "vanishing",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 42,
"name": "wind_burst",
"displayName": "Wind Burst",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [],
"category": "mace",
"weight": 2,
"tradeable": false,
"discoverable": false
}
]
File diff suppressed because it is too large Load Diff
+442
View File
@@ -0,0 +1,442 @@
[
{
"id": 894,
"name": "apple",
"stackSize": 64,
"displayName": "Apple",
"foodPoints": 4.0,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 948,
"name": "mushroom_stew",
"stackSize": 1,
"displayName": "Mushroom Stew",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 954,
"name": "bread",
"stackSize": 64,
"displayName": "Bread",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 984,
"name": "porkchop",
"stackSize": 64,
"displayName": "Raw Porkchop",
"foodPoints": 3.0,
"saturation": 1.8000001,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 985,
"name": "cooked_porkchop",
"stackSize": 64,
"displayName": "Cooked Porkchop",
"foodPoints": 8.0,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 987,
"name": "golden_apple",
"stackSize": 64,
"displayName": "Golden Apple",
"foodPoints": 4.0,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 988,
"name": "enchanted_golden_apple",
"stackSize": 64,
"displayName": "Enchanted Golden Apple",
"foodPoints": 4.0,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 1020,
"name": "pufferfish_bucket",
"stackSize": 1,
"displayName": "Bucket of Pufferfish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1021,
"name": "salmon_bucket",
"stackSize": 1,
"displayName": "Bucket of Salmon",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1022,
"name": "cod_bucket",
"stackSize": 1,
"displayName": "Bucket of Cod",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1023,
"name": "tropical_fish_bucket",
"stackSize": 1,
"displayName": "Bucket of Tropical Fish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1058,
"name": "cod",
"stackSize": 64,
"displayName": "Raw Cod",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1059,
"name": "salmon",
"stackSize": 64,
"displayName": "Raw Salmon",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1060,
"name": "tropical_fish",
"stackSize": 64,
"displayName": "Tropical Fish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1061,
"name": "pufferfish",
"stackSize": 64,
"displayName": "Pufferfish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1062,
"name": "cooked_cod",
"stackSize": 64,
"displayName": "Cooked Cod",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 1063,
"name": "cooked_salmon",
"stackSize": 64,
"displayName": "Cooked Salmon",
"foodPoints": 6.0,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.6
},
{
"id": 1103,
"name": "cookie",
"stackSize": 64,
"displayName": "Cookie",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1107,
"name": "melon_slice",
"stackSize": 64,
"displayName": "Melon Slice",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1108,
"name": "dried_kelp",
"stackSize": 64,
"displayName": "Dried Kelp",
"foodPoints": 1.0,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 1111,
"name": "beef",
"stackSize": 64,
"displayName": "Raw Beef",
"foodPoints": 3.0,
"saturation": 1.8000001,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 1112,
"name": "cooked_beef",
"stackSize": 64,
"displayName": "Steak",
"foodPoints": 8.0,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 1113,
"name": "chicken",
"stackSize": 64,
"displayName": "Raw Chicken",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1114,
"name": "cooked_chicken",
"stackSize": 64,
"displayName": "Cooked Chicken",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 1115,
"name": "rotten_flesh",
"stackSize": 64,
"displayName": "Rotten Flesh",
"foodPoints": 4.0,
"saturation": 0.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.2
},
{
"id": 1123,
"name": "spider_eye",
"stackSize": 64,
"displayName": "Spider Eye",
"foodPoints": 2.0,
"saturation": 3.2,
"effectiveQuality": 5.2,
"saturationRatio": 1.6
},
{
"id": 1228,
"name": "carrot",
"stackSize": 64,
"displayName": "Carrot",
"foodPoints": 3.0,
"saturation": 3.6000001,
"effectiveQuality": 6.6000004,
"saturationRatio": 1.2
},
{
"id": 1229,
"name": "potato",
"stackSize": 64,
"displayName": "Potato",
"foodPoints": 1.0,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 1230,
"name": "baked_potato",
"stackSize": 64,
"displayName": "Baked Potato",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 1231,
"name": "poisonous_potato",
"stackSize": 64,
"displayName": "Poisonous Potato",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1233,
"name": "golden_carrot",
"stackSize": 64,
"displayName": "Golden Carrot",
"foodPoints": 6.0,
"saturation": 14.400001,
"effectiveQuality": 20.400002,
"saturationRatio": 2.4
},
{
"id": 1242,
"name": "pumpkin_pie",
"stackSize": 64,
"displayName": "Pumpkin Pie",
"foodPoints": 8.0,
"saturation": 4.8,
"effectiveQuality": 12.8,
"saturationRatio": 0.6
},
{
"id": 1250,
"name": "rabbit",
"stackSize": 64,
"displayName": "Raw Rabbit",
"foodPoints": 3.0,
"saturation": 1.8000001,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 1251,
"name": "cooked_rabbit",
"stackSize": 64,
"displayName": "Cooked Rabbit",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 1252,
"name": "rabbit_stew",
"stackSize": 1,
"displayName": "Rabbit Stew",
"foodPoints": 10.0,
"saturation": 12.0,
"effectiveQuality": 22.0,
"saturationRatio": 1.2
},
{
"id": 1265,
"name": "mutton",
"stackSize": 64,
"displayName": "Raw Mutton",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1266,
"name": "cooked_mutton",
"stackSize": 64,
"displayName": "Cooked Mutton",
"foodPoints": 6.0,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.6
},
{
"id": 1284,
"name": "chorus_fruit",
"stackSize": 64,
"displayName": "Chorus Fruit",
"foodPoints": 4.0,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 1288,
"name": "beetroot",
"stackSize": 64,
"displayName": "Beetroot",
"foodPoints": 1.0,
"saturation": 1.2,
"effectiveQuality": 2.2,
"saturationRatio": 1.2
},
{
"id": 1290,
"name": "beetroot_soup",
"stackSize": 1,
"displayName": "Beetroot Soup",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 1341,
"name": "suspicious_stew",
"stackSize": 1,
"displayName": "Suspicious Stew",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 1374,
"name": "sweet_berries",
"stackSize": 64,
"displayName": "Sweet Berries",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1375,
"name": "glow_berries",
"stackSize": 64,
"displayName": "Glow Berries",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1382,
"name": "honey_bottle",
"stackSize": 16,
"displayName": "Honey Bottle",
"foodPoints": 6.0,
"saturation": 1.2,
"effectiveQuality": 7.2,
"saturationRatio": 0.2
}
]
@@ -0,0 +1,110 @@
[
{
"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"
},
{
"id": 16,
"name": "trumpet"
},
{
"id": 17,
"name": "trumpet_exposed"
},
{
"id": 18,
"name": "trumpet_oxidized"
},
{
"id": 19,
"name": "trumpet_weathered"
},
{
"id": 20,
"name": "zombie"
},
{
"id": 21,
"name": "skeleton"
},
{
"id": 22,
"name": "creeper"
},
{
"id": 23,
"name": "dragon"
},
{
"id": 24,
"name": "wither_skeleton"
},
{
"id": 25,
"name": "piglin"
},
{
"id": 26,
"name": "custom_head"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,233 @@
{
"default": {},
"leaves": {
"1106": 1.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5
},
"coweb": {
"1106": 15.0,
"912": 15.0,
"917": 15.0,
"922": 15.0,
"927": 15.0,
"932": 15.0,
"937": 15.0,
"942": 15.0
},
"plant": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5
},
"gourd": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5
},
"vine_or_glow_lichen": {
"1106": 2.0
},
"wool": {
"1106": 1.0
},
"sword_instantly_mines": {
"912": 2.0,
"917": 1.0,
"922": 4.0,
"927": 12.0,
"932": 6.0,
"937": 8.0,
"942": 9.0
},
"sword_efficient": {
"912": 2.0,
"917": 1.0,
"922": 4.0,
"927": 12.0,
"932": 6.0,
"937": 8.0,
"942": 9.0
},
"incorrect_for_wooden_tool": {
"913": 2.0,
"914": 2.0,
"915": 2.0,
"916": 2.0
},
"mineable/shovel": {
"913": 2.0,
"918": 1.0,
"923": 4.0,
"928": 12.0,
"933": 6.0,
"938": 8.0,
"943": 9.0
},
"mineable/pickaxe": {
"914": 2.0,
"919": 1.0,
"924": 4.0,
"929": 12.0,
"934": 6.0,
"939": 8.0,
"944": 9.0
},
"mineable/axe": {
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
},
"mineable/hoe": {
"916": 2.0,
"921": 1.0,
"926": 4.0,
"931": 12.0,
"936": 6.0,
"941": 8.0,
"946": 9.0
},
"incorrect_for_copper_tool": {
"918": 1.0,
"919": 1.0,
"920": 1.0,
"921": 1.0
},
"incorrect_for_stone_tool": {
"923": 4.0,
"924": 4.0,
"925": 4.0,
"926": 4.0
},
"incorrect_for_gold_tool": {
"928": 12.0,
"929": 12.0,
"930": 12.0,
"931": 12.0
},
"incorrect_for_iron_tool": {
"933": 6.0,
"934": 6.0,
"935": 6.0,
"936": 6.0
},
"incorrect_for_diamond_tool": {
"938": 8.0,
"939": 8.0,
"940": 8.0,
"941": 8.0
},
"incorrect_for_netherite_tool": {
"943": 9.0,
"944": 9.0,
"945": 9.0,
"946": 9.0
},
"plant;mineable/axe": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
},
"gourd;mineable/axe": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
},
"leaves;mineable/hoe": {
"1106": 1.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"916": 2.0,
"921": 1.0,
"926": 4.0,
"931": 12.0,
"936": 6.0,
"941": 8.0,
"946": 9.0
},
"leaves;mineable/axe;mineable/hoe": {
"1106": 1.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0,
"916": 2.0,
"921": 1.0,
"926": 4.0,
"931": 12.0,
"936": 6.0,
"941": 8.0,
"946": 9.0
},
"vine_or_glow_lichen;plant;mineable/axe": {
"1106": 2.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
}
}
@@ -0,0 +1,470 @@
[
{
"id": 0,
"name": "angry_villager"
},
{
"id": 1,
"name": "block"
},
{
"id": 2,
"name": "block_marker"
},
{
"id": 3,
"name": "bubble"
},
{
"id": 4,
"name": "cloud"
},
{
"id": 5,
"name": "copper_fire_flame"
},
{
"id": 6,
"name": "crit"
},
{
"id": 7,
"name": "damage_indicator"
},
{
"id": 8,
"name": "dragon_breath"
},
{
"id": 9,
"name": "dripping_lava"
},
{
"id": 10,
"name": "falling_lava"
},
{
"id": 11,
"name": "landing_lava"
},
{
"id": 12,
"name": "dripping_water"
},
{
"id": 13,
"name": "falling_water"
},
{
"id": 14,
"name": "dust"
},
{
"id": 15,
"name": "dust_color_transition"
},
{
"id": 16,
"name": "effect"
},
{
"id": 17,
"name": "elder_guardian"
},
{
"id": 18,
"name": "enchanted_hit"
},
{
"id": 19,
"name": "enchant"
},
{
"id": 20,
"name": "end_rod"
},
{
"id": 21,
"name": "entity_effect"
},
{
"id": 22,
"name": "explosion_emitter"
},
{
"id": 23,
"name": "explosion"
},
{
"id": 24,
"name": "gust"
},
{
"id": 25,
"name": "small_gust"
},
{
"id": 26,
"name": "gust_emitter_large"
},
{
"id": 27,
"name": "gust_emitter_small"
},
{
"id": 28,
"name": "sonic_boom"
},
{
"id": 29,
"name": "falling_dust"
},
{
"id": 30,
"name": "firework"
},
{
"id": 31,
"name": "fishing"
},
{
"id": 32,
"name": "flame"
},
{
"id": 33,
"name": "infested"
},
{
"id": 34,
"name": "cherry_leaves"
},
{
"id": 35,
"name": "pale_oak_leaves"
},
{
"id": 36,
"name": "tinted_leaves"
},
{
"id": 37,
"name": "sculk_soul"
},
{
"id": 38,
"name": "sculk_charge"
},
{
"id": 39,
"name": "sculk_charge_pop"
},
{
"id": 40,
"name": "soul_fire_flame"
},
{
"id": 41,
"name": "soul"
},
{
"id": 42,
"name": "flash"
},
{
"id": 43,
"name": "happy_villager"
},
{
"id": 44,
"name": "composter"
},
{
"id": 45,
"name": "heart"
},
{
"id": 46,
"name": "instant_effect"
},
{
"id": 47,
"name": "item"
},
{
"id": 48,
"name": "vibration"
},
{
"id": 49,
"name": "trail"
},
{
"id": 50,
"name": "pause_mob_growth"
},
{
"id": 51,
"name": "reset_mob_growth"
},
{
"id": 52,
"name": "item_slime"
},
{
"id": 53,
"name": "item_cobweb"
},
{
"id": 54,
"name": "item_snowball"
},
{
"id": 55,
"name": "large_smoke"
},
{
"id": 56,
"name": "lava"
},
{
"id": 57,
"name": "mycelium"
},
{
"id": 58,
"name": "note"
},
{
"id": 59,
"name": "poof"
},
{
"id": 60,
"name": "portal"
},
{
"id": 61,
"name": "rain"
},
{
"id": 62,
"name": "smoke"
},
{
"id": 63,
"name": "white_smoke"
},
{
"id": 64,
"name": "sneeze"
},
{
"id": 65,
"name": "spit"
},
{
"id": 66,
"name": "squid_ink"
},
{
"id": 67,
"name": "sweep_attack"
},
{
"id": 68,
"name": "totem_of_undying"
},
{
"id": 69,
"name": "underwater"
},
{
"id": 70,
"name": "splash"
},
{
"id": 71,
"name": "witch"
},
{
"id": 72,
"name": "bubble_pop"
},
{
"id": 73,
"name": "current_down"
},
{
"id": 74,
"name": "bubble_column_up"
},
{
"id": 75,
"name": "nautilus"
},
{
"id": 76,
"name": "dolphin"
},
{
"id": 77,
"name": "campfire_cosy_smoke"
},
{
"id": 78,
"name": "campfire_signal_smoke"
},
{
"id": 79,
"name": "dripping_honey"
},
{
"id": 80,
"name": "falling_honey"
},
{
"id": 81,
"name": "landing_honey"
},
{
"id": 82,
"name": "falling_nectar"
},
{
"id": 83,
"name": "falling_spore_blossom"
},
{
"id": 84,
"name": "ash"
},
{
"id": 85,
"name": "crimson_spore"
},
{
"id": 86,
"name": "warped_spore"
},
{
"id": 87,
"name": "spore_blossom_air"
},
{
"id": 88,
"name": "dripping_obsidian_tear"
},
{
"id": 89,
"name": "falling_obsidian_tear"
},
{
"id": 90,
"name": "landing_obsidian_tear"
},
{
"id": 91,
"name": "reverse_portal"
},
{
"id": 92,
"name": "white_ash"
},
{
"id": 93,
"name": "small_flame"
},
{
"id": 94,
"name": "snowflake"
},
{
"id": 95,
"name": "dripping_dripstone_lava"
},
{
"id": 96,
"name": "falling_dripstone_lava"
},
{
"id": 97,
"name": "dripping_dripstone_water"
},
{
"id": 98,
"name": "falling_dripstone_water"
},
{
"id": 99,
"name": "glow_squid_ink"
},
{
"id": 100,
"name": "glow"
},
{
"id": 101,
"name": "wax_on"
},
{
"id": 102,
"name": "wax_off"
},
{
"id": 103,
"name": "electric_spark"
},
{
"id": 104,
"name": "scrape"
},
{
"id": 105,
"name": "shriek"
},
{
"id": 106,
"name": "egg_crack"
},
{
"id": 107,
"name": "dust_plume"
},
{
"id": 108,
"name": "trial_spawner_detection"
},
{
"id": 109,
"name": "trial_spawner_detection_ominous"
},
{
"id": 110,
"name": "vault_connection"
},
{
"id": 111,
"name": "dust_pillar"
},
{
"id": 112,
"name": "ominous_spawning"
},
{
"id": 113,
"name": "raid_omen"
},
{
"id": 114,
"name": "trial_omen"
},
{
"id": 115,
"name": "block_crumble"
},
{
"id": 116,
"name": "firefly"
}
]
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
+465
View File
@@ -0,0 +1,465 @@
{
"grass": {
"data": [
{
"keys": [
"badlands",
"eroded_badlands",
"wooded_badlands"
],
"color": -7306931
},
{
"keys": [
"bamboo_jungle",
"basalt_deltas",
"beach",
"birch_forest",
"cold_ocean",
"crimson_forest",
"deep_cold_ocean",
"deep_dark",
"deep_frozen_ocean",
"deep_lukewarm_ocean",
"deep_ocean",
"desert",
"dripstone_caves",
"end_barrens",
"end_highlands",
"end_midlands",
"flower_forest",
"forest",
"frozen_ocean",
"frozen_peaks",
"frozen_river",
"grove",
"ice_spikes",
"jagged_peaks",
"jungle",
"lukewarm_ocean",
"lush_caves",
"meadow",
"mushroom_fields",
"nether_wastes",
"ocean",
"old_growth_birch_forest",
"old_growth_pine_taiga",
"old_growth_spruce_taiga",
"plains",
"river",
"savanna",
"savanna_plateau",
"small_end_islands",
"snowy_beach",
"snowy_plains",
"snowy_slopes",
"snowy_taiga",
"soul_sand_valley",
"sparse_jungle",
"stony_peaks",
"stony_shore",
"sunflower_plains",
"taiga",
"the_end",
"the_void",
"warm_ocean",
"warped_forest",
"windswept_forest",
"windswept_gravelly_hills",
"windswept_hills",
"windswept_savanna"
],
"color": 0
},
{
"keys": [
"cherry_grove"
],
"color": -4793503
},
{
"keys": [
"dark_forest"
],
"color": -15459835
},
{
"keys": [
"mangrove_swamp",
"swamp"
],
"color": -9801671
},
{
"keys": [
"pale_garden"
],
"color": -8945038
}
]
},
"foliage": {
"data": [
{
"keys": [
"badlands",
"eroded_badlands",
"wooded_badlands"
],
"color": -6389427
},
{
"keys": [
"bamboo_jungle",
"basalt_deltas",
"beach",
"birch_forest",
"cold_ocean",
"crimson_forest",
"dark_forest",
"deep_cold_ocean",
"deep_dark",
"deep_frozen_ocean",
"deep_lukewarm_ocean",
"deep_ocean",
"desert",
"dripstone_caves",
"end_barrens",
"end_highlands",
"end_midlands",
"flower_forest",
"forest",
"frozen_ocean",
"frozen_peaks",
"frozen_river",
"grove",
"ice_spikes",
"jagged_peaks",
"jungle",
"lukewarm_ocean",
"lush_caves",
"meadow",
"mushroom_fields",
"nether_wastes",
"ocean",
"old_growth_birch_forest",
"old_growth_pine_taiga",
"old_growth_spruce_taiga",
"plains",
"river",
"savanna",
"savanna_plateau",
"small_end_islands",
"snowy_beach",
"snowy_plains",
"snowy_slopes",
"snowy_taiga",
"soul_sand_valley",
"sparse_jungle",
"stony_peaks",
"stony_shore",
"sunflower_plains",
"taiga",
"the_end",
"the_void",
"warm_ocean",
"warped_forest",
"windswept_forest",
"windswept_gravelly_hills",
"windswept_hills",
"windswept_savanna"
],
"color": 0
},
{
"keys": [
"cherry_grove"
],
"color": -4793503
},
{
"keys": [
"mangrove_swamp"
],
"color": -7491289
},
{
"keys": [
"pale_garden"
],
"color": -7893642
},
{
"keys": [
"swamp"
],
"color": -9801671
}
]
},
"water": {
"data": [
{
"keys": [
"badlands",
"bamboo_jungle",
"basalt_deltas",
"beach",
"birch_forest",
"crimson_forest",
"dark_forest",
"deep_dark",
"deep_ocean",
"desert",
"dripstone_caves",
"end_barrens",
"end_highlands",
"end_midlands",
"eroded_badlands",
"flower_forest",
"forest",
"frozen_peaks",
"grove",
"ice_spikes",
"jagged_peaks",
"jungle",
"lush_caves",
"mushroom_fields",
"nether_wastes",
"ocean",
"old_growth_birch_forest",
"old_growth_pine_taiga",
"old_growth_spruce_taiga",
"plains",
"river",
"savanna",
"savanna_plateau",
"small_end_islands",
"snowy_plains",
"snowy_slopes",
"soul_sand_valley",
"sparse_jungle",
"stony_peaks",
"stony_shore",
"sunflower_plains",
"taiga",
"the_end",
"the_void",
"warped_forest",
"windswept_forest",
"windswept_gravelly_hills",
"windswept_hills",
"windswept_savanna",
"wooded_badlands"
],
"color": -12618012
},
{
"keys": [
"cherry_grove"
],
"color": -10635281
},
{
"keys": [
"cold_ocean",
"deep_cold_ocean",
"snowy_beach",
"snowy_taiga"
],
"color": -12757034
},
{
"keys": [
"deep_frozen_ocean",
"frozen_ocean",
"frozen_river"
],
"color": -13027127
},
{
"keys": [
"deep_lukewarm_ocean",
"lukewarm_ocean"
],
"color": -12210702
},
{
"keys": [
"mangrove_swamp"
],
"color": -12944790
},
{
"keys": [
"meadow"
],
"color": -15839537
},
{
"keys": [
"pale_garden"
],
"color": -9008995
},
{
"keys": [
"swamp"
],
"color": -10388636
},
{
"keys": [
"warm_ocean"
],
"color": -12331538
}
]
},
"redstone": {
"data": [
{
"keys": [
0
],
"color": 4980736
},
{
"keys": [
1
],
"color": 7340032
},
{
"keys": [
2
],
"color": 7995392
},
{
"keys": [
3
],
"color": 8650752
},
{
"keys": [
4
],
"color": 9306112
},
{
"keys": [
5
],
"color": 10027008
},
{
"keys": [
6
],
"color": 10682368
},
{
"keys": [
7
],
"color": 11337728
},
{
"keys": [
8
],
"color": 11993088
},
{
"keys": [
9
],
"color": 12648448
},
{
"keys": [
10
],
"color": 13369344
},
{
"keys": [
11
],
"color": 14024704
},
{
"keys": [
12
],
"color": 14680064
},
{
"keys": [
13
],
"color": 15336960
},
{
"keys": [
14
],
"color": 15997696
},
{
"keys": [
15
],
"color": 16724480
}
]
},
"constant": {
"data": [
{
"keys": [
"birch_leaves"
],
"color": -8345771
},
{
"keys": [
"spruce_leaves"
],
"color": -10380959
},
{
"keys": [
"lily_pad"
],
"color": -14647248
},
{
"keys": [
"attached_melon_stem"
],
"color": -2046180
},
{
"keys": [
"attached_pumpkin_stem"
],
"color": -2046180
},
{
"keys": [
"melon_stem"
],
"color": -16711936
},
{
"keys": [
"pumpkin_stem"
],
"color": -16711936
}
]
}
}
@@ -0,0 +1,6 @@
{
"version": 775,
"minecraftVersion": "26.1",
"majorVersion": "26.1",
"releaseType": "release"
}
@@ -0,0 +1,247 @@
[
{
"name": "armor",
"resource": "minecraft:armor",
"min": 0.0,
"max": 30.0,
"default": 0.0
},
{
"name": "armorToughness",
"resource": "minecraft:armor_toughness",
"min": 0.0,
"max": 20.0,
"default": 0.0
},
{
"name": "attackDamage",
"resource": "minecraft:attack_damage",
"min": 0.0,
"max": 2048.0,
"default": 2.0
},
{
"name": "attackKnockback",
"resource": "minecraft:attack_knockback",
"min": 0.0,
"max": 5.0,
"default": 0.0
},
{
"name": "attackSpeed",
"resource": "minecraft:attack_speed",
"min": 0.0,
"max": 1024.0,
"default": 4.0
},
{
"name": "blockBreakSpeed",
"resource": "minecraft:block_break_speed",
"min": 0.0,
"max": 1024.0,
"default": 1.0
},
{
"name": "blockInteractionRange",
"resource": "minecraft:block_interaction_range",
"min": 0.0,
"max": 64.0,
"default": 4.5
},
{
"name": "burningTime",
"resource": "minecraft:burning_time",
"min": 0.0,
"max": 1024.0,
"default": 1.0
},
{
"name": "cameraDistance",
"resource": "minecraft:camera_distance",
"min": 0.0,
"max": 32.0,
"default": 4.0
},
{
"name": "explosionKnockbackResistance",
"resource": "minecraft:explosion_knockback_resistance",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "entityInteractionRange",
"resource": "minecraft:entity_interaction_range",
"min": 0.0,
"max": 64.0,
"default": 3.0
},
{
"name": "fallDamageMultiplier",
"resource": "minecraft:fall_damage_multiplier",
"min": 0.0,
"max": 100.0,
"default": 1.0
},
{
"name": "flyingSpeed",
"resource": "minecraft:flying_speed",
"min": 0.0,
"max": 1024.0,
"default": 0.4
},
{
"name": "followRange",
"resource": "minecraft:follow_range",
"min": 0.0,
"max": 2048.0,
"default": 32.0
},
{
"name": "gravity",
"resource": "minecraft:gravity",
"min": -1.0,
"max": 1.0,
"default": 0.08
},
{
"name": "jumpStrength",
"resource": "minecraft:jump_strength",
"min": 0.0,
"max": 32.0,
"default": 0.41999998688697815
},
{
"name": "knockbackResistance",
"resource": "minecraft:knockback_resistance",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "luck",
"resource": "minecraft:luck",
"min": -1024.0,
"max": 1024.0,
"default": 0.0
},
{
"name": "maxAbsorption",
"resource": "minecraft:max_absorption",
"min": 0.0,
"max": 2048.0,
"default": 0.0
},
{
"name": "maxHealth",
"resource": "minecraft:max_health",
"min": 1.0,
"max": 1024.0,
"default": 20.0
},
{
"name": "miningEfficiency",
"resource": "minecraft:mining_efficiency",
"min": 0.0,
"max": 1024.0,
"default": 0.0
},
{
"name": "movementEfficiency",
"resource": "minecraft:movement_efficiency",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "movementSpeed",
"resource": "minecraft:movement_speed",
"min": 0.0,
"max": 1024.0,
"default": 0.7
},
{
"name": "oxygenBonus",
"resource": "minecraft:oxygen_bonus",
"min": 0.0,
"max": 1024.0,
"default": 0.0
},
{
"name": "safeFallDistance",
"resource": "minecraft:safe_fall_distance",
"min": -1024.0,
"max": 1024.0,
"default": 3.0
},
{
"name": "scale",
"resource": "minecraft:scale",
"min": 0.0625,
"max": 16.0,
"default": 1.0
},
{
"name": "sneakingSpeed",
"resource": "minecraft:sneaking_speed",
"min": 0.0,
"max": 1.0,
"default": 0.3
},
{
"name": "spawnReinforcements",
"resource": "minecraft:spawn_reinforcements",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "stepHeight",
"resource": "minecraft:step_height",
"min": 0.0,
"max": 10.0,
"default": 0.6
},
{
"name": "submergedMiningSpeed",
"resource": "minecraft:submerged_mining_speed",
"min": 0.0,
"max": 20.0,
"default": 0.2
},
{
"name": "sweepingDamageRatio",
"resource": "minecraft:sweeping_damage_ratio",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "temptRange",
"resource": "minecraft:tempt_range",
"min": 0.0,
"max": 2048.0,
"default": 10.0
},
{
"name": "waterMovementEfficiency",
"resource": "minecraft:water_movement_efficiency",
"min": 0.0,
"max": 1.0,
"default": 0.0
},
{
"name": "waypointTransmitRange",
"resource": "minecraft:waypoint_transmit_range",
"min": 0.0,
"max": 6.0E7,
"default": 0.0
},
{
"name": "waypointReceiveRange",
"resource": "minecraft:waypoint_receive_range",
"min": 0.0,
"max": 6.0E7,
"default": 0.0
}
]
+652
View File
@@ -0,0 +1,652 @@
[
{
"id": 0,
"name": "badlands",
"category": "mesa",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Badlands",
"color": 7254527
},
{
"id": 1,
"name": "bamboo_jungle",
"category": "jungle",
"temperature": 0.95,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Bamboo Jungle",
"color": 7842047
},
{
"id": 2,
"name": "basalt_deltas",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Basalt Deltas",
"color": 0
},
{
"id": 3,
"name": "beach",
"category": "beach",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Beach",
"color": 7907327
},
{
"id": 4,
"name": "birch_forest",
"category": "forest",
"temperature": 0.6,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Birch Forest",
"color": 8037887
},
{
"id": 5,
"name": "cherry_grove",
"category": "forest",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Cherry Grove",
"color": 8103167
},
{
"id": 6,
"name": "cold_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Cold Ocean",
"color": 8103167
},
{
"id": 7,
"name": "crimson_forest",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Crimson Forest",
"color": 0
},
{
"id": 8,
"name": "dark_forest",
"category": "forest",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Dark Forest",
"color": 7972607
},
{
"id": 9,
"name": "deep_cold_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Cold Ocean",
"color": 8103167
},
{
"id": 10,
"name": "deep_dark",
"category": "underground",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Dark",
"color": 7907327
},
{
"id": 11,
"name": "deep_frozen_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Frozen Ocean",
"color": 8103167
},
{
"id": 12,
"name": "deep_lukewarm_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Lukewarm Ocean",
"color": 8103167
},
{
"id": 13,
"name": "deep_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Deep Ocean",
"color": 8103167
},
{
"id": 14,
"name": "desert",
"category": "desert",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Desert",
"color": 7254527
},
{
"id": 15,
"name": "dripstone_caves",
"category": "underground",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Dripstone Caves",
"color": 7907327
},
{
"id": 16,
"name": "end_barrens",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "End Barrens",
"color": 0
},
{
"id": 17,
"name": "end_highlands",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "End Highlands",
"color": 0
},
{
"id": 18,
"name": "end_midlands",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "End Midlands",
"color": 0
},
{
"id": 19,
"name": "eroded_badlands",
"category": "mesa",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Eroded Badlands",
"color": 7254527
},
{
"id": 20,
"name": "flower_forest",
"category": "forest",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Flower Forest",
"color": 7972607
},
{
"id": 21,
"name": "forest",
"category": "forest",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Forest",
"color": 7972607
},
{
"id": 22,
"name": "frozen_ocean",
"category": "ocean",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Frozen Ocean",
"color": 8364543
},
{
"id": 23,
"name": "frozen_peaks",
"category": "ice",
"temperature": -0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Frozen Peaks",
"color": 8756735
},
{
"id": 24,
"name": "frozen_river",
"category": "ice",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Frozen River",
"color": 8364543
},
{
"id": 25,
"name": "grove",
"category": "forest",
"temperature": -0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Grove",
"color": 8495359
},
{
"id": 26,
"name": "ice_spikes",
"category": "ice",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Ice Spikes",
"color": 8364543
},
{
"id": 27,
"name": "jagged_peaks",
"category": "mountain",
"temperature": -0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Jagged Peaks",
"color": 8756735
},
{
"id": 28,
"name": "jungle",
"category": "jungle",
"temperature": 0.95,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Jungle",
"color": 7842047
},
{
"id": 29,
"name": "lukewarm_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Lukewarm Ocean",
"color": 8103167
},
{
"id": 30,
"name": "lush_caves",
"category": "underground",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Lush Caves",
"color": 8103167
},
{
"id": 31,
"name": "mangrove_swamp",
"category": "forest",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Mangrove Swamp",
"color": 7907327
},
{
"id": 32,
"name": "meadow",
"category": "mountain",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Meadow",
"color": 8103167
},
{
"id": 33,
"name": "mushroom_fields",
"category": "mushroom",
"temperature": 0.9,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Mushroom Fields",
"color": 7842047
},
{
"id": 34,
"name": "nether_wastes",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Nether Wastes",
"color": 0
},
{
"id": 35,
"name": "ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Ocean",
"color": 8103167
},
{
"id": 36,
"name": "old_growth_birch_forest",
"category": "forest",
"temperature": 0.6,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Old Growth Birch Forest",
"color": 8037887
},
{
"id": 37,
"name": "old_growth_pine_taiga",
"category": "taiga",
"temperature": 0.3,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Old Growth Pine Taiga",
"color": 8168447
},
{
"id": 38,
"name": "old_growth_spruce_taiga",
"category": "taiga",
"temperature": 0.25,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Old Growth Spruce Taiga",
"color": 8233983
},
{
"id": 39,
"name": "pale_garden",
"category": "none",
"temperature": 0.7,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Pale Garden",
"color": 12171705
},
{
"id": 40,
"name": "plains",
"category": "plains",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Plains",
"color": 7907327
},
{
"id": 41,
"name": "river",
"category": "river",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "River",
"color": 8103167
},
{
"id": 42,
"name": "savanna",
"category": "savanna",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Savanna",
"color": 7254527
},
{
"id": 43,
"name": "savanna_plateau",
"category": "savanna",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Savanna Plateau",
"color": 7254527
},
{
"id": 44,
"name": "small_end_islands",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "Small End Islands",
"color": 0
},
{
"id": 45,
"name": "snowy_beach",
"category": "beach",
"temperature": 0.05,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Beach",
"color": 8364543
},
{
"id": 46,
"name": "snowy_plains",
"category": "plains",
"temperature": 0.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Plains",
"color": 8364543
},
{
"id": 47,
"name": "snowy_slopes",
"category": "mountain",
"temperature": -0.3,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Slopes",
"color": 8560639
},
{
"id": 48,
"name": "snowy_taiga",
"category": "taiga",
"temperature": -0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Snowy Taiga",
"color": 8625919
},
{
"id": 49,
"name": "soul_sand_valley",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Soul Sand Valley",
"color": 0
},
{
"id": 50,
"name": "sparse_jungle",
"category": "jungle",
"temperature": 0.95,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Sparse Jungle",
"color": 7842047
},
{
"id": 51,
"name": "stony_peaks",
"category": "mountain",
"temperature": 1.0,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Stony Peaks",
"color": 7776511
},
{
"id": 52,
"name": "stony_shore",
"category": "beach",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Stony Shore",
"color": 8233727
},
{
"id": 53,
"name": "sunflower_plains",
"category": "plains",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Sunflower Plains",
"color": 7907327
},
{
"id": 54,
"name": "swamp",
"category": "swamp",
"temperature": 0.8,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Swamp",
"color": 7907327
},
{
"id": 55,
"name": "taiga",
"category": "taiga",
"temperature": 0.25,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Taiga",
"color": 8233983
},
{
"id": 56,
"name": "the_end",
"category": "the_end",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "end",
"displayName": "The End",
"color": 0
},
{
"id": 57,
"name": "the_void",
"category": "none",
"temperature": 0.5,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "The Void",
"color": 8103167
},
{
"id": 58,
"name": "warm_ocean",
"category": "ocean",
"temperature": 0.5,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Warm Ocean",
"color": 8103167
},
{
"id": 59,
"name": "warped_forest",
"category": "nether",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "nether",
"displayName": "Warped Forest",
"color": 0
},
{
"id": 60,
"name": "windswept_forest",
"category": "forest",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Windswept Forest",
"color": 8233727
},
{
"id": 61,
"name": "windswept_gravelly_hills",
"category": "extreme_hills",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Windswept Gravelly Hills",
"color": 8233727
},
{
"id": 62,
"name": "windswept_hills",
"category": "extreme_hills",
"temperature": 0.2,
"has_precipitation": true,
"dimension": "overworld",
"displayName": "Windswept Hills",
"color": 8233727
},
{
"id": 63,
"name": "windswept_savanna",
"category": "savanna",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Windswept Savanna",
"color": 7254527
},
{
"id": 64,
"name": "wooded_badlands",
"category": "mesa",
"temperature": 2.0,
"has_precipitation": false,
"dimension": "overworld",
"displayName": "Wooded Badlands",
"color": 7254527
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+242
View File
@@ -0,0 +1,242 @@
[
{
"id": 0,
"name": "Speed",
"displayName": "Speed",
"type": "good"
},
{
"id": 1,
"name": "Slowness",
"displayName": "Slowness",
"type": "bad"
},
{
"id": 2,
"name": "Haste",
"displayName": "Haste",
"type": "good"
},
{
"id": 3,
"name": "MiningFatigue",
"displayName": "Mining Fatigue",
"type": "bad"
},
{
"id": 4,
"name": "Strength",
"displayName": "Strength",
"type": "good"
},
{
"id": 5,
"name": "InstantHealth",
"displayName": "Instant Health",
"type": "good"
},
{
"id": 6,
"name": "InstantDamage",
"displayName": "Instant Damage",
"type": "bad"
},
{
"id": 7,
"name": "JumpBoost",
"displayName": "Jump Boost",
"type": "good"
},
{
"id": 8,
"name": "Nausea",
"displayName": "Nausea",
"type": "bad"
},
{
"id": 9,
"name": "Regeneration",
"displayName": "Regeneration",
"type": "good"
},
{
"id": 10,
"name": "Resistance",
"displayName": "Resistance",
"type": "good"
},
{
"id": 11,
"name": "FireResistance",
"displayName": "Fire Resistance",
"type": "good"
},
{
"id": 12,
"name": "WaterBreathing",
"displayName": "Water Breathing",
"type": "good"
},
{
"id": 13,
"name": "Invisibility",
"displayName": "Invisibility",
"type": "good"
},
{
"id": 14,
"name": "Blindness",
"displayName": "Blindness",
"type": "bad"
},
{
"id": 15,
"name": "NightVision",
"displayName": "Night Vision",
"type": "good"
},
{
"id": 16,
"name": "Hunger",
"displayName": "Hunger",
"type": "bad"
},
{
"id": 17,
"name": "Weakness",
"displayName": "Weakness",
"type": "bad"
},
{
"id": 18,
"name": "Poison",
"displayName": "Poison",
"type": "bad"
},
{
"id": 19,
"name": "Wither",
"displayName": "Wither",
"type": "bad"
},
{
"id": 20,
"name": "HealthBoost",
"displayName": "Health Boost",
"type": "good"
},
{
"id": 21,
"name": "Absorption",
"displayName": "Absorption",
"type": "good"
},
{
"id": 22,
"name": "Saturation",
"displayName": "Saturation",
"type": "good"
},
{
"id": 23,
"name": "Glowing",
"displayName": "Glowing",
"type": "bad"
},
{
"id": 24,
"name": "Levitation",
"displayName": "Levitation",
"type": "bad"
},
{
"id": 25,
"name": "Luck",
"displayName": "Luck",
"type": "good"
},
{
"id": 26,
"name": "BadLuck",
"displayName": "Bad Luck",
"type": "bad"
},
{
"id": 27,
"name": "SlowFalling",
"displayName": "Slow Falling",
"type": "good"
},
{
"id": 28,
"name": "ConduitPower",
"displayName": "Conduit Power",
"type": "good"
},
{
"id": 29,
"name": "DolphinsGrace",
"displayName": "Dolphin's Grace",
"type": "good"
},
{
"id": 30,
"name": "BadOmen",
"displayName": "Bad Omen",
"type": "bad"
},
{
"id": 31,
"name": "HeroOfTheVillage",
"displayName": "Hero of the Village",
"type": "good"
},
{
"id": 32,
"name": "Darkness",
"displayName": "Darkness",
"type": "bad"
},
{
"id": 33,
"name": "TrialOmen",
"displayName": "Trial Omen",
"type": "bad"
},
{
"id": 34,
"name": "RaidOmen",
"displayName": "Raid Omen",
"type": "bad"
},
{
"id": 35,
"name": "WindCharged",
"displayName": "Wind Charged",
"type": "bad"
},
{
"id": 36,
"name": "Weaving",
"displayName": "Weaving",
"type": "bad"
},
{
"id": 37,
"name": "Oozing",
"displayName": "Oozing",
"type": "bad"
},
{
"id": 38,
"name": "Infested",
"displayName": "Infested",
"type": "bad"
},
{
"id": 39,
"name": "BreathOfTheNautilus",
"displayName": "Breath of the Nautilus",
"type": "good"
}
]
@@ -0,0 +1,980 @@
[
{
"id": 0,
"name": "aqua_affinity",
"displayName": "Aqua Affinity",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "head_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 1,
"name": "bane_of_arthropods",
"displayName": "Bane of Arthropods",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"breach",
"density",
"impaling",
"sharpness",
"smite"
],
"category": "weapon",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 2,
"name": "binding_curse",
"displayName": "Curse of Binding",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": true,
"curse": true,
"exclude": [],
"category": "equippable",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 3,
"name": "blast_protection",
"displayName": "Blast Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"fire_protection",
"projectile_protection",
"protection"
],
"category": "armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 4,
"name": "breach",
"displayName": "Breach",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"density",
"impaling",
"sharpness",
"smite"
],
"category": "mace",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 5,
"name": "channeling",
"displayName": "Channeling",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"riptide"
],
"category": "trident",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 6,
"name": "density",
"displayName": "Density",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"impaling",
"sharpness",
"smite"
],
"category": "mace",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 7,
"name": "depth_strider",
"displayName": "Depth Strider",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"frost_walker"
],
"category": "foot_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 8,
"name": "efficiency",
"displayName": "Efficiency",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "mining",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 9,
"name": "feather_falling",
"displayName": "Feather Falling",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "foot_armor",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 10,
"name": "fire_aspect",
"displayName": "Fire Aspect",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "fire_aspect",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 11,
"name": "fire_protection",
"displayName": "Fire Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"blast_protection",
"projectile_protection",
"protection"
],
"category": "armor",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 12,
"name": "flame",
"displayName": "Flame",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "bow",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 13,
"name": "fortune",
"displayName": "Fortune",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"silk_touch"
],
"category": "mining_loot",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 14,
"name": "frost_walker",
"displayName": "Frost Walker",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [
"depth_strider"
],
"category": "foot_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 15,
"name": "impaling",
"displayName": "Impaling",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"density",
"sharpness",
"smite"
],
"category": "trident",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 16,
"name": "infinity",
"displayName": "Infinity",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"mending"
],
"category": "bow",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 17,
"name": "knockback",
"displayName": "Knockback",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "melee_weapon",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 18,
"name": "looting",
"displayName": "Looting",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "melee_weapon",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 19,
"name": "loyalty",
"displayName": "Loyalty",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"riptide"
],
"category": "trident",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 20,
"name": "luck_of_the_sea",
"displayName": "Luck of the Sea",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "fishing",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 21,
"name": "lunge",
"displayName": "Lunge",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "lunge",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 22,
"name": "lure",
"displayName": "Lure",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "fishing",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 23,
"name": "mending",
"displayName": "Mending",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [
"infinity"
],
"category": "durability",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 24,
"name": "multishot",
"displayName": "Multishot",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"piercing"
],
"category": "crossbow",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 25,
"name": "piercing",
"displayName": "Piercing",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"multishot"
],
"category": "crossbow",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 26,
"name": "power",
"displayName": "Power",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "bow",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 27,
"name": "projectile_protection",
"displayName": "Projectile Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"blast_protection",
"fire_protection",
"protection"
],
"category": "armor",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 28,
"name": "protection",
"displayName": "Protection",
"maxLevel": 4,
"minCost": {
"a": 3,
"b": 1
},
"maxCost": {
"a": 3,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"blast_protection",
"fire_protection",
"projectile_protection"
],
"category": "armor",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 29,
"name": "punch",
"displayName": "Punch",
"maxLevel": 2,
"minCost": {
"a": 1,
"b": 1
},
"maxCost": {
"a": 1,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "bow",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 30,
"name": "quick_charge",
"displayName": "Quick Charge",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "crossbow",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 31,
"name": "respiration",
"displayName": "Respiration",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "head_armor",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 32,
"name": "riptide",
"displayName": "Riptide",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"channeling",
"loyalty"
],
"category": "trident",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 33,
"name": "sharpness",
"displayName": "Sharpness",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"density",
"impaling",
"smite"
],
"category": "sharp_weapon",
"weight": 10,
"tradeable": true,
"discoverable": true
},
{
"id": 34,
"name": "silk_touch",
"displayName": "Silk Touch",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"fortune"
],
"category": "mining_loot",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 35,
"name": "smite",
"displayName": "Smite",
"maxLevel": 5,
"minCost": {
"a": 4,
"b": 1
},
"maxCost": {
"a": 4,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [
"bane_of_arthropods",
"breach",
"density",
"impaling",
"sharpness"
],
"category": "weapon",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 36,
"name": "soul_speed",
"displayName": "Soul Speed",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [],
"category": "foot_armor",
"weight": 1,
"tradeable": false,
"discoverable": false
},
{
"id": 37,
"name": "sweeping_edge",
"displayName": "Sweeping Edge",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "sweeping",
"weight": 2,
"tradeable": true,
"discoverable": true
},
{
"id": 38,
"name": "swift_sneak",
"displayName": "Swift Sneak",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [],
"category": "leg_armor",
"weight": 1,
"tradeable": false,
"discoverable": false
},
{
"id": 39,
"name": "thorns",
"displayName": "Thorns",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "armor",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 40,
"name": "unbreaking",
"displayName": "Unbreaking",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": false,
"curse": false,
"exclude": [],
"category": "durability",
"weight": 5,
"tradeable": true,
"discoverable": true
},
{
"id": 41,
"name": "vanishing_curse",
"displayName": "Curse of Vanishing",
"maxLevel": 1,
"minCost": {
"a": 0,
"b": 1
},
"maxCost": {
"a": 0,
"b": 1
},
"treasureOnly": true,
"curse": true,
"exclude": [],
"category": "vanishing",
"weight": 1,
"tradeable": true,
"discoverable": true
},
{
"id": 42,
"name": "wind_burst",
"displayName": "Wind Burst",
"maxLevel": 3,
"minCost": {
"a": 2,
"b": 1
},
"maxCost": {
"a": 2,
"b": 1
},
"treasureOnly": true,
"curse": false,
"exclude": [],
"category": "mace",
"weight": 2,
"tradeable": false,
"discoverable": false
}
]
File diff suppressed because it is too large Load Diff
+442
View File
@@ -0,0 +1,442 @@
[
{
"id": 894,
"name": "apple",
"stackSize": 64,
"displayName": "Apple",
"foodPoints": 4.0,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 948,
"name": "mushroom_stew",
"stackSize": 1,
"displayName": "Mushroom Stew",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 954,
"name": "bread",
"stackSize": 64,
"displayName": "Bread",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 984,
"name": "porkchop",
"stackSize": 64,
"displayName": "Raw Porkchop",
"foodPoints": 3.0,
"saturation": 1.8000001,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 985,
"name": "cooked_porkchop",
"stackSize": 64,
"displayName": "Cooked Porkchop",
"foodPoints": 8.0,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 987,
"name": "golden_apple",
"stackSize": 64,
"displayName": "Golden Apple",
"foodPoints": 4.0,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 988,
"name": "enchanted_golden_apple",
"stackSize": 64,
"displayName": "Enchanted Golden Apple",
"foodPoints": 4.0,
"saturation": 9.6,
"effectiveQuality": 13.6,
"saturationRatio": 2.4
},
{
"id": 1020,
"name": "pufferfish_bucket",
"stackSize": 1,
"displayName": "Bucket of Pufferfish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1021,
"name": "salmon_bucket",
"stackSize": 1,
"displayName": "Bucket of Salmon",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1022,
"name": "cod_bucket",
"stackSize": 1,
"displayName": "Bucket of Cod",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1023,
"name": "tropical_fish_bucket",
"stackSize": 1,
"displayName": "Bucket of Tropical Fish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1058,
"name": "cod",
"stackSize": 64,
"displayName": "Raw Cod",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1059,
"name": "salmon",
"stackSize": 64,
"displayName": "Raw Salmon",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1060,
"name": "tropical_fish",
"stackSize": 64,
"displayName": "Tropical Fish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1061,
"name": "pufferfish",
"stackSize": 64,
"displayName": "Pufferfish",
"foodPoints": 1.0,
"saturation": 0.2,
"effectiveQuality": 1.2,
"saturationRatio": 0.2
},
{
"id": 1062,
"name": "cooked_cod",
"stackSize": 64,
"displayName": "Cooked Cod",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 1063,
"name": "cooked_salmon",
"stackSize": 64,
"displayName": "Cooked Salmon",
"foodPoints": 6.0,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.6
},
{
"id": 1103,
"name": "cookie",
"stackSize": 64,
"displayName": "Cookie",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1107,
"name": "melon_slice",
"stackSize": 64,
"displayName": "Melon Slice",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1108,
"name": "dried_kelp",
"stackSize": 64,
"displayName": "Dried Kelp",
"foodPoints": 1.0,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 1111,
"name": "beef",
"stackSize": 64,
"displayName": "Raw Beef",
"foodPoints": 3.0,
"saturation": 1.8000001,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 1112,
"name": "cooked_beef",
"stackSize": 64,
"displayName": "Steak",
"foodPoints": 8.0,
"saturation": 12.8,
"effectiveQuality": 20.8,
"saturationRatio": 1.6
},
{
"id": 1113,
"name": "chicken",
"stackSize": 64,
"displayName": "Raw Chicken",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1114,
"name": "cooked_chicken",
"stackSize": 64,
"displayName": "Cooked Chicken",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 1115,
"name": "rotten_flesh",
"stackSize": 64,
"displayName": "Rotten Flesh",
"foodPoints": 4.0,
"saturation": 0.8,
"effectiveQuality": 4.8,
"saturationRatio": 0.2
},
{
"id": 1123,
"name": "spider_eye",
"stackSize": 64,
"displayName": "Spider Eye",
"foodPoints": 2.0,
"saturation": 3.2,
"effectiveQuality": 5.2,
"saturationRatio": 1.6
},
{
"id": 1228,
"name": "carrot",
"stackSize": 64,
"displayName": "Carrot",
"foodPoints": 3.0,
"saturation": 3.6000001,
"effectiveQuality": 6.6000004,
"saturationRatio": 1.2
},
{
"id": 1229,
"name": "potato",
"stackSize": 64,
"displayName": "Potato",
"foodPoints": 1.0,
"saturation": 0.6,
"effectiveQuality": 1.6,
"saturationRatio": 0.6
},
{
"id": 1230,
"name": "baked_potato",
"stackSize": 64,
"displayName": "Baked Potato",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 1231,
"name": "poisonous_potato",
"stackSize": 64,
"displayName": "Poisonous Potato",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1233,
"name": "golden_carrot",
"stackSize": 64,
"displayName": "Golden Carrot",
"foodPoints": 6.0,
"saturation": 14.400001,
"effectiveQuality": 20.400002,
"saturationRatio": 2.4
},
{
"id": 1242,
"name": "pumpkin_pie",
"stackSize": 64,
"displayName": "Pumpkin Pie",
"foodPoints": 8.0,
"saturation": 4.8,
"effectiveQuality": 12.8,
"saturationRatio": 0.6
},
{
"id": 1250,
"name": "rabbit",
"stackSize": 64,
"displayName": "Raw Rabbit",
"foodPoints": 3.0,
"saturation": 1.8000001,
"effectiveQuality": 4.8,
"saturationRatio": 0.6
},
{
"id": 1251,
"name": "cooked_rabbit",
"stackSize": 64,
"displayName": "Cooked Rabbit",
"foodPoints": 5.0,
"saturation": 6.0,
"effectiveQuality": 11.0,
"saturationRatio": 1.2
},
{
"id": 1252,
"name": "rabbit_stew",
"stackSize": 1,
"displayName": "Rabbit Stew",
"foodPoints": 10.0,
"saturation": 12.0,
"effectiveQuality": 22.0,
"saturationRatio": 1.2
},
{
"id": 1265,
"name": "mutton",
"stackSize": 64,
"displayName": "Raw Mutton",
"foodPoints": 2.0,
"saturation": 1.2,
"effectiveQuality": 3.2,
"saturationRatio": 0.6
},
{
"id": 1266,
"name": "cooked_mutton",
"stackSize": 64,
"displayName": "Cooked Mutton",
"foodPoints": 6.0,
"saturation": 9.6,
"effectiveQuality": 15.6,
"saturationRatio": 1.6
},
{
"id": 1284,
"name": "chorus_fruit",
"stackSize": 64,
"displayName": "Chorus Fruit",
"foodPoints": 4.0,
"saturation": 2.4,
"effectiveQuality": 6.4,
"saturationRatio": 0.6
},
{
"id": 1288,
"name": "beetroot",
"stackSize": 64,
"displayName": "Beetroot",
"foodPoints": 1.0,
"saturation": 1.2,
"effectiveQuality": 2.2,
"saturationRatio": 1.2
},
{
"id": 1290,
"name": "beetroot_soup",
"stackSize": 1,
"displayName": "Beetroot Soup",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 1341,
"name": "suspicious_stew",
"stackSize": 1,
"displayName": "Suspicious Stew",
"foodPoints": 6.0,
"saturation": 7.2000003,
"effectiveQuality": 13.200001,
"saturationRatio": 1.2
},
{
"id": 1374,
"name": "sweet_berries",
"stackSize": 64,
"displayName": "Sweet Berries",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1375,
"name": "glow_berries",
"stackSize": 64,
"displayName": "Glow Berries",
"foodPoints": 2.0,
"saturation": 0.4,
"effectiveQuality": 2.4,
"saturationRatio": 0.2
},
{
"id": 1382,
"name": "honey_bottle",
"stackSize": 16,
"displayName": "Honey Bottle",
"foodPoints": 6.0,
"saturation": 1.2,
"effectiveQuality": 7.2,
"saturationRatio": 0.2
}
]
@@ -0,0 +1,110 @@
[
{
"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"
},
{
"id": 16,
"name": "trumpet"
},
{
"id": 17,
"name": "trumpet_exposed"
},
{
"id": 18,
"name": "trumpet_oxidized"
},
{
"id": 19,
"name": "trumpet_weathered"
},
{
"id": 20,
"name": "zombie"
},
{
"id": 21,
"name": "skeleton"
},
{
"id": 22,
"name": "creeper"
},
{
"id": 23,
"name": "dragon"
},
{
"id": 24,
"name": "wither_skeleton"
},
{
"id": 25,
"name": "piglin"
},
{
"id": 26,
"name": "custom_head"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,233 @@
{
"default": {},
"leaves": {
"1106": 1.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5
},
"coweb": {
"1106": 15.0,
"912": 15.0,
"917": 15.0,
"922": 15.0,
"927": 15.0,
"932": 15.0,
"937": 15.0,
"942": 15.0
},
"plant": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5
},
"gourd": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5
},
"vine_or_glow_lichen": {
"1106": 2.0
},
"wool": {
"1106": 1.0
},
"sword_instantly_mines": {
"912": 2.0,
"917": 1.0,
"922": 4.0,
"927": 12.0,
"932": 6.0,
"937": 8.0,
"942": 9.0
},
"sword_efficient": {
"912": 2.0,
"917": 1.0,
"922": 4.0,
"927": 12.0,
"932": 6.0,
"937": 8.0,
"942": 9.0
},
"incorrect_for_wooden_tool": {
"913": 2.0,
"914": 2.0,
"915": 2.0,
"916": 2.0
},
"mineable/shovel": {
"913": 2.0,
"918": 1.0,
"923": 4.0,
"928": 12.0,
"933": 6.0,
"938": 8.0,
"943": 9.0
},
"mineable/pickaxe": {
"914": 2.0,
"919": 1.0,
"924": 4.0,
"929": 12.0,
"934": 6.0,
"939": 8.0,
"944": 9.0
},
"mineable/axe": {
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
},
"mineable/hoe": {
"916": 2.0,
"921": 1.0,
"926": 4.0,
"931": 12.0,
"936": 6.0,
"941": 8.0,
"946": 9.0
},
"incorrect_for_copper_tool": {
"918": 1.0,
"919": 1.0,
"920": 1.0,
"921": 1.0
},
"incorrect_for_stone_tool": {
"923": 4.0,
"924": 4.0,
"925": 4.0,
"926": 4.0
},
"incorrect_for_gold_tool": {
"928": 12.0,
"929": 12.0,
"930": 12.0,
"931": 12.0
},
"incorrect_for_iron_tool": {
"933": 6.0,
"934": 6.0,
"935": 6.0,
"936": 6.0
},
"incorrect_for_diamond_tool": {
"938": 8.0,
"939": 8.0,
"940": 8.0,
"941": 8.0
},
"incorrect_for_netherite_tool": {
"943": 9.0,
"944": 9.0,
"945": 9.0,
"946": 9.0
},
"plant;mineable/axe": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
},
"gourd;mineable/axe": {
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
},
"leaves;mineable/hoe": {
"1106": 1.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"916": 2.0,
"921": 1.0,
"926": 4.0,
"931": 12.0,
"936": 6.0,
"941": 8.0,
"946": 9.0
},
"leaves;mineable/axe;mineable/hoe": {
"1106": 1.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0,
"916": 2.0,
"921": 1.0,
"926": 4.0,
"931": 12.0,
"936": 6.0,
"941": 8.0,
"946": 9.0
},
"vine_or_glow_lichen;plant;mineable/axe": {
"1106": 2.0,
"912": 1.5,
"917": 1.5,
"922": 1.5,
"927": 1.5,
"932": 1.5,
"937": 1.5,
"942": 1.5,
"915": 2.0,
"920": 1.0,
"925": 4.0,
"930": 12.0,
"935": 6.0,
"940": 8.0,
"945": 9.0
}
}
@@ -0,0 +1,470 @@
[
{
"id": 0,
"name": "angry_villager"
},
{
"id": 1,
"name": "block"
},
{
"id": 2,
"name": "block_marker"
},
{
"id": 3,
"name": "bubble"
},
{
"id": 4,
"name": "cloud"
},
{
"id": 5,
"name": "copper_fire_flame"
},
{
"id": 6,
"name": "crit"
},
{
"id": 7,
"name": "damage_indicator"
},
{
"id": 8,
"name": "dragon_breath"
},
{
"id": 9,
"name": "dripping_lava"
},
{
"id": 10,
"name": "falling_lava"
},
{
"id": 11,
"name": "landing_lava"
},
{
"id": 12,
"name": "dripping_water"
},
{
"id": 13,
"name": "falling_water"
},
{
"id": 14,
"name": "dust"
},
{
"id": 15,
"name": "dust_color_transition"
},
{
"id": 16,
"name": "effect"
},
{
"id": 17,
"name": "elder_guardian"
},
{
"id": 18,
"name": "enchanted_hit"
},
{
"id": 19,
"name": "enchant"
},
{
"id": 20,
"name": "end_rod"
},
{
"id": 21,
"name": "entity_effect"
},
{
"id": 22,
"name": "explosion_emitter"
},
{
"id": 23,
"name": "explosion"
},
{
"id": 24,
"name": "gust"
},
{
"id": 25,
"name": "small_gust"
},
{
"id": 26,
"name": "gust_emitter_large"
},
{
"id": 27,
"name": "gust_emitter_small"
},
{
"id": 28,
"name": "sonic_boom"
},
{
"id": 29,
"name": "falling_dust"
},
{
"id": 30,
"name": "firework"
},
{
"id": 31,
"name": "fishing"
},
{
"id": 32,
"name": "flame"
},
{
"id": 33,
"name": "infested"
},
{
"id": 34,
"name": "cherry_leaves"
},
{
"id": 35,
"name": "pale_oak_leaves"
},
{
"id": 36,
"name": "tinted_leaves"
},
{
"id": 37,
"name": "sculk_soul"
},
{
"id": 38,
"name": "sculk_charge"
},
{
"id": 39,
"name": "sculk_charge_pop"
},
{
"id": 40,
"name": "soul_fire_flame"
},
{
"id": 41,
"name": "soul"
},
{
"id": 42,
"name": "flash"
},
{
"id": 43,
"name": "happy_villager"
},
{
"id": 44,
"name": "composter"
},
{
"id": 45,
"name": "heart"
},
{
"id": 46,
"name": "instant_effect"
},
{
"id": 47,
"name": "item"
},
{
"id": 48,
"name": "vibration"
},
{
"id": 49,
"name": "trail"
},
{
"id": 50,
"name": "pause_mob_growth"
},
{
"id": 51,
"name": "reset_mob_growth"
},
{
"id": 52,
"name": "item_slime"
},
{
"id": 53,
"name": "item_cobweb"
},
{
"id": 54,
"name": "item_snowball"
},
{
"id": 55,
"name": "large_smoke"
},
{
"id": 56,
"name": "lava"
},
{
"id": 57,
"name": "mycelium"
},
{
"id": 58,
"name": "note"
},
{
"id": 59,
"name": "poof"
},
{
"id": 60,
"name": "portal"
},
{
"id": 61,
"name": "rain"
},
{
"id": 62,
"name": "smoke"
},
{
"id": 63,
"name": "white_smoke"
},
{
"id": 64,
"name": "sneeze"
},
{
"id": 65,
"name": "spit"
},
{
"id": 66,
"name": "squid_ink"
},
{
"id": 67,
"name": "sweep_attack"
},
{
"id": 68,
"name": "totem_of_undying"
},
{
"id": 69,
"name": "underwater"
},
{
"id": 70,
"name": "splash"
},
{
"id": 71,
"name": "witch"
},
{
"id": 72,
"name": "bubble_pop"
},
{
"id": 73,
"name": "current_down"
},
{
"id": 74,
"name": "bubble_column_up"
},
{
"id": 75,
"name": "nautilus"
},
{
"id": 76,
"name": "dolphin"
},
{
"id": 77,
"name": "campfire_cosy_smoke"
},
{
"id": 78,
"name": "campfire_signal_smoke"
},
{
"id": 79,
"name": "dripping_honey"
},
{
"id": 80,
"name": "falling_honey"
},
{
"id": 81,
"name": "landing_honey"
},
{
"id": 82,
"name": "falling_nectar"
},
{
"id": 83,
"name": "falling_spore_blossom"
},
{
"id": 84,
"name": "ash"
},
{
"id": 85,
"name": "crimson_spore"
},
{
"id": 86,
"name": "warped_spore"
},
{
"id": 87,
"name": "spore_blossom_air"
},
{
"id": 88,
"name": "dripping_obsidian_tear"
},
{
"id": 89,
"name": "falling_obsidian_tear"
},
{
"id": 90,
"name": "landing_obsidian_tear"
},
{
"id": 91,
"name": "reverse_portal"
},
{
"id": 92,
"name": "white_ash"
},
{
"id": 93,
"name": "small_flame"
},
{
"id": 94,
"name": "snowflake"
},
{
"id": 95,
"name": "dripping_dripstone_lava"
},
{
"id": 96,
"name": "falling_dripstone_lava"
},
{
"id": 97,
"name": "dripping_dripstone_water"
},
{
"id": 98,
"name": "falling_dripstone_water"
},
{
"id": 99,
"name": "glow_squid_ink"
},
{
"id": 100,
"name": "glow"
},
{
"id": 101,
"name": "wax_on"
},
{
"id": 102,
"name": "wax_off"
},
{
"id": 103,
"name": "electric_spark"
},
{
"id": 104,
"name": "scrape"
},
{
"id": 105,
"name": "shriek"
},
{
"id": 106,
"name": "egg_crack"
},
{
"id": 107,
"name": "dust_plume"
},
{
"id": 108,
"name": "trial_spawner_detection"
},
{
"id": 109,
"name": "trial_spawner_detection_ominous"
},
{
"id": 110,
"name": "vault_connection"
},
{
"id": 111,
"name": "dust_pillar"
},
{
"id": 112,
"name": "ominous_spawning"
},
{
"id": 113,
"name": "raid_omen"
},
{
"id": 114,
"name": "trial_omen"
},
{
"id": 115,
"name": "block_crumble"
},
{
"id": 116,
"name": "firefly"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

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