Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ede9a47ca2 | ||
|
|
2fb290572a | ||
|
|
021b8ddc1a | ||
|
|
05e8da2ff4 | ||
|
|
a8936d92a5 | ||
|
|
c56898e787 | ||
|
|
c483bf9553 | ||
|
|
b5ee17d1ae | ||
|
|
57cef25e27 | ||
|
|
148302c94d | ||
|
|
02c402251d | ||
|
|
c800c5d471 | ||
|
|
477f51cce7 | ||
|
|
60103ebf47 | ||
|
|
21eeebf0f7 | ||
|
|
bb6f6548d5 | ||
|
|
d6c07cf428 | ||
|
|
e98921755d | ||
|
|
60383fede1 | ||
|
|
3bfa70d384 | ||
|
|
60147fd4b6 | ||
|
|
fe51287cc6 | ||
|
|
a44c5f8606 | ||
|
|
d5979b2c3d | ||
|
|
4b95ea9ae2 | ||
|
|
a80fd29297 | ||
|
|
589f35d147 | ||
|
|
c7b5f6ba0f | ||
|
|
0600315e69 | ||
|
|
12005df68b | ||
|
|
600842a679 | ||
|
|
c93d907d46 | ||
|
|
be6d2fb461 | ||
|
|
b2df88203d | ||
|
|
2ed4498181 | ||
|
|
0316b0aa09 | ||
|
|
62d12386e1 | ||
|
|
00ea02a529 | ||
|
|
e5231dfdb6 | ||
|
|
3b1b436ecf | ||
|
|
47180bf650 | ||
|
|
325db98b99 | ||
|
|
ceae543352 | ||
|
|
aef9615476 | ||
|
|
5d3860b91e | ||
|
|
94d15258d8 | ||
|
|
ab03b36b4f | ||
|
|
da0c3c6f14 | ||
|
|
b01e482bc5 | ||
|
|
c560966177 | ||
|
|
66f86c5599 | ||
|
|
5a2bfcb1c1 | ||
|
|
b34f8d68ff | ||
|
|
c98472165b | ||
|
|
4888a07ebb | ||
|
|
a9bf30a609 | ||
|
|
35030601e1 | ||
|
|
66f32b4cd2 | ||
|
|
e6d08dccbb | ||
|
|
8a4f203621 | ||
|
|
69e230a79c | ||
|
|
1a5f4f4f8e | ||
|
|
d0844dd6b5 | ||
|
|
d8e36aa6fa | ||
|
|
6781e4c16d | ||
|
|
fccba0248a | ||
|
|
52b3c1ce17 | ||
|
|
3511cd2699 | ||
|
|
6dddccab7f | ||
|
|
9109d77f98 | ||
|
|
9eec1e8370 | ||
|
|
96481da0a4 | ||
|
|
159437c1ca | ||
|
|
3d34ad59e9 | ||
|
|
4878c6cc7b | ||
|
|
719a3bacd8 | ||
|
|
ce0c58e7c5 | ||
|
|
8a4e44760e | ||
|
|
e810a60848 | ||
|
|
0981339028 | ||
|
|
7746dd8ee9 | ||
|
|
378b78312e | ||
|
|
bd3139754d | ||
|
|
841d91b91d | ||
|
|
895ec53698 | ||
|
|
f6001c8b22 | ||
|
|
d87c362270 | ||
|
|
236e414242 | ||
|
|
5222390b65 | ||
|
|
dc04fdc7d0 | ||
|
|
8de34dfda1 | ||
|
|
997594d7c3 | ||
|
|
c83a777eac | ||
|
|
65fea61667 | ||
|
|
c2777f2ca9 | ||
|
|
dcb42f1970 | ||
|
|
7a2081f0a0 | ||
|
|
acc583f694 | ||
|
|
76409d07a3 | ||
|
|
bb89730781 | ||
|
|
9f6b1f6bcf | ||
|
|
1b8a9677c6 | ||
|
|
79ab13ca4b | ||
|
|
3cc414185a | ||
|
|
fe4a17dce2 | ||
|
|
891551f9dd | ||
|
|
8fb48c6ea9 | ||
|
|
ec25c28061 | ||
|
|
45287f47d2 | ||
|
|
4cc4b6af5b | ||
|
|
09e6760d61 | ||
|
|
ca74a3c3d4 | ||
|
|
fbc3693219 | ||
|
|
fb69fd93ec | ||
|
|
a3a3c3714e | ||
|
|
9294631c6c | ||
|
|
293f0b1eed | ||
|
|
272dcb4d36 | ||
|
|
abb0fa4d37 | ||
|
|
e5212624af | ||
|
|
35772aca03 | ||
|
|
819d89b26e | ||
|
|
958102e43c | ||
|
|
f749d3bfc5 | ||
|
|
d207cf52cf | ||
|
|
420ec5611c | ||
|
|
4bfaf9b7c5 | ||
|
|
48beb861e8 | ||
|
|
9fd2f517d9 | ||
|
|
1b5af63b75 | ||
|
|
dfb847eb3e | ||
|
|
322bd77f7f | ||
|
|
aefe850281 | ||
|
|
57f88f2176 | ||
|
|
8dd566c0da | ||
|
|
e386a45d96 | ||
|
|
8f771166a6 | ||
|
|
5d6a1a25ea | ||
|
|
ca33185f20 | ||
|
|
e921e9e9d2 | ||
|
|
7337068d86 | ||
|
|
9983062522 | ||
|
|
4fd5324064 | ||
|
|
df0e5e354b | ||
|
|
23b5a5d9b7 | ||
|
|
46770ed980 | ||
|
|
6179c5f6b6 | ||
|
|
f758a10575 | ||
|
|
41d1ab4c45 | ||
|
|
032fa26927 | ||
|
|
f7401a287e | ||
|
|
2d1e8ef4f6 | ||
|
|
2802cc36ce | ||
|
|
ea024fe808 |
@@ -0,0 +1,6 @@
|
||||
**/*_test.go export-ignore
|
||||
**/testdata export-ignore
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.tmcpr filter=lfs diff=lfs merge=lfs -text
|
||||
*.mcpr filter=lfs diff=lfs merge=lfs -text
|
||||
*.mca filter=lfs diff=lfs merge=lfs -text
|
||||
@@ -0,0 +1,35 @@
|
||||
# This workflow will build a golang project
|
||||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
|
||||
|
||||
name: Go
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout with LFS
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
lfs: true
|
||||
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.26.2'
|
||||
|
||||
- name: Build
|
||||
run: go build -v ./...
|
||||
|
||||
- name: Vet
|
||||
run: go vet -v ./...
|
||||
|
||||
- name: Test
|
||||
run: go test -v ./...
|
||||
@@ -2,3 +2,4 @@
|
||||
.idea/
|
||||
.failed_packets/
|
||||
tools/.*/
|
||||
.vscode/
|
||||
@@ -1,3 +0,0 @@
|
||||
[submodule "data/minecraft-data"]
|
||||
path = data/minecraft-data
|
||||
url = git@github.com:PrismarineJS/minecraft-data.git
|
||||
@@ -0,0 +1,5 @@
|
||||
# STROM
|
||||
|
||||
# THIS IS WORK IN PROGRESS AND THE API WILL BREAK AS LONG AS THE THE PACKAGE VERSION IS v0.x.x
|
||||
|
||||
feel free to contact me on [discord](https://discord.gg/n2Vjc2vcMf)
|
||||
+64
-37
@@ -9,32 +9,40 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/admin-else/strom/crypto"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type Servers struct {
|
||||
ServicesHost string
|
||||
SessionHost string
|
||||
ProfilesHost string
|
||||
}
|
||||
|
||||
var DefaultServers = &Servers{
|
||||
ServicesHost: "https://api.minecraftservices.com",
|
||||
SessionHost: "https://sessionserver.mojang.com",
|
||||
ProfilesHost: "https://api.mojang.com",
|
||||
}
|
||||
|
||||
type Account struct {
|
||||
*Servers
|
||||
Name string
|
||||
Uuid uuid.UUID
|
||||
Ygg string
|
||||
}
|
||||
|
||||
const (
|
||||
BaseUrlApi = "https://api.minecraftservices.com"
|
||||
)
|
||||
|
||||
func (a *Account) doMcApiRequest(method string, url string, from any, to any) (err error) {
|
||||
var b []byte
|
||||
if method != "GET" {
|
||||
b, err = json.Marshal(from)
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
r, err := http.NewRequest(method, url, bytes.NewReader(b))
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
r.Header.Set("Content-Type", "application/json")
|
||||
@@ -44,21 +52,22 @@ func (a *Account) doMcApiRequest(method string, url string, from any, to any) (e
|
||||
|
||||
resp, err := http.DefaultClient.Do(r)
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if !(resp.StatusCode >= 200 && resp.StatusCode <= 299) {
|
||||
return fmt.Errorf("bad status code %v", resp.StatusCode)
|
||||
}
|
||||
b, err = io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
err = json.Unmarshal(b, to)
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
||||
type PlayerKeys struct {
|
||||
@@ -73,7 +82,7 @@ type PlayerKeys struct {
|
||||
}
|
||||
|
||||
func (a *Account) FetchKeys() (keys PlayerKeys, err error) {
|
||||
err = a.doMcApiRequest("POST", BaseUrlApi+"/player/certificates", nil, &keys)
|
||||
err = a.doMcApiRequest("POST", a.ServicesHost+"/player/certificates", nil, &keys)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -90,10 +99,12 @@ func (a *Account) JoinServer(serverId string) (err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
resp, err := http.Post("https://sessionserver.mojang.com/session/minecraft/join", "application/json", bytes.NewReader(body))
|
||||
resp, err := http.Post(a.SessionHost+"/session/minecraft/join", "application/json", bytes.NewReader(body))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 204 {
|
||||
body, err = io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
@@ -112,17 +123,10 @@ type NameChangResp struct {
|
||||
}
|
||||
|
||||
func (a *Account) NameChangeInfo() (r NameChangResp, err error) {
|
||||
err = a.doMcApiRequest("GET", "https://api.minecraftservices.com/minecraft/profile/namechange", nil, &r)
|
||||
err = a.doMcApiRequest("GET", a.ServicesHost+"/minecraft/profile/namechange", nil, &r)
|
||||
return
|
||||
}
|
||||
|
||||
func NewOfflineAccount(name string) *Account {
|
||||
return &Account{
|
||||
Name: name,
|
||||
Uuid: crypto.FromOfflinePlayer(name),
|
||||
}
|
||||
}
|
||||
|
||||
// PlayerProfile represents the player's profile information
|
||||
type PlayerProfile struct {
|
||||
ID string `json:"id"`
|
||||
@@ -143,7 +147,7 @@ type PlayerProfile struct {
|
||||
|
||||
// QueryProfile queries the player's profile
|
||||
func (a *Account) QueryProfile() (profile PlayerProfile, err error) {
|
||||
err = a.doMcApiRequest("GET", BaseUrlApi+"/minecraft/profile", nil, &profile)
|
||||
err = a.doMcApiRequest("GET", a.ServicesHost+"/minecraft/profile", nil, &profile)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -181,7 +185,7 @@ type PlayerAttributes struct {
|
||||
|
||||
// QueryAttributes queries the player's attributes
|
||||
func (a *Account) QueryAttributes() (attrs PlayerAttributes, err error) {
|
||||
err = a.doMcApiRequest("GET", BaseUrlApi+"/player/attributes", nil, &attrs)
|
||||
err = a.doMcApiRequest("GET", a.ServicesHost+"/player/attributes", nil, &attrs)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -194,7 +198,7 @@ type ModifyAttributesRequest struct {
|
||||
|
||||
// ModifyAttributes modifies the player's attributes
|
||||
func (a *Account) ModifyAttributes(req ModifyAttributesRequest) (attrs PlayerAttributes, err error) {
|
||||
err = a.doMcApiRequest("POST", BaseUrlApi+"/player/attributes", req, &attrs)
|
||||
err = a.doMcApiRequest("POST", a.ServicesHost+"/player/attributes", req, &attrs)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -205,24 +209,23 @@ type BlockedUsers struct {
|
||||
|
||||
// GetBlocklist gets the list of blocked users
|
||||
func (a *Account) GetBlocklist() (blocklist BlockedUsers, err error) {
|
||||
err = a.doMcApiRequest("GET", BaseUrlApi+"/privacy/blocklist", nil, &blocklist)
|
||||
err = a.doMcApiRequest("GET", a.ServicesHost+"/privacy/blocklist", nil, &blocklist)
|
||||
return
|
||||
}
|
||||
|
||||
// CheckNameAvailability checks if a name is available
|
||||
type NameAvailability struct {
|
||||
Status string `json:"status"` // DUPLICATE, AVAILABLE, NOT_ALLOWED
|
||||
}
|
||||
|
||||
// CheckNameAvailability checks if a name is available
|
||||
func (a *Account) CheckNameAvailability(name string) (avail NameAvailability, err error) {
|
||||
err = a.doMcApiRequest("GET", BaseUrlApi+"/minecraft/profile/name/"+name+"/available", nil, &avail)
|
||||
err = a.doMcApiRequest("GET", a.ServicesHost+"/minecraft/profile/name/"+name+"/available", nil, &avail)
|
||||
return
|
||||
}
|
||||
|
||||
// ChangeName changes the player's name
|
||||
func (a *Account) ChangeName(newName string) (profile PlayerProfile, err error) {
|
||||
err = a.doMcApiRequest("PUT", BaseUrlApi+"/minecraft/profile/name/"+newName, nil, &profile)
|
||||
err = a.doMcApiRequest("PUT", a.ServicesHost+"/minecraft/profile/name/"+newName, nil, &profile)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -234,19 +237,19 @@ type ChangeSkinRequest struct {
|
||||
|
||||
// ChangeSkin changes the player's skin
|
||||
func (a *Account) ChangeSkin(req ChangeSkinRequest) (profile PlayerProfile, err error) {
|
||||
err = a.doMcApiRequest("POST", BaseUrlApi+"/minecraft/profile/skins", req, &profile)
|
||||
err = a.doMcApiRequest("POST", a.ServicesHost+"/minecraft/profile/skins", req, &profile)
|
||||
return
|
||||
}
|
||||
|
||||
// ResetSkin resets the player's skin to default
|
||||
func (a *Account) ResetSkin() (profile PlayerProfile, err error) {
|
||||
err = a.doMcApiRequest("DELETE", BaseUrlApi+"/minecraft/profile/skins/active", nil, &profile)
|
||||
err = a.doMcApiRequest("DELETE", a.ServicesHost+"/minecraft/profile/skins/active", nil, &profile)
|
||||
return
|
||||
}
|
||||
|
||||
// HideCape hides the player's active cape
|
||||
func (a *Account) HideCape() (profile PlayerProfile, err error) {
|
||||
err = a.doMcApiRequest("DELETE", BaseUrlApi+"/minecraft/profile/capes/active", nil, &profile)
|
||||
err = a.doMcApiRequest("DELETE", a.ServicesHost+"/minecraft/profile/capes/active", nil, &profile)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -258,29 +261,53 @@ type ShowCapeRequest struct {
|
||||
// ShowCape shows a specific cape
|
||||
func (a *Account) ShowCape(capeID string) (profile PlayerProfile, err error) {
|
||||
req := ShowCapeRequest{CapeID: capeID}
|
||||
err = a.doMcApiRequest("PUT", BaseUrlApi+"/minecraft/profile/capes/active", req, &profile)
|
||||
err = a.doMcApiRequest("PUT", a.ServicesHost+"/minecraft/profile/capes/active", req, &profile)
|
||||
return
|
||||
}
|
||||
|
||||
// CheckGiftCodeValidity checks if a gift code is valid
|
||||
func (a *Account) CheckGiftCodeValidity(giftCode string) (valid bool, err error) {
|
||||
url := BaseUrlApi + "/productvoucher/giftcode"
|
||||
url := a.ServicesHost + "/productvoucher/" + giftCode
|
||||
r, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return false, err
|
||||
return
|
||||
}
|
||||
|
||||
r.Header.Set("Authorization", "Bearer "+a.Ygg)
|
||||
|
||||
resp, err := http.DefaultClient.Do(r)
|
||||
if err != nil {
|
||||
return false, err
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Returns HTTP 200 or 204 if valid, 404 if invalid
|
||||
if resp.StatusCode == 200 || resp.StatusCode == 204 {
|
||||
return true, nil
|
||||
valid = true
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func NewAccountFromYGG(ygg string) (a *Account, err error) {
|
||||
a = &Account{
|
||||
Ygg: ygg,
|
||||
Servers: DefaultServers,
|
||||
}
|
||||
p, err := a.QueryProfile()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
a.Name = p.Name
|
||||
a.Uuid, err = uuid.Parse(strings.ReplaceAll(p.ID, "-", ""))
|
||||
return
|
||||
}
|
||||
|
||||
func NewAccount(name string, uuid uuid.UUID, ygg string) (a *Account) {
|
||||
return &Account{
|
||||
Name: name,
|
||||
Uuid: uuid,
|
||||
Ygg: ygg,
|
||||
Servers: DefaultServers,
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package api
|
||||
|
||||
import "github.com/admin-else/strom/crypto"
|
||||
|
||||
func NewOfflineAccount(name string) *Account {
|
||||
return &Account{
|
||||
Name: name,
|
||||
Uuid: crypto.FromOfflinePlayer(name),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func BlockedServers() (s []string, err error) {
|
||||
resp, err := http.Get("https://sessionserver.mojang.com/blockedservers")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
d, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s = strings.Split(string(d), "\n")
|
||||
return
|
||||
}
|
||||
|
||||
type ProfileProperty struct {
|
||||
Name string `json:"name"`
|
||||
Signature string `json:"signature,omitempty"`
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
type ProfileResp struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Legacy bool `json:"legacy"`
|
||||
Properties []ProfileProperty `json:"properties"`
|
||||
}
|
||||
|
||||
func HasJoined(name, server, ip string) (p ProfileResp, err error) {
|
||||
url := "https://sessionserver.mojang.com/session/minecraft/hasJoined?username=" + name + "&serverId=" + server
|
||||
if ip != "" {
|
||||
url += "&ip=" + ip
|
||||
}
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != 200 {
|
||||
err = fmt.Errorf("bad status code %v", resp.StatusCode)
|
||||
return
|
||||
}
|
||||
err = json.NewDecoder(resp.Body).Decode(&p)
|
||||
return
|
||||
}
|
||||
|
||||
type MojangPublicKeysResp struct {
|
||||
ProfilePropertyKeys []string `json:"profilePropertyKeys"`
|
||||
PlayerCertificateKeys []string `json:"playerCertificateKeys"`
|
||||
|
||||
// AuthenticationKeys are undocumented by wiki.vg but they exist as of the time of writing so ill include them
|
||||
AuthenticationKeys []string `json:"authenticationKeys"`
|
||||
}
|
||||
|
||||
func MojangPublicKeys() (keys MojangPublicKeysResp, err error) {
|
||||
resp, err := http.Get("https://sessionserver.mojang.com/session/minecraft/profile/public_key_by_token")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
err = json.NewDecoder(resp.Body).Decode(&keys)
|
||||
return
|
||||
}
|
||||
|
||||
func Profile(id string, unsinged bool) (p ProfileResp, err error) {
|
||||
url := "https://sessionserver.mojang.com/session/minecraft/profile/" + id
|
||||
if !unsinged {
|
||||
url += "?unsigned=false"
|
||||
}
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
err = json.NewDecoder(resp.Body).Decode(&p)
|
||||
return
|
||||
}
|
||||
|
||||
type IdName struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func NameToId(name string) (idName IdName, err error) {
|
||||
// may also use these:
|
||||
//https://api.mojang.com/users/profiles/minecraft/<player name>
|
||||
//https://api.minecraftservices.com/minecraft/profile/lookup/name/<player name>
|
||||
//https://api.mojang.com/minecraft/profile/lookup/name/<player name>
|
||||
resp, err := http.Get("https://api.minecraftservices.com/minecraft/profile/lookup/name/" + name)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
err = json.NewDecoder(resp.Body).Decode(&idName)
|
||||
return
|
||||
}
|
||||
|
||||
func NameToIdBulk(names []string) (idNames []IdName, err error) {
|
||||
b := bytes.NewBuffer(nil)
|
||||
err = json.NewEncoder(b).Encode(names)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// may also use these:
|
||||
//https://api.mojang.com/profiles/minecraft
|
||||
//https://api.minecraftservices.com/minecraft/profile/lookup/bulk/byname
|
||||
//https://api.mojang.com/minecraft/profile/lookup/bulk/byname
|
||||
r, err := http.NewRequest("POST", "https://api.minecraftservices.com/minecraft/profile/lookup/bulk/byname", b)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r.Header.Set("Content-Type", "application/json")
|
||||
resp, err := http.DefaultClient.Do(r)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
err = json.NewDecoder(resp.Body).Decode(&idNames)
|
||||
return
|
||||
}
|
||||
+8
-5
@@ -1,6 +1,7 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
|
||||
"github.com/admin-else/strom/proto"
|
||||
@@ -22,15 +23,17 @@ func Connect(addr string) (ret *proto.Conn, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func ConnectVersionLess(addr string) (ret *proto.Conn, err error) {
|
||||
return ConnectVersionLessCtx(context.Background(), addr)
|
||||
}
|
||||
|
||||
// ConnectVersionLess connects to the given address without setting the version you should set it
|
||||
// when using this function.
|
||||
// You must close the connection when you're done with it
|
||||
func ConnectVersionLess(addr string) (ret *proto.Conn, err error) {
|
||||
ret = &proto.Conn{}
|
||||
ret.SetState(proto_base.Handshaking)
|
||||
ret.SetCompressionThreshold(-1)
|
||||
func ConnectVersionLessCtx(ctx context.Context, addr string) (ret *proto.Conn, err error) {
|
||||
ret = proto.NewConnCtx(ctx)
|
||||
ret.Actor = proto_base.Client
|
||||
ret.Conn, err = net.Dial("tcp", addr)
|
||||
ret.Conn, err = (&net.Dialer{}).DialContext(ctx, "tcp", addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package client
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"github.com/admin-else/strom/event"
|
||||
"github.com/admin-else/strom/proto"
|
||||
@@ -19,8 +18,8 @@ func (c *ConfigIgnorer) OnStart() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (c *ConfigIgnorer) Default(event event.Anything) (err error) {
|
||||
slog.Debug("Config ignorer", "packet", fmt.Sprintf("%#v", event))
|
||||
func (c *ConfigIgnorer) Default(e event.Anything) (err error) {
|
||||
c.Log.Debug("Config ignorer", "packet", fmt.Sprintf("%#v", e))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -56,7 +55,7 @@ func IgnoreConfig(c *proto.Conn) (err error) {
|
||||
ci.RegisterUntilLatest(ci.OnPing)
|
||||
ci.RegisterUntilLatest(ci.OnKeepAlive)
|
||||
|
||||
err = ci.Start()
|
||||
err = ci.StartConn()
|
||||
if err != nil {
|
||||
err = errors.Join(err, errors.New("failed to ignore config"))
|
||||
}
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ func DoDnsSimple(in string) (out string, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
out = in
|
||||
out = host + ":" + strconv.Itoa(int(portN))
|
||||
if portN != 25565 {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ func MakeHandshakePacket(c *proto.Conn, nextState proto_base.State) (p *v1_21_8.
|
||||
return MakeHandshakePacketAddr(c, nextState, c.RemoteAddr().String())
|
||||
}
|
||||
|
||||
// MakeHandshakePacketAddr gets a custom addr
|
||||
func MakeHandshakePacketAddr(s *proto.Conn, nextState proto_base.State, addr string) (p *v1_21_8.HandshakingToServerPacketSetProtocol, err error) {
|
||||
p = &v1_21_8.HandshakingToServerPacketSetProtocol{NextState: int32(nextState), ProtocolVersion: s.ProtocolVersion}
|
||||
var portStr string
|
||||
|
||||
+22
-15
@@ -6,7 +6,6 @@ import (
|
||||
"crypto/x509"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/admin-else/strom/api"
|
||||
"github.com/admin-else/strom/crypto"
|
||||
@@ -42,11 +41,10 @@ func (k KickedDuringLoginErr) Error() string {
|
||||
}
|
||||
|
||||
func (s *LoginClient) OnDefault(event event.Unhandled) (err error) {
|
||||
err = fmt.Errorf("unexpected event: %#v", event)
|
||||
if _, ok := event.Val.(proto_base.EncodeDecodeAble); !ok {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LoginClient) OnCycle(_ event.Tick) (err error) {
|
||||
}
|
||||
s.Log.Warn("unexpected packet during login client", "packet", event.Val)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -127,18 +125,17 @@ func (s *LoginClient) OnStart() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func Login(c *proto.Conn, account *api.Account) (err error) {
|
||||
func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
|
||||
lc := &LoginClient{
|
||||
Conn: c,
|
||||
Account: account,
|
||||
}
|
||||
lc.RegisterCritical(lc.OnDefault)
|
||||
lc.RegisterCritical(lc.OnCycle)
|
||||
lc.RegisterCritical(lc.OnClose)
|
||||
lc.RegisterUntilLatest(lc.OnCompress)
|
||||
lc.RegisterUntilLatest(lc.OnEncrypt)
|
||||
lc.RegisterUntilLatest(lc.OnDisconnect)
|
||||
lc.RegisterUntilLatest(lc.OnSuccess)
|
||||
lc.RegisterCriticalUntilLatest(lc.OnCompress)
|
||||
lc.RegisterCriticalUntilLatest(lc.OnEncrypt)
|
||||
lc.RegisterCriticalUntilLatest(lc.OnDisconnect)
|
||||
lc.RegisterCriticalUntilLatest(lc.OnSuccess)
|
||||
|
||||
p, err := MakeHandshakePacket(lc.Conn, proto_base.Login)
|
||||
if err != nil {
|
||||
@@ -152,21 +149,31 @@ func Login(c *proto.Conn, account *api.Account) (err error) {
|
||||
lc.SetState(proto_base.Login)
|
||||
err = lc.Send(&v1_21_8.LoginToServerPacketLoginStart{Username: lc.Account.Name, PlayerUUID: lc.Account.Uuid})
|
||||
|
||||
err = lc.Start()
|
||||
err = lc.StartConn()
|
||||
if err != nil {
|
||||
err = errors.Join(FailedToLoginErr, err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func ConnectAndLogin(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||
func LoginNoSrv(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||
c, err = Connect(connectTo)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = Login(c, account)
|
||||
err = LoginRaw(c, account)
|
||||
return
|
||||
}
|
||||
|
||||
func Login(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||
connectTo, err = DoDnsSimple(connectTo)
|
||||
if err != nil {
|
||||
err = errors.Join(FailedToLoginErr, err)
|
||||
return
|
||||
}
|
||||
c, err = Connect(connectTo)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = LoginRaw(c, account)
|
||||
return
|
||||
}
|
||||
|
||||
+18
-11
@@ -1,6 +1,7 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
@@ -19,10 +20,6 @@ type StatusClient struct {
|
||||
DoPingRoundTripTime bool
|
||||
}
|
||||
|
||||
func (s *StatusClient) OnStart() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *StatusClient) OnStatus(p *v1_21_8.StatusToClientPacketServerInfo) (err error) {
|
||||
s.Status = p.Response
|
||||
s.PingSendTime = time.Now()
|
||||
@@ -41,8 +38,9 @@ func (s *StatusClient) OnPong(p *v1_21_8.StatusToClientPacketPing) (err error) {
|
||||
}
|
||||
|
||||
// StatusRaw returns a StatusClient that is not connected to a server.
|
||||
// So ignore the resource leak warning. And maybe attach a warn ignore comment
|
||||
func StatusRaw(addr string) (s *StatusClient, err error) {
|
||||
// So ignore the resource leak warning. And maybe attach a warn ignore comment.
|
||||
// It does not resolve SRV records.
|
||||
func StatusRaw(ctx context.Context, addr string) (s *StatusClient, err error) {
|
||||
c, err := ConnectVersionLess(addr)
|
||||
if err != nil {
|
||||
return
|
||||
@@ -55,9 +53,8 @@ func StatusRaw(addr string) (s *StatusClient, err error) {
|
||||
s = &StatusClient{
|
||||
Conn: c,
|
||||
}
|
||||
s.Loop = event.NewLoop()
|
||||
s.RegisterUntilLatest(s.OnStatus)
|
||||
s.RegisterUntilLatest(s.OnPong)
|
||||
s.RegisterCriticalUntilLatest(s.OnStatus)
|
||||
s.RegisterCriticalUntilLatest(s.OnPong)
|
||||
|
||||
p, err := MakeHandshakePacketAddr(s.Conn, proto_base.Status, addr)
|
||||
if err != nil {
|
||||
@@ -74,11 +71,21 @@ func StatusRaw(addr string) (s *StatusClient, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func Status(addr string) (status server.StatusResponse, err error) {
|
||||
s, err := StatusRaw(addr)
|
||||
// StatusNoDns is like Status but does not resolve SRV records.
|
||||
func StatusNoDns(addr string) (status server.StatusResponse, err error) {
|
||||
s, err := StatusRaw(context.Background(), addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = json.Unmarshal([]byte(s.Status), &status)
|
||||
return
|
||||
}
|
||||
|
||||
// Status resolves the status of the minecraft server at the given address.
|
||||
func Status(addr string) (status server.StatusResponse, err error) {
|
||||
addr, err = DoDnsSimple(addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return StatusNoDns(addr)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"flag"
|
||||
"os"
|
||||
|
||||
"github.com/admin-else/strom/api"
|
||||
)
|
||||
|
||||
var cmd = flag.NewFlagSet("api", flag.ContinueOnError)
|
||||
var tokenFlag = cmd.String("token", os.Getenv("MC_TOKEN"), "token to use")
|
||||
|
||||
var renameFlag = cmd.String("rename", "", "rename the player")
|
||||
|
||||
var uuidFlag = cmd.String("uuid", "", "get data about player with uuid")
|
||||
var nameFlag = cmd.String("name", "", "get data about player with name")
|
||||
var unsignedFlag = cmd.Bool("unsigned", true, "use unsigned mode for properties signatures")
|
||||
|
||||
var PleaseProvideArgumentErr = errors.New("please provide an argument")
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
a := &api.Account{}
|
||||
if *tokenFlag != "" {
|
||||
a, err = api.NewAccountFromYGG(*tokenFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
var data any
|
||||
if *renameFlag != "" {
|
||||
data, err = a.ChangeName(*renameFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else if *uuidFlag != "" || *nameFlag != "" {
|
||||
if *nameFlag != "" {
|
||||
var idName api.IdName
|
||||
idName, err = api.NameToId(*nameFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
*uuidFlag = idName.Id
|
||||
}
|
||||
data, err = api.Profile(*uuidFlag, *unsignedFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
err = PleaseProvideArgumentErr
|
||||
return
|
||||
}
|
||||
err = json.NewEncoder(os.Stdout).Encode(data)
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"maps"
|
||||
"os"
|
||||
"slices"
|
||||
|
||||
"github.com/admin-else/strom/data"
|
||||
"github.com/admin-else/strom/proto_generated"
|
||||
"github.com/admin-else/strom/util"
|
||||
)
|
||||
|
||||
// strom data 1.21.11 blocks id 0 name => air
|
||||
// {
|
||||
// "id": 0,
|
||||
// "name": "air",
|
||||
// "displayName": "Air",
|
||||
// "hardness": 0.0,
|
||||
// "resistance": 0.0,
|
||||
// "stackSize": 64,
|
||||
// "diggable": false,
|
||||
// "material": "default",
|
||||
// "transparent": true,
|
||||
// "emitLight": 0,
|
||||
// "filterLight": 0,
|
||||
// "defaultState": 0,
|
||||
// "minStateId": 0,
|
||||
// "maxStateId": 0,
|
||||
// "states": [],
|
||||
// "drops": [],
|
||||
// "boundingBox": "empty"
|
||||
// },
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
var dataValues any
|
||||
switch len(args) {
|
||||
case 0: // print available versions
|
||||
dataValues = proto_generated.SupportedVersions
|
||||
case 1: // print available data for version
|
||||
dataValues = slices.Collect(maps.Keys(data.Paths.Data[args[0]]))
|
||||
case 2:
|
||||
err = data.LoadVersionedJson(args[0], args[1], &dataValues)
|
||||
case 3:
|
||||
err = data.LoadVersionedJson(args[0], args[1], &dataValues)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var dataSlices []any
|
||||
dataSlices, err = util.AssertTypeError[[]any](dataValues)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var result = make([]any, len(dataSlices))
|
||||
for _, v := range dataSlices {
|
||||
var dataMap map[string]any
|
||||
dataMap, err = util.AssertTypeError[map[string]any](v)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var vToAppend any
|
||||
vToAppend, err = util.MapGetError(dataMap, args[2])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
result = append(result, vToAppend)
|
||||
}
|
||||
dataValues = result
|
||||
case 4, 5:
|
||||
err = data.LoadVersionedJson(args[0], args[1], &dataValues)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var dataSlices []any
|
||||
dataSlices, err = util.AssertTypeError[[]any](dataValues)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
found := false
|
||||
for _, v := range dataSlices {
|
||||
var dataMap map[string]any
|
||||
dataMap, err = util.AssertTypeError[map[string]any](v)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if v2, ok := dataMap[args[2]]; ok {
|
||||
if args[3] != fmt.Sprint(v2) {
|
||||
continue
|
||||
}
|
||||
|
||||
dataValues = dataMap
|
||||
found = true
|
||||
if len(args) == 5 {
|
||||
dataValues, err = util.MapGetError(dataMap, args[4])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
err = fmt.Errorf("not found")
|
||||
return
|
||||
}
|
||||
default:
|
||||
err = fmt.Errorf("too many arguments")
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
e := json.NewEncoder(os.Stdout)
|
||||
e.SetIndent("", " ")
|
||||
err = e.Encode(dataValues)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package extract_mca
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"github.com/admin-else/strom/level/anvil"
|
||||
"github.com/admin-else/strom/nbt"
|
||||
)
|
||||
|
||||
var (
|
||||
cmd = flag.NewFlagSet("print-nbt", flag.ContinueOnError)
|
||||
FileFlag = cmd.String("file", "", "The MCA file to extract")
|
||||
IndexXFlag = cmd.Int("x", 0, "The x chunk coordinate")
|
||||
IndexZFlag = cmd.Int("z", 0, "The z chunk coordinate")
|
||||
ToFlag = cmd.String("to", "mca-chunk.nbt", "The output file")
|
||||
)
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if *FileFlag == "" {
|
||||
return fmt.Errorf("no file specified")
|
||||
}
|
||||
f, err := os.Open(*FileFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
mca, err := anvil.ReadChunkHeader(f)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
t, err := mca.TimeAt(f, int32(*IndexXFlag), int32(*IndexZFlag))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
slog.Info("Chunk last written", "time", t)
|
||||
n, err := mca.ChunkAt(f, int32(*IndexXFlag), int32(*IndexZFlag))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = nbt.WriteUnstructuredFilePath(*ToFlag, n)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"debug/buildinfo"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"maps"
|
||||
"os"
|
||||
"slices"
|
||||
|
||||
"github.com/admin-else/strom/cmd/strom/api"
|
||||
"github.com/admin-else/strom/cmd/strom/data"
|
||||
"github.com/admin-else/strom/cmd/strom/extract_mca"
|
||||
"github.com/admin-else/strom/cmd/strom/offline_uuid"
|
||||
"github.com/admin-else/strom/cmd/strom/packet_info"
|
||||
"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_replay"
|
||||
"github.com/admin-else/strom/cmd/strom/status"
|
||||
)
|
||||
|
||||
var ExpectedASubcommandErr = errors.New("expected a subcommand")
|
||||
var UnknownSubcommandErr = errors.New("unknown subcommand try 'strom help' for a list of subcommands")
|
||||
|
||||
func Version(args []string) (err error) {
|
||||
selfPath, err := os.Executable()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
info, err := buildinfo.ReadFile(selfPath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println("strom cli ", info.Main.Version, " (", info.Main.Sum, ")")
|
||||
return
|
||||
}
|
||||
|
||||
var subcommands = map[string]func(args []string) error{
|
||||
"offline-uuid": offline_uuid.Run,
|
||||
"packet-info": packet_info.Run,
|
||||
"print-nbt": print_nbt.Run,
|
||||
"status": status.Run,
|
||||
"packet-spy": packet_inspector.Run,
|
||||
"api": api.Run,
|
||||
"version": Version,
|
||||
"extract-mca": extract_mca.Run,
|
||||
"data": data.Run,
|
||||
"print-replay": print_replay.Run,
|
||||
}
|
||||
|
||||
func Help(args []string) (err error) {
|
||||
subcommandNames := slices.Collect(maps.Keys(subcommands))
|
||||
slices.Sort(subcommandNames)
|
||||
fmt.Println("Available subcommands", subcommandNames)
|
||||
return
|
||||
}
|
||||
|
||||
func mainE() (err error) {
|
||||
subcommands["help"] = Help
|
||||
args := os.Args
|
||||
|
||||
if len(args) < 2 {
|
||||
err = ExpectedASubcommandErr
|
||||
return
|
||||
}
|
||||
|
||||
f, ok := subcommands[args[1]]
|
||||
if !ok {
|
||||
err = UnknownSubcommandErr
|
||||
return
|
||||
}
|
||||
err = f(args[2:])
|
||||
return
|
||||
}
|
||||
|
||||
func main() {
|
||||
err := mainE()
|
||||
if err != nil {
|
||||
slog.Error("exiting", "err", err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
package packet_info
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/admin-else/strom/data"
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
"github.com/admin-else/strom/proto_generated"
|
||||
)
|
||||
|
||||
var cmd = flag.NewFlagSet("packet-info", flag.ContinueOnError)
|
||||
var versionFlag = cmd.String("version", "", "protocol version or minecraft version name")
|
||||
var stateFlag = cmd.String("state", "", "handshaking, status, login, configuration, play")
|
||||
var directionFlag = cmd.String("direction", "", "toserver, toclient")
|
||||
var idFlag = cmd.Int("id", -1, "packet id")
|
||||
var nameFlag = cmd.String("name", "", "packet name")
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var version int32
|
||||
if *versionFlag != "" {
|
||||
v, err := data.LookUpVersionByName(*versionFlag)
|
||||
if err != nil {
|
||||
v2, err := parseVersion(*versionFlag)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid version: %s", *versionFlag)
|
||||
}
|
||||
v, err = data.LookUpVersionByProtocolVersion(v2)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
version = v.Version
|
||||
}
|
||||
|
||||
var state proto_base.State
|
||||
if *stateFlag != "" {
|
||||
state, err = parseState(*stateFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var direction proto_base.Direction
|
||||
if *directionFlag != "" {
|
||||
direction, err = parseDirection(*directionFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if *idFlag != -1 && *nameFlag != "" {
|
||||
err = fmt.Errorf("cannot specify both id and name")
|
||||
return
|
||||
}
|
||||
|
||||
if *idFlag != -1 {
|
||||
if *versionFlag == "" || *stateFlag == "" || *directionFlag == "" {
|
||||
err = fmt.Errorf("version, state, and direction are required when looking up by id")
|
||||
return
|
||||
}
|
||||
p, ok := proto.LookUpTypeByPacketInfo(direction, state, int32(*idFlag), version)
|
||||
if !ok {
|
||||
err = fmt.Errorf("packet not found")
|
||||
return
|
||||
}
|
||||
printPacketInfo(p)
|
||||
return
|
||||
}
|
||||
|
||||
if *nameFlag != "" {
|
||||
if *versionFlag == "" {
|
||||
err = fmt.Errorf("version is required when looking up by name")
|
||||
return
|
||||
}
|
||||
if state != 0 || direction != 0 {
|
||||
p, ok := proto.LookupPacketInfoByNameProtocolVersionStateAndDirection(*nameFlag, version, state, direction)
|
||||
if !ok {
|
||||
err = fmt.Errorf("packet not found")
|
||||
return
|
||||
}
|
||||
printPacketInfo(p)
|
||||
} else {
|
||||
var found bool
|
||||
for _, p := range proto_generated.Packets {
|
||||
if p.Name == *nameFlag && p.ProtocolVersion == version {
|
||||
printPacketInfo(p)
|
||||
found = true
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
err = fmt.Errorf("packet not found")
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
err = fmt.Errorf("must specify either -id or -name")
|
||||
return
|
||||
}
|
||||
|
||||
func parseState(s string) (proto_base.State, error) {
|
||||
switch s {
|
||||
case "handshaking":
|
||||
return proto_base.Handshaking, nil
|
||||
case "status":
|
||||
return proto_base.Status, nil
|
||||
case "login":
|
||||
return proto_base.Login, nil
|
||||
case "configuration":
|
||||
return proto_base.Configuration, nil
|
||||
case "play":
|
||||
return proto_base.Play, nil
|
||||
default:
|
||||
return 0, fmt.Errorf("unknown state: %s", s)
|
||||
}
|
||||
}
|
||||
|
||||
func parseDirection(s string) (proto_base.Direction, error) {
|
||||
switch s {
|
||||
case "toserver":
|
||||
return proto_base.ToServer, nil
|
||||
case "toclient":
|
||||
return proto_base.ToClient, nil
|
||||
default:
|
||||
return 0, fmt.Errorf("unknown direction: %s", s)
|
||||
}
|
||||
}
|
||||
|
||||
func parseVersion(val string) (int32, error) {
|
||||
v, err := strconv.ParseInt(val, 10, 32)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return int32(v), nil
|
||||
}
|
||||
|
||||
func printPacketInfo(p proto_base.PacketInfo) {
|
||||
v, _ := data.LookUpVersionByProtocolVersion(p.ProtocolVersion)
|
||||
fmt.Printf("Name: %s\n", p.Name)
|
||||
fmt.Printf("ID: %d\n", p.PacketId)
|
||||
fmt.Printf("State: %s\n", stateToString(p.State))
|
||||
fmt.Printf("Direction: %s\n", p.Direction)
|
||||
fmt.Printf("Version: %d (%s)\n", p.ProtocolVersion, v.MinecraftVersion)
|
||||
}
|
||||
|
||||
func stateToString(s proto_base.State) string {
|
||||
switch s {
|
||||
case proto_base.Handshaking:
|
||||
return "handshaking"
|
||||
case proto_base.Status:
|
||||
return "status"
|
||||
case proto_base.Login:
|
||||
return "login"
|
||||
case proto_base.Configuration:
|
||||
return "configuration"
|
||||
case proto_base.Play:
|
||||
return "play"
|
||||
default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
package packet_inspector
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log/slog"
|
||||
|
||||
"github.com/admin-else/strom/api"
|
||||
"github.com/admin-else/strom/client"
|
||||
"github.com/admin-else/strom/event"
|
||||
"github.com/admin-else/strom/nbt"
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
"github.com/admin-else/strom/proto_generated/v1_21_11"
|
||||
"github.com/admin-else/strom/server"
|
||||
"github.com/admin-else/strom/text"
|
||||
)
|
||||
|
||||
var Cmd = flag.NewFlagSet("packet-inspector", flag.ContinueOnError)
|
||||
|
||||
var OfflineNameFlag = Cmd.String("name", "packet_inspector", "offline player name")
|
||||
var Token = Cmd.String("token", "", "token to use")
|
||||
|
||||
var TargetAddr = Cmd.String("addr", "127.0.0.1:25565", "address to connect to")
|
||||
var ListenAddr = Cmd.String("listen", "127.0.0.1:25566", "address to listen on")
|
||||
|
||||
type Proxy struct {
|
||||
Client, Servee *proto.Conn
|
||||
Data nbt.Tag
|
||||
}
|
||||
|
||||
func (p *Proxy) Start() (err error) {
|
||||
p.Client.RegisterCritical(p.OnAnything)
|
||||
p.Servee.RegisterCritical(p.OnAnything)
|
||||
|
||||
p.Servee.RegisterCriticalUntilLatest(p.OnFinishConfiguration)
|
||||
|
||||
errChan := make(chan error)
|
||||
go func() {
|
||||
errChan <- p.Client.StartConn()
|
||||
}()
|
||||
go func() {
|
||||
errChan <- p.Servee.StartConn()
|
||||
}()
|
||||
err = <-errChan
|
||||
return
|
||||
}
|
||||
|
||||
func (p *Proxy) OnAnything(e event.Anything) (err error) {
|
||||
packet, ok := e.Val.(proto_base.EncodeDecodeAble)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
packetInfo, ok := proto.LookupPacketInfoByType(packet)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
switch packetInfo.Direction {
|
||||
case proto_base.ToServer:
|
||||
err = p.Client.Send(packet)
|
||||
case proto_base.ToClient:
|
||||
err = p.Servee.Send(packet)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (p *Proxy) OnFinishConfiguration(packet *v1_21_11.ConfigurationToServerPacketFinishConfiguration) (err error) {
|
||||
err = p.Client.Send(packet)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
p.Servee.SetState(proto_base.Play)
|
||||
p.Client.SetState(proto_base.Play)
|
||||
err = event.DontForwardErr
|
||||
return
|
||||
}
|
||||
|
||||
var StatusResponse = server.StatusResponse{
|
||||
Version: server.StatusResponseVersion{
|
||||
Name: text.Pretty("STROM"),
|
||||
Protocol: 772,
|
||||
},
|
||||
Players: server.StatusResponsePlayers{},
|
||||
Description: text.Pretty("Packet spy forwards to " + *TargetAddr),
|
||||
Favicon: "",
|
||||
EnforcesSecureChat: false,
|
||||
}
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = Cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||
slog.Info("Starting packet inspector", "listen", *ListenAddr)
|
||||
err = server.StartServerWithOnConn(*ListenAddr, func(serveeConn *proto.Conn) (err error) {
|
||||
serveeConn.DebugPrintPackets = []string{""}
|
||||
p := &Proxy{Servee: serveeConn, Client: nil}
|
||||
var acc = api.NewOfflineAccount(*OfflineNameFlag)
|
||||
if *Token != "" {
|
||||
acc, err = api.NewAccountFromYGG(*Token)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
_, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
*TargetAddr, err = client.DoDnsSimple(*TargetAddr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c, err := client.Connect(*TargetAddr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c.DebugPrintPackets = []string{""}
|
||||
err = client.LoginRaw(c, acc)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
p.Client = c
|
||||
err = p.Start()
|
||||
return
|
||||
})
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package print_nbt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/admin-else/strom/nbt"
|
||||
)
|
||||
|
||||
var (
|
||||
cmd = flag.NewFlagSet("print-nbt", flag.ContinueOnError)
|
||||
FileFlag = cmd.String("file", "", "The NBT file to print")
|
||||
HashFormatFlag = cmd.Bool("snbt", false, "will print with go %#v")
|
||||
)
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if *FileFlag == "" {
|
||||
return fmt.Errorf("no file specified")
|
||||
}
|
||||
f, err := os.Open(*FileFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
n, err := nbt.ReadUnstructuredFile(f)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var b []byte
|
||||
if *HashFormatFlag {
|
||||
bb := bytes.NewBuffer(nil)
|
||||
err = nbt.PrintSNBTAny(n.Value, bb)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
b = bb.Bytes()
|
||||
//b = []byte(strings.ReplaceAll(string(b), ",", ",\n"))
|
||||
} else {
|
||||
b, err = json.MarshalIndent(n, "", " ")
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, err = os.Stdout.Write(b)
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package failed_packets_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
generated "github.com/admin-else/strom/proto_generated/%v"
|
||||
)
|
||||
|
||||
// Error: %v
|
||||
func TestFailedPacket%10X(t *testing.T) {
|
||||
p := &generated.%v{}
|
||||
b := bytes.NewBuffer(%#v)
|
||||
err := p.Decode(b)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
package print_replay
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/sha256"
|
||||
_ "embed"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log/slog"
|
||||
"os"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"github.com/admin-else/strom/data"
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
)
|
||||
|
||||
var (
|
||||
cmd = flag.NewFlagSet("print-replay", flag.ContinueOnError)
|
||||
FileFlag = cmd.String("file", "", "The tmcpr file to print")
|
||||
ProtocolVersion = cmd.Int("protocol", -1, "The protocol version")
|
||||
CreateTestsPath = cmd.String("create-tests", "", "")
|
||||
StateFlag = cmd.String("state", "login", "Initial state: login, config, play")
|
||||
)
|
||||
|
||||
// TODO: maybe use the proto replay api
|
||||
|
||||
//go:embed failed_packet.go.tmpl
|
||||
var TestSrcF string
|
||||
|
||||
func SaveUnCodeAbleAsTest(packet *proto.UnCodablePacket) {
|
||||
hUntrimmed := sha256.Sum256(packet.Data)
|
||||
h := hUntrimmed[:8]
|
||||
f, err := os.Create(fmt.Sprintf(*CreateTestsPath+"/%v_%10x_test.go", len(packet.Data), h))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ret, err := data.LookUpVersionByProtocolVersion(packet.Info.ProtocolVersion)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
goPackage := "v" + strings.ReplaceAll(ret.MinecraftVersion, ".", "_")
|
||||
|
||||
//goland:noinspection GoUnhandledErrorResult
|
||||
defer f.Close()
|
||||
_, err = fmt.Fprintf(f, TestSrcF, goPackage, packet.Err, h, reflect.TypeOf(packet.Info.Type).Elem().Name(), packet.Data)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
slog.Info("Packet failed to parse", "error", packet.Err, "saved", f.Name(), "data", fmt.Sprintf("%q", packet.Data))
|
||||
}
|
||||
|
||||
var state = proto_base.Login
|
||||
|
||||
func UnpackPacket(r io.Reader) (packet proto_base.EncodeDecodeAble, err error) {
|
||||
var timestamp, length uint32
|
||||
err = binary.Read(r, binary.BigEndian, ×tamp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = binary.Read(r, binary.BigEndian, &length)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Read the packet data into a byte slice
|
||||
packetData := make([]byte, length)
|
||||
_, err = io.ReadFull(r, packetData)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Use bytes.Reader instead of bytes.Buffer
|
||||
b := bytes.NewReader(packetData)
|
||||
|
||||
packetId, err := proto_base.DecodeVarInt(b)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Calculate position after reading the packet ID
|
||||
// indexafterid represents how many bytes we've read so far
|
||||
indexafterid := int(b.Size()) - b.Len()
|
||||
|
||||
i, ok := proto.LookUpTypeByPacketInfo(proto_base.ToClient, state, packetId, int32(*ProtocolVersion))
|
||||
if !ok {
|
||||
packet = &proto.UnCodablePacket{Err: proto.BadPacketIdErr, Data: packetData, Info: i}
|
||||
return
|
||||
}
|
||||
packet = reflect.New(reflect.TypeOf(i.Type).Elem()).Interface().(proto_base.EncodeDecodeAble)
|
||||
err = packet.Decode(b)
|
||||
if err != nil {
|
||||
packet = &proto.UnCodablePacket{Err: err, Data: packetData[indexafterid:], Info: i}
|
||||
return
|
||||
}
|
||||
switch i.Name {
|
||||
case "success":
|
||||
state = proto_base.Configuration
|
||||
case "finish_configuration":
|
||||
state = proto_base.Play
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if *ProtocolVersion == -1 {
|
||||
return fmt.Errorf("no protocol version specified")
|
||||
}
|
||||
if *FileFlag == "" {
|
||||
return fmt.Errorf("no file specified")
|
||||
}
|
||||
switch *StateFlag {
|
||||
case "login":
|
||||
state = proto_base.Login
|
||||
case "config":
|
||||
state = proto_base.Configuration
|
||||
case "play":
|
||||
state = proto_base.Play
|
||||
default:
|
||||
return fmt.Errorf("unknown state: %s", *StateFlag)
|
||||
}
|
||||
f, err := os.Open(*FileFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
var totalPackets, failedPackets int
|
||||
for {
|
||||
var packet proto_base.EncodeDecodeAble
|
||||
packet, err = UnpackPacket(f)
|
||||
unCodablePacket, ok := packet.(*proto.UnCodablePacket)
|
||||
if ok {
|
||||
if *CreateTestsPath != "" {
|
||||
SaveUnCodeAbleAsTest(unCodablePacket)
|
||||
}
|
||||
failedPackets++
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
fmt.Printf("Packet: %#v\n", packet)
|
||||
}
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
totalPackets++
|
||||
}
|
||||
fmt.Printf("Total packets: %d, failed packets: %d, %%failed: %.2f%%\n", totalPackets, failedPackets, float64(failedPackets)/float64(totalPackets)*100)
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2d90ee976987678593a6b1d09136bb9b4fd131390796ea6e413376a6ddc63226
|
||||
size 75035693
|
||||
@@ -0,0 +1 @@
|
||||
[{"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}}}]
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d972b9b5f9d962199fe262eccef32a4b94504283fae97f9963702e7ab1550129
|
||||
size 437123
|
||||
@@ -0,0 +1 @@
|
||||
{"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":[]}
|
||||
@@ -0,0 +1 @@
|
||||
{"requiredMods":[{"modID":"viafabricplus","modName":"ViaFabricPlus","modVersion":"4.4.4"}]}
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cef58ec0e3d1d25e34c2effc5c09241ee4c1b39c085ed9e11b7097dfd5c2d033
|
||||
size 3429878
|
||||
@@ -0,0 +1 @@
|
||||
234002168
|
||||
@@ -0,0 +1 @@
|
||||
{"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
@@ -0,0 +1 @@
|
||||
{"requiredMods":[{"modID":"viafabricplus","modName":"ViaFabricPlus","modVersion":"4.4.4"}]}
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:be007aa681f7959708e89e39e05390e228753291823a18274068d310a50aa78b
|
||||
size 526306397
|
||||
@@ -0,0 +1 @@
|
||||
270566013
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0da58f5cdd65ef241df8c61f9e633af7317faa77034183d4fb648b039c1e14ed
|
||||
size 842
|
||||
@@ -0,0 +1 @@
|
||||
{"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":[]}
|
||||
@@ -0,0 +1 @@
|
||||
{"requiredMods":[{"modID":"viafabricplus","modName":"ViaFabricPlus","modVersion":"4.4.4"}]}
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:52fa049f97918289e018fa4c3bf5ff789d4f99f44f590ad875ce1f65e5fa9563
|
||||
size 37
|
||||
@@ -0,0 +1 @@
|
||||
1105715802
|
||||
@@ -0,0 +1,98 @@
|
||||
package status
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/admin-else/strom/client"
|
||||
"github.com/admin-else/strom/event"
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||
)
|
||||
|
||||
var cmd = flag.NewFlagSet("status", flag.ContinueOnError)
|
||||
var addrFlag = cmd.String("addr", "localhost:25565", "address to connect to")
|
||||
var srvFlag = cmd.Bool("srv", false, "use SRV records to resolve the address")
|
||||
var versionFlag = cmd.String("version", "1.21.8", "version to use")
|
||||
|
||||
type StatusClient struct {
|
||||
*proto.Conn
|
||||
Status string
|
||||
PingSendTime, PingReceiveTime time.Time
|
||||
DoPingRoundTripTime bool
|
||||
}
|
||||
|
||||
func (s *StatusClient) OnStatus(p *v1_21_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) OnPong(p *v1_21_8.StatusToClientPacketPing) (err error) {
|
||||
s.PingReceiveTime = time.Now()
|
||||
err = event.HandlerDoneErr{}
|
||||
return
|
||||
}
|
||||
|
||||
// StatusRaw returns a StatusClient that is not connected to a server.
|
||||
// So ignore the resource leak warning. And maybe attach a warn ignore comment.
|
||||
// It does not resolve SRV records.
|
||||
func StatusRaw(addr string) (s *StatusClient, err error) {
|
||||
c, err := client.ConnectVersionLess(addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
err = c.SetVersion(*versionFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s = &StatusClient{
|
||||
Conn: c,
|
||||
}
|
||||
s.RegisterCriticalUntilLatest(s.OnStatus)
|
||||
s.RegisterCriticalUntilLatest(s.OnPong)
|
||||
|
||||
p, err := client.MakeHandshakePacketAddr(s.Conn, proto_base.Status, addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = s.Send(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s.SetState(proto_base.Status)
|
||||
err = s.Send(&v1_21_8.StatusToServerPacketPingStart{})
|
||||
|
||||
err = s.StartConn()
|
||||
return
|
||||
}
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if *srvFlag {
|
||||
*addrFlag, err = client.DoDnsSimple(*addrFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
slog.Debug("resolved address to ", "addr", *addrFlag)
|
||||
|
||||
status, err := StatusRaw(*addrFlag)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println(status.Status)
|
||||
return
|
||||
}
|
||||
@@ -28,6 +28,7 @@ package crypto
|
||||
import (
|
||||
"crypto/cipher"
|
||||
"crypto/subtle"
|
||||
"sync"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
@@ -37,6 +38,7 @@ type CFB8 struct {
|
||||
ivPos int
|
||||
iv []byte
|
||||
de bool
|
||||
mutex sync.Mutex
|
||||
}
|
||||
|
||||
func NewCFB8Decrypt(c cipher.Block, iv []byte) *CFB8 {
|
||||
@@ -59,6 +61,8 @@ func newCFB8(c cipher.Block, iv []byte, de bool) *CFB8 {
|
||||
}
|
||||
|
||||
func (cf *CFB8) XORKeyStream(dst, src []byte) {
|
||||
cf.mutex.Lock()
|
||||
defer cf.mutex.Unlock()
|
||||
if len(src) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
+21
-6
@@ -1,5 +1,7 @@
|
||||
package data
|
||||
|
||||
import "errors"
|
||||
|
||||
// [
|
||||
//
|
||||
// {
|
||||
@@ -14,7 +16,7 @@ package data
|
||||
// },
|
||||
|
||||
type Biome struct {
|
||||
Id int
|
||||
Id int32
|
||||
Name string
|
||||
Category string
|
||||
Temperature float64
|
||||
@@ -24,22 +26,35 @@ type Biome struct {
|
||||
Color int
|
||||
}
|
||||
|
||||
var BiomesCache = make(map[string][]Biome)
|
||||
var BiomesCache = make(map[string][]*Biome)
|
||||
|
||||
func BiomesForVersion(v string) (ret []Biome) {
|
||||
func BiomesForVersion(v string) (ret []*Biome) {
|
||||
var ok bool
|
||||
if ret, ok = BiomesCache[v]; ok {
|
||||
return
|
||||
}
|
||||
var b []Biome
|
||||
var b []*Biome
|
||||
must(LoadVersionedJson(v, "biomes", &b))
|
||||
BiomesCache[v] = b
|
||||
return b
|
||||
}
|
||||
|
||||
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) {
|
||||
if b.Id == int(id) {
|
||||
if b.Id == id {
|
||||
biome = b
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var UnknownBiomeNameErr = errors.New("unknown biome Name")
|
||||
|
||||
func LookupBiomeByName(version string, name string) (biome *Biome, ok bool) {
|
||||
for _, b := range BiomesForVersion(version) {
|
||||
if b.Name == name {
|
||||
biome = b
|
||||
ok = true
|
||||
return
|
||||
|
||||
+69
-31
@@ -2,6 +2,10 @@ package data
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"slices"
|
||||
"strconv"
|
||||
|
||||
"github.com/admin-else/strom/util"
|
||||
)
|
||||
|
||||
// {
|
||||
@@ -47,11 +51,13 @@ type Block struct {
|
||||
type BlockState struct {
|
||||
Name string
|
||||
Type string
|
||||
MinValue int32 // this is generated on load and used for state value calculations
|
||||
NumValues int32 `json:"num_values"`
|
||||
Values []string
|
||||
}
|
||||
|
||||
var BlocksCache = make(map[string][]*Block)
|
||||
var BlocksCacheIdMap = make(map[string]map[int32]*Block)
|
||||
|
||||
func BlocksForVersion(v string) (ret []*Block) {
|
||||
var ok bool
|
||||
@@ -61,26 +67,63 @@ func BlocksForVersion(v string) (ret []*Block) {
|
||||
var b []*Block
|
||||
must(LoadVersionedJson(v, "blocks", &b))
|
||||
BlocksCache[v] = b
|
||||
for _, block := range b {
|
||||
for i, state := range block.States {
|
||||
if state.Type != "int" {
|
||||
continue
|
||||
}
|
||||
values := make([]int32, state.NumValues)
|
||||
for j, stateValue := range state.Values {
|
||||
n := util.MustT(strconv.Atoi(stateValue))
|
||||
values[j] = int32(n)
|
||||
}
|
||||
block.States[i].MinValue = slices.Min(values)
|
||||
}
|
||||
}
|
||||
|
||||
return b
|
||||
}
|
||||
|
||||
func LookupBlockByStateId(version string, stateId int32) (block *Block, ok bool) {
|
||||
idmap, found := BlocksCacheIdMap[version]
|
||||
if !found {
|
||||
idmap = make(map[int32]*Block)
|
||||
for _, b := range BlocksForVersion(version) {
|
||||
if b.MinStateId <= stateId && stateId <= b.MaxStateId {
|
||||
for i := range b.MaxStateId - b.MinStateId + 1 {
|
||||
idmap[b.MinStateId+i] = b
|
||||
}
|
||||
}
|
||||
BlocksCacheIdMap[version] = idmap
|
||||
}
|
||||
block, ok = idmap[stateId]
|
||||
return
|
||||
}
|
||||
|
||||
var UnknownBlockNameErr = errors.New("unknown block Name")
|
||||
|
||||
func LookupBlockByName(version string, name string) (block *Block, ok bool) {
|
||||
for _, b := range BlocksForVersion(version) {
|
||||
if b.Name == name {
|
||||
block = b
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func LookupBlockByName(version string, stateId int32) (block *Block, ok bool) {
|
||||
for _, b := range BlocksForVersion(version) {
|
||||
if b.MinStateId <= stateId && stateId <= b.MaxStateId {
|
||||
block = b
|
||||
ok = true
|
||||
func StateIdFromBlocKAndStateMap(version string, name string, stateMap map[string]string) (stateId int32, err error) {
|
||||
b, ok := LookupBlockByName(version, name)
|
||||
if !ok {
|
||||
err = BlockNotFoundErr
|
||||
return
|
||||
}
|
||||
if stateMap == nil {
|
||||
stateId = b.DefaultState
|
||||
} else {
|
||||
stateId, err = b.IdFromStateMap(stateMap)
|
||||
}
|
||||
if b.MinStateId > stateId || b.MaxStateId < stateId {
|
||||
err = BlockStateOutOfRangeErr
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -92,7 +135,7 @@ var BadBlockStateTypeErr = errors.New("bad block state type")
|
||||
var BadEnumErr = errors.New("bad enum")
|
||||
var SupplyAllStatesErr = errors.New("supply all states")
|
||||
|
||||
func FromBlockState(version string, stateId int32) (b *Block, stateData map[string]any, err error) {
|
||||
func FromBlockState(version string, stateId int32) (b *Block, stateData map[string]string, err error) {
|
||||
b, ok := LookupBlockByStateId(version, stateId)
|
||||
if !ok {
|
||||
err = BlockNotFoundErr
|
||||
@@ -101,19 +144,17 @@ func FromBlockState(version string, stateId int32) (b *Block, stateData map[stri
|
||||
return
|
||||
}
|
||||
|
||||
// TODO: mc stores these as strings so we will do the same
|
||||
|
||||
func mcDataBlockStateTypeParse(n int32, s *BlockState) (v any, err error) {
|
||||
func mcDataBlockStateTypeParse(n int32, s *BlockState) (v string, err error) {
|
||||
switch s.Type {
|
||||
case "int":
|
||||
v = n
|
||||
v = strconv.Itoa(int(n))
|
||||
case "enum":
|
||||
v = s.Values[n]
|
||||
case "bool":
|
||||
if n == 0 { // MOJANK: 0 is true, 1 is false
|
||||
v = true
|
||||
v = "true"
|
||||
} else if n == 1 {
|
||||
v = false
|
||||
v = "false"
|
||||
} else {
|
||||
err = InvalidBoolValueErr
|
||||
}
|
||||
@@ -123,35 +164,32 @@ func mcDataBlockStateTypeParse(n int32, s *BlockState) (v any, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func mcDataBlockStateTypeSerialize(v any, s *BlockState) (n int32, err error) {
|
||||
switch t := v.(type) {
|
||||
case int32:
|
||||
n = t
|
||||
case bool:
|
||||
if t {
|
||||
n = 0
|
||||
} else {
|
||||
n = 1
|
||||
func mcDataBlockStateTypeSerialize(v string, s *BlockState) (n int32, err error) {
|
||||
if v == "true" {
|
||||
return 0, nil
|
||||
}
|
||||
if v == "false" {
|
||||
return 1, nil
|
||||
}
|
||||
n1, errMabye := strconv.Atoi(v)
|
||||
if errMabye == nil {
|
||||
return int32(n1) - s.MinValue, nil
|
||||
}
|
||||
case string:
|
||||
for i, enumValue := range s.Values {
|
||||
if enumValue == t {
|
||||
if enumValue == v {
|
||||
return int32(i), nil
|
||||
}
|
||||
}
|
||||
err = BadEnumErr
|
||||
default:
|
||||
err = BadBlockStateTypeErr
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (b *Block) StateMapFromId(stateId int32) (ret map[string]any, err error) {
|
||||
func (b *Block) StateMapFromId(stateId int32) (ret map[string]string, err error) {
|
||||
if stateId < b.MinStateId || stateId > b.MaxStateId {
|
||||
err = BlockStateOutOfRangeErr
|
||||
return
|
||||
}
|
||||
ret = make(map[string]any)
|
||||
ret = make(map[string]string)
|
||||
stateId -= b.MinStateId
|
||||
|
||||
a := int32(1)
|
||||
@@ -166,7 +204,7 @@ func (b *Block) StateMapFromId(stateId int32) (ret map[string]any, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (b *Block) IdFromStateMap(m map[string]any) (ret int32, err error) {
|
||||
func (b *Block) IdFromStateMap(m map[string]string) (ret int32, err error) {
|
||||
a := int32(1)
|
||||
for i := range len(b.States) {
|
||||
s := b.States[len(b.States)-1-i]
|
||||
|
||||
@@ -32,3 +32,11 @@ func TestBlockStates(t *testing.T) {
|
||||
t.Fatal("state id mismatch")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBlockStateOutOfRangeBug(t *testing.T) {
|
||||
id, err := data.StateIdFromBlocKAndStateMap("1.21.11", "wildflowers", map[string]string{"facing": "east", "flower_amount": "4"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Logf("State id: %d", id)
|
||||
}
|
||||
|
||||
+7
-3
@@ -4,9 +4,12 @@ import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
//go:embed minecraft-data/data
|
||||
//go:generate ./download_minecraft_data.sh
|
||||
|
||||
//go:embed minecraft-data/pc minecraft-data/dataPaths.json
|
||||
var MinecraftData embed.FS
|
||||
|
||||
func LoadJson(path string, data any) (err error) {
|
||||
@@ -19,9 +22,10 @@ func LoadJson(path string, data any) (err error) {
|
||||
}
|
||||
|
||||
func LoadVersionedJson(version, dataName string, data any) (err error) {
|
||||
b, err := MinecraftData.ReadFile("minecraft-data/data/" + Paths.Data[version][dataName] + "/" + dataName + ".json")
|
||||
b, err := MinecraftData.ReadFile("minecraft-data/" + Paths.Data[version][dataName] + "/" + dataName + ".json")
|
||||
if err != nil {
|
||||
return
|
||||
// If you get this error, you need to probably need to update the download script
|
||||
return fmt.Errorf("minecraft-data/%s/%s/%s.json: %w", version, Paths.Data[version][dataName], dataName, err)
|
||||
}
|
||||
err = json.Unmarshal(b, data)
|
||||
return
|
||||
|
||||
+1
-1
@@ -9,5 +9,5 @@ var Paths struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
must(LoadJson("minecraft-data/data/dataPaths.json", &Paths))
|
||||
must(LoadJson("minecraft-data/dataPaths.json", &Paths))
|
||||
}
|
||||
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/sh
|
||||
set -xeuo pipefail
|
||||
|
||||
# Go get / install does not clone git submodules so we have to do it like this
|
||||
|
||||
rm -rf minecraft-data/
|
||||
git clone --depth 1 git@github.com:PrismarineJS/minecraft-data.git
|
||||
mv minecraft-data minecraft-data-untrimmed
|
||||
|
||||
mkdir minecraft-data
|
||||
mkdir minecraft-data/pc
|
||||
|
||||
mv minecraft-data-untrimmed/data/dataPaths.json minecraft-data
|
||||
|
||||
copy-mc() {
|
||||
mv minecraft-data-untrimmed/data/pc/$1 minecraft-data/pc
|
||||
}
|
||||
|
||||
copy-mc common
|
||||
|
||||
copy-mc 1.21.8
|
||||
copy-mc 1.21.9
|
||||
copy-mc 1.21.11
|
||||
|
||||
rm -rf minecraft-data-untrimmed
|
||||
@@ -1,5 +1,7 @@
|
||||
package data
|
||||
|
||||
import "sync"
|
||||
|
||||
// {
|
||||
// "id": 2,
|
||||
// "name": "granite",
|
||||
@@ -15,15 +17,21 @@ type Item struct {
|
||||
}
|
||||
|
||||
var ItemsCache = make(map[string][]*Item)
|
||||
var ItemsCacheMutex = &sync.RWMutex{}
|
||||
|
||||
func ItemsForVersion(v string) (ret []*Item) {
|
||||
var ok bool
|
||||
ItemsCacheMutex.RLock()
|
||||
if ret, ok = ItemsCache[v]; ok {
|
||||
ItemsCacheMutex.RUnlock()
|
||||
return
|
||||
}
|
||||
ItemsCacheMutex.RUnlock()
|
||||
var b []*Item
|
||||
must(LoadVersionedJson(v, "items", &b))
|
||||
ItemsCacheMutex.Lock()
|
||||
ItemsCache[v] = b
|
||||
ItemsCacheMutex.Unlock()
|
||||
return b
|
||||
}
|
||||
|
||||
|
||||
Submodule data/minecraft-data deleted from 3e12d39f67
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
}
|
||||
]
|
||||
@@ -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
@@ -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
@@ -0,0 +1,442 @@
|
||||
[
|
||||
{
|
||||
"id": 893,
|
||||
"name": "apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 19.2,
|
||||
"effectiveQuality": 23.2,
|
||||
"saturationRatio": 4.8
|
||||
},
|
||||
{
|
||||
"id": 947,
|
||||
"name": "mushroom_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Mushroom Stew",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 953,
|
||||
"name": "bread",
|
||||
"stackSize": 64,
|
||||
"displayName": "Bread",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 983,
|
||||
"name": "porkchop",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Porkchop",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 984,
|
||||
"name": "cooked_porkchop",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Porkchop",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 204.8,
|
||||
"effectiveQuality": 212.8,
|
||||
"saturationRatio": 25.6
|
||||
},
|
||||
{
|
||||
"id": 986,
|
||||
"name": "golden_apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Golden Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 80.8,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 987,
|
||||
"name": "enchanted_golden_apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Enchanted Golden Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 80.8,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1019,
|
||||
"name": "pufferfish_bucket",
|
||||
"stackSize": 1,
|
||||
"displayName": "Bucket of Pufferfish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1020,
|
||||
"name": "salmon_bucket",
|
||||
"stackSize": 1,
|
||||
"displayName": "Bucket of Salmon",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1021,
|
||||
"name": "cod_bucket",
|
||||
"stackSize": 1,
|
||||
"displayName": "Bucket of Cod",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1022,
|
||||
"name": "tropical_fish_bucket",
|
||||
"stackSize": 1,
|
||||
"displayName": "Bucket of Tropical Fish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1057,
|
||||
"name": "cod",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Cod",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1058,
|
||||
"name": "salmon",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Salmon",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1059,
|
||||
"name": "tropical_fish",
|
||||
"stackSize": 64,
|
||||
"displayName": "Tropical Fish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1060,
|
||||
"name": "pufferfish",
|
||||
"stackSize": 64,
|
||||
"displayName": "Pufferfish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1061,
|
||||
"name": "cooked_cod",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Cod",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1062,
|
||||
"name": "cooked_salmon",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Salmon",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 115.200005,
|
||||
"effectiveQuality": 121.200005,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1102,
|
||||
"name": "cookie",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cookie",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1106,
|
||||
"name": "melon_slice",
|
||||
"stackSize": 64,
|
||||
"displayName": "Melon Slice",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1107,
|
||||
"name": "dried_kelp",
|
||||
"stackSize": 64,
|
||||
"displayName": "Dried Kelp",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 1110,
|
||||
"name": "beef",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Beef",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 1111,
|
||||
"name": "cooked_beef",
|
||||
"stackSize": 64,
|
||||
"displayName": "Steak",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 204.8,
|
||||
"effectiveQuality": 212.8,
|
||||
"saturationRatio": 25.6
|
||||
},
|
||||
{
|
||||
"id": 1112,
|
||||
"name": "chicken",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Chicken",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1113,
|
||||
"name": "cooked_chicken",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Chicken",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1114,
|
||||
"name": "rotten_flesh",
|
||||
"stackSize": 64,
|
||||
"displayName": "Rotten Flesh",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 6.4,
|
||||
"effectiveQuality": 10.4,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 1122,
|
||||
"name": "spider_eye",
|
||||
"stackSize": 64,
|
||||
"displayName": "Spider Eye",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 14.8,
|
||||
"saturationRatio": 6.4
|
||||
},
|
||||
{
|
||||
"id": 1227,
|
||||
"name": "carrot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Carrot",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 21.6,
|
||||
"effectiveQuality": 24.6,
|
||||
"saturationRatio": 7.2000003
|
||||
},
|
||||
{
|
||||
"id": 1228,
|
||||
"name": "potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Potato",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 1229,
|
||||
"name": "baked_potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Baked Potato",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1230,
|
||||
"name": "poisonous_potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Poisonous Potato",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1232,
|
||||
"name": "golden_carrot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Golden Carrot",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 172.8,
|
||||
"effectiveQuality": 178.8,
|
||||
"saturationRatio": 28.800001
|
||||
},
|
||||
{
|
||||
"id": 1241,
|
||||
"name": "pumpkin_pie",
|
||||
"stackSize": 64,
|
||||
"displayName": "Pumpkin Pie",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 84.8,
|
||||
"saturationRatio": 9.6
|
||||
},
|
||||
{
|
||||
"id": 1249,
|
||||
"name": "rabbit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Rabbit",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 1250,
|
||||
"name": "cooked_rabbit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Rabbit",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1251,
|
||||
"name": "rabbit_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Rabbit Stew",
|
||||
"foodPoints": 10.0,
|
||||
"saturation": 240.0,
|
||||
"effectiveQuality": 250.0,
|
||||
"saturationRatio": 24.0
|
||||
},
|
||||
{
|
||||
"id": 1264,
|
||||
"name": "mutton",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Mutton",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1265,
|
||||
"name": "cooked_mutton",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Mutton",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 115.200005,
|
||||
"effectiveQuality": 121.200005,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1283,
|
||||
"name": "chorus_fruit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Chorus Fruit",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 19.2,
|
||||
"effectiveQuality": 23.2,
|
||||
"saturationRatio": 4.8
|
||||
},
|
||||
{
|
||||
"id": 1287,
|
||||
"name": "beetroot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Beetroot",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 3.4,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1289,
|
||||
"name": "beetroot_soup",
|
||||
"stackSize": 1,
|
||||
"displayName": "Beetroot Soup",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1340,
|
||||
"name": "suspicious_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Suspicious Stew",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1373,
|
||||
"name": "sweet_berries",
|
||||
"stackSize": 64,
|
||||
"displayName": "Sweet Berries",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1374,
|
||||
"name": "glow_berries",
|
||||
"stackSize": 64,
|
||||
"displayName": "Glow Berries",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1381,
|
||||
"name": "honey_bottle",
|
||||
"stackSize": 16,
|
||||
"displayName": "Honey Bottle",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 14.400001,
|
||||
"effectiveQuality": 20.400002,
|
||||
"saturationRatio": 2.4
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,94 @@
|
||||
[
|
||||
{
|
||||
"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": "zombie"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "skeleton"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "creeper"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "dragon"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "wither_skeleton"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "piglin"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "custom_head"
|
||||
}
|
||||
]
|
||||
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,233 @@
|
||||
{
|
||||
"default": {},
|
||||
"leaves": {
|
||||
"1105": 1.0,
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5
|
||||
},
|
||||
"coweb": {
|
||||
"1105": 15.0,
|
||||
"911": 15.0,
|
||||
"916": 15.0,
|
||||
"921": 15.0,
|
||||
"926": 15.0,
|
||||
"931": 15.0,
|
||||
"936": 15.0,
|
||||
"941": 15.0
|
||||
},
|
||||
"plant": {
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5
|
||||
},
|
||||
"gourd": {
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5
|
||||
},
|
||||
"vine_or_glow_lichen": {
|
||||
"1105": 2.0
|
||||
},
|
||||
"wool": {
|
||||
"1105": 1.0
|
||||
},
|
||||
"sword_instantly_mines": {
|
||||
"911": 2.0,
|
||||
"916": 1.0,
|
||||
"921": 4.0,
|
||||
"926": 12.0,
|
||||
"931": 6.0,
|
||||
"936": 8.0,
|
||||
"941": 9.0
|
||||
},
|
||||
"sword_efficient": {
|
||||
"911": 2.0,
|
||||
"916": 1.0,
|
||||
"921": 4.0,
|
||||
"926": 12.0,
|
||||
"931": 6.0,
|
||||
"936": 8.0,
|
||||
"941": 9.0
|
||||
},
|
||||
"incorrect_for_wooden_tool": {
|
||||
"912": 2.0,
|
||||
"913": 2.0,
|
||||
"914": 2.0,
|
||||
"915": 2.0
|
||||
},
|
||||
"mineable/shovel": {
|
||||
"912": 2.0,
|
||||
"917": 1.0,
|
||||
"922": 4.0,
|
||||
"927": 12.0,
|
||||
"932": 6.0,
|
||||
"937": 8.0,
|
||||
"942": 9.0
|
||||
},
|
||||
"mineable/pickaxe": {
|
||||
"913": 2.0,
|
||||
"918": 1.0,
|
||||
"923": 4.0,
|
||||
"928": 12.0,
|
||||
"933": 6.0,
|
||||
"938": 8.0,
|
||||
"943": 9.0
|
||||
},
|
||||
"mineable/axe": {
|
||||
"914": 2.0,
|
||||
"919": 1.0,
|
||||
"924": 4.0,
|
||||
"929": 12.0,
|
||||
"934": 6.0,
|
||||
"939": 8.0,
|
||||
"944": 9.0
|
||||
},
|
||||
"mineable/hoe": {
|
||||
"915": 2.0,
|
||||
"920": 1.0,
|
||||
"925": 4.0,
|
||||
"930": 12.0,
|
||||
"935": 6.0,
|
||||
"940": 8.0,
|
||||
"945": 9.0
|
||||
},
|
||||
"incorrect_for_copper_tool": {
|
||||
"917": 1.0,
|
||||
"918": 1.0,
|
||||
"919": 1.0,
|
||||
"920": 1.0
|
||||
},
|
||||
"incorrect_for_stone_tool": {
|
||||
"922": 4.0,
|
||||
"923": 4.0,
|
||||
"924": 4.0,
|
||||
"925": 4.0
|
||||
},
|
||||
"incorrect_for_gold_tool": {
|
||||
"927": 12.0,
|
||||
"928": 12.0,
|
||||
"929": 12.0,
|
||||
"930": 12.0
|
||||
},
|
||||
"incorrect_for_iron_tool": {
|
||||
"932": 6.0,
|
||||
"933": 6.0,
|
||||
"934": 6.0,
|
||||
"935": 6.0
|
||||
},
|
||||
"incorrect_for_diamond_tool": {
|
||||
"937": 8.0,
|
||||
"938": 8.0,
|
||||
"939": 8.0,
|
||||
"940": 8.0
|
||||
},
|
||||
"incorrect_for_netherite_tool": {
|
||||
"942": 9.0,
|
||||
"943": 9.0,
|
||||
"944": 9.0,
|
||||
"945": 9.0
|
||||
},
|
||||
"plant;mineable/axe": {
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5,
|
||||
"914": 2.0,
|
||||
"919": 1.0,
|
||||
"924": 4.0,
|
||||
"929": 12.0,
|
||||
"934": 6.0,
|
||||
"939": 8.0,
|
||||
"944": 9.0
|
||||
},
|
||||
"gourd;mineable/axe": {
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5,
|
||||
"914": 2.0,
|
||||
"919": 1.0,
|
||||
"924": 4.0,
|
||||
"929": 12.0,
|
||||
"934": 6.0,
|
||||
"939": 8.0,
|
||||
"944": 9.0
|
||||
},
|
||||
"leaves;mineable/hoe": {
|
||||
"1105": 1.0,
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 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/axe;mineable/hoe": {
|
||||
"1105": 1.0,
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5,
|
||||
"914": 2.0,
|
||||
"919": 1.0,
|
||||
"924": 4.0,
|
||||
"929": 12.0,
|
||||
"934": 6.0,
|
||||
"939": 8.0,
|
||||
"944": 9.0,
|
||||
"915": 2.0,
|
||||
"920": 1.0,
|
||||
"925": 4.0,
|
||||
"930": 12.0,
|
||||
"935": 6.0,
|
||||
"940": 8.0,
|
||||
"945": 9.0
|
||||
},
|
||||
"vine_or_glow_lichen;plant;mineable/axe": {
|
||||
"1105": 2.0,
|
||||
"911": 1.5,
|
||||
"916": 1.5,
|
||||
"921": 1.5,
|
||||
"926": 1.5,
|
||||
"931": 1.5,
|
||||
"936": 1.5,
|
||||
"941": 1.5,
|
||||
"914": 2.0,
|
||||
"919": 1.0,
|
||||
"924": 4.0,
|
||||
"929": 12.0,
|
||||
"934": 6.0,
|
||||
"939": 8.0,
|
||||
"944": 9.0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,462 @@
|
||||
[
|
||||
{
|
||||
"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": "item_slime"
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"name": "item_cobweb"
|
||||
},
|
||||
{
|
||||
"id": 52,
|
||||
"name": "item_snowball"
|
||||
},
|
||||
{
|
||||
"id": 53,
|
||||
"name": "large_smoke"
|
||||
},
|
||||
{
|
||||
"id": 54,
|
||||
"name": "lava"
|
||||
},
|
||||
{
|
||||
"id": 55,
|
||||
"name": "mycelium"
|
||||
},
|
||||
{
|
||||
"id": 56,
|
||||
"name": "note"
|
||||
},
|
||||
{
|
||||
"id": 57,
|
||||
"name": "poof"
|
||||
},
|
||||
{
|
||||
"id": 58,
|
||||
"name": "portal"
|
||||
},
|
||||
{
|
||||
"id": 59,
|
||||
"name": "rain"
|
||||
},
|
||||
{
|
||||
"id": 60,
|
||||
"name": "smoke"
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"name": "white_smoke"
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"name": "sneeze"
|
||||
},
|
||||
{
|
||||
"id": 63,
|
||||
"name": "spit"
|
||||
},
|
||||
{
|
||||
"id": 64,
|
||||
"name": "squid_ink"
|
||||
},
|
||||
{
|
||||
"id": 65,
|
||||
"name": "sweep_attack"
|
||||
},
|
||||
{
|
||||
"id": 66,
|
||||
"name": "totem_of_undying"
|
||||
},
|
||||
{
|
||||
"id": 67,
|
||||
"name": "underwater"
|
||||
},
|
||||
{
|
||||
"id": 68,
|
||||
"name": "splash"
|
||||
},
|
||||
{
|
||||
"id": 69,
|
||||
"name": "witch"
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"name": "bubble_pop"
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"name": "current_down"
|
||||
},
|
||||
{
|
||||
"id": 72,
|
||||
"name": "bubble_column_up"
|
||||
},
|
||||
{
|
||||
"id": 73,
|
||||
"name": "nautilus"
|
||||
},
|
||||
{
|
||||
"id": 74,
|
||||
"name": "dolphin"
|
||||
},
|
||||
{
|
||||
"id": 75,
|
||||
"name": "campfire_cosy_smoke"
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"name": "campfire_signal_smoke"
|
||||
},
|
||||
{
|
||||
"id": 77,
|
||||
"name": "dripping_honey"
|
||||
},
|
||||
{
|
||||
"id": 78,
|
||||
"name": "falling_honey"
|
||||
},
|
||||
{
|
||||
"id": 79,
|
||||
"name": "landing_honey"
|
||||
},
|
||||
{
|
||||
"id": 80,
|
||||
"name": "falling_nectar"
|
||||
},
|
||||
{
|
||||
"id": 81,
|
||||
"name": "falling_spore_blossom"
|
||||
},
|
||||
{
|
||||
"id": 82,
|
||||
"name": "ash"
|
||||
},
|
||||
{
|
||||
"id": 83,
|
||||
"name": "crimson_spore"
|
||||
},
|
||||
{
|
||||
"id": 84,
|
||||
"name": "warped_spore"
|
||||
},
|
||||
{
|
||||
"id": 85,
|
||||
"name": "spore_blossom_air"
|
||||
},
|
||||
{
|
||||
"id": 86,
|
||||
"name": "dripping_obsidian_tear"
|
||||
},
|
||||
{
|
||||
"id": 87,
|
||||
"name": "falling_obsidian_tear"
|
||||
},
|
||||
{
|
||||
"id": 88,
|
||||
"name": "landing_obsidian_tear"
|
||||
},
|
||||
{
|
||||
"id": 89,
|
||||
"name": "reverse_portal"
|
||||
},
|
||||
{
|
||||
"id": 90,
|
||||
"name": "white_ash"
|
||||
},
|
||||
{
|
||||
"id": 91,
|
||||
"name": "small_flame"
|
||||
},
|
||||
{
|
||||
"id": 92,
|
||||
"name": "snowflake"
|
||||
},
|
||||
{
|
||||
"id": 93,
|
||||
"name": "dripping_dripstone_lava"
|
||||
},
|
||||
{
|
||||
"id": 94,
|
||||
"name": "falling_dripstone_lava"
|
||||
},
|
||||
{
|
||||
"id": 95,
|
||||
"name": "dripping_dripstone_water"
|
||||
},
|
||||
{
|
||||
"id": 96,
|
||||
"name": "falling_dripstone_water"
|
||||
},
|
||||
{
|
||||
"id": 97,
|
||||
"name": "glow_squid_ink"
|
||||
},
|
||||
{
|
||||
"id": 98,
|
||||
"name": "glow"
|
||||
},
|
||||
{
|
||||
"id": 99,
|
||||
"name": "wax_on"
|
||||
},
|
||||
{
|
||||
"id": 100,
|
||||
"name": "wax_off"
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"name": "electric_spark"
|
||||
},
|
||||
{
|
||||
"id": 102,
|
||||
"name": "scrape"
|
||||
},
|
||||
{
|
||||
"id": 103,
|
||||
"name": "shriek"
|
||||
},
|
||||
{
|
||||
"id": 104,
|
||||
"name": "egg_crack"
|
||||
},
|
||||
{
|
||||
"id": 105,
|
||||
"name": "dust_plume"
|
||||
},
|
||||
{
|
||||
"id": 106,
|
||||
"name": "trial_spawner_detection"
|
||||
},
|
||||
{
|
||||
"id": 107,
|
||||
"name": "trial_spawner_detection_ominous"
|
||||
},
|
||||
{
|
||||
"id": 108,
|
||||
"name": "vault_connection"
|
||||
},
|
||||
{
|
||||
"id": 109,
|
||||
"name": "dust_pillar"
|
||||
},
|
||||
{
|
||||
"id": 110,
|
||||
"name": "ominous_spawning"
|
||||
},
|
||||
{
|
||||
"id": 111,
|
||||
"name": "raid_omen"
|
||||
},
|
||||
{
|
||||
"id": 112,
|
||||
"name": "trial_omen"
|
||||
},
|
||||
{
|
||||
"id": 113,
|
||||
"name": "block_crumble"
|
||||
},
|
||||
{
|
||||
"id": 114,
|
||||
"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
@@ -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": 1317381
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"mangrove_swamp",
|
||||
"swamp"
|
||||
],
|
||||
"color": 6975545
|
||||
},
|
||||
{
|
||||
"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": 774,
|
||||
"minecraftVersion": "1.21.11",
|
||||
"majorVersion": "1.21",
|
||||
"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
|
||||
}
|
||||
]
|
||||
@@ -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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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
@@ -0,0 +1,236 @@
|
||||
[
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,959 @@
|
||||
[
|
||||
{
|
||||
"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": "sword",
|
||||
"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": "sword",
|
||||
"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": "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": 22,
|
||||
"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": 23,
|
||||
"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": 24,
|
||||
"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": 25,
|
||||
"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": 26,
|
||||
"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": 27,
|
||||
"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": 28,
|
||||
"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": 29,
|
||||
"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": 30,
|
||||
"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": 31,
|
||||
"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": 32,
|
||||
"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": 33,
|
||||
"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": 34,
|
||||
"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": 35,
|
||||
"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": 36,
|
||||
"name": "sweeping_edge",
|
||||
"displayName": "Sweeping Edge",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 2,
|
||||
"b": 1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 2,
|
||||
"b": 1
|
||||
},
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"exclude": [],
|
||||
"category": "sword",
|
||||
"weight": 2,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"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": 38,
|
||||
"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": 39,
|
||||
"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": 40,
|
||||
"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": 41,
|
||||
"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
@@ -0,0 +1,402 @@
|
||||
[
|
||||
{
|
||||
"id": 857,
|
||||
"name": "apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 19.2,
|
||||
"effectiveQuality": 23.2,
|
||||
"saturationRatio": 4.8
|
||||
},
|
||||
{
|
||||
"id": 906,
|
||||
"name": "mushroom_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Mushroom Stew",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 912,
|
||||
"name": "bread",
|
||||
"stackSize": 64,
|
||||
"displayName": "Bread",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 938,
|
||||
"name": "porkchop",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Porkchop",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 939,
|
||||
"name": "cooked_porkchop",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Porkchop",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 204.8,
|
||||
"effectiveQuality": 212.8,
|
||||
"saturationRatio": 25.6
|
||||
},
|
||||
{
|
||||
"id": 941,
|
||||
"name": "golden_apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Golden Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 80.8,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 942,
|
||||
"name": "enchanted_golden_apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Enchanted Golden Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 80.8,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1012,
|
||||
"name": "cod",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Cod",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1013,
|
||||
"name": "salmon",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Salmon",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1014,
|
||||
"name": "tropical_fish",
|
||||
"stackSize": 64,
|
||||
"displayName": "Tropical Fish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1015,
|
||||
"name": "pufferfish",
|
||||
"stackSize": 64,
|
||||
"displayName": "Pufferfish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1016,
|
||||
"name": "cooked_cod",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Cod",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1017,
|
||||
"name": "cooked_salmon",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Salmon",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 115.200005,
|
||||
"effectiveQuality": 121.200005,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1057,
|
||||
"name": "cookie",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cookie",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1061,
|
||||
"name": "melon_slice",
|
||||
"stackSize": 64,
|
||||
"displayName": "Melon Slice",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1062,
|
||||
"name": "dried_kelp",
|
||||
"stackSize": 64,
|
||||
"displayName": "Dried Kelp",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 1065,
|
||||
"name": "beef",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Beef",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 1066,
|
||||
"name": "cooked_beef",
|
||||
"stackSize": 64,
|
||||
"displayName": "Steak",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 204.8,
|
||||
"effectiveQuality": 212.8,
|
||||
"saturationRatio": 25.6
|
||||
},
|
||||
{
|
||||
"id": 1067,
|
||||
"name": "chicken",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Chicken",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1068,
|
||||
"name": "cooked_chicken",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Chicken",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1069,
|
||||
"name": "rotten_flesh",
|
||||
"stackSize": 64,
|
||||
"displayName": "Rotten Flesh",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 6.4,
|
||||
"effectiveQuality": 10.4,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 1077,
|
||||
"name": "spider_eye",
|
||||
"stackSize": 64,
|
||||
"displayName": "Spider Eye",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 14.8,
|
||||
"saturationRatio": 6.4
|
||||
},
|
||||
{
|
||||
"id": 1177,
|
||||
"name": "carrot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Carrot",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 21.6,
|
||||
"effectiveQuality": 24.6,
|
||||
"saturationRatio": 7.2000003
|
||||
},
|
||||
{
|
||||
"id": 1178,
|
||||
"name": "potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Potato",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 1179,
|
||||
"name": "baked_potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Baked Potato",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1180,
|
||||
"name": "poisonous_potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Poisonous Potato",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1182,
|
||||
"name": "golden_carrot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Golden Carrot",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 172.8,
|
||||
"effectiveQuality": 178.8,
|
||||
"saturationRatio": 28.800001
|
||||
},
|
||||
{
|
||||
"id": 1191,
|
||||
"name": "pumpkin_pie",
|
||||
"stackSize": 64,
|
||||
"displayName": "Pumpkin Pie",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 84.8,
|
||||
"saturationRatio": 9.6
|
||||
},
|
||||
{
|
||||
"id": 1199,
|
||||
"name": "rabbit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Rabbit",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 1200,
|
||||
"name": "cooked_rabbit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Rabbit",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1201,
|
||||
"name": "rabbit_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Rabbit Stew",
|
||||
"foodPoints": 10.0,
|
||||
"saturation": 240.0,
|
||||
"effectiveQuality": 250.0,
|
||||
"saturationRatio": 24.0
|
||||
},
|
||||
{
|
||||
"id": 1212,
|
||||
"name": "mutton",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Mutton",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1213,
|
||||
"name": "cooked_mutton",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Mutton",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 115.200005,
|
||||
"effectiveQuality": 121.200005,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1231,
|
||||
"name": "chorus_fruit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Chorus Fruit",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 19.2,
|
||||
"effectiveQuality": 23.2,
|
||||
"saturationRatio": 4.8
|
||||
},
|
||||
{
|
||||
"id": 1235,
|
||||
"name": "beetroot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Beetroot",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 3.4,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1237,
|
||||
"name": "beetroot_soup",
|
||||
"stackSize": 1,
|
||||
"displayName": "Beetroot Soup",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1275,
|
||||
"name": "suspicious_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Suspicious Stew",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1300,
|
||||
"name": "sweet_berries",
|
||||
"stackSize": 64,
|
||||
"displayName": "Sweet Berries",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1301,
|
||||
"name": "glow_berries",
|
||||
"stackSize": 64,
|
||||
"displayName": "Glow Berries",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1308,
|
||||
"name": "honey_bottle",
|
||||
"stackSize": 16,
|
||||
"displayName": "Honey Bottle",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 14.400001,
|
||||
"effectiveQuality": 20.400002,
|
||||
"saturationRatio": 2.4
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,94 @@
|
||||
[
|
||||
{
|
||||
"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": "zombie"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "skeleton"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "creeper"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "dragon"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "wither_skeleton"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "piglin"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"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,206 @@
|
||||
{
|
||||
"default": {},
|
||||
"leaves": {
|
||||
"1060": 1.0,
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5
|
||||
},
|
||||
"coweb": {
|
||||
"1060": 15.0,
|
||||
"875": 15.0,
|
||||
"880": 15.0,
|
||||
"885": 15.0,
|
||||
"890": 15.0,
|
||||
"895": 15.0,
|
||||
"900": 15.0
|
||||
},
|
||||
"plant": {
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5
|
||||
},
|
||||
"gourd": {
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5
|
||||
},
|
||||
"vine_or_glow_lichen": {
|
||||
"1060": 2.0
|
||||
},
|
||||
"wool": {
|
||||
"1060": 1.0
|
||||
},
|
||||
"sword_instantly_mines": {
|
||||
"875": 2.0,
|
||||
"880": 4.0,
|
||||
"885": 12.0,
|
||||
"890": 6.0,
|
||||
"895": 8.0,
|
||||
"900": 9.0
|
||||
},
|
||||
"sword_efficient": {
|
||||
"875": 2.0,
|
||||
"880": 4.0,
|
||||
"885": 12.0,
|
||||
"890": 6.0,
|
||||
"895": 8.0,
|
||||
"900": 9.0
|
||||
},
|
||||
"incorrect_for_wooden_tool": {
|
||||
"876": 2.0,
|
||||
"877": 2.0,
|
||||
"878": 2.0,
|
||||
"879": 2.0
|
||||
},
|
||||
"mineable/shovel": {
|
||||
"876": 2.0,
|
||||
"881": 4.0,
|
||||
"886": 12.0,
|
||||
"891": 6.0,
|
||||
"896": 8.0,
|
||||
"901": 9.0
|
||||
},
|
||||
"mineable/pickaxe": {
|
||||
"877": 2.0,
|
||||
"882": 4.0,
|
||||
"887": 12.0,
|
||||
"892": 6.0,
|
||||
"897": 8.0,
|
||||
"902": 9.0
|
||||
},
|
||||
"mineable/axe": {
|
||||
"878": 2.0,
|
||||
"883": 4.0,
|
||||
"888": 12.0,
|
||||
"893": 6.0,
|
||||
"898": 8.0,
|
||||
"903": 9.0
|
||||
},
|
||||
"mineable/hoe": {
|
||||
"879": 2.0,
|
||||
"884": 4.0,
|
||||
"889": 12.0,
|
||||
"894": 6.0,
|
||||
"899": 8.0,
|
||||
"904": 9.0
|
||||
},
|
||||
"incorrect_for_stone_tool": {
|
||||
"881": 4.0,
|
||||
"882": 4.0,
|
||||
"883": 4.0,
|
||||
"884": 4.0
|
||||
},
|
||||
"incorrect_for_gold_tool": {
|
||||
"886": 12.0,
|
||||
"887": 12.0,
|
||||
"888": 12.0,
|
||||
"889": 12.0
|
||||
},
|
||||
"incorrect_for_iron_tool": {
|
||||
"891": 6.0,
|
||||
"892": 6.0,
|
||||
"893": 6.0,
|
||||
"894": 6.0
|
||||
},
|
||||
"incorrect_for_diamond_tool": {
|
||||
"896": 8.0,
|
||||
"897": 8.0,
|
||||
"898": 8.0,
|
||||
"899": 8.0
|
||||
},
|
||||
"incorrect_for_netherite_tool": {
|
||||
"901": 9.0,
|
||||
"902": 9.0,
|
||||
"903": 9.0,
|
||||
"904": 9.0
|
||||
},
|
||||
"plant;mineable/axe": {
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5,
|
||||
"878": 2.0,
|
||||
"883": 4.0,
|
||||
"888": 12.0,
|
||||
"893": 6.0,
|
||||
"898": 8.0,
|
||||
"903": 9.0
|
||||
},
|
||||
"gourd;mineable/axe": {
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5,
|
||||
"878": 2.0,
|
||||
"883": 4.0,
|
||||
"888": 12.0,
|
||||
"893": 6.0,
|
||||
"898": 8.0,
|
||||
"903": 9.0
|
||||
},
|
||||
"leaves;mineable/hoe": {
|
||||
"1060": 1.0,
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5,
|
||||
"879": 2.0,
|
||||
"884": 4.0,
|
||||
"889": 12.0,
|
||||
"894": 6.0,
|
||||
"899": 8.0,
|
||||
"904": 9.0
|
||||
},
|
||||
"leaves;mineable/axe;mineable/hoe": {
|
||||
"1060": 1.0,
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5,
|
||||
"878": 2.0,
|
||||
"883": 4.0,
|
||||
"888": 12.0,
|
||||
"893": 6.0,
|
||||
"898": 8.0,
|
||||
"903": 9.0,
|
||||
"879": 2.0,
|
||||
"884": 4.0,
|
||||
"889": 12.0,
|
||||
"894": 6.0,
|
||||
"899": 8.0,
|
||||
"904": 9.0
|
||||
},
|
||||
"vine_or_glow_lichen;plant;mineable/axe": {
|
||||
"1060": 2.0,
|
||||
"875": 1.5,
|
||||
"880": 1.5,
|
||||
"885": 1.5,
|
||||
"890": 1.5,
|
||||
"895": 1.5,
|
||||
"900": 1.5,
|
||||
"878": 2.0,
|
||||
"883": 4.0,
|
||||
"888": 12.0,
|
||||
"893": 6.0,
|
||||
"898": 8.0,
|
||||
"903": 9.0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,458 @@
|
||||
[
|
||||
{
|
||||
"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": "crit"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "damage_indicator"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "dragon_breath"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "dripping_lava"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "falling_lava"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "landing_lava"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "dripping_water"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "falling_water"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "dust"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "dust_color_transition"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "effect"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "elder_guardian"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "enchanted_hit"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "enchant"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "end_rod"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "entity_effect"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "explosion_emitter"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "explosion"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "gust"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "small_gust"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "gust_emitter_large"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "gust_emitter_small"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "sonic_boom"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "falling_dust"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "firework"
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "fishing"
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "flame"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "infested"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "cherry_leaves"
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "pale_oak_leaves"
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "tinted_leaves"
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "sculk_soul"
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "sculk_charge"
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "sculk_charge_pop"
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "soul_fire_flame"
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"name": "soul"
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"name": "flash"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"name": "happy_villager"
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"name": "composter"
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"name": "heart"
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"name": "instant_effect"
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"name": "item"
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"name": "vibration"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"name": "trail"
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"name": "item_slime"
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"name": "item_cobweb"
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"name": "item_snowball"
|
||||
},
|
||||
{
|
||||
"id": 52,
|
||||
"name": "large_smoke"
|
||||
},
|
||||
{
|
||||
"id": 53,
|
||||
"name": "lava"
|
||||
},
|
||||
{
|
||||
"id": 54,
|
||||
"name": "mycelium"
|
||||
},
|
||||
{
|
||||
"id": 55,
|
||||
"name": "note"
|
||||
},
|
||||
{
|
||||
"id": 56,
|
||||
"name": "poof"
|
||||
},
|
||||
{
|
||||
"id": 57,
|
||||
"name": "portal"
|
||||
},
|
||||
{
|
||||
"id": 58,
|
||||
"name": "rain"
|
||||
},
|
||||
{
|
||||
"id": 59,
|
||||
"name": "smoke"
|
||||
},
|
||||
{
|
||||
"id": 60,
|
||||
"name": "white_smoke"
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"name": "sneeze"
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"name": "spit"
|
||||
},
|
||||
{
|
||||
"id": 63,
|
||||
"name": "squid_ink"
|
||||
},
|
||||
{
|
||||
"id": 64,
|
||||
"name": "sweep_attack"
|
||||
},
|
||||
{
|
||||
"id": 65,
|
||||
"name": "totem_of_undying"
|
||||
},
|
||||
{
|
||||
"id": 66,
|
||||
"name": "underwater"
|
||||
},
|
||||
{
|
||||
"id": 67,
|
||||
"name": "splash"
|
||||
},
|
||||
{
|
||||
"id": 68,
|
||||
"name": "witch"
|
||||
},
|
||||
{
|
||||
"id": 69,
|
||||
"name": "bubble_pop"
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"name": "current_down"
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"name": "bubble_column_up"
|
||||
},
|
||||
{
|
||||
"id": 72,
|
||||
"name": "nautilus"
|
||||
},
|
||||
{
|
||||
"id": 73,
|
||||
"name": "dolphin"
|
||||
},
|
||||
{
|
||||
"id": 74,
|
||||
"name": "campfire_cosy_smoke"
|
||||
},
|
||||
{
|
||||
"id": 75,
|
||||
"name": "campfire_signal_smoke"
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"name": "dripping_honey"
|
||||
},
|
||||
{
|
||||
"id": 77,
|
||||
"name": "falling_honey"
|
||||
},
|
||||
{
|
||||
"id": 78,
|
||||
"name": "landing_honey"
|
||||
},
|
||||
{
|
||||
"id": 79,
|
||||
"name": "falling_nectar"
|
||||
},
|
||||
{
|
||||
"id": 80,
|
||||
"name": "falling_spore_blossom"
|
||||
},
|
||||
{
|
||||
"id": 81,
|
||||
"name": "ash"
|
||||
},
|
||||
{
|
||||
"id": 82,
|
||||
"name": "crimson_spore"
|
||||
},
|
||||
{
|
||||
"id": 83,
|
||||
"name": "warped_spore"
|
||||
},
|
||||
{
|
||||
"id": 84,
|
||||
"name": "spore_blossom_air"
|
||||
},
|
||||
{
|
||||
"id": 85,
|
||||
"name": "dripping_obsidian_tear"
|
||||
},
|
||||
{
|
||||
"id": 86,
|
||||
"name": "falling_obsidian_tear"
|
||||
},
|
||||
{
|
||||
"id": 87,
|
||||
"name": "landing_obsidian_tear"
|
||||
},
|
||||
{
|
||||
"id": 88,
|
||||
"name": "reverse_portal"
|
||||
},
|
||||
{
|
||||
"id": 89,
|
||||
"name": "white_ash"
|
||||
},
|
||||
{
|
||||
"id": 90,
|
||||
"name": "small_flame"
|
||||
},
|
||||
{
|
||||
"id": 91,
|
||||
"name": "snowflake"
|
||||
},
|
||||
{
|
||||
"id": 92,
|
||||
"name": "dripping_dripstone_lava"
|
||||
},
|
||||
{
|
||||
"id": 93,
|
||||
"name": "falling_dripstone_lava"
|
||||
},
|
||||
{
|
||||
"id": 94,
|
||||
"name": "dripping_dripstone_water"
|
||||
},
|
||||
{
|
||||
"id": 95,
|
||||
"name": "falling_dripstone_water"
|
||||
},
|
||||
{
|
||||
"id": 96,
|
||||
"name": "glow_squid_ink"
|
||||
},
|
||||
{
|
||||
"id": 97,
|
||||
"name": "glow"
|
||||
},
|
||||
{
|
||||
"id": 98,
|
||||
"name": "wax_on"
|
||||
},
|
||||
{
|
||||
"id": 99,
|
||||
"name": "wax_off"
|
||||
},
|
||||
{
|
||||
"id": 100,
|
||||
"name": "electric_spark"
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"name": "scrape"
|
||||
},
|
||||
{
|
||||
"id": 102,
|
||||
"name": "shriek"
|
||||
},
|
||||
{
|
||||
"id": 103,
|
||||
"name": "egg_crack"
|
||||
},
|
||||
{
|
||||
"id": 104,
|
||||
"name": "dust_plume"
|
||||
},
|
||||
{
|
||||
"id": 105,
|
||||
"name": "trial_spawner_detection"
|
||||
},
|
||||
{
|
||||
"id": 106,
|
||||
"name": "trial_spawner_detection_ominous"
|
||||
},
|
||||
{
|
||||
"id": 107,
|
||||
"name": "vault_connection"
|
||||
},
|
||||
{
|
||||
"id": 108,
|
||||
"name": "dust_pillar"
|
||||
},
|
||||
{
|
||||
"id": 109,
|
||||
"name": "ominous_spawning"
|
||||
},
|
||||
{
|
||||
"id": 110,
|
||||
"name": "raid_omen"
|
||||
},
|
||||
{
|
||||
"id": 111,
|
||||
"name": "trial_omen"
|
||||
},
|
||||
{
|
||||
"id": 112,
|
||||
"name": "block_crumble"
|
||||
},
|
||||
{
|
||||
"id": 113,
|
||||
"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
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,465 @@
|
||||
{
|
||||
"grass": {
|
||||
"data": [
|
||||
{
|
||||
"keys": [
|
||||
"badlands",
|
||||
"eroded_badlands",
|
||||
"wooded_badlands"
|
||||
],
|
||||
"color": 9470285
|
||||
},
|
||||
{
|
||||
"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": 11983713
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"dark_forest"
|
||||
],
|
||||
"color": 1317381
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"mangrove_swamp",
|
||||
"swamp"
|
||||
],
|
||||
"color": 6975545
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"pale_garden"
|
||||
],
|
||||
"color": 7832178
|
||||
}
|
||||
]
|
||||
},
|
||||
"foliage": {
|
||||
"data": [
|
||||
{
|
||||
"keys": [
|
||||
"badlands",
|
||||
"eroded_badlands",
|
||||
"wooded_badlands"
|
||||
],
|
||||
"color": 10387789
|
||||
},
|
||||
{
|
||||
"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": 11983713
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"mangrove_swamp"
|
||||
],
|
||||
"color": 9285927
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"pale_garden"
|
||||
],
|
||||
"color": 8883574
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"swamp"
|
||||
],
|
||||
"color": 6975545
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": 4159204
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"cherry_grove"
|
||||
],
|
||||
"color": 6141935
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"cold_ocean",
|
||||
"deep_cold_ocean",
|
||||
"snowy_beach",
|
||||
"snowy_taiga"
|
||||
],
|
||||
"color": 4020182
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"deep_frozen_ocean",
|
||||
"frozen_ocean",
|
||||
"frozen_river"
|
||||
],
|
||||
"color": 3750089
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"deep_lukewarm_ocean",
|
||||
"lukewarm_ocean"
|
||||
],
|
||||
"color": 4566514
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"mangrove_swamp"
|
||||
],
|
||||
"color": 3832426
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"meadow"
|
||||
],
|
||||
"color": 937679
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"pale_garden"
|
||||
],
|
||||
"color": 7768221
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"swamp"
|
||||
],
|
||||
"color": 6388580
|
||||
},
|
||||
{
|
||||
"keys": [
|
||||
"warm_ocean"
|
||||
],
|
||||
"color": 4445678
|
||||
}
|
||||
]
|
||||
},
|
||||
"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": 772,
|
||||
"minecraftVersion": "1.21.8",
|
||||
"majorVersion": "1.21",
|
||||
"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
|
||||
}
|
||||
]
|
||||
@@ -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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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": 7254527
|
||||
},
|
||||
{
|
||||
"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
@@ -0,0 +1,236 @@
|
||||
[
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,959 @@
|
||||
[
|
||||
{
|
||||
"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": "sword",
|
||||
"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": "sword",
|
||||
"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": "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": 22,
|
||||
"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": 23,
|
||||
"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": 24,
|
||||
"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": 25,
|
||||
"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": 26,
|
||||
"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": 27,
|
||||
"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": 28,
|
||||
"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": 29,
|
||||
"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": 30,
|
||||
"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": 31,
|
||||
"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": 32,
|
||||
"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": 33,
|
||||
"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": 34,
|
||||
"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": 35,
|
||||
"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": 36,
|
||||
"name": "sweeping_edge",
|
||||
"displayName": "Sweeping Edge",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 2,
|
||||
"b": 1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 2,
|
||||
"b": 1
|
||||
},
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"exclude": [],
|
||||
"category": "sword",
|
||||
"weight": 2,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"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": 38,
|
||||
"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": 39,
|
||||
"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": 40,
|
||||
"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": 41,
|
||||
"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
@@ -0,0 +1,402 @@
|
||||
[
|
||||
{
|
||||
"id": 893,
|
||||
"name": "apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 19.2,
|
||||
"effectiveQuality": 23.2,
|
||||
"saturationRatio": 4.8
|
||||
},
|
||||
{
|
||||
"id": 947,
|
||||
"name": "mushroom_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Mushroom Stew",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 953,
|
||||
"name": "bread",
|
||||
"stackSize": 64,
|
||||
"displayName": "Bread",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 983,
|
||||
"name": "porkchop",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Porkchop",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 984,
|
||||
"name": "cooked_porkchop",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Porkchop",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 204.8,
|
||||
"effectiveQuality": 212.8,
|
||||
"saturationRatio": 25.6
|
||||
},
|
||||
{
|
||||
"id": 986,
|
||||
"name": "golden_apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Golden Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 80.8,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 987,
|
||||
"name": "enchanted_golden_apple",
|
||||
"stackSize": 64,
|
||||
"displayName": "Enchanted Golden Apple",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 80.8,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1057,
|
||||
"name": "cod",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Cod",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1058,
|
||||
"name": "salmon",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Salmon",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1059,
|
||||
"name": "tropical_fish",
|
||||
"stackSize": 64,
|
||||
"displayName": "Tropical Fish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1060,
|
||||
"name": "pufferfish",
|
||||
"stackSize": 64,
|
||||
"displayName": "Pufferfish",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 1.4,
|
||||
"saturationRatio": 0.4
|
||||
},
|
||||
{
|
||||
"id": 1061,
|
||||
"name": "cooked_cod",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Cod",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1062,
|
||||
"name": "cooked_salmon",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Salmon",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 115.200005,
|
||||
"effectiveQuality": 121.200005,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1102,
|
||||
"name": "cookie",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cookie",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1106,
|
||||
"name": "melon_slice",
|
||||
"stackSize": 64,
|
||||
"displayName": "Melon Slice",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1107,
|
||||
"name": "dried_kelp",
|
||||
"stackSize": 64,
|
||||
"displayName": "Dried Kelp",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 1110,
|
||||
"name": "beef",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Beef",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 1111,
|
||||
"name": "cooked_beef",
|
||||
"stackSize": 64,
|
||||
"displayName": "Steak",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 204.8,
|
||||
"effectiveQuality": 212.8,
|
||||
"saturationRatio": 25.6
|
||||
},
|
||||
{
|
||||
"id": 1112,
|
||||
"name": "chicken",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Chicken",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1113,
|
||||
"name": "cooked_chicken",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Chicken",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1114,
|
||||
"name": "rotten_flesh",
|
||||
"stackSize": 64,
|
||||
"displayName": "Rotten Flesh",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 6.4,
|
||||
"effectiveQuality": 10.4,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 1122,
|
||||
"name": "spider_eye",
|
||||
"stackSize": 64,
|
||||
"displayName": "Spider Eye",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 14.8,
|
||||
"saturationRatio": 6.4
|
||||
},
|
||||
{
|
||||
"id": 1223,
|
||||
"name": "carrot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Carrot",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 21.6,
|
||||
"effectiveQuality": 24.6,
|
||||
"saturationRatio": 7.2000003
|
||||
},
|
||||
{
|
||||
"id": 1224,
|
||||
"name": "potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Potato",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 1225,
|
||||
"name": "baked_potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Baked Potato",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1226,
|
||||
"name": "poisonous_potato",
|
||||
"stackSize": 64,
|
||||
"displayName": "Poisonous Potato",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1228,
|
||||
"name": "golden_carrot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Golden Carrot",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 172.8,
|
||||
"effectiveQuality": 178.8,
|
||||
"saturationRatio": 28.800001
|
||||
},
|
||||
{
|
||||
"id": 1237,
|
||||
"name": "pumpkin_pie",
|
||||
"stackSize": 64,
|
||||
"displayName": "Pumpkin Pie",
|
||||
"foodPoints": 8.0,
|
||||
"saturation": 76.8,
|
||||
"effectiveQuality": 84.8,
|
||||
"saturationRatio": 9.6
|
||||
},
|
||||
{
|
||||
"id": 1245,
|
||||
"name": "rabbit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Rabbit",
|
||||
"foodPoints": 3.0,
|
||||
"saturation": 10.8,
|
||||
"effectiveQuality": 13.8,
|
||||
"saturationRatio": 3.6000001
|
||||
},
|
||||
{
|
||||
"id": 1246,
|
||||
"name": "cooked_rabbit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Rabbit",
|
||||
"foodPoints": 5.0,
|
||||
"saturation": 60.0,
|
||||
"effectiveQuality": 65.0,
|
||||
"saturationRatio": 12.0
|
||||
},
|
||||
{
|
||||
"id": 1247,
|
||||
"name": "rabbit_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Rabbit Stew",
|
||||
"foodPoints": 10.0,
|
||||
"saturation": 240.0,
|
||||
"effectiveQuality": 250.0,
|
||||
"saturationRatio": 24.0
|
||||
},
|
||||
{
|
||||
"id": 1259,
|
||||
"name": "mutton",
|
||||
"stackSize": 64,
|
||||
"displayName": "Raw Mutton",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 6.8,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1260,
|
||||
"name": "cooked_mutton",
|
||||
"stackSize": 64,
|
||||
"displayName": "Cooked Mutton",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 115.200005,
|
||||
"effectiveQuality": 121.200005,
|
||||
"saturationRatio": 19.2
|
||||
},
|
||||
{
|
||||
"id": 1278,
|
||||
"name": "chorus_fruit",
|
||||
"stackSize": 64,
|
||||
"displayName": "Chorus Fruit",
|
||||
"foodPoints": 4.0,
|
||||
"saturation": 19.2,
|
||||
"effectiveQuality": 23.2,
|
||||
"saturationRatio": 4.8
|
||||
},
|
||||
{
|
||||
"id": 1282,
|
||||
"name": "beetroot",
|
||||
"stackSize": 64,
|
||||
"displayName": "Beetroot",
|
||||
"foodPoints": 1.0,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 3.4,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 1284,
|
||||
"name": "beetroot_soup",
|
||||
"stackSize": 1,
|
||||
"displayName": "Beetroot Soup",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1323,
|
||||
"name": "suspicious_stew",
|
||||
"stackSize": 1,
|
||||
"displayName": "Suspicious Stew",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 86.4,
|
||||
"effectiveQuality": 92.4,
|
||||
"saturationRatio": 14.400001
|
||||
},
|
||||
{
|
||||
"id": 1356,
|
||||
"name": "sweet_berries",
|
||||
"stackSize": 64,
|
||||
"displayName": "Sweet Berries",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1357,
|
||||
"name": "glow_berries",
|
||||
"stackSize": 64,
|
||||
"displayName": "Glow Berries",
|
||||
"foodPoints": 2.0,
|
||||
"saturation": 1.6,
|
||||
"effectiveQuality": 3.6,
|
||||
"saturationRatio": 0.8
|
||||
},
|
||||
{
|
||||
"id": 1364,
|
||||
"name": "honey_bottle",
|
||||
"stackSize": 16,
|
||||
"displayName": "Honey Bottle",
|
||||
"foodPoints": 6.0,
|
||||
"saturation": 14.400001,
|
||||
"effectiveQuality": 20.400002,
|
||||
"saturationRatio": 2.4
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,94 @@
|
||||
[
|
||||
{
|
||||
"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": "zombie"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "skeleton"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "creeper"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "dragon"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "wither_skeleton"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "piglin"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "custom_head"
|
||||
}
|
||||
]
|
||||
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
Reference in New Issue
Block a user