Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
a6102b7ec9 | ||
|
|
254b75e76b | ||
|
|
33cec6ecc9 | ||
|
|
fbf9bacd05 | ||
|
|
29baf8da9f | ||
|
|
43fea40d08 | ||
|
|
b107eba37c | ||
|
|
abc0f6aebb | ||
|
|
8c6172dcda | ||
|
|
57e78478cd | ||
|
|
f554e91354 | ||
|
|
e0cf1834f1 | ||
|
|
047c4d02ff | ||
|
|
c516cc5283 | ||
|
|
165075ea02 | ||
|
|
2eee7bde24 | ||
|
|
73d4e07b06 | ||
|
|
5dfd8fc499 | ||
|
|
1b36949316 | ||
|
|
5c455bd2c8 | ||
|
|
8d1a4b581b | ||
|
|
085b83cb71 | ||
|
|
65bf63d67e | ||
|
|
d8cc9cab48 | ||
|
|
f7d7a72b7c | ||
|
|
29b1b92113 | ||
|
|
bd83b9689e | ||
|
|
85529b965b |
@@ -0,0 +1,2 @@
|
||||
**/*_test.go export-ignore
|
||||
**/testdata export-ignore
|
||||
@@ -1,3 +1,5 @@
|
||||
.devres/
|
||||
.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
|
||||
@@ -1,202 +1,61 @@
|
||||
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.
|
||||
0. Additional Definitions.
|
||||
|
||||
1. Definitions.
|
||||
As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
|
||||
b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license document.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
4. Combined Works.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
|
||||
c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
|
||||
d) Do one of the following:
|
||||
0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
|
||||
1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
|
||||
e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
5. Combined Libraries.
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
|
||||
b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.
|
||||
@@ -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
|
||||
}
|
||||
+22
-5
@@ -1,22 +1,39 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
)
|
||||
|
||||
// Connect connects to the given address note that it does not resolve the SRV records it's just a raw net.Dial
|
||||
// You must close the connection when you're done with it
|
||||
func Connect(addr string) (ret *proto.Conn, err error) {
|
||||
ret = &proto.Conn{}
|
||||
err = ret.SetVersion("1.21.8")
|
||||
s, err := Status(addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ret.SetState(proto_base.Handshaking)
|
||||
ret.CompressionThreshold = -1
|
||||
ret, err = ConnectVersionLess(addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = ret.SetProtocolVersion(s.Version.Protocol)
|
||||
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 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
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package modules
|
||||
package client
|
||||
|
||||
import (
|
||||
"errors"
|
||||
@@ -14,8 +14,12 @@ type ConfigIgnorer struct {
|
||||
*proto.Conn
|
||||
}
|
||||
|
||||
func (c *ConfigIgnorer) Default(event any) (err error) {
|
||||
fmt.Printf("%#v\n", event)
|
||||
func (c *ConfigIgnorer) OnStart() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (c *ConfigIgnorer) Default(e event.Anything) (err error) {
|
||||
c.Log.Debug("Config ignorer", "packet", fmt.Sprintf("%#v", e))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -23,7 +27,7 @@ func (c *ConfigIgnorer) OnKnownPacks(packet *v1_21_8.ConfigurationToClientPacket
|
||||
return c.Send(&v1_21_8.ConfigurationToServerPacketCommonSelectKnownPacks{Packs: packet.Packs})
|
||||
}
|
||||
|
||||
func (c *ConfigIgnorer) OnFinish(_ v1_21_8.ConfigurationToClientPacketFinishConfiguration) (err error) {
|
||||
func (c *ConfigIgnorer) OnFinish(_ *v1_21_8.ConfigurationToClientPacketFinishConfiguration) (err error) {
|
||||
err = c.Send(&v1_21_8.ConfigurationToServerPacketFinishConfiguration{})
|
||||
if err != nil {
|
||||
return
|
||||
@@ -44,7 +48,14 @@ func (c *ConfigIgnorer) OnKeepAlive(packet *v1_21_8.ConfigurationToClientPacketK
|
||||
}
|
||||
|
||||
func IgnoreConfig(c *proto.Conn) (err error) {
|
||||
err = c.Start(&ConfigIgnorer{c})
|
||||
ci := &ConfigIgnorer{c}
|
||||
ci.RegisterCritical(ci.Default)
|
||||
ci.RegisterUntilLatest(ci.OnKnownPacks)
|
||||
ci.RegisterUntilLatest(ci.OnFinish)
|
||||
ci.RegisterUntilLatest(ci.OnPing)
|
||||
ci.RegisterUntilLatest(ci.OnKeepAlive)
|
||||
|
||||
err = ci.StartConn()
|
||||
if err != nil {
|
||||
err = errors.Join(err, errors.New("failed to ignore config"))
|
||||
}
|
||||
+113
-9
@@ -1,22 +1,126 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func LookupMinecraftSRV(host string, port uint16) (hostRet string, portRet uint16) {
|
||||
hostRet = host // in case of error
|
||||
portRet = port
|
||||
if port != 25565 {
|
||||
type DNSCheckFunc func(addr string) error
|
||||
|
||||
// DoDns resolves a DNS name to an IP address
|
||||
// It should resolve a minecraft compatible address into something net.Dial
|
||||
func DoDns(in string) (out string, host string, portN uint16, err error) {
|
||||
return DoDNSChecked(in, nil)
|
||||
}
|
||||
|
||||
// DoDNSChecked resolves a DNS name to an IP address
|
||||
// It should resolve a minecraft compatible address into something net.Dial
|
||||
// It also optionally accepts a function to "check" the address
|
||||
func DoDNSChecked(in string, f DNSCheckFunc) (connectTo string, host string, portN uint16, err error) {
|
||||
// https://mcsrc.dev/1/26.1-pre-1/net/minecraft/client/multiplayer/resolver/ServerAddress#L34
|
||||
host, port, err := net.SplitHostPort(in)
|
||||
if err != nil {
|
||||
var addrErr *net.AddrError
|
||||
if errors.As(err, &addrErr) && addrErr.Err == "missing port in address" {
|
||||
err = nil
|
||||
host = in
|
||||
port = "25565"
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
porti, err := strconv.Atoi(port)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, srvs, err := net.LookupSRV("minecraft", "tcp", host)
|
||||
if err != nil || len(srvs) == 0 {
|
||||
if f == nil {
|
||||
f = func(addr string) error { return nil }
|
||||
}
|
||||
|
||||
err = f(host)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
target := strings.TrimSuffix(srvs[0].Target, ".")
|
||||
hostRet = target
|
||||
portRet = srvs[0].Port
|
||||
portN = uint16(porti)
|
||||
outIP, err := net.ResolveIPAddr("ip", host)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = f(outIP.String())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
connectTo = outIP.String() + ":" + port
|
||||
if portN != 25565 {
|
||||
return
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second) // otherwise this takes 10+ seconds
|
||||
defer cancel()
|
||||
|
||||
r := &net.Resolver{}
|
||||
|
||||
_, srvs, _ := r.LookupSRV(ctx, "minecraft", "tcp", host)
|
||||
if len(srvs) == 0 {
|
||||
|
||||
return
|
||||
}
|
||||
host = strings.TrimSuffix(srvs[0].Target, ".")
|
||||
portN = srvs[0].Port
|
||||
outIP, err = net.ResolveIPAddr("ip", host)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = f(outIP.String())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
connectTo = outIP.String() + ":" + port
|
||||
return
|
||||
}
|
||||
|
||||
// DoDnsSimple resolves a DNS name to an IP address
|
||||
// It should resolve a minecraft compatible address into something net.Dial
|
||||
// It does not check the address
|
||||
func DoDnsSimple(in string) (out string, err error) {
|
||||
host, port, err := net.SplitHostPort(in)
|
||||
if err != nil {
|
||||
var addrErr *net.AddrError
|
||||
if errors.As(err, &addrErr) && addrErr.Err == "missing port in address" {
|
||||
err = nil
|
||||
host = in
|
||||
port = "25565"
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
porti, err := strconv.Atoi(port)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
portN := uint16(porti)
|
||||
_, err = net.ResolveIPAddr("ip", host)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
out = host + ":" + strconv.Itoa(int(portN))
|
||||
if portN != 25565 {
|
||||
return
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second) // otherwise this takes 10+ seconds
|
||||
defer cancel()
|
||||
|
||||
r := &net.Resolver{}
|
||||
|
||||
_, srvs, _ := r.LookupSRV(ctx, "minecraft", "tcp", host)
|
||||
if len(srvs) == 0 {
|
||||
return
|
||||
}
|
||||
host = strings.TrimSuffix(srvs[0].Target, ".")
|
||||
portN = srvs[0].Port
|
||||
out = host + ":" + strconv.Itoa(int(portN))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package client
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestDoDNS(t *testing.T) {
|
||||
type Case struct {
|
||||
Input string
|
||||
Host string
|
||||
portN uint16
|
||||
}
|
||||
cases := []Case{
|
||||
{"localhost", "localhost", 25565},
|
||||
{"play.hypixel.net", "play.hypixel.net", 25565},
|
||||
{"1f2d.net", "tcpshield.1f2d.net", 25565},
|
||||
}
|
||||
for _, c := range cases {
|
||||
t.Logf("Testing %s", c.Input)
|
||||
_, host, portN, err := DoDns(c.Input)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
continue
|
||||
}
|
||||
if host != c.Host || portN != c.portN {
|
||||
t.Errorf("expected %s:%d, got %s:%d", c.Host, c.portN, host, portN)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strconv"
|
||||
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||
)
|
||||
|
||||
func MakeHandshakePacket(c *proto.Conn, nextState proto_base.State) (p *v1_21_8.HandshakingToServerPacketSetProtocol, err error) {
|
||||
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
|
||||
p.ServerHost, portStr, err = net.SplitHostPort(addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var portUint uint64
|
||||
portUint, err = strconv.ParseUint(portStr, 10, 16)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
p.ServerPort = uint16(portUint)
|
||||
return
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package modules
|
||||
package client
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
@@ -6,12 +6,8 @@ import (
|
||||
"crypto/x509"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"strconv"
|
||||
|
||||
"github.com/admin-else/strom/api"
|
||||
"github.com/admin-else/strom/client"
|
||||
"github.com/admin-else/strom/crypto"
|
||||
"github.com/admin-else/strom/event"
|
||||
"github.com/admin-else/strom/proto"
|
||||
@@ -30,6 +26,12 @@ type LoginClient struct {
|
||||
GivenAccount *v1_21_8.LoginToClientPacketSuccess
|
||||
}
|
||||
|
||||
var (
|
||||
NoTokenErr = errors.New("the account has no token so we cant join online servers")
|
||||
BadPublicKeyTypeErr = errors.New("the public key is not rsa")
|
||||
FailedToLoginErr = errors.New("failed to login")
|
||||
)
|
||||
|
||||
type KickedDuringLoginErr struct {
|
||||
text.Component
|
||||
}
|
||||
@@ -38,46 +40,20 @@ func (k KickedDuringLoginErr) Error() string {
|
||||
return k.String()
|
||||
}
|
||||
|
||||
func (s *LoginClient) Default(event event.Unhandled) (err error) {
|
||||
err = fmt.Errorf("unexpected event: %#v", event)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LoginClient) OnCycle(_ event.Tick) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LoginClient) OnStart(_ event.OnStart) (err error) {
|
||||
if s.ServerHost == "" && s.ServerPort == 0 {
|
||||
var portStr string
|
||||
s.ServerHost, portStr, err = net.SplitHostPort(s.RemoteAddr().String())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var portUint uint64
|
||||
portUint, err = strconv.ParseUint(portStr, 10, 16)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s.ServerPort = uint16(portUint)
|
||||
}
|
||||
|
||||
err = s.Send(&v1_21_8.HandshakingToServerPacketSetProtocol{
|
||||
ProtocolVersion: s.ProtocolVersion,
|
||||
ServerHost: s.ServerHost,
|
||||
ServerPort: s.ServerPort,
|
||||
NextState: int32(proto_base.Login),
|
||||
})
|
||||
if err != nil {
|
||||
func (s *LoginClient) OnDefault(event event.Unhandled) (err error) {
|
||||
if _, ok := event.Val.(proto_base.EncodeDecodeAble); !ok {
|
||||
return
|
||||
}
|
||||
s.SetState(proto_base.Login)
|
||||
err = s.Send(&v1_21_8.LoginToServerPacketLoginStart{Username: s.Account.Name, PlayerUUID: s.Account.Uuid})
|
||||
s.Log.Warn("unexpected packet during login client", "packet", event.Val)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LoginClient) OnClose(_ event.Close) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LoginClient) OnCompress(compress *v1_21_8.LoginToClientPacketCompress) (err error) {
|
||||
s.CompressionThreshold = compress.Threshold
|
||||
s.SetCompressionThreshold(compress.Threshold)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -87,7 +63,7 @@ func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBeg
|
||||
|
||||
if packet.ShouldAuthenticate {
|
||||
if s.Account.Ygg == "" {
|
||||
err = fmt.Errorf("the account has no token so we cant join online servers")
|
||||
err = NoTokenErr
|
||||
return
|
||||
}
|
||||
serverId := crypto.AuthDigest([]byte(packet.ServerId), sharedSecret, packet.PublicKey)
|
||||
@@ -103,7 +79,7 @@ func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBeg
|
||||
}
|
||||
pub, ok := pubAny.(*rsa.PublicKey)
|
||||
if !ok {
|
||||
err = fmt.Errorf("public key is not rsa")
|
||||
err = BadPublicKeyTypeErr
|
||||
return
|
||||
}
|
||||
verifyTokenEnc, err := rsa.EncryptPKCS1v15(rand.Reader, pub, packet.VerifyToken)
|
||||
@@ -145,28 +121,59 @@ func (s *LoginClient) OnSuccess(success *v1_21_8.LoginToClientPacketSuccess) (er
|
||||
return
|
||||
}
|
||||
|
||||
func Login(c *proto.Conn, account *api.Account) (err error) {
|
||||
err = c.Start(&LoginClient{
|
||||
func (s *LoginClient) OnStart() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
|
||||
lc := &LoginClient{
|
||||
Conn: c,
|
||||
Account: account,
|
||||
})
|
||||
}
|
||||
lc.RegisterCritical(lc.OnDefault)
|
||||
lc.RegisterCritical(lc.OnClose)
|
||||
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 {
|
||||
err = errors.Join(err, errors.New("failed to login"))
|
||||
return
|
||||
}
|
||||
|
||||
err = lc.Send(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
lc.SetState(proto_base.Login)
|
||||
err = lc.Send(&v1_21_8.LoginToServerPacketLoginStart{Username: lc.Account.Name, PlayerUUID: lc.Account.Uuid})
|
||||
|
||||
err = lc.StartConn()
|
||||
if err != nil {
|
||||
err = errors.Join(FailedToLoginErr, err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func ConnectAndLogin(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||
c, err = client.Connect(connectTo)
|
||||
func LoginNoSrv(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||
c, err = Connect(connectTo)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = c.Start(&LoginClient{
|
||||
Conn: c,
|
||||
Account: 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(errors.New("failed to login"), err)
|
||||
return
|
||||
}
|
||||
c, err = Connect(connectTo)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = LoginRaw(c, account)
|
||||
return
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package modules
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/admin-else/strom/event"
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
|
||||
"github.com/admin-else/strom/data"
|
||||
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||
)
|
||||
|
||||
type StatusClient struct {
|
||||
*proto.Conn
|
||||
Status string
|
||||
}
|
||||
|
||||
func (s *StatusClient) Default(event any) (err error) {
|
||||
err = fmt.Errorf("unexpected event: %v", event)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *StatusClient) OnStart(_ event.OnStart) (err error) {
|
||||
parts := strings.Split(s.RemoteAddr().String(), ":")
|
||||
versionData, err := data.LookUpProtocolVersionByName(s.Version)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
port, err := strconv.Atoi(parts[1])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = s.Send(&v1_21_8.HandshakingToServerPacketSetProtocol{
|
||||
ProtocolVersion: int32(versionData.Version),
|
||||
ServerHost: parts[0],
|
||||
ServerPort: uint16(port),
|
||||
NextState: int32(proto_base.Status),
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s.SetState(proto_base.Status)
|
||||
err = s.Send(&v1_21_8.StatusToServerPacketPingStart{})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *StatusClient) OnStatus(p v1_21_8.StatusToClientPacketServerInfo) (err error) {
|
||||
s.Status = p.Response
|
||||
err = event.HandlerDoneErr{}
|
||||
return
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
package modules
|
||||
|
||||
import "time"
|
||||
|
||||
type IntervalTask struct {
|
||||
F func() error
|
||||
LastTrigger time.Time
|
||||
Interval time.Duration
|
||||
}
|
||||
|
||||
type OnceTask struct {
|
||||
F func() error
|
||||
Trigger time.Time
|
||||
}
|
||||
|
||||
type Timer struct {
|
||||
Once []OnceTask
|
||||
Interval []IntervalTask
|
||||
Active bool
|
||||
}
|
||||
|
||||
func (t *Timer) Tick() (err error) {
|
||||
if !t.Active {
|
||||
return
|
||||
}
|
||||
for i, task := range t.Interval {
|
||||
if time.Since(task.LastTrigger) >= task.Interval {
|
||||
task.LastTrigger = time.Now()
|
||||
err = task.F()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
t.Interval[i] = task
|
||||
}
|
||||
var triggerLater []OnceTask
|
||||
for _, task := range t.Once {
|
||||
if task.Trigger.After(time.Now()) {
|
||||
err = task.F()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
triggerLater = append(triggerLater, task)
|
||||
}
|
||||
}
|
||||
t.Once = triggerLater
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Timer) Every(interval time.Duration, f func() error) {
|
||||
t.Interval = append(t.Interval, IntervalTask{
|
||||
F: f,
|
||||
Interval: interval,
|
||||
})
|
||||
}
|
||||
|
||||
func (t *Timer) In(interval time.Duration, f func() error) {
|
||||
t.Once = append(t.Once, OnceTask{
|
||||
F: f,
|
||||
Trigger: time.Now().Add(interval),
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"github.com/admin-else/strom/event"
|
||||
"github.com/admin-else/strom/proto"
|
||||
"github.com/admin-else/strom/proto_base"
|
||||
"github.com/admin-else/strom/server"
|
||||
|
||||
"github.com/admin-else/strom/proto_generated/v1_21_8"
|
||||
)
|
||||
|
||||
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(ctx context.Context, addr string) (s *StatusClient, err error) {
|
||||
c, err := ConnectVersionLess(addr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
err = c.SetVersion("1.21.8")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
s = &StatusClient{
|
||||
Conn: c,
|
||||
}
|
||||
s.RegisterCriticalUntilLatest(s.OnStatus)
|
||||
s.RegisterCriticalUntilLatest(s.OnPong)
|
||||
|
||||
p, err := 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
|
||||
}
|
||||
|
||||
// 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,78 @@
|
||||
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/offline_uuid"
|
||||
"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/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,
|
||||
"print-nbt": print_nbt.Run,
|
||||
"status": status.Run,
|
||||
"packet-spy": packet_inspector.Run,
|
||||
"api": api.Run,
|
||||
"version": Version,
|
||||
}
|
||||
|
||||
func Help(args []string) (err error) {
|
||||
fmt.Println("Available subcommands", slices.Collect(maps.Keys(subcommands)))
|
||||
return
|
||||
}
|
||||
|
||||
func mainE() (err error) {
|
||||
subcommands["help"] = Help // this is here because if it isn't tools/cli/main.go:17:5: initialization cycle for subcommands
|
||||
// tools/cli/main.go:17:5: subcommands refers to Help
|
||||
// tools/cli/main.go:22:6: Help refers to subcommands
|
||||
args := os.Args
|
||||
|
||||
// Debug stuff
|
||||
slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||
//args = []string{"TEST", "version"}
|
||||
|
||||
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,20 @@
|
||||
package offline_uuid
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"github.com/admin-else/strom/crypto"
|
||||
)
|
||||
|
||||
var cmd = flag.NewFlagSet("offline-uuid", flag.ContinueOnError)
|
||||
var nameFlag = cmd.String("name", "Notch", "name of the player")
|
||||
|
||||
func Run(args []string) (err error) {
|
||||
err = cmd.Parse(args)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println(crypto.FromOfflinePlayer(*nameFlag))
|
||||
return
|
||||
}
|
||||
@@ -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,49 @@
|
||||
package print_nbt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"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
|
||||
}
|
||||
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,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
|
||||
}
|
||||
+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
|
||||
|
||||
+151
-13
@@ -1,6 +1,11 @@
|
||||
package data
|
||||
|
||||
// {
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// {
|
||||
// "id": 0,
|
||||
// "name": "air",
|
||||
// "displayName": "Air",
|
||||
@@ -35,34 +40,167 @@ type Block struct {
|
||||
DefaultState int32
|
||||
MinStateId int32
|
||||
MaxStateId int32
|
||||
States []struct {
|
||||
Name string
|
||||
Type string
|
||||
NumValues int
|
||||
}
|
||||
Drops []int
|
||||
BoundingBox string
|
||||
States []BlockState
|
||||
Drops []int
|
||||
BoundingBox string
|
||||
}
|
||||
|
||||
var BlocksCache = make(map[string][]Block)
|
||||
type BlockState struct {
|
||||
Name string
|
||||
Type string
|
||||
NumValues int32 `json:"num_values"`
|
||||
Values []string
|
||||
}
|
||||
|
||||
func BlocksForVersion(v string) (ret []Block) {
|
||||
var BlocksCache = make(map[string][]*Block)
|
||||
var BlocksCacheIdMap = make(map[string]map[int32]*Block)
|
||||
|
||||
func BlocksForVersion(v string) (ret []*Block) {
|
||||
var ok bool
|
||||
if ret, ok = BlocksCache[v]; ok {
|
||||
return
|
||||
}
|
||||
var b []Block
|
||||
var b []*Block
|
||||
must(LoadVersionedJson(v, "blocks", &b))
|
||||
BlocksCache[v] = b
|
||||
return b
|
||||
}
|
||||
|
||||
func LookupBlockByStateId(version string, stateId int32) (block Block, ok bool) {
|
||||
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) {
|
||||
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.MinStateId <= stateId && stateId <= b.MaxStateId {
|
||||
if b.Name == name {
|
||||
block = b
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var BlockStateOutOfRangeErr = errors.New("stateId out of range")
|
||||
var BlockNotFoundErr = errors.New("block not found")
|
||||
var InvalidBoolValueErr = errors.New("invalid bool value")
|
||||
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]string, err error) {
|
||||
b, ok := LookupBlockByStateId(version, stateId)
|
||||
if !ok {
|
||||
err = BlockNotFoundErr
|
||||
}
|
||||
stateData, err = b.StateMapFromId(stateId)
|
||||
return
|
||||
}
|
||||
|
||||
func mcDataBlockStateTypeParse(n int32, s *BlockState) (v string, err error) {
|
||||
switch s.Type {
|
||||
case "int":
|
||||
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"
|
||||
} else if n == 1 {
|
||||
v = "false"
|
||||
} else {
|
||||
err = InvalidBoolValueErr
|
||||
}
|
||||
default:
|
||||
err = BadBlockStateTypeErr
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
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), nil
|
||||
}
|
||||
for i, enumValue := range s.Values {
|
||||
if enumValue == v {
|
||||
return int32(i), nil
|
||||
}
|
||||
}
|
||||
err = BadEnumErr
|
||||
return
|
||||
}
|
||||
|
||||
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]string)
|
||||
stateId -= b.MinStateId
|
||||
|
||||
a := int32(1)
|
||||
for i := range len(b.States) {
|
||||
s := b.States[len(b.States)-1-i]
|
||||
ret[s.Name], err = mcDataBlockStateTypeParse((stateId/a)%s.NumValues, &s)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
a *= s.NumValues
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
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]
|
||||
v, found := m[s.Name]
|
||||
if !found {
|
||||
err = SupplyAllStatesErr
|
||||
return
|
||||
}
|
||||
var n int32
|
||||
n, err = mcDataBlockStateTypeSerialize(v, &s)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ret += n * a
|
||||
a *= s.NumValues
|
||||
}
|
||||
ret += b.MinStateId
|
||||
return
|
||||
}
|
||||
|
||||
@@ -14,3 +14,21 @@ func TestLookupBlockByStateId(t *testing.T) {
|
||||
}
|
||||
fmt.Println(b)
|
||||
}
|
||||
|
||||
func TestBlockStates(t *testing.T) {
|
||||
var stateId int32 = 8301
|
||||
b, stateMap, err := data.FromBlockState("1.21.8", stateId)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
return
|
||||
}
|
||||
t.Logf("Block state map: %v, block: %v", stateMap, b.Name)
|
||||
stateId2, err := b.IdFromStateMap(stateMap)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
return
|
||||
}
|
||||
if stateId2 != stateId {
|
||||
t.Fatal("state id mismatch")
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@ import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
//go:embed minecraft-data/data
|
||||
//go:embed minecraft-data/pc minecraft-data/dataPaths.json
|
||||
var MinecraftData embed.FS
|
||||
|
||||
func LoadJson(path string, data any) (err error) {
|
||||
@@ -19,7 +19,7 @@ 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
|
||||
}
|
||||
|
||||
+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
+10
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# 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/data data
|
||||
rm -rf minecraft-data
|
||||
mv data minecraft-data
|
||||
rm -rf minecraft-data/bedrock
|
||||
@@ -0,0 +1,57 @@
|
||||
package data
|
||||
|
||||
import "sync"
|
||||
|
||||
// {
|
||||
// "id": 2,
|
||||
// "name": "granite",
|
||||
// "displayName": "Granite",
|
||||
// "stackSize": 64
|
||||
// },
|
||||
|
||||
type Item struct {
|
||||
Id int32
|
||||
Name string
|
||||
DisplayName string
|
||||
StackSize int32
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
func LookupItemById(version string, id int32) (item *Item, ok bool) {
|
||||
for _, i := range ItemsForVersion(version) {
|
||||
if i.Id == id {
|
||||
item = i
|
||||
ok = true
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func LookupItemByName(version string, name string) (item *Item, ok bool) {
|
||||
for _, i := range ItemsForVersion(version) {
|
||||
if i.Name == name {
|
||||
item = i
|
||||
ok = true
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Submodule data/minecraft-data deleted from 9443ed0dec
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,652 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"displayName": "Air",
|
||||
"name": "air",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": false,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": true,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"displayName": "Stone",
|
||||
"name": "stone",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"displayName": "Grass Block",
|
||||
"name": "grass block",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"displayName": "Dirt",
|
||||
"name": "dirt",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"displayName": "Cobblestone",
|
||||
"name": "cobblestone",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"displayName": "Wood Planks",
|
||||
"name": "wood planks",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"displayName": "Sapling",
|
||||
"name": "sapling",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"displayName": "Bedrock",
|
||||
"name": "bedrock",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": false,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"displayName": "Flowing Water",
|
||||
"name": "flowing water",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": false,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": true,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"displayName": "Stationary Water",
|
||||
"name": "stationary water",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": false,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": true,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"displayName": "Flowing Lava",
|
||||
"name": "flowing lava",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": false,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"displayName": "Stationary Lava",
|
||||
"name": "stationary lava",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": false,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"displayName": "Sand",
|
||||
"name": "sand",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"displayName": "Gravel",
|
||||
"name": "gravel",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"displayName": "Gold Ore",
|
||||
"name": "gold ore",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"displayName": "Iron Ore",
|
||||
"name": "iron ore",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"displayName": "Coal Ore",
|
||||
"name": "coal ore",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"displayName": "Wood",
|
||||
"name": "wood",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"displayName": "Leaves",
|
||||
"name": "leaves",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"displayName": "Sponge",
|
||||
"name": "sponge",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"displayName": "Glass",
|
||||
"name": "glass",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": true,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"displayName": "Red Cloth",
|
||||
"name": "red cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"displayName": "Orange Cloth",
|
||||
"name": "orange cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"displayName": "Yellow Cloth",
|
||||
"name": "yellow cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"displayName": "Lime Cloth",
|
||||
"name": "lime cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"displayName": "Green Cloth",
|
||||
"name": "green cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"displayName": "Aqua Green Cloth",
|
||||
"name": "aqua green cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"displayName": "Cyan Cloth",
|
||||
"name": "cyan cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"displayName": "Blue Cloth",
|
||||
"name": "blue cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"displayName": "Purple Cloth",
|
||||
"name": "purple cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"displayName": "Indigo Cloth",
|
||||
"name": "indigo cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"displayName": "Violet Cloth",
|
||||
"name": "violet cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"displayName": "Magenta Cloth",
|
||||
"name": "magenta cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"displayName": "Pink Cloth",
|
||||
"name": "pink cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"displayName": "Black Cloth",
|
||||
"name": "black cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"displayName": "Gray Cloth",
|
||||
"name": "gray cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"displayName": "White Cloth",
|
||||
"name": "white cloth",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"displayName": "Dandelion",
|
||||
"name": "dandelion",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"displayName": "Rose",
|
||||
"name": "rose",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"displayName": "Brown Mushroom",
|
||||
"name": "brown mushroom",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"displayName": "Red Mushroom",
|
||||
"name": "red mushroom",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"displayName": "Block of Gold",
|
||||
"name": "block of gold",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"displayName": "Block of Iron",
|
||||
"name": "block of iron",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"displayName": "Double Slab",
|
||||
"name": "double slab",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"displayName": "Slab",
|
||||
"name": "slab",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"displayName": "Brick",
|
||||
"name": "brick",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"displayName": "TNT",
|
||||
"name": "tnt",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"displayName": "Bookshelf",
|
||||
"name": "bookshelf",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"displayName": "Moss Stone",
|
||||
"name": "moss stone",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"displayName": "Obsidian",
|
||||
"name": "obsidian",
|
||||
"hardness": 0,
|
||||
"stackSize": 0,
|
||||
"diggable": true,
|
||||
"boundingBox": "empty",
|
||||
"drops": [],
|
||||
"transparent": false,
|
||||
"emitLight": 0,
|
||||
"filterLight": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,138 @@
|
||||
!version: 0.30c
|
||||
|
||||
^types:
|
||||
u8: native
|
||||
string: native
|
||||
i8: native
|
||||
i16: native
|
||||
byte_array: native
|
||||
|
||||
^toServer.types:
|
||||
packet_player_identification:
|
||||
protocol_version: u8
|
||||
username: string
|
||||
verification_key: string
|
||||
unused: i8
|
||||
packet_set_block:
|
||||
x: i16
|
||||
y: i16
|
||||
z: i16
|
||||
mode: u8
|
||||
block_type: u8
|
||||
packet_position:
|
||||
player_id: u8
|
||||
x: i16
|
||||
y: i16
|
||||
z: i16
|
||||
yaw: u8
|
||||
pitch: u8
|
||||
packet_message:
|
||||
unused: u8
|
||||
message: string
|
||||
packet:
|
||||
name: u8 =>
|
||||
0x00: player_identification
|
||||
0x05: set_block
|
||||
0x08: position
|
||||
0x0d: message
|
||||
params: name ?
|
||||
if player_identification: packet_player_identification
|
||||
if set_block: packet_set_block
|
||||
if position: packet_position
|
||||
if message: packet_message
|
||||
|
||||
^toClient.types:
|
||||
packet_server_identification:
|
||||
protocol_version: u8
|
||||
server_name: string
|
||||
server_motd: string
|
||||
user_type: i8
|
||||
packet_ping:
|
||||
# Empty
|
||||
packet_level_initialize:
|
||||
# Empty
|
||||
packet_level_data_chunk:
|
||||
chunk_data: byte_array
|
||||
percent_complete: u8
|
||||
packet_level_finalize:
|
||||
x_size: i16
|
||||
y_size: i16
|
||||
z_size: i16
|
||||
packet_set_block:
|
||||
x: i16
|
||||
y: i16
|
||||
z: i16
|
||||
block_type: u8
|
||||
packet_spawn_player:
|
||||
player_id: i8
|
||||
player_name: string
|
||||
x: i16
|
||||
y: i16
|
||||
z: i16
|
||||
yaw: u8
|
||||
pitch: u8
|
||||
packet_player_teleport:
|
||||
player_id: i8
|
||||
x: i16
|
||||
y: i16
|
||||
z: i16
|
||||
yaw: u8
|
||||
pitch: u8
|
||||
packet_position_and_orientation_update:
|
||||
player_id: i8
|
||||
change_in_x: i8
|
||||
change_in_y: i8
|
||||
change_in_z: i8
|
||||
yaw: i8
|
||||
pitch: i8
|
||||
packet_position_update:
|
||||
player_id: i8
|
||||
change_in_x: i8
|
||||
change_in_y: i8
|
||||
change_in_z: i8
|
||||
packet_orientation_update:
|
||||
player_id: i8
|
||||
yaw: u8
|
||||
pitch: u8
|
||||
packet_despawn_player:
|
||||
player_id: i8
|
||||
packet_message:
|
||||
player_id: i8
|
||||
message: string
|
||||
packet_disconnect_player:
|
||||
disconnect_reason: string
|
||||
packet_update_user_type:
|
||||
user_type: u8
|
||||
packet:
|
||||
name: u8 =>
|
||||
0x00: server_identification
|
||||
0x01: ping
|
||||
0x02: level_initialize
|
||||
0x03: level_data_chunk
|
||||
0x04: level_finalize
|
||||
0x06: set_block
|
||||
0x07: spawn_player
|
||||
0x08: player_teleport
|
||||
0x09: position_and_orientation_update
|
||||
0x0a: position_update
|
||||
0x0b: orientation_update
|
||||
0x0c: despawn_player
|
||||
0x0d: message
|
||||
0x0e: disconnect_player
|
||||
0x0f: update_user_type
|
||||
params: name ?
|
||||
if server_identification: packet_server_identification
|
||||
if ping: packet_ping
|
||||
if level_initialize: packet_level_initialize
|
||||
if level_data_chunk: packet_level_data_chunk
|
||||
if level_finalize: packet_level_finalize
|
||||
if set_block: packet_set_block
|
||||
if spawn_player: packet_spawn_player
|
||||
if player_teleport: packet_player_teleport
|
||||
if position_and_orientation_update: packet_position_and_orientation_update
|
||||
if position_update: packet_position_update
|
||||
if orientation_update: packet_orientation_update
|
||||
if despawn_player: packet_despawn_player
|
||||
if message: packet_message
|
||||
if disconnect_player: packet_disconnect_player
|
||||
if update_user_type: packet_update_user_type
|
||||
@@ -0,0 +1,446 @@
|
||||
{
|
||||
"types": {
|
||||
"u8": "native",
|
||||
"string": "native",
|
||||
"i8": "native",
|
||||
"i16": "native",
|
||||
"byte_array": "native"
|
||||
},
|
||||
"toServer": {
|
||||
"types": {
|
||||
"packet_player_identification": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "protocol_version",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "username",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "verification_key",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "unused",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_set_block": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "x",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "z",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "mode",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "block_type",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_position": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "z",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "yaw",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "pitch",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_message": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "unused",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "name",
|
||||
"type": [
|
||||
"mapper",
|
||||
{
|
||||
"type": "u8",
|
||||
"mappings": {
|
||||
"0x00": "player_identification",
|
||||
"0x05": "set_block",
|
||||
"0x08": "position",
|
||||
"0x0d": "message"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "params",
|
||||
"type": [
|
||||
"switch",
|
||||
{
|
||||
"compareTo": "name",
|
||||
"fields": {
|
||||
"player_identification": "packet_player_identification",
|
||||
"set_block": "packet_set_block",
|
||||
"position": "packet_position",
|
||||
"message": "packet_message"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"toClient": {
|
||||
"types": {
|
||||
"packet_server_identification": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "protocol_version",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "server_name",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "server_motd",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "user_type",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_ping": [
|
||||
"container",
|
||||
[]
|
||||
],
|
||||
"packet_level_initialize": [
|
||||
"container",
|
||||
[]
|
||||
],
|
||||
"packet_level_data_chunk": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "chunk_data",
|
||||
"type": "byte_array"
|
||||
},
|
||||
{
|
||||
"name": "percent_complete",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_level_finalize": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "x_size",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "y_size",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "z_size",
|
||||
"type": "i16"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_set_block": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "x",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "z",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "block_type",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_spawn_player": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "player_name",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "z",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "yaw",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "pitch",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_player_teleport": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "z",
|
||||
"type": "i16"
|
||||
},
|
||||
{
|
||||
"name": "yaw",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "pitch",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_position_and_orientation_update": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "change_in_x",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "change_in_y",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "change_in_z",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "yaw",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "pitch",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_position_update": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "change_in_x",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "change_in_y",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "change_in_z",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_orientation_update": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "yaw",
|
||||
"type": "u8"
|
||||
},
|
||||
{
|
||||
"name": "pitch",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_despawn_player": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_message": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "player_id",
|
||||
"type": "i8"
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_disconnect_player": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "disconnect_reason",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet_update_user_type": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "user_type",
|
||||
"type": "u8"
|
||||
}
|
||||
]
|
||||
],
|
||||
"packet": [
|
||||
"container",
|
||||
[
|
||||
{
|
||||
"name": "name",
|
||||
"type": [
|
||||
"mapper",
|
||||
{
|
||||
"type": "u8",
|
||||
"mappings": {
|
||||
"0x00": "server_identification",
|
||||
"0x01": "ping",
|
||||
"0x02": "level_initialize",
|
||||
"0x03": "level_data_chunk",
|
||||
"0x04": "level_finalize",
|
||||
"0x06": "set_block",
|
||||
"0x07": "spawn_player",
|
||||
"0x08": "player_teleport",
|
||||
"0x09": "position_and_orientation_update",
|
||||
"0x0a": "position_update",
|
||||
"0x0b": "orientation_update",
|
||||
"0x0c": "despawn_player",
|
||||
"0x0d": "message",
|
||||
"0x0e": "disconnect_player",
|
||||
"0x0f": "update_user_type"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "params",
|
||||
"type": [
|
||||
"switch",
|
||||
{
|
||||
"compareTo": "name",
|
||||
"fields": {
|
||||
"server_identification": "packet_server_identification",
|
||||
"ping": "packet_ping",
|
||||
"level_initialize": "packet_level_initialize",
|
||||
"level_data_chunk": "packet_level_data_chunk",
|
||||
"level_finalize": "packet_level_finalize",
|
||||
"set_block": "packet_set_block",
|
||||
"spawn_player": "packet_spawn_player",
|
||||
"player_teleport": "packet_player_teleport",
|
||||
"position_and_orientation_update": "packet_position_and_orientation_update",
|
||||
"position_update": "packet_position_update",
|
||||
"orientation_update": "packet_orientation_update",
|
||||
"despawn_player": "packet_despawn_player",
|
||||
"message": "packet_message",
|
||||
"disconnect_player": "packet_disconnect_player",
|
||||
"update_user_type": "packet_update_user_type"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version":7,
|
||||
"minecraftVersion":"0.30c",
|
||||
"majorVersion":"0.30c"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version":201,
|
||||
"minecraftVersion":"16w20a",
|
||||
"majorVersion":"1.10"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version":210,
|
||||
"minecraftVersion":"1.10.1",
|
||||
"majorVersion":"1.10"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version":210,
|
||||
"minecraftVersion":"1.10.2",
|
||||
"majorVersion":"1.10"
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
[
|
||||
{
|
||||
"name": "maxHealth",
|
||||
"resource": "generic.maxHealth",
|
||||
"default": 20,
|
||||
"min": 1,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "followRange",
|
||||
"resource": "generic.followRange",
|
||||
"default": 32,
|
||||
"min": 0,
|
||||
"max": 2048
|
||||
},
|
||||
{
|
||||
"name": "knockbackResistance",
|
||||
"resource": "generic.knockbackResistance",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
{
|
||||
"name": "movementSpeed",
|
||||
"resource": "generic.movementSpeed",
|
||||
"default": 0.7,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "attackDamage",
|
||||
"resource": "generic.attackDamage",
|
||||
"default": 2,
|
||||
"min": 0,
|
||||
"max": 2048
|
||||
},
|
||||
{
|
||||
"name": "horseJumpStrength",
|
||||
"resource": "horse.jumpStrength",
|
||||
"default": 0.7,
|
||||
"min": 0,
|
||||
"max": 2
|
||||
},
|
||||
{
|
||||
"name": "zombieSpawnReinforcements",
|
||||
"resource": "zombie.spawnReinforcements",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
{
|
||||
"name": "attackSpeed",
|
||||
"resource": "generic.attackSpeed",
|
||||
"default": 4,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "flyingSpeed",
|
||||
"resource": "generic.flyingSpeed",
|
||||
"default": 0.4,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "attackKnockback",
|
||||
"resource": "generic.attackKnockback",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
},
|
||||
{
|
||||
"name": "armorHealth",
|
||||
"resource": "generic.armor",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 30
|
||||
},
|
||||
{
|
||||
"name": "armorToughness",
|
||||
"resource": "generic.armorToughness",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 20
|
||||
},
|
||||
{
|
||||
"name": "luck",
|
||||
"resource": "generic.luck",
|
||||
"default": 0,
|
||||
"min": -1024,
|
||||
"max": 1024
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,797 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Ocean",
|
||||
"color": 112,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "plains",
|
||||
"category": "plains",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Plains",
|
||||
"color": 9286496,
|
||||
"rainfall": 0.4,
|
||||
"child": 129
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "desert",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert",
|
||||
"color": 16421912,
|
||||
"rainfall": 0,
|
||||
"child": 130
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mountains",
|
||||
"color": 6316128,
|
||||
"rainfall": 0.3,
|
||||
"child": 131
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Forest",
|
||||
"color": 353825,
|
||||
"rainfall": 0.8,
|
||||
"child": 132
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga",
|
||||
"color": 747097,
|
||||
"rainfall": 0.8,
|
||||
"child": 133
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "swamp",
|
||||
"category": "swamp",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Swamp",
|
||||
"color": 522674,
|
||||
"rainfall": 0.9,
|
||||
"child": 134
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "river",
|
||||
"category": "river",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "River",
|
||||
"color": 255,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "nether_wastes",
|
||||
"category": "nether",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"climates": [
|
||||
{
|
||||
"temperature": 0,
|
||||
"humidity": 0,
|
||||
"altitude": 0,
|
||||
"weirdness": 0,
|
||||
"offset": 0
|
||||
}
|
||||
],
|
||||
"dimension": "nether",
|
||||
"displayName": "Nether Wastes",
|
||||
"color": 12532539,
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "the_end",
|
||||
"category": "the_end",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "end",
|
||||
"displayName": "The End",
|
||||
"color": 8421631,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "frozen_ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": -1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Frozen Ocean",
|
||||
"color": 7368918,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "frozen_river",
|
||||
"category": "river",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": -0.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Frozen River",
|
||||
"color": 10526975,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "snowy_tundra",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Tundra",
|
||||
"color": 16777215,
|
||||
"rainfall": 0.5,
|
||||
"child": 140
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "snowy_mountains",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Mountains",
|
||||
"color": 10526880,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "mushroom_fields",
|
||||
"category": "mushroom",
|
||||
"temperature": 0.9,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mushroom Fields",
|
||||
"color": 16711935,
|
||||
"rainfall": 1
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "mushroom_field_shore",
|
||||
"category": "mushroom",
|
||||
"temperature": 0.9,
|
||||
"precipitation": "rain",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mushroom Fields Shore",
|
||||
"color": 10486015,
|
||||
"rainfall": 1
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "beach",
|
||||
"category": "beach",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Beach",
|
||||
"color": 16440917,
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "desert_hills",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert Hills",
|
||||
"color": 13786898,
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "wooded_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Hills",
|
||||
"color": 2250012,
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga Hills",
|
||||
"color": 1456435,
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "mountain_edge",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.8,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mountain Edge",
|
||||
"color": 7501978,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "jungle",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle",
|
||||
"color": 5470985,
|
||||
"rainfall": 0.9,
|
||||
"child": 149
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "jungle_hills",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle Hills",
|
||||
"color": 2900485,
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "jungle_edge",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle Edge",
|
||||
"color": 6458135,
|
||||
"rainfall": 0.8,
|
||||
"child": 151
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "deep_ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -1.8,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Deep Ocean",
|
||||
"color": 48,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "stone_shore",
|
||||
"category": "none",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Stone Shore",
|
||||
"color": 10658436,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "snowy_beach",
|
||||
"category": "beach",
|
||||
"temperature": 0.05,
|
||||
"precipitation": "snow",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Beach",
|
||||
"color": 16445632,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "birch_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Birch Forest",
|
||||
"color": 3175492,
|
||||
"rainfall": 0.6,
|
||||
"child": 155
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "birch_forest_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Birch Forest Hills",
|
||||
"color": 2055986,
|
||||
"rainfall": 0.6,
|
||||
"child": 156
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "dark_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Dark Forest",
|
||||
"color": 4215066,
|
||||
"rainfall": 0.8,
|
||||
"child": 157
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "snowy_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga",
|
||||
"color": 3233098,
|
||||
"rainfall": 0.4,
|
||||
"child": 158
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "snowy_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga Hills",
|
||||
"color": 2375478,
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "giant_tree_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.3,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Tree Taiga",
|
||||
"color": 5858897,
|
||||
"rainfall": 0.8,
|
||||
"child": 160
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "giant_tree_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.3,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Tree Taiga Hills",
|
||||
"color": 4542270,
|
||||
"rainfall": 0.8,
|
||||
"child": 161
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "wooded_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Mountains",
|
||||
"color": 5271632,
|
||||
"rainfall": 0.3,
|
||||
"child": 162
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "savanna",
|
||||
"category": "savanna",
|
||||
"temperature": 1.2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Savanna",
|
||||
"color": 12431967,
|
||||
"rainfall": 0,
|
||||
"child": 163
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "savanna_plateau",
|
||||
"category": "savanna",
|
||||
"temperature": 1,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Savanna Plateau",
|
||||
"color": 10984804,
|
||||
"rainfall": 0,
|
||||
"child": 164
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "badlands",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Badlands",
|
||||
"color": 14238997,
|
||||
"rainfall": 0,
|
||||
"child": 165
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "wooded_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Badlands Plateau",
|
||||
"color": 11573093,
|
||||
"rainfall": 0,
|
||||
"child": 166
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Badlands Plateau",
|
||||
"color": 13274213,
|
||||
"rainfall": 0,
|
||||
"child": 167
|
||||
},
|
||||
{
|
||||
"id": 127,
|
||||
"name": "the_void",
|
||||
"category": "none",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "end",
|
||||
"displayName": "the_void",
|
||||
"rainfall": 0.5,
|
||||
"color": 0
|
||||
},
|
||||
{
|
||||
"id": 129,
|
||||
"name": "sunflower_plains",
|
||||
"category": "plains",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Sunflower Plains",
|
||||
"color": 11918216,
|
||||
"parent": "plains",
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 130,
|
||||
"name": "desert_lakes",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert Lakes",
|
||||
"color": 16759872,
|
||||
"parent": "desert",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 131,
|
||||
"name": "gravelly_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Gravelly Mountains",
|
||||
"color": 8947848,
|
||||
"parent": "mountains",
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 132,
|
||||
"name": "flower_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Flower Forest",
|
||||
"color": 2985545,
|
||||
"parent": "forest",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 133,
|
||||
"name": "taiga_mountains",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.3,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga Mountains",
|
||||
"color": 3378817,
|
||||
"parent": "taiga",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 134,
|
||||
"name": "swamp_hills",
|
||||
"category": "swamp",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Swamp Hills",
|
||||
"color": 3145690,
|
||||
"parent": "swamp",
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 140,
|
||||
"name": "ice_spikes",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.425,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Ice Spikes",
|
||||
"color": 11853020,
|
||||
"parent": "snowy_tundra",
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 149,
|
||||
"name": "modified_jungle",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Jungle",
|
||||
"color": 8102705,
|
||||
"parent": "jungle",
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 151,
|
||||
"name": "modified_jungle_edge",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Jungle Edge",
|
||||
"color": 9089855,
|
||||
"parent": "jungle_edge",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 155,
|
||||
"name": "tall_birch_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Tall Birch Forest",
|
||||
"color": 5807212,
|
||||
"parent": "birch_forest",
|
||||
"rainfall": 0.6
|
||||
},
|
||||
{
|
||||
"id": 156,
|
||||
"name": "tall_birch_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.55,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Tall Birch Hills",
|
||||
"color": 4687706,
|
||||
"parent": "birch_forest_hills",
|
||||
"rainfall": 0.6
|
||||
},
|
||||
{
|
||||
"id": 157,
|
||||
"name": "dark_forest_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Dark Forest Hills",
|
||||
"color": 6846786,
|
||||
"parent": "dark_forest",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 158,
|
||||
"name": "snowy_taiga_mountains",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.3,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga Mountains",
|
||||
"color": 5864818,
|
||||
"parent": "snowy_taiga",
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 160,
|
||||
"name": "giant_spruce_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Spruce Taiga",
|
||||
"color": 8490617,
|
||||
"parent": "giant_tree_taiga",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 161,
|
||||
"name": "giant_spruce_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Spruce Taiga Hills",
|
||||
"color": 7173990,
|
||||
"parent": "giant_tree_taiga_hills",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 162,
|
||||
"name": "modified_gravelly_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Gravelly Mountains+",
|
||||
"color": 7903352,
|
||||
"parent": "wooded_mountains",
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 163,
|
||||
"name": "shattered_savanna",
|
||||
"category": "savanna",
|
||||
"temperature": 1.1,
|
||||
"precipitation": "none",
|
||||
"depth": 0.3625,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Shattered Savanna",
|
||||
"color": 15063687,
|
||||
"parent": "savanna",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 164,
|
||||
"name": "shattered_savanna_plateau",
|
||||
"category": "savanna",
|
||||
"temperature": 1,
|
||||
"precipitation": "none",
|
||||
"depth": 1.05,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Shattered Savanna Plateau",
|
||||
"color": 13616524,
|
||||
"parent": "savanna_plateau",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 165,
|
||||
"name": "eroded_badlands",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Eroded Badlands",
|
||||
"color": 16739645,
|
||||
"parent": "badlands",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 166,
|
||||
"name": "modified_wooded_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Wooded Badlands Plateau",
|
||||
"color": 14204813,
|
||||
"parent": "wooded_badlands_plateau",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 167,
|
||||
"name": "modified_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Badlands Plateau",
|
||||
"color": 15905933,
|
||||
"parent": "badlands_plateau",
|
||||
"rainfall": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,294 @@
|
||||
{"blocks":{"air":0,
|
||||
"stone":1,
|
||||
"grass":1,
|
||||
"dirt":1,
|
||||
"cobblestone":1,
|
||||
"planks":1,
|
||||
"sapling":0,
|
||||
"bedrock":1,
|
||||
"flowing_water":0,
|
||||
"water":0,
|
||||
"flowing_lava":0,
|
||||
"lava":0,
|
||||
"sand":1,
|
||||
"gravel":1,
|
||||
"gold_ore":1,
|
||||
"iron_ore":1,
|
||||
"coal_ore":1,
|
||||
"log":1,
|
||||
"leaves":1,
|
||||
"sponge":1,
|
||||
"glass":1,
|
||||
"lapis_ore":1,
|
||||
"lapis_block":1,
|
||||
"dispenser":1,
|
||||
"sandstone":1,
|
||||
"noteblock":1,
|
||||
"bed":2,
|
||||
"golden_rail":0,
|
||||
"detector_rail":0,
|
||||
"sticky_piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
|
||||
"web":0,
|
||||
"tallgrass":0,
|
||||
"deadbush":0,
|
||||
"piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
|
||||
"piston_head":[10,11,9,12,13,14,0,0,10,11,9,12,13,14,0,0],
|
||||
"wool":1,
|
||||
"piston_extension":0,
|
||||
"yellow_flower":0,
|
||||
"red_flower":0,
|
||||
"brown_mushroom":0,
|
||||
"red_mushroom":0,
|
||||
"gold_block":1,
|
||||
"iron_block":1,
|
||||
"double_stone_slab":1,
|
||||
"stone_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"brick_block":1,
|
||||
"tnt":1,
|
||||
"bookshelf":1,
|
||||
"mossy_cobblestone":1,
|
||||
"obsidian":1,
|
||||
"torch":0,
|
||||
"fire":0,
|
||||
"mob_spawner":1,
|
||||
"oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"chest":25,
|
||||
"redstone_wire":0,
|
||||
"diamond_ore":1,
|
||||
"diamond_block":1,
|
||||
"crafting_table":1,
|
||||
"wheat":0,
|
||||
"farmland":26,
|
||||
"furnace":1,
|
||||
"lit_furnace":1,
|
||||
"standing_sign":0,
|
||||
"wooden_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"ladder":[27,27,27,29,30,28,27,27,27,29,30,28,27,27,27,29],
|
||||
"rail":0,
|
||||
"stone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"wall_sign":0,
|
||||
"lever":0,
|
||||
"stone_pressure_plate":0,
|
||||
"iron_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"wooden_pressure_plate":0,
|
||||
"redstone_ore":1,
|
||||
"lit_redstone_ore":1,
|
||||
"unlit_redstone_torch":0,
|
||||
"redstone_torch":0,
|
||||
"stone_button":0,
|
||||
"snow_layer":[0,31,32,33,15,34,4,35,0,31,32,33,15,34,4,35],
|
||||
"ice":1,
|
||||
"snow":1,
|
||||
"cactus":36,
|
||||
"clay":1,
|
||||
"reeds":0,
|
||||
"jukebox":1,
|
||||
"fence":37,
|
||||
"pumpkin":1,
|
||||
"netherrack":1,
|
||||
"soul_sand":35,
|
||||
"glowstone":1,
|
||||
"portal":0,
|
||||
"lit_pumpkin":1,
|
||||
"cake":[38,39,40,41,42,43,44,0,0,0,0,0,0,0,0,0],
|
||||
"unpowered_repeater":31,
|
||||
"powered_repeater":31,
|
||||
"stained_glass":1,
|
||||
"trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
|
||||
"monster_egg":1,
|
||||
"stonebrick":1,
|
||||
"brown_mushroom_block":1,
|
||||
"red_mushroom_block":1,
|
||||
"iron_bars":47,
|
||||
"glass_pane":47,
|
||||
"melon_block":1,
|
||||
"pumpkin_stem":0,
|
||||
"melon_stem":0,
|
||||
"vine":0,
|
||||
"fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"stone_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"mycelium":1,
|
||||
"waterlily":50,
|
||||
"nether_brick":1,
|
||||
"nether_brick_fence":37,
|
||||
"nether_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"nether_wart":0,
|
||||
"enchanting_table":4,
|
||||
"brewing_stand":51,
|
||||
"cauldron":52,
|
||||
"end_portal":0,
|
||||
"end_portal_frame":[81,81,81,81,82,82,82,82,81,81,81,81,82,82,82,82],
|
||||
"end_stone":1,
|
||||
"dragon_egg":53,
|
||||
"redstone_lamp":1,
|
||||
"lit_redstone_lamp":1,
|
||||
"double_wooden_slab":1,
|
||||
"wooden_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"cocoa":[55,56,54,57,58,59,60,61,62,63,64,65,0,0,0,0],
|
||||
"sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"emerald_ore":1,
|
||||
"ender_chest":25,
|
||||
"tripwire_hook":0,
|
||||
"tripwire":0,
|
||||
"emerald_block":1,
|
||||
"spruce_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"birch_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"jungle_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"command_block":1,
|
||||
"beacon":1,
|
||||
"cobblestone_wall":66,
|
||||
"flower_pot":67,
|
||||
"carrots":0,
|
||||
"potatoes":0,
|
||||
"wooden_button":0,
|
||||
"skull":[69,69,68,70,71,72,69,69,69,69,68,70,71,72,69,69],
|
||||
"anvil":[73,74,73,74,73,74,73,74,73,74,73,74,0,0,0,0],
|
||||
"trapped_chest":25,
|
||||
"light_weighted_pressure_plate":0,
|
||||
"heavy_weighted_pressure_plate":0,
|
||||
"unpowered_comparator":31,
|
||||
"powered_comparator":31,
|
||||
"daylight_detector":33,
|
||||
"redstone_block":1,
|
||||
"quartz_ore":1,
|
||||
"hopper":75,
|
||||
"quartz_block":1,
|
||||
"quartz_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"activator_rail":0,
|
||||
"dropper":1,
|
||||
"stained_hardened_clay":1,
|
||||
"stained_glass_pane":47,
|
||||
"leaves2":1,"log2":1,"acacia_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"dark_oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"slime":1,
|
||||
"barrier":1,
|
||||
"iron_trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
|
||||
"prismarine":1,
|
||||
"sea_lantern":1,
|
||||
"hay_block":1,
|
||||
"carpet":76,
|
||||
"hardened_clay":1,
|
||||
"coal_block":1,
|
||||
"packed_ice":1,
|
||||
"double_plant":0,
|
||||
"standing_banner":0,
|
||||
"wall_banner":0,
|
||||
"daylight_detector_inverted":33,
|
||||
"red_sandstone":1,
|
||||
"red_sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"double_stone_slab2":1,"stone_slab2":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"spruce_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"birch_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"jungle_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"dark_oak_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"acacia_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"spruce_fence":37,
|
||||
"birch_fence":37,
|
||||
"jungle_fence":37,
|
||||
"dark_oak_fence":37,
|
||||
"acacia_fence":37,
|
||||
"spruce_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"birch_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"jungle_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"acacia_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"dark_oak_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"end_rod":[77,77,78,78,79,79,77,77,78,78,79,79,77,77,78,78],
|
||||
"chorus_plant":80,
|
||||
"chorus_flower":1,
|
||||
"purpur_block":1,
|
||||
"purpur_pillar":1,
|
||||
"purpur_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"purpur_double_slab":1,
|
||||
"purpur_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"end_bricks":1,
|
||||
"beetroots":0,
|
||||
"grass_path":26,
|
||||
"end_gateway":0,
|
||||
"repeating_command_block":1,
|
||||
"chain_command_block":1,
|
||||
"frosted_ice":1,
|
||||
"structure_block":1},
|
||||
"shapes":{"0":[],
|
||||
"1":[[0.0,0.0,0.0,1.0,1.0,1.0]],
|
||||
"2":[[0.0,0.0,0.0,1.0,0.5625,1.0]],
|
||||
"3":[[0.0,0.25,0.0,1.0,1.0,1.0]],
|
||||
"4":[[0.0,0.0,0.0,1.0,0.75,1.0]],
|
||||
"5":[[0.0,0.0,0.25,1.0,1.0,1.0]],
|
||||
"6":[[0.0,0.0,0.0,1.0,1.0,0.75]],
|
||||
"7":[[0.25,0.0,0.0,1.0,1.0,1.0]],
|
||||
"8":[[0.0,0.0,0.0,0.75,1.0,1.0]],
|
||||
"9":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.25]],
|
||||
"10":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.25,0.625]],
|
||||
"11":[[0.0,0.75,0.0,1.0,1.0,1.0],[0.375,-0.25,0.375,0.625,0.75,0.625]],
|
||||
"12":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,-0.25,0.625,0.625,0.75]],
|
||||
"13":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.25,0.625,0.625]],
|
||||
"14":[[0.75,0.0,0.0,1.0,1.0,1.0],[-0.25,0.375,0.375,0.75,0.625,0.625]],
|
||||
"15":[[0.0,0.0,0.0,1.0,0.5,1.0]],
|
||||
"16":[[0.0,0.5,0.0,1.0,1.0,1.0]],
|
||||
"17":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],
|
||||
"18":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],
|
||||
"19":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],
|
||||
"20":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0]],
|
||||
"21":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,0.5,1.0]],
|
||||
"22":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,0.5,0.5,1.0]],
|
||||
"23":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.5,1.0,0.5,1.0]],
|
||||
"24":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,0.5,0.5]],
|
||||
"25":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],
|
||||
"26":[[0.0,0.0,0.0,1.0,0.9375,1.0]],
|
||||
"27":[[0.0,0.0,0.8125,1.0,1.0,1.0]],
|
||||
"28":[[0.0,0.0,0.0,0.1875,1.0,1.0]],
|
||||
"29":[[0.0,0.0,0.0,1.0,1.0,0.1875]],
|
||||
"30":[[0.8125,0.0,0.0,1.0,1.0,1.0]],
|
||||
"31":[[0.0,0.0,0.0,1.0,0.125,1.0]],
|
||||
"32":[[0.0,0.0,0.0,1.0,0.25,1.0]],
|
||||
"33":[[0.0,0.0,0.0,1.0,0.375,1.0]],
|
||||
"34":[[0.0,0.0,0.0,1.0,0.625,1.0]],
|
||||
"35":[[0.0,0.0,0.0,1.0,0.875,1.0]],
|
||||
"36":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],
|
||||
"37":[[0.375,0.0,0.375,0.625,1.5,0.625]],
|
||||
"38":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"39":[[0.1875,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"40":[[0.3125,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"41":[[0.4375,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"42":[[0.5625,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"43":[[0.6875,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"44":[[0.8125,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"45":[[0.0,0.0,0.0,1.0,0.1875,1.0]],
|
||||
"46":[[0.0,0.8125,0.0,1.0,1.0,1.0]],
|
||||
"47":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],
|
||||
"48":[[0.0,0.0,0.375,1.0,1.5,0.625]],
|
||||
"49":[[0.375,0.0,0.0,0.625,1.5,1.0]],
|
||||
"50":[[0.0625,0.0,0.0625,0.9375,0.09375,0.9375]],
|
||||
"51":[[0.4375,0.0,0.4375,0.5625,0.875,0.5625],[0.0,0.0,0.0,1.0,0.125,1.0]],
|
||||
"52":[[0.0,0.0,0.0,1.0,0.3125,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.875,1.0,1.0,1.0]],
|
||||
"53":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],
|
||||
"54":[[0.375,0.4375,0.0625,0.625,0.75,0.3125]],
|
||||
"55":[[0.375,0.4375,0.6875,0.625,0.75,0.9375]],
|
||||
"56":[[0.0625,0.4375,0.375,0.3125,0.75,0.625]],
|
||||
"57":[[0.6875,0.4375,0.375,0.9375,0.75,0.625]],
|
||||
"58":[[0.3125,0.3125,0.5625,0.6875,0.75,0.9375]],
|
||||
"59":[[0.0625,0.3125,0.3125,0.4375,0.75,0.6875]],
|
||||
"60":[[0.3125,0.3125,0.0625,0.6875,0.75,0.4375]],
|
||||
"61":[[0.5625,0.3125,0.3125,0.9375,0.75,0.6875]],
|
||||
"62":[[0.25,0.1875,0.4375,0.75,0.75,0.9375]],
|
||||
"63":[[0.0625,0.1875,0.25,0.5625,0.75,0.75]],
|
||||
"64":[[0.25,0.1875,0.0625,0.75,0.75,0.5625]],
|
||||
"65":[[0.4375,0.1875,0.25,0.9375,0.75,0.75]],
|
||||
"66":[[0.25,0.0,0.25,0.75,1.5,0.75]],
|
||||
"67":[[0.3125,0.0,0.3125,0.6875,0.375,0.6875]],
|
||||
"68":[[0.25,0.25,0.5,0.75,0.75,1.0]],
|
||||
"69":[[0.25,0.0,0.25,0.75,0.5,0.75]],
|
||||
"70":[[0.25,0.25,0.0,0.75,0.75,0.5]],
|
||||
"71":[[0.5,0.25,0.25,1.0,0.75,0.75]],
|
||||
"72":[[0.0,0.25,0.25,0.5,0.75,0.75]],
|
||||
"73":[[0.125,0.0,0.0,0.875,1.0,1.0]],
|
||||
"74":[[0.0,0.0,0.125,1.0,1.0,0.875]],
|
||||
"75":[[0.0,0.0,0.0,1.0,0.625,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.0,0.0,0.875,1.0,1.0,1.0]],
|
||||
"76":[[0.0,0.0,0.0,1.0,0.0625,1.0]],
|
||||
"77":[[0.375,0.0,0.375,0.625,1.0,0.625]],
|
||||
"78":[[0.375,0.375,0.0,0.625,0.625,1.0]],
|
||||
"79":[[0.0,0.375,0.375,1.0,0.625,0.625]],
|
||||
"80":[[0.1875,0.1875,0.1875,0.8125,0.8125,0.8125]],
|
||||
"81":[[0.0,0.0,0.0,1.0,0.8125,1.0]],
|
||||
"82":[[0.0,0.0,0.0,1.0,0.8125,1.0],[0.3125,0.8125,0.3125,0.6875,1.0,0.6875]]}}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,164 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Speed",
|
||||
"displayName": "Speed",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Slowness",
|
||||
"displayName": "Slowness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Haste",
|
||||
"displayName": "Haste",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "MiningFatigue",
|
||||
"displayName": "Mining Fatigue",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Strength",
|
||||
"displayName": "Strength",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "InstantHealth",
|
||||
"displayName": "Instant Health",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "InstantDamage",
|
||||
"displayName": "Instant Damage",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "JumpBoost",
|
||||
"displayName": "Jump Boost",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "Nausea",
|
||||
"displayName": "Nausea",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "Regeneration",
|
||||
"displayName": "Regeneration",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "Resistance",
|
||||
"displayName": "Resistance",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "FireResistance",
|
||||
"displayName": "Fire Resistance",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "WaterBreathing",
|
||||
"displayName": "Water Breathing",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "Invisibility",
|
||||
"displayName": "Invisibility",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "Blindness",
|
||||
"displayName": "Blindness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "NightVision",
|
||||
"displayName": "Night Vision",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "Hunger",
|
||||
"displayName": "Hunger",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "Weakness",
|
||||
"displayName": "Weakness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "Poison",
|
||||
"displayName": "Poison",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "Wither",
|
||||
"displayName": "Wither",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "HealthBoost",
|
||||
"displayName": "Health Boost",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "Absorption",
|
||||
"displayName": "Absorption",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "Saturation",
|
||||
"displayName": "Saturation",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "Glowing",
|
||||
"displayName": "Glowing",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "Levitation",
|
||||
"displayName": "Levitation",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "Luck",
|
||||
"displayName": "Luck",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "BadLuck",
|
||||
"displayName": "Bad Luck",
|
||||
"type": "bad"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,606 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "protection",
|
||||
"displayName": "Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 11,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 11,
|
||||
"b": 1
|
||||
},
|
||||
"exclude": [
|
||||
"blast_protection",
|
||||
"fire_protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "fire_protection",
|
||||
"displayName": "Fire Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": 2
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 10
|
||||
},
|
||||
"exclude": [
|
||||
"blast_protection",
|
||||
"protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "feather_falling",
|
||||
"displayName": "Feather Falling",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 6,
|
||||
"b": -1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 6,
|
||||
"b": 5
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_feet",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "blast_protection",
|
||||
"displayName": "Blast Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 5
|
||||
},
|
||||
"exclude": [
|
||||
"fire_protection",
|
||||
"protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "projectile_protection",
|
||||
"displayName": "Projectile Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 6,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 6,
|
||||
"b": 3
|
||||
},
|
||||
"exclude": [
|
||||
"protection",
|
||||
"blast_protection",
|
||||
"fire_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "respiration",
|
||||
"displayName": "Respiration",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 30
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_head",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "aqua_affinity",
|
||||
"displayName": "Aqua Affinity",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 41
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_head",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "thorns",
|
||||
"displayName": "Thorns",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_chest",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "depth_strider",
|
||||
"displayName": "Depth Strider",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 15
|
||||
},
|
||||
"exclude": [
|
||||
"frost_walker"
|
||||
],
|
||||
"category": "armor_feet",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "frost_walker",
|
||||
"displayName": "Frost Walker",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 15
|
||||
},
|
||||
"exclude": [
|
||||
"depth_strider"
|
||||
],
|
||||
"category": "armor_feet",
|
||||
"weight": 2,
|
||||
"treasureOnly": true,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "sharpness",
|
||||
"displayName": "Sharpness",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 11,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 11,
|
||||
"b": 10
|
||||
},
|
||||
"exclude": [
|
||||
"smite",
|
||||
"bane_of_arthropods"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "smite",
|
||||
"displayName": "Smite",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [
|
||||
"sharpness",
|
||||
"bane_of_arthropods"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "bane_of_arthropods",
|
||||
"displayName": "Bane of Arthropods",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [
|
||||
"smite",
|
||||
"sharpness"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "knockback",
|
||||
"displayName": "Knockback",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -15
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "fire_aspect",
|
||||
"displayName": "Fire Aspect",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "looting",
|
||||
"displayName": "Looting",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "efficiency",
|
||||
"displayName": "Efficiency",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": -9
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "digger",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "silk_touch",
|
||||
"displayName": "Silk Touch",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 15
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [
|
||||
"fortune"
|
||||
],
|
||||
"category": "digger",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "unbreaking",
|
||||
"displayName": "Unbreaking",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "breakable",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "fortune",
|
||||
"displayName": "Fortune",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [
|
||||
"silk_touch"
|
||||
],
|
||||
"category": "digger",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"name": "power",
|
||||
"displayName": "Power",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": -9
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 6
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"name": "punch",
|
||||
"displayName": "Punch",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -8
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 20,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"name": "flame",
|
||||
"displayName": "Flame",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 20
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"name": "infinity",
|
||||
"displayName": "Infinity",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 20
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [
|
||||
"mending"
|
||||
],
|
||||
"category": "bow",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"name": "luck_of_the_sea",
|
||||
"displayName": "Luck of the Sea",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "fishing_rod",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"name": "lure",
|
||||
"displayName": "Lure",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "fishing_rod",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"name": "mending",
|
||||
"displayName": "Mending",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 25,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 25,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [
|
||||
"infinity"
|
||||
],
|
||||
"category": "breakable",
|
||||
"weight": 2,
|
||||
"treasureOnly": true,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,638 @@
|
||||
[
|
||||
{
|
||||
"id": 48,
|
||||
"internalId": 48,
|
||||
"name": "Mob",
|
||||
"displayName": "Mob",
|
||||
"type": "mob",
|
||||
"width": null,
|
||||
"height": null,
|
||||
"category": "Generic"
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"internalId": 49,
|
||||
"name": "Monster",
|
||||
"displayName": "Monster",
|
||||
"type": "mob",
|
||||
"width": null,
|
||||
"height": null,
|
||||
"category": "Generic"
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"internalId": 50,
|
||||
"name": "Creeper",
|
||||
"displayName": "Creeper",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"internalId": 51,
|
||||
"name": "Skeleton",
|
||||
"displayName": "Skeleton",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.95,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 52,
|
||||
"internalId": 52,
|
||||
"name": "Spider",
|
||||
"displayName": "Spider",
|
||||
"type": "mob",
|
||||
"width": 1.4,
|
||||
"height": 0.9,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 53,
|
||||
"internalId": 53,
|
||||
"name": "Giant",
|
||||
"displayName": "Giant",
|
||||
"type": "mob",
|
||||
"width": 3.5999999999999996,
|
||||
"height": 10.8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 54,
|
||||
"internalId": 54,
|
||||
"name": "Zombie",
|
||||
"displayName": "Zombie",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 55,
|
||||
"internalId": 55,
|
||||
"name": "Slime",
|
||||
"displayName": "Slime",
|
||||
"type": "mob",
|
||||
"width": 0.51000005,
|
||||
"height": 0.51000005,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 56,
|
||||
"internalId": 56,
|
||||
"name": "Ghast",
|
||||
"displayName": "Ghast",
|
||||
"type": "mob",
|
||||
"width": 4,
|
||||
"height": 4,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 57,
|
||||
"internalId": 57,
|
||||
"name": "PigZombie",
|
||||
"displayName": "Zombie Pigman",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 58,
|
||||
"internalId": 58,
|
||||
"name": "Enderman",
|
||||
"displayName": "Enderman",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 2.9,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 59,
|
||||
"internalId": 59,
|
||||
"name": "CaveSpider",
|
||||
"displayName": "Cave Spider",
|
||||
"type": "mob",
|
||||
"width": 0.7,
|
||||
"height": 0.5,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 60,
|
||||
"internalId": 60,
|
||||
"name": "Silverfish",
|
||||
"displayName": "Silverfish",
|
||||
"type": "mob",
|
||||
"width": 0.4,
|
||||
"height": 0.3,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"internalId": 61,
|
||||
"name": "Blaze",
|
||||
"displayName": "Blaze",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"internalId": 62,
|
||||
"name": "LavaSlime",
|
||||
"displayName": "Magma Cube",
|
||||
"type": "mob",
|
||||
"width": 0.51000005,
|
||||
"height": 0.51000005,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 63,
|
||||
"internalId": 63,
|
||||
"name": "EnderDragon",
|
||||
"displayName": "Ender Dragon",
|
||||
"type": "mob",
|
||||
"width": 16,
|
||||
"height": 8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 64,
|
||||
"internalId": 64,
|
||||
"name": "WitherBoss",
|
||||
"displayName": "Wither",
|
||||
"type": "mob",
|
||||
"width": 0.9,
|
||||
"height": 3.5,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 65,
|
||||
"internalId": 65,
|
||||
"name": "Bat",
|
||||
"displayName": "Bat",
|
||||
"type": "mob",
|
||||
"width": 0.5,
|
||||
"height": 0.9,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 66,
|
||||
"internalId": 66,
|
||||
"name": "Witch",
|
||||
"displayName": "Witch",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.8,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 67,
|
||||
"internalId": 67,
|
||||
"name": "Endermite",
|
||||
"displayName": "Endermite",
|
||||
"type": "mob",
|
||||
"width": 0.4,
|
||||
"height": 0.3,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 68,
|
||||
"internalId": 68,
|
||||
"name": "Guardian",
|
||||
"displayName": "Guardian",
|
||||
"type": "mob",
|
||||
"width": 0.85,
|
||||
"height": 0.85,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 69,
|
||||
"internalId": 69,
|
||||
"name": "Shulker",
|
||||
"displayName": "Shulker",
|
||||
"type": "mob",
|
||||
"width": 1,
|
||||
"height": 1,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 90,
|
||||
"internalId": 90,
|
||||
"name": "Pig",
|
||||
"displayName": "Pig",
|
||||
"type": "mob",
|
||||
"width": 0.9,
|
||||
"height": 0.9,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 91,
|
||||
"internalId": 91,
|
||||
"name": "Sheep",
|
||||
"displayName": "Sheep",
|
||||
"type": "mob",
|
||||
"width": 0.9,
|
||||
"height": 1.3,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 92,
|
||||
"internalId": 92,
|
||||
"name": "Cow",
|
||||
"displayName": "Cow",
|
||||
"type": "mob",
|
||||
"width": 0.9,
|
||||
"height": 1.3,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 93,
|
||||
"internalId": 93,
|
||||
"name": "Chicken",
|
||||
"displayName": "Chicken",
|
||||
"type": "mob",
|
||||
"width": 0.4,
|
||||
"height": 0.7,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 94,
|
||||
"internalId": 94,
|
||||
"name": "Squid",
|
||||
"displayName": "Squid",
|
||||
"type": "mob",
|
||||
"width": 0.95,
|
||||
"height": 0.95,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 95,
|
||||
"internalId": 95,
|
||||
"name": "Wolf",
|
||||
"displayName": "Wolf",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 0.8,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 96,
|
||||
"internalId": 96,
|
||||
"name": "MushroomCow",
|
||||
"displayName": "Mooshroom",
|
||||
"type": "mob",
|
||||
"width": 0.9,
|
||||
"height": 1.3,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 97,
|
||||
"internalId": 97,
|
||||
"name": "SnowMan",
|
||||
"displayName": "Snow Golem",
|
||||
"type": "mob",
|
||||
"width": 0.7,
|
||||
"height": 1.9,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 98,
|
||||
"internalId": 98,
|
||||
"name": "Ozelot",
|
||||
"displayName": "Ocelot",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 0.8,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 99,
|
||||
"internalId": 99,
|
||||
"name": "VillagerGolem",
|
||||
"displayName": "Iron Golem",
|
||||
"type": "mob",
|
||||
"width": 1.4,
|
||||
"height": 2.9,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 100,
|
||||
"internalId": 100,
|
||||
"name": "EntityHorse",
|
||||
"displayName": "Horse",
|
||||
"type": "mob",
|
||||
"width": 1.4,
|
||||
"height": 1.6,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"internalId": 101,
|
||||
"name": "Rabbit",
|
||||
"displayName": "Rabbit",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 0.7,
|
||||
"category": "Passive mobs"
|
||||
},
|
||||
{
|
||||
"id": 120,
|
||||
"internalId": 120,
|
||||
"name": "Villager",
|
||||
"displayName": "Villager",
|
||||
"type": "mob",
|
||||
"width": 0.6,
|
||||
"height": 1.8,
|
||||
"category": "NPCs"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"internalId": 41,
|
||||
"name": "Boat",
|
||||
"displayName": "Boat",
|
||||
"type": "object",
|
||||
"width": 1.5,
|
||||
"height": 0.6,
|
||||
"category": "Vehicles"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"internalId": 1,
|
||||
"name": "Item",
|
||||
"displayName": "Dropped item",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Drops"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"internalId": 2,
|
||||
"name": "XPOrb",
|
||||
"displayName": "Experience Orb",
|
||||
"type": "object",
|
||||
"width": null,
|
||||
"height": null,
|
||||
"category": "Drops"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"internalId": 42,
|
||||
"name": "MinecartRideable",
|
||||
"displayName": "Minecart",
|
||||
"type": "object",
|
||||
"width": 0.98,
|
||||
"height": 0.7,
|
||||
"category": "Vehicles"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"internalId": 42,
|
||||
"name": "MinecartRideable",
|
||||
"displayName": "Minecart",
|
||||
"type": "object",
|
||||
"width": 0.98,
|
||||
"height": 0.7,
|
||||
"category": "Vehicles"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"internalId": 42,
|
||||
"name": "MinecartRideable",
|
||||
"displayName": "Minecart",
|
||||
"type": "object",
|
||||
"width": 0.98,
|
||||
"height": 0.7,
|
||||
"category": "Vehicles"
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"internalId": 20,
|
||||
"name": "PrimedTnt",
|
||||
"displayName": "Primed TNT",
|
||||
"type": "object",
|
||||
"width": 0.98,
|
||||
"height": 0.98,
|
||||
"category": "Blocks"
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"internalId": 200,
|
||||
"name": "EnderCrystal",
|
||||
"displayName": "Ender Crystal",
|
||||
"type": "object",
|
||||
"width": 2,
|
||||
"height": 2,
|
||||
"category": "Immobile"
|
||||
},
|
||||
{
|
||||
"id": 60,
|
||||
"internalId": 10,
|
||||
"name": "Arrow",
|
||||
"displayName": "Shot arrow",
|
||||
"type": "object",
|
||||
"width": 0.5,
|
||||
"height": 0.5,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"internalId": 11,
|
||||
"name": "Snowball",
|
||||
"displayName": "Thrown snowball",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"internalId": 7,
|
||||
"name": "ThrownEgg",
|
||||
"displayName": "Thrown egg",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 63,
|
||||
"internalId": 12,
|
||||
"name": "Fireball",
|
||||
"displayName": "Ghast fireball",
|
||||
"type": "object",
|
||||
"width": 1,
|
||||
"height": 1,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 64,
|
||||
"internalId": 13,
|
||||
"name": "SmallFireball",
|
||||
"displayName": "Blaze fireball",
|
||||
"type": "object",
|
||||
"width": 0.3125,
|
||||
"height": 0.3125,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 65,
|
||||
"internalId": 14,
|
||||
"name": "ThrownEnderpearl",
|
||||
"displayName": "Thrown Ender Pearl",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 66,
|
||||
"internalId": 19,
|
||||
"name": "WitherSkull",
|
||||
"displayName": "Wither Skull",
|
||||
"type": "object",
|
||||
"width": 0.3125,
|
||||
"height": 0.3125,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 67,
|
||||
"internalId": 69,
|
||||
"name": "Shulker",
|
||||
"displayName": "Shulker",
|
||||
"type": "object",
|
||||
"width": 0.3125,
|
||||
"height": 0.3125,
|
||||
"category": "Hostile mobs"
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"internalId": 21,
|
||||
"name": "FallingSand",
|
||||
"displayName": "Falling block",
|
||||
"type": "object",
|
||||
"width": 0.98,
|
||||
"height": 0.98,
|
||||
"category": "Blocks"
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"internalId": 18,
|
||||
"name": "ItemFrame",
|
||||
"displayName": "Item Frame",
|
||||
"type": "object",
|
||||
"width": null,
|
||||
"height": null,
|
||||
"category": "Immobile"
|
||||
},
|
||||
{
|
||||
"id": 72,
|
||||
"internalId": 15,
|
||||
"name": "EyeOfEnderSignal",
|
||||
"displayName": "Thrown Eye of Ender",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 73,
|
||||
"internalId": 16,
|
||||
"name": "ThrownPotion",
|
||||
"displayName": "Thrown splash potion",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 74,
|
||||
"internalId": 21,
|
||||
"name": "FallingSand",
|
||||
"displayName": "Falling block",
|
||||
"type": "object",
|
||||
"width": 0.98,
|
||||
"height": 0.98,
|
||||
"category": "Blocks"
|
||||
},
|
||||
{
|
||||
"id": 75,
|
||||
"internalId": 17,
|
||||
"name": "ThrownExpBottle",
|
||||
"displayName": "Thrown Bottle o' Enchanting",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"internalId": 22,
|
||||
"name": "FireworksRocketEntity",
|
||||
"displayName": "Firework Rocket",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 77,
|
||||
"internalId": 8,
|
||||
"name": "LeashKnot",
|
||||
"displayName": "Lead knot",
|
||||
"type": "object",
|
||||
"width": 0.5,
|
||||
"height": 0.5,
|
||||
"category": "Immobile"
|
||||
},
|
||||
{
|
||||
"id": 78,
|
||||
"internalId": 30,
|
||||
"name": "ArmorStand",
|
||||
"displayName": "Armor Stand",
|
||||
"type": "object",
|
||||
"width": 0.5,
|
||||
"height": 2,
|
||||
"category": "Immobile"
|
||||
},
|
||||
{
|
||||
"id": 90,
|
||||
"name": "Fishing Float",
|
||||
"displayName": "Fishing Float",
|
||||
"type": "object",
|
||||
"width": 0.25,
|
||||
"height": 0.25
|
||||
},
|
||||
{
|
||||
"id": 91,
|
||||
"internalId": 10,
|
||||
"name": "Arrow",
|
||||
"displayName": "Shot arrow",
|
||||
"type": "object",
|
||||
"width": 0.5,
|
||||
"height": 0.5,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 92,
|
||||
"internalId": 10,
|
||||
"name": "Arrow",
|
||||
"displayName": "Shot arrow",
|
||||
"type": "object",
|
||||
"width": 0.5,
|
||||
"height": 0.5,
|
||||
"category": "Projectiles"
|
||||
},
|
||||
{
|
||||
"id": 93,
|
||||
"name": "Dragon Fireball",
|
||||
"displayName": "Dragon Fireball",
|
||||
"type": "object",
|
||||
"width": 0.3125,
|
||||
"height": 0.3125
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,340 @@
|
||||
[
|
||||
{
|
||||
"id": 103,
|
||||
"displayName": "Melon",
|
||||
"name": "melon_block",
|
||||
"stackSize": 64,
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 141,
|
||||
"displayName": "Carrot",
|
||||
"name": "carrots",
|
||||
"stackSize": 64,
|
||||
"foodPoints": 3,
|
||||
"saturation": 3.6,
|
||||
"effectiveQuality": 6.6,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 142,
|
||||
"displayName": "Potato",
|
||||
"name": "potatoes",
|
||||
"stackSize": 64,
|
||||
"foodPoints": 1,
|
||||
"saturation": 0.6,
|
||||
"effectiveQuality": 1.6,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 260,
|
||||
"displayName": "Apple",
|
||||
"stackSize": 64,
|
||||
"name": "apple",
|
||||
"foodPoints": 4,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 6.4,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 282,
|
||||
"displayName": "Mushroom Stew",
|
||||
"stackSize": 1,
|
||||
"name": "mushroom_stew",
|
||||
"foodPoints": 6,
|
||||
"saturation": 7.2,
|
||||
"effectiveQuality": 13.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 297,
|
||||
"displayName": "Bread",
|
||||
"stackSize": 64,
|
||||
"name": "bread",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 319,
|
||||
"displayName": "Raw Porkchop",
|
||||
"stackSize": 64,
|
||||
"name": "porkchop",
|
||||
"foodPoints": 3,
|
||||
"saturation": 1.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 320,
|
||||
"displayName": "Cooked Porkchop",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_porkchop",
|
||||
"foodPoints": 8,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 20.8,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 322,
|
||||
"displayName": "Golden Apple",
|
||||
"stackSize": 64,
|
||||
"name": "golden_apple",
|
||||
"variations": [
|
||||
{
|
||||
"metadata": 0,
|
||||
"displayName": "Golden Apple"
|
||||
},
|
||||
{
|
||||
"metadata": 1,
|
||||
"displayName": "Enchanted Golden Apple"
|
||||
}
|
||||
],
|
||||
"foodPoints": 4,
|
||||
"saturation": 9.6,
|
||||
"effectiveQuality": 13.6,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 349,
|
||||
"displayName": "Raw Fish",
|
||||
"stackSize": 64,
|
||||
"name": "fish",
|
||||
"variations": [
|
||||
{
|
||||
"metadata": 0,
|
||||
"displayName": "Raw Fish"
|
||||
},
|
||||
{
|
||||
"metadata": 1,
|
||||
"displayName": "Raw Salmon"
|
||||
},
|
||||
{
|
||||
"metadata": 2,
|
||||
"displayName": "Clownfish"
|
||||
},
|
||||
{
|
||||
"metadata": 3,
|
||||
"displayName": "Pufferfish"
|
||||
}
|
||||
],
|
||||
"foodPoints": 2,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 2.4,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 350,
|
||||
"displayName": "Cooked Fish",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_fish",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 354,
|
||||
"displayName": "Cake",
|
||||
"stackSize": 1,
|
||||
"name": "cake",
|
||||
"foodPoints": 2,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 2.4,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 357,
|
||||
"displayName": "Cookie",
|
||||
"stackSize": 64,
|
||||
"name": "cookie",
|
||||
"foodPoints": 2,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 2.4,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 363,
|
||||
"displayName": "Raw Beef",
|
||||
"stackSize": 64,
|
||||
"name": "beef",
|
||||
"foodPoints": 3,
|
||||
"saturation": 1.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 364,
|
||||
"displayName": "Steak",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_beef",
|
||||
"foodPoints": 8,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 20.8,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 365,
|
||||
"displayName": "Raw Chicken",
|
||||
"stackSize": 64,
|
||||
"name": "chicken",
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 366,
|
||||
"displayName": "Cooked Chicken",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_chicken",
|
||||
"foodPoints": 6,
|
||||
"saturation": 7.2,
|
||||
"effectiveQuality": 13.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 367,
|
||||
"displayName": "Rotten Flesh",
|
||||
"stackSize": 64,
|
||||
"name": "rotten_flesh",
|
||||
"foodPoints": 4,
|
||||
"saturation": 0.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 375,
|
||||
"displayName": "Spider Eye",
|
||||
"stackSize": 64,
|
||||
"name": "spider_eye",
|
||||
"foodPoints": 2,
|
||||
"saturation": 3.2,
|
||||
"effectiveQuality": 5.2,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 393,
|
||||
"displayName": "Baked Potato",
|
||||
"stackSize": 64,
|
||||
"name": "baked_potato",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 394,
|
||||
"displayName": "Poisonous Potato",
|
||||
"stackSize": 64,
|
||||
"name": "poisonous_potato",
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 396,
|
||||
"displayName": "Golden Carrot",
|
||||
"stackSize": 64,
|
||||
"name": "golden_carrot",
|
||||
"foodPoints": 6,
|
||||
"saturation": 14.4,
|
||||
"effectiveQuality": 20.4,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 400,
|
||||
"displayName": "Pumpkin Pie",
|
||||
"stackSize": 64,
|
||||
"name": "pumpkin_pie",
|
||||
"foodPoints": 8,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 12.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 411,
|
||||
"displayName": "Raw Rabbit",
|
||||
"stackSize": 64,
|
||||
"name": "rabbit",
|
||||
"foodPoints": 3,
|
||||
"saturation": 1.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 412,
|
||||
"displayName": "Cooked Rabbit",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_rabbit",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 413,
|
||||
"displayName": "Rabbit Stew",
|
||||
"stackSize": 1,
|
||||
"name": "rabbit_stew",
|
||||
"foodPoints": 10,
|
||||
"saturation": 12,
|
||||
"effectiveQuality": 22,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 423,
|
||||
"displayName": "Raw Mutton",
|
||||
"stackSize": 64,
|
||||
"name": "mutton",
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 424,
|
||||
"displayName": "Cooked Mutton",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_mutton",
|
||||
"foodPoints": 6,
|
||||
"saturation": 9.6,
|
||||
"effectiveQuality": 15.6,
|
||||
"saturationRatio": 1.5999999999999999
|
||||
},
|
||||
{
|
||||
"id": 432,
|
||||
"displayName": "Chorus Fruit",
|
||||
"stackSize": 64,
|
||||
"name": "chorus_fruit",
|
||||
"foodPoints": 4,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 6.4,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 434,
|
||||
"displayName": "Beetroot",
|
||||
"stackSize": 64,
|
||||
"name": "beetroot",
|
||||
"foodPoints": 1,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 436,
|
||||
"displayName": "Beetroot Soup",
|
||||
"stackSize": 1,
|
||||
"name": "beetroot_soup",
|
||||
"foodPoints": 6,
|
||||
"saturation": 7.2,
|
||||
"effectiveQuality": 13.2,
|
||||
"saturationRatio": 1.2
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "harp"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "doubleBass"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "snareDrum"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "sticks"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "bassDrum"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"rock": {
|
||||
"257": 6,
|
||||
"270": 2,
|
||||
"274": 4,
|
||||
"278": 8,
|
||||
"285": 12
|
||||
},
|
||||
"wood": {
|
||||
"258": 6,
|
||||
"271": 2,
|
||||
"275": 4,
|
||||
"279": 8,
|
||||
"286": 12
|
||||
},
|
||||
"plant": {
|
||||
"258": 6,
|
||||
"267": 1.5,
|
||||
"268": 1.5,
|
||||
"271": 2,
|
||||
"272": 1.5,
|
||||
"275": 4,
|
||||
"276": 1.5,
|
||||
"279": 8,
|
||||
"283": 1.5,
|
||||
"286": 12
|
||||
},
|
||||
"melon": {
|
||||
"267": 1.5,
|
||||
"268": 1.5,
|
||||
"272": 1.5,
|
||||
"276": 1.5,
|
||||
"283": 1.5
|
||||
},
|
||||
"leaves": {
|
||||
"267": 1.5,
|
||||
"268": 1.5,
|
||||
"272": 1.5,
|
||||
"276": 1.5,
|
||||
"283": 1.5,
|
||||
"359": 6
|
||||
},
|
||||
"dirt": {
|
||||
"256": 6,
|
||||
"269": 2,
|
||||
"273": 4,
|
||||
"277": 8,
|
||||
"284": 12
|
||||
},
|
||||
"web": {
|
||||
"267": 15,
|
||||
"268": 15,
|
||||
"272": 15,
|
||||
"276": 15,
|
||||
"283": 15,
|
||||
"359": 15
|
||||
},
|
||||
"wool": {
|
||||
"359": 4.8
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "explode"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "largeexplode"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "hugeexplosion"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "fireworksSpark"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "bubble"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "splash"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "wake"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "suspended"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "depthsuspend"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "crit"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "magicCrit"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "smoke"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "largesmoke"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "spell"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "instantSpell"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "mobSpell"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "mobSpellAmbient"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "witchMagic"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "dripWater"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "dripLava"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "angryVillager"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "happyVillager"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "townaura"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "note"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "portal"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "enchantmenttable"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "flame"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "lava"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "footstep"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "cloud"
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "reddust"
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "snowballpoof"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "snowshovel"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "slime"
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "heart"
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "barrier"
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "iconcrack"
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "blockcrack"
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "blockdust"
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "droplet"
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"name": "take"
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"name": "mobappearance"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"name": "dragonbreath"
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"name": "endRod"
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"name": "damageIndicator"
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"name": "sweepAttack"
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"name": "fallingdust"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version":210,
|
||||
"minecraftVersion":"1.10",
|
||||
"majorVersion":"1.10"
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
[
|
||||
{
|
||||
"id": "",
|
||||
"name": "Player",
|
||||
"slots": [
|
||||
{
|
||||
"name": "craft result",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "craft grid",
|
||||
"index": 1,
|
||||
"size": 4
|
||||
},
|
||||
{
|
||||
"name": "armor",
|
||||
"index": 5,
|
||||
"size": 4
|
||||
},
|
||||
{
|
||||
"name": "helmet",
|
||||
"index": 5
|
||||
},
|
||||
{
|
||||
"name": "chestplate",
|
||||
"index": 6
|
||||
},
|
||||
{
|
||||
"name": "leggings",
|
||||
"index": 7
|
||||
},
|
||||
{
|
||||
"name": "boots",
|
||||
"index": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "EntityHorse",
|
||||
"name": "Horse",
|
||||
"slots": [
|
||||
{
|
||||
"name": "saddle",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "armor",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "storage",
|
||||
"index": 2,
|
||||
"size": 15
|
||||
}
|
||||
],
|
||||
"openedWith": [
|
||||
{
|
||||
"type": "entity",
|
||||
"id": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:anvil",
|
||||
"name": "Anvil",
|
||||
"slots": [
|
||||
{
|
||||
"name": "tool",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "combined",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "result",
|
||||
"index": 2
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"repair cost"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:beacon",
|
||||
"name": "Beacon",
|
||||
"slots": [
|
||||
{
|
||||
"name": "input",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"level",
|
||||
"effect 1",
|
||||
"effect 2"
|
||||
],
|
||||
"openedWith": [
|
||||
{
|
||||
"type": "block",
|
||||
"id": 138
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:brewing_stand",
|
||||
"name": "Brewing Stand",
|
||||
"slots": [
|
||||
{
|
||||
"name": "ingredient",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "result",
|
||||
"index": 1,
|
||||
"size": 3
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"brew time"
|
||||
],
|
||||
"openedWith": [
|
||||
{
|
||||
"type": "block",
|
||||
"id": 117
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:chest",
|
||||
"name": "Chest"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:container",
|
||||
"name": "Container"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:crafting_table",
|
||||
"name": "Workbench",
|
||||
"slots": [
|
||||
{
|
||||
"name": "craft result",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "craft grid",
|
||||
"index": 1,
|
||||
"size": 9
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:dispenser",
|
||||
"name": "Dispenser"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:dropper",
|
||||
"name": "Dropper"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:enchanting_table",
|
||||
"name": "Enchantment Table",
|
||||
"slots": [
|
||||
{
|
||||
"name": "enchanted",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "lapis",
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"xp 1",
|
||||
"xp 2",
|
||||
"xp 3",
|
||||
"seed",
|
||||
"tooltip 1",
|
||||
"tooltip 2",
|
||||
"tooltip 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:furnace",
|
||||
"name": "Furnace",
|
||||
"slots": [
|
||||
{
|
||||
"name": "smelted",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "fuel",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "result",
|
||||
"index": 2
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"fuel",
|
||||
"fuel max",
|
||||
"progress",
|
||||
"progress max"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:hopper",
|
||||
"name": "Hopper"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:villager",
|
||||
"name": "NPC Trade",
|
||||
"slots": [
|
||||
{
|
||||
"name": "give 1",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "give 2",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "take",
|
||||
"index": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"minecraftVersion": "1.11.2",
|
||||
"version":316,
|
||||
"majorVersion": "1.11"
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
[
|
||||
{
|
||||
"name": "maxHealth",
|
||||
"resource": "generic.maxHealth",
|
||||
"default": 20,
|
||||
"min": 1,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "followRange",
|
||||
"resource": "generic.followRange",
|
||||
"default": 32,
|
||||
"min": 0,
|
||||
"max": 2048
|
||||
},
|
||||
{
|
||||
"name": "knockbackResistance",
|
||||
"resource": "generic.knockbackResistance",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
{
|
||||
"name": "movementSpeed",
|
||||
"resource": "generic.movementSpeed",
|
||||
"default": 0.7,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "attackDamage",
|
||||
"resource": "generic.attackDamage",
|
||||
"default": 2,
|
||||
"min": 0,
|
||||
"max": 2048
|
||||
},
|
||||
{
|
||||
"name": "horseJumpStrength",
|
||||
"resource": "horse.jumpStrength",
|
||||
"default": 0.7,
|
||||
"min": 0,
|
||||
"max": 2
|
||||
},
|
||||
{
|
||||
"name": "zombieSpawnReinforcements",
|
||||
"resource": "zombie.spawnReinforcements",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
{
|
||||
"name": "attackSpeed",
|
||||
"resource": "generic.attackSpeed",
|
||||
"default": 4,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "flyingSpeed",
|
||||
"resource": "generic.flyingSpeed",
|
||||
"default": 0.4,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "attackKnockback",
|
||||
"resource": "generic.attackKnockback",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
},
|
||||
{
|
||||
"name": "armorHealth",
|
||||
"resource": "generic.armor",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 30
|
||||
},
|
||||
{
|
||||
"name": "armorToughness",
|
||||
"resource": "generic.armorToughness",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 20
|
||||
},
|
||||
{
|
||||
"name": "luck",
|
||||
"resource": "generic.luck",
|
||||
"default": 0,
|
||||
"min": -1024,
|
||||
"max": 1024
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,797 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Ocean",
|
||||
"color": 112,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "plains",
|
||||
"category": "plains",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Plains",
|
||||
"color": 9286496,
|
||||
"rainfall": 0.4,
|
||||
"child": 129
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "desert",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert",
|
||||
"color": 16421912,
|
||||
"rainfall": 0,
|
||||
"child": 130
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mountains",
|
||||
"color": 6316128,
|
||||
"rainfall": 0.3,
|
||||
"child": 131
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Forest",
|
||||
"color": 353825,
|
||||
"rainfall": 0.8,
|
||||
"child": 132
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga",
|
||||
"color": 747097,
|
||||
"rainfall": 0.8,
|
||||
"child": 133
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "swamp",
|
||||
"category": "swamp",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Swamp",
|
||||
"color": 522674,
|
||||
"rainfall": 0.9,
|
||||
"child": 134
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "river",
|
||||
"category": "river",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "River",
|
||||
"color": 255,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "nether_wastes",
|
||||
"category": "nether",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"climates": [
|
||||
{
|
||||
"temperature": 0,
|
||||
"humidity": 0,
|
||||
"altitude": 0,
|
||||
"weirdness": 0,
|
||||
"offset": 0
|
||||
}
|
||||
],
|
||||
"dimension": "nether",
|
||||
"displayName": "Nether Wastes",
|
||||
"color": 12532539,
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "the_end",
|
||||
"category": "the_end",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "end",
|
||||
"displayName": "The End",
|
||||
"color": 8421631,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "frozen_ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": -1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Frozen Ocean",
|
||||
"color": 7368918,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "frozen_river",
|
||||
"category": "river",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": -0.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Frozen River",
|
||||
"color": 10526975,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "snowy_tundra",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Tundra",
|
||||
"color": 16777215,
|
||||
"rainfall": 0.5,
|
||||
"child": 140
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "snowy_mountains",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Mountains",
|
||||
"color": 10526880,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "mushroom_fields",
|
||||
"category": "mushroom",
|
||||
"temperature": 0.9,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mushroom Fields",
|
||||
"color": 16711935,
|
||||
"rainfall": 1
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "mushroom_field_shore",
|
||||
"category": "mushroom",
|
||||
"temperature": 0.9,
|
||||
"precipitation": "rain",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mushroom Fields Shore",
|
||||
"color": 10486015,
|
||||
"rainfall": 1
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "beach",
|
||||
"category": "beach",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Beach",
|
||||
"color": 16440917,
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "desert_hills",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert Hills",
|
||||
"color": 13786898,
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "wooded_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Hills",
|
||||
"color": 2250012,
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga Hills",
|
||||
"color": 1456435,
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "mountain_edge",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.8,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mountain Edge",
|
||||
"color": 7501978,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "jungle",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle",
|
||||
"color": 5470985,
|
||||
"rainfall": 0.9,
|
||||
"child": 149
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "jungle_hills",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle Hills",
|
||||
"color": 2900485,
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "jungle_edge",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle Edge",
|
||||
"color": 6458135,
|
||||
"rainfall": 0.8,
|
||||
"child": 151
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "deep_ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -1.8,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Deep Ocean",
|
||||
"color": 48,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "stone_shore",
|
||||
"category": "none",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Stone Shore",
|
||||
"color": 10658436,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "snowy_beach",
|
||||
"category": "beach",
|
||||
"temperature": 0.05,
|
||||
"precipitation": "snow",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Beach",
|
||||
"color": 16445632,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "birch_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Birch Forest",
|
||||
"color": 3175492,
|
||||
"rainfall": 0.6,
|
||||
"child": 155
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "birch_forest_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Birch Forest Hills",
|
||||
"color": 2055986,
|
||||
"rainfall": 0.6,
|
||||
"child": 156
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "dark_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Dark Forest",
|
||||
"color": 4215066,
|
||||
"rainfall": 0.8,
|
||||
"child": 157
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "snowy_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga",
|
||||
"color": 3233098,
|
||||
"rainfall": 0.4,
|
||||
"child": 158
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "snowy_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga Hills",
|
||||
"color": 2375478,
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "giant_tree_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.3,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Tree Taiga",
|
||||
"color": 5858897,
|
||||
"rainfall": 0.8,
|
||||
"child": 160
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "giant_tree_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.3,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Tree Taiga Hills",
|
||||
"color": 4542270,
|
||||
"rainfall": 0.8,
|
||||
"child": 161
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "wooded_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Mountains",
|
||||
"color": 5271632,
|
||||
"rainfall": 0.3,
|
||||
"child": 162
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "savanna",
|
||||
"category": "savanna",
|
||||
"temperature": 1.2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Savanna",
|
||||
"color": 12431967,
|
||||
"rainfall": 0,
|
||||
"child": 163
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "savanna_plateau",
|
||||
"category": "savanna",
|
||||
"temperature": 1,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Savanna Plateau",
|
||||
"color": 10984804,
|
||||
"rainfall": 0,
|
||||
"child": 164
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "badlands",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Badlands",
|
||||
"color": 14238997,
|
||||
"rainfall": 0,
|
||||
"child": 165
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "wooded_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Badlands Plateau",
|
||||
"color": 11573093,
|
||||
"rainfall": 0,
|
||||
"child": 166
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Badlands Plateau",
|
||||
"color": 13274213,
|
||||
"rainfall": 0,
|
||||
"child": 167
|
||||
},
|
||||
{
|
||||
"id": 127,
|
||||
"name": "the_void",
|
||||
"category": "none",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "end",
|
||||
"displayName": "the_void",
|
||||
"rainfall": 0.5,
|
||||
"color": 0
|
||||
},
|
||||
{
|
||||
"id": 129,
|
||||
"name": "sunflower_plains",
|
||||
"category": "plains",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Sunflower Plains",
|
||||
"color": 11918216,
|
||||
"parent": "plains",
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 130,
|
||||
"name": "desert_lakes",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert Lakes",
|
||||
"color": 16759872,
|
||||
"parent": "desert",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 131,
|
||||
"name": "gravelly_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Gravelly Mountains",
|
||||
"color": 8947848,
|
||||
"parent": "mountains",
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 132,
|
||||
"name": "flower_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Flower Forest",
|
||||
"color": 2985545,
|
||||
"parent": "forest",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 133,
|
||||
"name": "taiga_mountains",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.3,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga Mountains",
|
||||
"color": 3378817,
|
||||
"parent": "taiga",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 134,
|
||||
"name": "swamp_hills",
|
||||
"category": "swamp",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Swamp Hills",
|
||||
"color": 3145690,
|
||||
"parent": "swamp",
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 140,
|
||||
"name": "ice_spikes",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.425,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Ice Spikes",
|
||||
"color": 11853020,
|
||||
"parent": "snowy_tundra",
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 149,
|
||||
"name": "modified_jungle",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Jungle",
|
||||
"color": 8102705,
|
||||
"parent": "jungle",
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 151,
|
||||
"name": "modified_jungle_edge",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Jungle Edge",
|
||||
"color": 9089855,
|
||||
"parent": "jungle_edge",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 155,
|
||||
"name": "tall_birch_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Tall Birch Forest",
|
||||
"color": 5807212,
|
||||
"parent": "birch_forest",
|
||||
"rainfall": 0.6
|
||||
},
|
||||
{
|
||||
"id": 156,
|
||||
"name": "tall_birch_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.55,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Tall Birch Hills",
|
||||
"color": 4687706,
|
||||
"parent": "birch_forest_hills",
|
||||
"rainfall": 0.6
|
||||
},
|
||||
{
|
||||
"id": 157,
|
||||
"name": "dark_forest_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Dark Forest Hills",
|
||||
"color": 6846786,
|
||||
"parent": "dark_forest",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 158,
|
||||
"name": "snowy_taiga_mountains",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.3,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga Mountains",
|
||||
"color": 5864818,
|
||||
"parent": "snowy_taiga",
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 160,
|
||||
"name": "giant_spruce_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Spruce Taiga",
|
||||
"color": 8490617,
|
||||
"parent": "giant_tree_taiga",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 161,
|
||||
"name": "giant_spruce_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Spruce Taiga Hills",
|
||||
"color": 7173990,
|
||||
"parent": "giant_tree_taiga_hills",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 162,
|
||||
"name": "modified_gravelly_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Gravelly Mountains+",
|
||||
"color": 7903352,
|
||||
"parent": "wooded_mountains",
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 163,
|
||||
"name": "shattered_savanna",
|
||||
"category": "savanna",
|
||||
"temperature": 1.1,
|
||||
"precipitation": "none",
|
||||
"depth": 0.3625,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Shattered Savanna",
|
||||
"color": 15063687,
|
||||
"parent": "savanna",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 164,
|
||||
"name": "shattered_savanna_plateau",
|
||||
"category": "savanna",
|
||||
"temperature": 1,
|
||||
"precipitation": "none",
|
||||
"depth": 1.05,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Shattered Savanna Plateau",
|
||||
"color": 13616524,
|
||||
"parent": "savanna_plateau",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 165,
|
||||
"name": "eroded_badlands",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Eroded Badlands",
|
||||
"color": 16739645,
|
||||
"parent": "badlands",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 166,
|
||||
"name": "modified_wooded_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Wooded Badlands Plateau",
|
||||
"color": 14204813,
|
||||
"parent": "wooded_badlands_plateau",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 167,
|
||||
"name": "modified_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Badlands Plateau",
|
||||
"color": 15905933,
|
||||
"parent": "badlands_plateau",
|
||||
"rainfall": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,316 @@
|
||||
{"blocks":{"air":0,
|
||||
"stone":1,
|
||||
"grass":1,
|
||||
"dirt":1,
|
||||
"cobblestone":1,
|
||||
"planks":1,
|
||||
"sapling":0,
|
||||
"bedrock":1,
|
||||
"flowing_water":0,
|
||||
"water":0,
|
||||
"flowing_lava":0,
|
||||
"lava":0,
|
||||
"sand":1,
|
||||
"gravel":1,
|
||||
"gold_ore":1,
|
||||
"iron_ore":1,
|
||||
"coal_ore":1,
|
||||
"log":1,
|
||||
"leaves":1,
|
||||
"sponge":1,
|
||||
"glass":1,
|
||||
"lapis_ore":1,
|
||||
"lapis_block":1,
|
||||
"dispenser":1,
|
||||
"sandstone":1,
|
||||
"noteblock":1,
|
||||
"bed":2,
|
||||
"golden_rail":0,
|
||||
"detector_rail":0,
|
||||
"sticky_piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
|
||||
"web":0,
|
||||
"tallgrass":0,
|
||||
"deadbush":0,
|
||||
"piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
|
||||
"piston_head":[10,11,9,12,13,14,0,0,10,11,9,12,13,14,0,0],
|
||||
"wool":1,
|
||||
"piston_extension":0,
|
||||
"yellow_flower":0,
|
||||
"red_flower":0,
|
||||
"brown_mushroom":0,
|
||||
"red_mushroom":0,
|
||||
"gold_block":1,
|
||||
"iron_block":1,
|
||||
"double_stone_slab":1,
|
||||
"stone_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"brick_block":1,
|
||||
"tnt":1,
|
||||
"bookshelf":1,
|
||||
"mossy_cobblestone":1,
|
||||
"obsidian":1,
|
||||
"torch":0,
|
||||
"fire":0,
|
||||
"mob_spawner":1,
|
||||
"oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"chest":25,
|
||||
"redstone_wire":0,
|
||||
"diamond_ore":1,
|
||||
"diamond_block":1,
|
||||
"crafting_table":1,
|
||||
"wheat":0,
|
||||
"farmland":26,
|
||||
"furnace":1,
|
||||
"lit_furnace":1,
|
||||
"standing_sign":0,
|
||||
"wooden_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"ladder":[27,27,27,29,30,28,27,27,27,29,30,28,27,27,27,29],
|
||||
"rail":0,
|
||||
"stone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"wall_sign":0,
|
||||
"lever":0,
|
||||
"stone_pressure_plate":0,
|
||||
"iron_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"wooden_pressure_plate":0,
|
||||
"redstone_ore":1,
|
||||
"lit_redstone_ore":1,
|
||||
"unlit_redstone_torch":0,
|
||||
"redstone_torch":0,
|
||||
"stone_button":0,
|
||||
"snow_layer":[0,31,32,33,15,34,4,35,0,31,32,33,15,34,4,35],
|
||||
"ice":1,
|
||||
"snow":1,
|
||||
"cactus":36,
|
||||
"clay":1,
|
||||
"reeds":0,
|
||||
"jukebox":1,
|
||||
"fence":37,
|
||||
"pumpkin":1,
|
||||
"netherrack":1,
|
||||
"soul_sand":35,
|
||||
"glowstone":1,
|
||||
"portal":0,
|
||||
"lit_pumpkin":1,
|
||||
"cake":[38,39,40,41,42,43,44,0,0,0,0,0,0,0,0,0],
|
||||
"unpowered_repeater":31,
|
||||
"powered_repeater":31,
|
||||
"stained_glass":1,
|
||||
"trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
|
||||
"monster_egg":1,
|
||||
"stonebrick":1,
|
||||
"brown_mushroom_block":1,
|
||||
"red_mushroom_block":1,
|
||||
"iron_bars":47,
|
||||
"glass_pane":47,
|
||||
"melon_block":1,
|
||||
"pumpkin_stem":0,
|
||||
"melon_stem":0,
|
||||
"vine":0,
|
||||
"fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"stone_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"mycelium":1,
|
||||
"waterlily":50,
|
||||
"nether_brick":1,
|
||||
"nether_brick_fence":37,
|
||||
"nether_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"nether_wart":0,
|
||||
"enchanting_table":4,
|
||||
"brewing_stand":51,
|
||||
"cauldron":52,
|
||||
"end_portal":0,
|
||||
"end_portal_frame":[81,81,81,81,82,82,82,82,81,81,81,81,82,82,82,82],
|
||||
"end_stone":1,
|
||||
"dragon_egg":53,
|
||||
"redstone_lamp":1,
|
||||
"lit_redstone_lamp":1,
|
||||
"double_wooden_slab":1,
|
||||
"wooden_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"cocoa":[55,56,54,57,58,59,60,61,62,63,64,65,0,0,0,0],
|
||||
"sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"emerald_ore":1,
|
||||
"ender_chest":25,
|
||||
"tripwire_hook":0,
|
||||
"tripwire":0,
|
||||
"emerald_block":1,
|
||||
"spruce_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"birch_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"jungle_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"command_block":1,
|
||||
"beacon":1,
|
||||
"cobblestone_wall":66,
|
||||
"flower_pot":67,
|
||||
"carrots":0,
|
||||
"potatoes":0,
|
||||
"wooden_button":0,
|
||||
"skull":[69,69,68,70,71,72,69,69,69,69,68,70,71,72,69,69],
|
||||
"anvil":[73,74,73,74,73,74,73,74,73,74,73,74,0,0,0,0],
|
||||
"trapped_chest":25,
|
||||
"light_weighted_pressure_plate":0,
|
||||
"heavy_weighted_pressure_plate":0,
|
||||
"unpowered_comparator":31,
|
||||
"powered_comparator":31,
|
||||
"daylight_detector":33,
|
||||
"redstone_block":1,
|
||||
"quartz_ore":1,
|
||||
"hopper":75,
|
||||
"quartz_block":1,
|
||||
"quartz_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"activator_rail":0,
|
||||
"dropper":1,
|
||||
"stained_hardened_clay":1,
|
||||
"stained_glass_pane":47,
|
||||
"leaves2":1,"log2":1,"acacia_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"dark_oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"slime":1,
|
||||
"barrier":1,
|
||||
"iron_trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
|
||||
"prismarine":1,
|
||||
"sea_lantern":1,
|
||||
"hay_block":1,
|
||||
"carpet":76,
|
||||
"hardened_clay":1,
|
||||
"coal_block":1,
|
||||
"packed_ice":1,
|
||||
"double_plant":0,
|
||||
"standing_banner":0,
|
||||
"wall_banner":0,
|
||||
"daylight_detector_inverted":33,
|
||||
"red_sandstone":1,
|
||||
"red_sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"double_stone_slab2":1,"stone_slab2":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"spruce_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"birch_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"jungle_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"dark_oak_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"acacia_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"spruce_fence":37,
|
||||
"birch_fence":37,
|
||||
"jungle_fence":37,
|
||||
"dark_oak_fence":37,
|
||||
"acacia_fence":37,
|
||||
"spruce_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"birch_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"jungle_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"acacia_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"dark_oak_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"end_rod":[77,77,78,78,79,79,77,77,78,78,79,79,77,77,78,78],
|
||||
"chorus_plant":80,
|
||||
"chorus_flower":1,
|
||||
"purpur_block":1,
|
||||
"purpur_pillar":1,
|
||||
"purpur_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"purpur_double_slab":1,
|
||||
"purpur_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"end_bricks":1,
|
||||
"beetroots":0,
|
||||
"grass_path":26,
|
||||
"end_gateway":0,
|
||||
"repeating_command_block":1,
|
||||
"chain_command_block":1,
|
||||
"frosted_ice":1,
|
||||
"magma":1,
|
||||
"nether_wart_block":1,
|
||||
"red_nether_brick":1,
|
||||
"bone_block":1,
|
||||
"structure_void":0,
|
||||
"observer":1,
|
||||
"white_shulker_box":1,
|
||||
"orange_shulker_box":1,
|
||||
"magenta_shulker_box":1,
|
||||
"light_blue_shulker_box":1,
|
||||
"yellow_shulker_box":1,
|
||||
"lime_shulker_box":1,
|
||||
"pink_shulker_box":1,
|
||||
"gray_shulker_box":1,
|
||||
"light_gray_shulker_box":1,
|
||||
"cyan_shulker_box":1,
|
||||
"purple_shulker_box":1,
|
||||
"blue_shulker_box":1,
|
||||
"brown_shulker_box":1,
|
||||
"green_shulker_box":1,
|
||||
"red_shulker_box":1,
|
||||
"black_shulker_box":1,
|
||||
"structure_block":1},
|
||||
"shapes":{"0":[],
|
||||
"1":[[0.0,0.0,0.0,1.0,1.0,1.0]],
|
||||
"2":[[0.0,0.0,0.0,1.0,0.5625,1.0]],
|
||||
"3":[[0.0,0.25,0.0,1.0,1.0,1.0]],
|
||||
"4":[[0.0,0.0,0.0,1.0,0.75,1.0]],
|
||||
"5":[[0.0,0.0,0.25,1.0,1.0,1.0]],
|
||||
"6":[[0.0,0.0,0.0,1.0,1.0,0.75]],
|
||||
"7":[[0.25,0.0,0.0,1.0,1.0,1.0]],
|
||||
"8":[[0.0,0.0,0.0,0.75,1.0,1.0]],
|
||||
"9":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.25]],
|
||||
"10":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.25,0.625]],
|
||||
"11":[[0.0,0.75,0.0,1.0,1.0,1.0],[0.375,-0.25,0.375,0.625,0.75,0.625]],
|
||||
"12":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,-0.25,0.625,0.625,0.75]],
|
||||
"13":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.25,0.625,0.625]],
|
||||
"14":[[0.75,0.0,0.0,1.0,1.0,1.0],[-0.25,0.375,0.375,0.75,0.625,0.625]],
|
||||
"15":[[0.0,0.0,0.0,1.0,0.5,1.0]],
|
||||
"16":[[0.0,0.5,0.0,1.0,1.0,1.0]],
|
||||
"17":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],
|
||||
"18":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],
|
||||
"19":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],
|
||||
"20":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0]],
|
||||
"21":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,0.5,1.0]],
|
||||
"22":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,0.5,0.5,1.0]],
|
||||
"23":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.5,1.0,0.5,1.0]],
|
||||
"24":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,0.5,0.5]],
|
||||
"25":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],
|
||||
"26":[[0.0,0.0,0.0,1.0,0.9375,1.0]],
|
||||
"27":[[0.0,0.0,0.8125,1.0,1.0,1.0]],
|
||||
"28":[[0.0,0.0,0.0,0.1875,1.0,1.0]],
|
||||
"29":[[0.0,0.0,0.0,1.0,1.0,0.1875]],
|
||||
"30":[[0.8125,0.0,0.0,1.0,1.0,1.0]],
|
||||
"31":[[0.0,0.0,0.0,1.0,0.125,1.0]],
|
||||
"32":[[0.0,0.0,0.0,1.0,0.25,1.0]],
|
||||
"33":[[0.0,0.0,0.0,1.0,0.375,1.0]],
|
||||
"34":[[0.0,0.0,0.0,1.0,0.625,1.0]],
|
||||
"35":[[0.0,0.0,0.0,1.0,0.875,1.0]],
|
||||
"36":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],
|
||||
"37":[[0.375,0.0,0.375,0.625,1.5,0.625]],
|
||||
"38":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"39":[[0.1875,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"40":[[0.3125,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"41":[[0.4375,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"42":[[0.5625,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"43":[[0.6875,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"44":[[0.8125,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"45":[[0.0,0.0,0.0,1.0,0.1875,1.0]],
|
||||
"46":[[0.0,0.8125,0.0,1.0,1.0,1.0]],
|
||||
"47":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],
|
||||
"48":[[0.0,0.0,0.375,1.0,1.5,0.625]],
|
||||
"49":[[0.375,0.0,0.0,0.625,1.5,1.0]],
|
||||
"50":[[0.0625,0.0,0.0625,0.9375,0.09375,0.9375]],
|
||||
"51":[[0.4375,0.0,0.4375,0.5625,0.875,0.5625],[0.0,0.0,0.0,1.0,0.125,1.0]],
|
||||
"52":[[0.0,0.0,0.0,1.0,0.3125,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.875,1.0,1.0,1.0]],
|
||||
"53":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],
|
||||
"54":[[0.375,0.4375,0.0625,0.625,0.75,0.3125]],
|
||||
"55":[[0.375,0.4375,0.6875,0.625,0.75,0.9375]],
|
||||
"56":[[0.0625,0.4375,0.375,0.3125,0.75,0.625]],
|
||||
"57":[[0.6875,0.4375,0.375,0.9375,0.75,0.625]],
|
||||
"58":[[0.3125,0.3125,0.5625,0.6875,0.75,0.9375]],
|
||||
"59":[[0.0625,0.3125,0.3125,0.4375,0.75,0.6875]],
|
||||
"60":[[0.3125,0.3125,0.0625,0.6875,0.75,0.4375]],
|
||||
"61":[[0.5625,0.3125,0.3125,0.9375,0.75,0.6875]],
|
||||
"62":[[0.25,0.1875,0.4375,0.75,0.75,0.9375]],
|
||||
"63":[[0.0625,0.1875,0.25,0.5625,0.75,0.75]],
|
||||
"64":[[0.25,0.1875,0.0625,0.75,0.75,0.5625]],
|
||||
"65":[[0.4375,0.1875,0.25,0.9375,0.75,0.75]],
|
||||
"66":[[0.25,0.0,0.25,0.75,1.5,0.75]],
|
||||
"67":[[0.3125,0.0,0.3125,0.6875,0.375,0.6875]],
|
||||
"68":[[0.25,0.25,0.5,0.75,0.75,1.0]],
|
||||
"69":[[0.25,0.0,0.25,0.75,0.5,0.75]],
|
||||
"70":[[0.25,0.25,0.0,0.75,0.75,0.5]],
|
||||
"71":[[0.5,0.25,0.25,1.0,0.75,0.75]],
|
||||
"72":[[0.0,0.25,0.25,0.5,0.75,0.75]],
|
||||
"73":[[0.125,0.0,0.0,0.875,1.0,1.0]],
|
||||
"74":[[0.0,0.0,0.125,1.0,1.0,0.875]],
|
||||
"75":[[0.0,0.0,0.0,1.0,0.625,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.0,0.0,0.875,1.0,1.0,1.0]],
|
||||
"76":[[0.0,0.0,0.0,1.0,0.0625,1.0]],
|
||||
"77":[[0.375,0.0,0.375,0.625,1.0,0.625]],
|
||||
"78":[[0.375,0.375,0.0,0.625,0.625,1.0]],
|
||||
"79":[[0.0,0.375,0.375,1.0,0.625,0.625]],
|
||||
"80":[[0.1875,0.1875,0.1875,0.8125,0.8125,0.8125]],
|
||||
"81":[[0.0,0.0,0.0,1.0,0.8125,1.0]],
|
||||
"82":[[0.0,0.0,0.0,1.0,0.8125,1.0],[0.3125,0.8125,0.3125,0.6875,1.0,0.6875]]}}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,164 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Speed",
|
||||
"displayName": "Speed",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Slowness",
|
||||
"displayName": "Slowness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Haste",
|
||||
"displayName": "Haste",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "MiningFatigue",
|
||||
"displayName": "Mining Fatigue",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Strength",
|
||||
"displayName": "Strength",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "InstantHealth",
|
||||
"displayName": "Instant Health",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "InstantDamage",
|
||||
"displayName": "Instant Damage",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "JumpBoost",
|
||||
"displayName": "Jump Boost",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "Nausea",
|
||||
"displayName": "Nausea",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "Regeneration",
|
||||
"displayName": "Regeneration",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "Resistance",
|
||||
"displayName": "Resistance",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "FireResistance",
|
||||
"displayName": "Fire Resistance",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "WaterBreathing",
|
||||
"displayName": "Water Breathing",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "Invisibility",
|
||||
"displayName": "Invisibility",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "Blindness",
|
||||
"displayName": "Blindness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "NightVision",
|
||||
"displayName": "Night Vision",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "Hunger",
|
||||
"displayName": "Hunger",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "Weakness",
|
||||
"displayName": "Weakness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "Poison",
|
||||
"displayName": "Poison",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "Wither",
|
||||
"displayName": "Wither",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "HealthBoost",
|
||||
"displayName": "Health Boost",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "Absorption",
|
||||
"displayName": "Absorption",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "Saturation",
|
||||
"displayName": "Saturation",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "Glowing",
|
||||
"displayName": "Glowing",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "Levitation",
|
||||
"displayName": "Levitation",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "Luck",
|
||||
"displayName": "Luck",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "BadLuck",
|
||||
"displayName": "Bad Luck",
|
||||
"type": "bad"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,669 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "protection",
|
||||
"displayName": "Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 11,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 11,
|
||||
"b": 1
|
||||
},
|
||||
"exclude": [
|
||||
"blast_protection",
|
||||
"fire_protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "fire_protection",
|
||||
"displayName": "Fire Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": 2
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 10
|
||||
},
|
||||
"exclude": [
|
||||
"blast_protection",
|
||||
"protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "feather_falling",
|
||||
"displayName": "Feather Falling",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 6,
|
||||
"b": -1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 6,
|
||||
"b": 5
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_feet",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "blast_protection",
|
||||
"displayName": "Blast Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 5
|
||||
},
|
||||
"exclude": [
|
||||
"fire_protection",
|
||||
"protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "projectile_protection",
|
||||
"displayName": "Projectile Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 6,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 6,
|
||||
"b": 3
|
||||
},
|
||||
"exclude": [
|
||||
"protection",
|
||||
"blast_protection",
|
||||
"fire_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "respiration",
|
||||
"displayName": "Respiration",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 30
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_head",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "aqua_affinity",
|
||||
"displayName": "Aqua Affinity",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 41
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_head",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "thorns",
|
||||
"displayName": "Thorns",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_chest",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "depth_strider",
|
||||
"displayName": "Depth Strider",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 15
|
||||
},
|
||||
"exclude": [
|
||||
"frost_walker"
|
||||
],
|
||||
"category": "armor_feet",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "frost_walker",
|
||||
"displayName": "Frost Walker",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 15
|
||||
},
|
||||
"exclude": [
|
||||
"depth_strider"
|
||||
],
|
||||
"category": "armor_feet",
|
||||
"weight": 2,
|
||||
"treasureOnly": true,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "binding_curse",
|
||||
"displayName": "Curse of Binding",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 25
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "wearable",
|
||||
"weight": 1,
|
||||
"treasureOnly": true,
|
||||
"curse": true,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "sharpness",
|
||||
"displayName": "Sharpness",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 11,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 11,
|
||||
"b": 10
|
||||
},
|
||||
"exclude": [
|
||||
"smite",
|
||||
"bane_of_arthropods"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "smite",
|
||||
"displayName": "Smite",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [
|
||||
"sharpness",
|
||||
"bane_of_arthropods"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "bane_of_arthropods",
|
||||
"displayName": "Bane of Arthropods",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [
|
||||
"smite",
|
||||
"sharpness"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "knockback",
|
||||
"displayName": "Knockback",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -15
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "fire_aspect",
|
||||
"displayName": "Fire Aspect",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "looting",
|
||||
"displayName": "Looting",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "sweeping_edge",
|
||||
"displayName": "Sweeping Edge",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": -4
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 9,
|
||||
"b": 11
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "efficiency",
|
||||
"displayName": "Efficiency",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": -9
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "digger",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "silk_touch",
|
||||
"displayName": "Silk Touch",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 15
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [
|
||||
"fortune"
|
||||
],
|
||||
"category": "digger",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "unbreaking",
|
||||
"displayName": "Unbreaking",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "breakable",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "fortune",
|
||||
"displayName": "Fortune",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [
|
||||
"silk_touch"
|
||||
],
|
||||
"category": "digger",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"name": "power",
|
||||
"displayName": "Power",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": -9
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 6
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"name": "punch",
|
||||
"displayName": "Punch",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -8
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 20,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"name": "flame",
|
||||
"displayName": "Flame",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 20
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"name": "infinity",
|
||||
"displayName": "Infinity",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 20
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [
|
||||
"mending"
|
||||
],
|
||||
"category": "bow",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"name": "luck_of_the_sea",
|
||||
"displayName": "Luck of the Sea",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "fishing_rod",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"name": "lure",
|
||||
"displayName": "Lure",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "fishing_rod",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"name": "mending",
|
||||
"displayName": "Mending",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 25,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 25,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [
|
||||
"infinity"
|
||||
],
|
||||
"category": "breakable",
|
||||
"weight": 2,
|
||||
"treasureOnly": true,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"name": "vanishing_curse",
|
||||
"displayName": "Curse of Vanishing",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 25
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "vanishable",
|
||||
"weight": 1,
|
||||
"treasureOnly": true,
|
||||
"curse": true,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,358 @@
|
||||
[
|
||||
{
|
||||
"id": 103,
|
||||
"displayName": "Melon",
|
||||
"name": "melon_block",
|
||||
"stackSize": 64,
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 141,
|
||||
"displayName": "Carrot",
|
||||
"name": "carrots",
|
||||
"stackSize": 64,
|
||||
"foodPoints": 3,
|
||||
"saturation": 3.6,
|
||||
"effectiveQuality": 6.6,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 142,
|
||||
"displayName": "Potato",
|
||||
"name": "potatoes",
|
||||
"stackSize": 64,
|
||||
"foodPoints": 1,
|
||||
"saturation": 0.6,
|
||||
"effectiveQuality": 1.6,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 260,
|
||||
"displayName": "Apple",
|
||||
"stackSize": 64,
|
||||
"name": "apple",
|
||||
"foodPoints": 4,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 6.4,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 282,
|
||||
"displayName": "Mushroom Stew",
|
||||
"stackSize": 1,
|
||||
"name": "mushroom_stew",
|
||||
"foodPoints": 6,
|
||||
"saturation": 7.2,
|
||||
"effectiveQuality": 13.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 297,
|
||||
"displayName": "Bread",
|
||||
"stackSize": 64,
|
||||
"name": "bread",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 319,
|
||||
"displayName": "Raw Porkchop",
|
||||
"stackSize": 64,
|
||||
"name": "porkchop",
|
||||
"foodPoints": 3,
|
||||
"saturation": 1.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 320,
|
||||
"displayName": "Cooked Porkchop",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_porkchop",
|
||||
"foodPoints": 8,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 20.8,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 322,
|
||||
"displayName": "Golden Apple",
|
||||
"stackSize": 64,
|
||||
"name": "golden_apple",
|
||||
"variations": [
|
||||
{
|
||||
"metadata": 0,
|
||||
"displayName": "Golden Apple"
|
||||
},
|
||||
{
|
||||
"metadata": 1,
|
||||
"displayName": "Enchanted Golden Apple"
|
||||
}
|
||||
],
|
||||
"foodPoints": 4,
|
||||
"saturation": 9.6,
|
||||
"effectiveQuality": 13.6,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 349,
|
||||
"displayName": "Raw Fish",
|
||||
"stackSize": 64,
|
||||
"name": "fish",
|
||||
"variations": [
|
||||
{
|
||||
"metadata": 0,
|
||||
"displayName": "Raw Fish"
|
||||
},
|
||||
{
|
||||
"metadata": 1,
|
||||
"displayName": "Raw Salmon"
|
||||
},
|
||||
{
|
||||
"metadata": 2,
|
||||
"displayName": "Clownfish"
|
||||
},
|
||||
{
|
||||
"metadata": 3,
|
||||
"displayName": "Pufferfish"
|
||||
}
|
||||
],
|
||||
"foodPoints": 2,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 2.4,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 350,
|
||||
"displayName": "Cooked Fish",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_fish",
|
||||
"variations": [
|
||||
{
|
||||
"metadata": 0,
|
||||
"displayName": "Raw Fish"
|
||||
},
|
||||
{
|
||||
"metadata": 1,
|
||||
"displayName": "Raw Salmon"
|
||||
},
|
||||
{
|
||||
"metadata": 2,
|
||||
"displayName": "Clownfish"
|
||||
},
|
||||
{
|
||||
"metadata": 3,
|
||||
"displayName": "Pufferfish"
|
||||
}
|
||||
],
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 354,
|
||||
"displayName": "Cake",
|
||||
"stackSize": 1,
|
||||
"name": "cake",
|
||||
"foodPoints": 2,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 2.4,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 357,
|
||||
"displayName": "Cookie",
|
||||
"stackSize": 64,
|
||||
"name": "cookie",
|
||||
"foodPoints": 2,
|
||||
"saturation": 0.4,
|
||||
"effectiveQuality": 2.4,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 363,
|
||||
"displayName": "Raw Beef",
|
||||
"stackSize": 64,
|
||||
"name": "beef",
|
||||
"foodPoints": 3,
|
||||
"saturation": 1.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 364,
|
||||
"displayName": "Steak",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_beef",
|
||||
"foodPoints": 8,
|
||||
"saturation": 12.8,
|
||||
"effectiveQuality": 20.8,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 365,
|
||||
"displayName": "Raw Chicken",
|
||||
"stackSize": 64,
|
||||
"name": "chicken",
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 366,
|
||||
"displayName": "Cooked Chicken",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_chicken",
|
||||
"foodPoints": 6,
|
||||
"saturation": 7.2,
|
||||
"effectiveQuality": 13.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 367,
|
||||
"displayName": "Rotten Flesh",
|
||||
"stackSize": 64,
|
||||
"name": "rotten_flesh",
|
||||
"foodPoints": 4,
|
||||
"saturation": 0.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.2
|
||||
},
|
||||
{
|
||||
"id": 375,
|
||||
"displayName": "Spider Eye",
|
||||
"stackSize": 64,
|
||||
"name": "spider_eye",
|
||||
"foodPoints": 2,
|
||||
"saturation": 3.2,
|
||||
"effectiveQuality": 5.2,
|
||||
"saturationRatio": 1.6
|
||||
},
|
||||
{
|
||||
"id": 393,
|
||||
"displayName": "Baked Potato",
|
||||
"stackSize": 64,
|
||||
"name": "baked_potato",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 394,
|
||||
"displayName": "Poisonous Potato",
|
||||
"stackSize": 64,
|
||||
"name": "poisonous_potato",
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 396,
|
||||
"displayName": "Golden Carrot",
|
||||
"stackSize": 64,
|
||||
"name": "golden_carrot",
|
||||
"foodPoints": 6,
|
||||
"saturation": 14.4,
|
||||
"effectiveQuality": 20.4,
|
||||
"saturationRatio": 2.4
|
||||
},
|
||||
{
|
||||
"id": 400,
|
||||
"displayName": "Pumpkin Pie",
|
||||
"stackSize": 64,
|
||||
"name": "pumpkin_pie",
|
||||
"foodPoints": 8,
|
||||
"saturation": 4.8,
|
||||
"effectiveQuality": 12.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 411,
|
||||
"displayName": "Raw Rabbit",
|
||||
"stackSize": 64,
|
||||
"name": "rabbit",
|
||||
"foodPoints": 3,
|
||||
"saturation": 1.8,
|
||||
"effectiveQuality": 4.8,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 412,
|
||||
"displayName": "Cooked Rabbit",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_rabbit",
|
||||
"foodPoints": 5,
|
||||
"saturation": 6,
|
||||
"effectiveQuality": 11,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 413,
|
||||
"displayName": "Rabbit Stew",
|
||||
"stackSize": 1,
|
||||
"name": "rabbit_stew",
|
||||
"foodPoints": 10,
|
||||
"saturation": 12,
|
||||
"effectiveQuality": 22,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 423,
|
||||
"displayName": "Raw Mutton",
|
||||
"stackSize": 64,
|
||||
"name": "mutton",
|
||||
"foodPoints": 2,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 3.2,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 424,
|
||||
"displayName": "Cooked Mutton",
|
||||
"stackSize": 64,
|
||||
"name": "cooked_mutton",
|
||||
"foodPoints": 6,
|
||||
"saturation": 9.6,
|
||||
"effectiveQuality": 15.6,
|
||||
"saturationRatio": 1.5999999999999999
|
||||
},
|
||||
{
|
||||
"id": 432,
|
||||
"displayName": "Chorus Fruit",
|
||||
"stackSize": 64,
|
||||
"name": "chorus_fruit",
|
||||
"foodPoints": 4,
|
||||
"saturation": 2.4,
|
||||
"effectiveQuality": 6.4,
|
||||
"saturationRatio": 0.6
|
||||
},
|
||||
{
|
||||
"id": 434,
|
||||
"displayName": "Beetroot",
|
||||
"stackSize": 64,
|
||||
"name": "beetroot",
|
||||
"foodPoints": 1,
|
||||
"saturation": 1.2,
|
||||
"effectiveQuality": 2.2,
|
||||
"saturationRatio": 1.2
|
||||
},
|
||||
{
|
||||
"id": 436,
|
||||
"displayName": "Beetroot Soup",
|
||||
"stackSize": 1,
|
||||
"name": "beetroot_soup",
|
||||
"foodPoints": 6,
|
||||
"saturation": 7.2,
|
||||
"effectiveQuality": 13.2,
|
||||
"saturationRatio": 1.2
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "harp"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "doubleBass"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "snareDrum"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "sticks"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "bassDrum"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "player",
|
||||
"appearance": "White marker",
|
||||
"visibleInItemFrame": false
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "frame",
|
||||
"appearance": "Green marker",
|
||||
"visibleInItemFrame": true
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "red_marker",
|
||||
"appearance": "Red marker",
|
||||
"visibleInItemFrame": false
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "blue_marker",
|
||||
"appearance": "Blue marker",
|
||||
"visibleInItemFrame": false
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "target_x",
|
||||
"appearance": "White X",
|
||||
"visibleInItemFrame": true
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "target_point",
|
||||
"appearance": "Red triangle",
|
||||
"visibleInItemFrame": true
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "player_off_map",
|
||||
"appearance": "Large white dot",
|
||||
"visibleInItemFrame": false
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "player_off_limits",
|
||||
"appearance": "Small white dot",
|
||||
"visibleInItemFrame": false
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "mansion",
|
||||
"appearance": "Woodland mansion",
|
||||
"visibleInItemFrame": true
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "monument",
|
||||
"appearance": "Ocean monument",
|
||||
"visibleInItemFrame": true
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"rock": {
|
||||
"257": 6,
|
||||
"270": 2,
|
||||
"274": 4,
|
||||
"278": 8,
|
||||
"285": 12
|
||||
},
|
||||
"wood": {
|
||||
"258": 6,
|
||||
"271": 2,
|
||||
"275": 4,
|
||||
"279": 8,
|
||||
"286": 12
|
||||
},
|
||||
"plant": {
|
||||
"258": 6,
|
||||
"267": 1.5,
|
||||
"268": 1.5,
|
||||
"271": 2,
|
||||
"272": 1.5,
|
||||
"275": 4,
|
||||
"276": 1.5,
|
||||
"279": 8,
|
||||
"283": 1.5,
|
||||
"286": 12
|
||||
},
|
||||
"melon": {
|
||||
"267": 1.5,
|
||||
"268": 1.5,
|
||||
"272": 1.5,
|
||||
"276": 1.5,
|
||||
"283": 1.5
|
||||
},
|
||||
"leaves": {
|
||||
"267": 1.5,
|
||||
"268": 1.5,
|
||||
"272": 1.5,
|
||||
"276": 1.5,
|
||||
"283": 1.5,
|
||||
"359": 6
|
||||
},
|
||||
"dirt": {
|
||||
"256": 6,
|
||||
"269": 2,
|
||||
"273": 4,
|
||||
"277": 8,
|
||||
"284": 12
|
||||
},
|
||||
"web": {
|
||||
"267": 15,
|
||||
"268": 15,
|
||||
"272": 15,
|
||||
"276": 15,
|
||||
"283": 15,
|
||||
"359": 15
|
||||
},
|
||||
"wool": {
|
||||
"359": 4.8
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "explode"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "largeexplode"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "hugeexplosion"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "fireworksSpark"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "bubble"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "splash"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "wake"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "suspended"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "depthsuspend"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "crit"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "magicCrit"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "smoke"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "largesmoke"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "spell"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "instantSpell"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "mobSpell"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "mobSpellAmbient"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "witchMagic"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "dripWater"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "dripLava"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "angryVillager"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "happyVillager"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "townaura"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "note"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "portal"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "enchantmenttable"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "flame"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "lava"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "footstep"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "cloud"
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "reddust"
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "snowballpoof"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "snowshovel"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "slime"
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "heart"
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "barrier"
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "iconcrack"
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "blockcrack"
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "blockdust"
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "droplet"
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"name": "take"
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"name": "mobappearance"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"name": "dragonbreath"
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"name": "endRod"
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"name": "damageIndicator"
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"name": "sweepAttack"
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"name": "fallingdust"
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"name": "totem"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"name": "spit"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"minecraftVersion": "1.11",
|
||||
"version":315,
|
||||
"majorVersion": "1.11"
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
[
|
||||
{
|
||||
"id": "",
|
||||
"name": "Player",
|
||||
"slots": [
|
||||
{
|
||||
"name": "craft result",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "craft grid",
|
||||
"index": 1,
|
||||
"size": 4
|
||||
},
|
||||
{
|
||||
"name": "armor",
|
||||
"index": 5,
|
||||
"size": 4
|
||||
},
|
||||
{
|
||||
"name": "helmet",
|
||||
"index": 5
|
||||
},
|
||||
{
|
||||
"name": "chestplate",
|
||||
"index": 6
|
||||
},
|
||||
{
|
||||
"name": "leggings",
|
||||
"index": 7
|
||||
},
|
||||
{
|
||||
"name": "boots",
|
||||
"index": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "EntityHorse",
|
||||
"name": "Horse",
|
||||
"slots": [
|
||||
{
|
||||
"name": "saddle",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "armor",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "storage",
|
||||
"index": 2,
|
||||
"size": 15
|
||||
}
|
||||
],
|
||||
"openedWith": [
|
||||
{
|
||||
"type": "entity",
|
||||
"id": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:anvil",
|
||||
"name": "Anvil",
|
||||
"slots": [
|
||||
{
|
||||
"name": "tool",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "combined",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "result",
|
||||
"index": 2
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"repair cost"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:beacon",
|
||||
"name": "Beacon",
|
||||
"slots": [
|
||||
{
|
||||
"name": "input",
|
||||
"index": 0
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"level",
|
||||
"effect 1",
|
||||
"effect 2"
|
||||
],
|
||||
"openedWith": [
|
||||
{
|
||||
"type": "block",
|
||||
"id": 138
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:brewing_stand",
|
||||
"name": "Brewing Stand",
|
||||
"slots": [
|
||||
{
|
||||
"name": "ingredient",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "result",
|
||||
"index": 1,
|
||||
"size": 3
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"brew time"
|
||||
],
|
||||
"openedWith": [
|
||||
{
|
||||
"type": "block",
|
||||
"id": 117
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:chest",
|
||||
"name": "Chest"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:container",
|
||||
"name": "Container"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:crafting_table",
|
||||
"name": "Workbench",
|
||||
"slots": [
|
||||
{
|
||||
"name": "craft result",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "craft grid",
|
||||
"index": 1,
|
||||
"size": 9
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:dispenser",
|
||||
"name": "Dispenser"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:dropper",
|
||||
"name": "Dropper"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:enchanting_table",
|
||||
"name": "Enchantment Table",
|
||||
"slots": [
|
||||
{
|
||||
"name": "enchanted",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "lapis",
|
||||
"index": 1
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"xp 1",
|
||||
"xp 2",
|
||||
"xp 3",
|
||||
"seed",
|
||||
"tooltip 1",
|
||||
"tooltip 2",
|
||||
"tooltip 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:furnace",
|
||||
"name": "Furnace",
|
||||
"slots": [
|
||||
{
|
||||
"name": "smelted",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "fuel",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "result",
|
||||
"index": 2
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
"fuel",
|
||||
"fuel max",
|
||||
"progress",
|
||||
"progress max"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "minecraft:hopper",
|
||||
"name": "Hopper"
|
||||
},
|
||||
{
|
||||
"id": "minecraft:villager",
|
||||
"name": "NPC Trade",
|
||||
"slots": [
|
||||
{
|
||||
"name": "give 1",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"name": "give 2",
|
||||
"index": 1
|
||||
},
|
||||
{
|
||||
"name": "take",
|
||||
"index": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"minecraftVersion": "1.12-pre4",
|
||||
"version":331,
|
||||
"majorVersion": "1.12"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"minecraftVersion": "1.12.1",
|
||||
"version":338,
|
||||
"majorVersion": "1.12"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"minecraftVersion": "1.12.2",
|
||||
"version":340,
|
||||
"majorVersion": "1.12"
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
[
|
||||
{
|
||||
"name": "maxHealth",
|
||||
"resource": "generic.maxHealth",
|
||||
"default": 20,
|
||||
"min": 1,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "followRange",
|
||||
"resource": "generic.followRange",
|
||||
"default": 32,
|
||||
"min": 0,
|
||||
"max": 2048
|
||||
},
|
||||
{
|
||||
"name": "knockbackResistance",
|
||||
"resource": "generic.knockbackResistance",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
{
|
||||
"name": "movementSpeed",
|
||||
"resource": "generic.movementSpeed",
|
||||
"default": 0.7,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "attackDamage",
|
||||
"resource": "generic.attackDamage",
|
||||
"default": 2,
|
||||
"min": 0,
|
||||
"max": 2048
|
||||
},
|
||||
{
|
||||
"name": "horseJumpStrength",
|
||||
"resource": "horse.jumpStrength",
|
||||
"default": 0.7,
|
||||
"min": 0,
|
||||
"max": 2
|
||||
},
|
||||
{
|
||||
"name": "zombieSpawnReinforcements",
|
||||
"resource": "zombie.spawnReinforcements",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 1
|
||||
},
|
||||
{
|
||||
"name": "attackSpeed",
|
||||
"resource": "generic.attackSpeed",
|
||||
"default": 4,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "flyingSpeed",
|
||||
"resource": "generic.flyingSpeed",
|
||||
"default": 0.4,
|
||||
"min": 0,
|
||||
"max": 1024
|
||||
},
|
||||
{
|
||||
"name": "attackKnockback",
|
||||
"resource": "generic.attackKnockback",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 5
|
||||
},
|
||||
{
|
||||
"name": "armorHealth",
|
||||
"resource": "generic.armor",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 30
|
||||
},
|
||||
{
|
||||
"name": "armorToughness",
|
||||
"resource": "generic.armorToughness",
|
||||
"default": 0,
|
||||
"min": 0,
|
||||
"max": 20
|
||||
},
|
||||
{
|
||||
"name": "luck",
|
||||
"resource": "generic.luck",
|
||||
"default": 0,
|
||||
"min": -1024,
|
||||
"max": 1024
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,797 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Ocean",
|
||||
"color": 112,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "plains",
|
||||
"category": "plains",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Plains",
|
||||
"color": 9286496,
|
||||
"rainfall": 0.4,
|
||||
"child": 129
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "desert",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert",
|
||||
"color": 16421912,
|
||||
"rainfall": 0,
|
||||
"child": 130
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mountains",
|
||||
"color": 6316128,
|
||||
"rainfall": 0.3,
|
||||
"child": 131
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Forest",
|
||||
"color": 353825,
|
||||
"rainfall": 0.8,
|
||||
"child": 132
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga",
|
||||
"color": 747097,
|
||||
"rainfall": 0.8,
|
||||
"child": 133
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "swamp",
|
||||
"category": "swamp",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Swamp",
|
||||
"color": 522674,
|
||||
"rainfall": 0.9,
|
||||
"child": 134
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "river",
|
||||
"category": "river",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "River",
|
||||
"color": 255,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "nether_wastes",
|
||||
"category": "nether",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"climates": [
|
||||
{
|
||||
"temperature": 0,
|
||||
"humidity": 0,
|
||||
"altitude": 0,
|
||||
"weirdness": 0,
|
||||
"offset": 0
|
||||
}
|
||||
],
|
||||
"dimension": "nether",
|
||||
"displayName": "Nether Wastes",
|
||||
"color": 12532539,
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "the_end",
|
||||
"category": "the_end",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "end",
|
||||
"displayName": "The End",
|
||||
"color": 8421631,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "frozen_ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": -1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Frozen Ocean",
|
||||
"color": 7368918,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "frozen_river",
|
||||
"category": "river",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": -0.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Frozen River",
|
||||
"color": 10526975,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "snowy_tundra",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Tundra",
|
||||
"color": 16777215,
|
||||
"rainfall": 0.5,
|
||||
"child": 140
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "snowy_mountains",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Mountains",
|
||||
"color": 10526880,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "mushroom_fields",
|
||||
"category": "mushroom",
|
||||
"temperature": 0.9,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mushroom Fields",
|
||||
"color": 16711935,
|
||||
"rainfall": 1
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "mushroom_field_shore",
|
||||
"category": "mushroom",
|
||||
"temperature": 0.9,
|
||||
"precipitation": "rain",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mushroom Fields Shore",
|
||||
"color": 10486015,
|
||||
"rainfall": 1
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "beach",
|
||||
"category": "beach",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Beach",
|
||||
"color": 16440917,
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "desert_hills",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert Hills",
|
||||
"color": 13786898,
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "wooded_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Hills",
|
||||
"color": 2250012,
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga Hills",
|
||||
"color": 1456435,
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "mountain_edge",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.8,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Mountain Edge",
|
||||
"color": 7501978,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "jungle",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle",
|
||||
"color": 5470985,
|
||||
"rainfall": 0.9,
|
||||
"child": 149
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "jungle_hills",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle Hills",
|
||||
"color": 2900485,
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "jungle_edge",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Jungle Edge",
|
||||
"color": 6458135,
|
||||
"rainfall": 0.8,
|
||||
"child": 151
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "deep_ocean",
|
||||
"category": "ocean",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "rain",
|
||||
"depth": -1.8,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Deep Ocean",
|
||||
"color": 48,
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "stone_shore",
|
||||
"category": "none",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Stone Shore",
|
||||
"color": 10658436,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "snowy_beach",
|
||||
"category": "beach",
|
||||
"temperature": 0.05,
|
||||
"precipitation": "snow",
|
||||
"depth": 0,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Beach",
|
||||
"color": 16445632,
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "birch_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Birch Forest",
|
||||
"color": 3175492,
|
||||
"rainfall": 0.6,
|
||||
"child": 155
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "birch_forest_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Birch Forest Hills",
|
||||
"color": 2055986,
|
||||
"rainfall": 0.6,
|
||||
"child": 156
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"name": "dark_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Dark Forest",
|
||||
"color": 4215066,
|
||||
"rainfall": 0.8,
|
||||
"child": 157
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "snowy_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga",
|
||||
"color": 3233098,
|
||||
"rainfall": 0.4,
|
||||
"child": 158
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"name": "snowy_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga Hills",
|
||||
"color": 2375478,
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "giant_tree_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.3,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Tree Taiga",
|
||||
"color": 5858897,
|
||||
"rainfall": 0.8,
|
||||
"child": 160
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "giant_tree_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.3,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Tree Taiga Hills",
|
||||
"color": 4542270,
|
||||
"rainfall": 0.8,
|
||||
"child": 161
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "wooded_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Mountains",
|
||||
"color": 5271632,
|
||||
"rainfall": 0.3,
|
||||
"child": 162
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "savanna",
|
||||
"category": "savanna",
|
||||
"temperature": 1.2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Savanna",
|
||||
"color": 12431967,
|
||||
"rainfall": 0,
|
||||
"child": 163
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "savanna_plateau",
|
||||
"category": "savanna",
|
||||
"temperature": 1,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Savanna Plateau",
|
||||
"color": 10984804,
|
||||
"rainfall": 0,
|
||||
"child": 164
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"name": "badlands",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Badlands",
|
||||
"color": 14238997,
|
||||
"rainfall": 0,
|
||||
"child": 165
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"name": "wooded_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Wooded Badlands Plateau",
|
||||
"color": 11573093,
|
||||
"rainfall": 0,
|
||||
"child": 166
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"name": "badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 1.5,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Badlands Plateau",
|
||||
"color": 13274213,
|
||||
"rainfall": 0,
|
||||
"child": 167
|
||||
},
|
||||
{
|
||||
"id": 127,
|
||||
"name": "the_void",
|
||||
"category": "none",
|
||||
"temperature": 0.5,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "end",
|
||||
"displayName": "the_void",
|
||||
"rainfall": 0.5,
|
||||
"color": 0
|
||||
},
|
||||
{
|
||||
"id": 129,
|
||||
"name": "sunflower_plains",
|
||||
"category": "plains",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Sunflower Plains",
|
||||
"color": 11918216,
|
||||
"parent": "plains",
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 130,
|
||||
"name": "desert_lakes",
|
||||
"category": "desert",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.125,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Desert Lakes",
|
||||
"color": 16759872,
|
||||
"parent": "desert",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 131,
|
||||
"name": "gravelly_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Gravelly Mountains",
|
||||
"color": 8947848,
|
||||
"parent": "mountains",
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 132,
|
||||
"name": "flower_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Flower Forest",
|
||||
"color": 2985545,
|
||||
"parent": "forest",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 133,
|
||||
"name": "taiga_mountains",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.3,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Taiga Mountains",
|
||||
"color": 3378817,
|
||||
"parent": "taiga",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 134,
|
||||
"name": "swamp_hills",
|
||||
"category": "swamp",
|
||||
"temperature": 0.8,
|
||||
"precipitation": "rain",
|
||||
"depth": -0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Swamp Hills",
|
||||
"color": 3145690,
|
||||
"parent": "swamp",
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 140,
|
||||
"name": "ice_spikes",
|
||||
"category": "icy",
|
||||
"temperature": 0,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.425,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Ice Spikes",
|
||||
"color": 11853020,
|
||||
"parent": "snowy_tundra",
|
||||
"rainfall": 0.5
|
||||
},
|
||||
{
|
||||
"id": 149,
|
||||
"name": "modified_jungle",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Jungle",
|
||||
"color": 8102705,
|
||||
"parent": "jungle",
|
||||
"rainfall": 0.9
|
||||
},
|
||||
{
|
||||
"id": 151,
|
||||
"name": "modified_jungle_edge",
|
||||
"category": "jungle",
|
||||
"temperature": 0.95,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Jungle Edge",
|
||||
"color": 9089855,
|
||||
"parent": "jungle_edge",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 155,
|
||||
"name": "tall_birch_forest",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Tall Birch Forest",
|
||||
"color": 5807212,
|
||||
"parent": "birch_forest",
|
||||
"rainfall": 0.6
|
||||
},
|
||||
{
|
||||
"id": 156,
|
||||
"name": "tall_birch_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.6,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.55,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Tall Birch Hills",
|
||||
"color": 4687706,
|
||||
"parent": "birch_forest_hills",
|
||||
"rainfall": 0.6
|
||||
},
|
||||
{
|
||||
"id": 157,
|
||||
"name": "dark_forest_hills",
|
||||
"category": "forest",
|
||||
"temperature": 0.7,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Dark Forest Hills",
|
||||
"color": 6846786,
|
||||
"parent": "dark_forest",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 158,
|
||||
"name": "snowy_taiga_mountains",
|
||||
"category": "taiga",
|
||||
"temperature": -0.5,
|
||||
"precipitation": "snow",
|
||||
"depth": 0.3,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Snowy Taiga Mountains",
|
||||
"color": 5864818,
|
||||
"parent": "snowy_taiga",
|
||||
"rainfall": 0.4
|
||||
},
|
||||
{
|
||||
"id": 160,
|
||||
"name": "giant_spruce_taiga",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Spruce Taiga",
|
||||
"color": 8490617,
|
||||
"parent": "giant_tree_taiga",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 161,
|
||||
"name": "giant_spruce_taiga_hills",
|
||||
"category": "taiga",
|
||||
"temperature": 0.25,
|
||||
"precipitation": "rain",
|
||||
"depth": 0.2,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Giant Spruce Taiga Hills",
|
||||
"color": 7173990,
|
||||
"parent": "giant_tree_taiga_hills",
|
||||
"rainfall": 0.8
|
||||
},
|
||||
{
|
||||
"id": 162,
|
||||
"name": "modified_gravelly_mountains",
|
||||
"category": "extreme_hills",
|
||||
"temperature": 0.2,
|
||||
"precipitation": "rain",
|
||||
"depth": 1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Gravelly Mountains+",
|
||||
"color": 7903352,
|
||||
"parent": "wooded_mountains",
|
||||
"rainfall": 0.3
|
||||
},
|
||||
{
|
||||
"id": 163,
|
||||
"name": "shattered_savanna",
|
||||
"category": "savanna",
|
||||
"temperature": 1.1,
|
||||
"precipitation": "none",
|
||||
"depth": 0.3625,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Shattered Savanna",
|
||||
"color": 15063687,
|
||||
"parent": "savanna",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 164,
|
||||
"name": "shattered_savanna_plateau",
|
||||
"category": "savanna",
|
||||
"temperature": 1,
|
||||
"precipitation": "none",
|
||||
"depth": 1.05,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Shattered Savanna Plateau",
|
||||
"color": 13616524,
|
||||
"parent": "savanna_plateau",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 165,
|
||||
"name": "eroded_badlands",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.1,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Eroded Badlands",
|
||||
"color": 16739645,
|
||||
"parent": "badlands",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 166,
|
||||
"name": "modified_wooded_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Wooded Badlands Plateau",
|
||||
"color": 14204813,
|
||||
"parent": "wooded_badlands_plateau",
|
||||
"rainfall": 0
|
||||
},
|
||||
{
|
||||
"id": 167,
|
||||
"name": "modified_badlands_plateau",
|
||||
"category": "mesa",
|
||||
"temperature": 2,
|
||||
"precipitation": "none",
|
||||
"depth": 0.45,
|
||||
"dimension": "overworld",
|
||||
"displayName": "Modified Badlands Plateau",
|
||||
"color": 15905933,
|
||||
"parent": "badlands_plateau",
|
||||
"rainfall": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,334 @@
|
||||
{"blocks":{"air":0,
|
||||
"stone":1,
|
||||
"grass":1,
|
||||
"dirt":1,
|
||||
"cobblestone":1,
|
||||
"planks":1,
|
||||
"sapling":0,
|
||||
"bedrock":1,
|
||||
"flowing_water":0,
|
||||
"water":0,
|
||||
"flowing_lava":0,
|
||||
"lava":0,
|
||||
"sand":1,
|
||||
"gravel":1,
|
||||
"gold_ore":1,
|
||||
"iron_ore":1,
|
||||
"coal_ore":1,
|
||||
"log":1,
|
||||
"leaves":1,
|
||||
"sponge":1,
|
||||
"glass":1,
|
||||
"lapis_ore":1,
|
||||
"lapis_block":1,
|
||||
"dispenser":1,
|
||||
"sandstone":1,
|
||||
"noteblock":1,
|
||||
"bed":2,
|
||||
"golden_rail":0,
|
||||
"detector_rail":0,
|
||||
"sticky_piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
|
||||
"web":0,
|
||||
"tallgrass":0,
|
||||
"deadbush":0,
|
||||
"piston":[1,1,1,1,1,1,0,0,3,4,5,6,7,8,0,0],
|
||||
"piston_head":[10,11,9,12,13,14,0,0,10,11,9,12,13,14,0,0],
|
||||
"wool":1,
|
||||
"piston_extension":0,
|
||||
"yellow_flower":0,
|
||||
"red_flower":0,
|
||||
"brown_mushroom":0,
|
||||
"red_mushroom":0,
|
||||
"gold_block":1,
|
||||
"iron_block":1,
|
||||
"double_stone_slab":1,
|
||||
"stone_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"brick_block":1,
|
||||
"tnt":1,
|
||||
"bookshelf":1,
|
||||
"mossy_cobblestone":1,
|
||||
"obsidian":1,
|
||||
"torch":0,
|
||||
"fire":0,
|
||||
"mob_spawner":1,
|
||||
"oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"chest":25,
|
||||
"redstone_wire":0,
|
||||
"diamond_ore":1,
|
||||
"diamond_block":1,
|
||||
"crafting_table":1,
|
||||
"wheat":0,
|
||||
"farmland":26,
|
||||
"furnace":1,
|
||||
"lit_furnace":1,
|
||||
"standing_sign":0,
|
||||
"wooden_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"ladder":[27,27,27,29,30,28,27,27,27,29,30,28,27,27,27,29],
|
||||
"rail":0,
|
||||
"stone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"wall_sign":0,
|
||||
"lever":0,
|
||||
"stone_pressure_plate":0,
|
||||
"iron_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"wooden_pressure_plate":0,
|
||||
"redstone_ore":1,
|
||||
"lit_redstone_ore":1,
|
||||
"unlit_redstone_torch":0,
|
||||
"redstone_torch":0,
|
||||
"stone_button":0,
|
||||
"snow_layer":[0,31,32,33,15,34,4,35,0,31,32,33,15,34,4,35],
|
||||
"ice":1,
|
||||
"snow":1,
|
||||
"cactus":36,
|
||||
"clay":1,
|
||||
"reeds":0,
|
||||
"jukebox":1,
|
||||
"fence":37,
|
||||
"pumpkin":1,
|
||||
"netherrack":1,
|
||||
"soul_sand":35,
|
||||
"glowstone":1,
|
||||
"portal":0,
|
||||
"lit_pumpkin":1,
|
||||
"cake":[38,39,40,41,42,43,44,0,0,0,0,0,0,0,0,0],
|
||||
"unpowered_repeater":31,
|
||||
"powered_repeater":31,
|
||||
"stained_glass":1,
|
||||
"trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
|
||||
"monster_egg":1,
|
||||
"stonebrick":1,
|
||||
"brown_mushroom_block":1,
|
||||
"red_mushroom_block":1,
|
||||
"iron_bars":47,
|
||||
"glass_pane":47,
|
||||
"melon_block":1,
|
||||
"pumpkin_stem":0,
|
||||
"melon_stem":0,
|
||||
"vine":0,
|
||||
"fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"stone_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"mycelium":1,
|
||||
"waterlily":50,
|
||||
"nether_brick":1,
|
||||
"nether_brick_fence":37,
|
||||
"nether_brick_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"nether_wart":0,
|
||||
"enchanting_table":4,
|
||||
"brewing_stand":51,
|
||||
"cauldron":52,
|
||||
"end_portal":0,
|
||||
"end_portal_frame":[81,81,81,81,82,82,82,82,81,81,81,81,82,82,82,82],
|
||||
"end_stone":1,
|
||||
"dragon_egg":53,
|
||||
"redstone_lamp":1,
|
||||
"lit_redstone_lamp":1,
|
||||
"double_wooden_slab":1,
|
||||
"wooden_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"cocoa":[55,56,54,57,58,59,60,61,62,63,64,65,0,0,0,0],
|
||||
"sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"emerald_ore":1,
|
||||
"ender_chest":25,
|
||||
"tripwire_hook":0,
|
||||
"tripwire":0,
|
||||
"emerald_block":1,
|
||||
"spruce_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"birch_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"jungle_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"command_block":1,
|
||||
"beacon":1,
|
||||
"cobblestone_wall":66,
|
||||
"flower_pot":67,
|
||||
"carrots":0,
|
||||
"potatoes":0,
|
||||
"wooden_button":0,
|
||||
"skull":[69,69,68,70,71,72,69,69,69,69,68,70,71,72,69,69],
|
||||
"anvil":[73,74,73,74,73,74,73,74,73,74,73,74,0,0,0,0],
|
||||
"trapped_chest":25,
|
||||
"light_weighted_pressure_plate":0,
|
||||
"heavy_weighted_pressure_plate":0,
|
||||
"unpowered_comparator":31,
|
||||
"powered_comparator":31,
|
||||
"daylight_detector":33,
|
||||
"redstone_block":1,
|
||||
"quartz_ore":1,
|
||||
"hopper":75,
|
||||
"quartz_block":1,
|
||||
"quartz_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"activator_rail":0,
|
||||
"dropper":1,
|
||||
"stained_hardened_clay":1,
|
||||
"stained_glass_pane":47,
|
||||
"leaves2":1,"log2":1,"acacia_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"dark_oak_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"slime":1,
|
||||
"barrier":1,
|
||||
"iron_trapdoor":[45,45,45,45,27,29,30,28,46,46,46,46,27,29,30,28],
|
||||
"prismarine":1,
|
||||
"sea_lantern":1,
|
||||
"hay_block":1,
|
||||
"carpet":76,
|
||||
"hardened_clay":1,
|
||||
"coal_block":1,
|
||||
"packed_ice":1,
|
||||
"double_plant":0,
|
||||
"standing_banner":0,
|
||||
"wall_banner":0,
|
||||
"daylight_detector_inverted":33,
|
||||
"red_sandstone":1,
|
||||
"red_sandstone_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"double_stone_slab2":1,"stone_slab2":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"spruce_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"birch_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"jungle_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"dark_oak_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"acacia_fence_gate":[48,49,48,49,0,0,0,0,48,49,48,49,0,0,0,0],
|
||||
"spruce_fence":37,
|
||||
"birch_fence":37,
|
||||
"jungle_fence":37,
|
||||
"dark_oak_fence":37,
|
||||
"acacia_fence":37,
|
||||
"spruce_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"birch_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"jungle_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"acacia_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"dark_oak_door":[28,29,30,27,29,30,27,28,28,29,30,27,29,30,27,28],
|
||||
"end_rod":[77,77,78,78,79,79,77,77,78,78,79,79,77,77,78,78],
|
||||
"chorus_plant":80,
|
||||
"chorus_flower":1,
|
||||
"purpur_block":1,
|
||||
"purpur_pillar":1,
|
||||
"purpur_stairs":[18,19,20,17,21,22,23,24,18,19,20,17,21,22,23,24],
|
||||
"purpur_double_slab":1,
|
||||
"purpur_slab":[15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16],
|
||||
"end_bricks":1,
|
||||
"beetroots":0,
|
||||
"grass_path":26,
|
||||
"end_gateway":0,
|
||||
"repeating_command_block":1,
|
||||
"chain_command_block":1,
|
||||
"frosted_ice":1,
|
||||
"magma":1,
|
||||
"nether_wart_block":1,
|
||||
"red_nether_brick":1,
|
||||
"bone_block":1,
|
||||
"structure_void":0,
|
||||
"observer":1,
|
||||
"white_shulker_box":1,
|
||||
"orange_shulker_box":1,
|
||||
"magenta_shulker_box":1,
|
||||
"light_blue_shulker_box":1,
|
||||
"yellow_shulker_box":1,
|
||||
"lime_shulker_box":1,
|
||||
"pink_shulker_box":1,
|
||||
"gray_shulker_box":1,
|
||||
"light_gray_shulker_box":1,
|
||||
"cyan_shulker_box":1,
|
||||
"purple_shulker_box":1,
|
||||
"blue_shulker_box":1,
|
||||
"brown_shulker_box":1,
|
||||
"green_shulker_box":1,
|
||||
"red_shulker_box":1,
|
||||
"black_shulker_box":1,
|
||||
"white_glazed_terracotta":1,
|
||||
"orange_glazed_terracotta":1,
|
||||
"magenta_glazed_terracotta":1,
|
||||
"light_blue_glazed_terracotta":1,
|
||||
"yellow_glazed_terracotta":1,
|
||||
"lime_glazed_terracotta":1,
|
||||
"pink_glazed_terracotta":1,
|
||||
"gray_glazed_terracotta":1,
|
||||
"light_gray_glazed_terracotta":1,
|
||||
"cyan_glazed_terracotta":1,
|
||||
"purple_glazed_terracotta":1,
|
||||
"blue_glazed_terracotta":1,
|
||||
"brown_glazed_terracotta":1,
|
||||
"green_glazed_terracotta":1,
|
||||
"red_glazed_terracotta":1,
|
||||
"black_glazed_terracotta":1,
|
||||
"concrete":1,
|
||||
"concrete_powder":1,
|
||||
"structure_block":1},
|
||||
"shapes":{"0":[],
|
||||
"1":[[0.0,0.0,0.0,1.0,1.0,1.0]],
|
||||
"2":[[0.0,0.0,0.0,1.0,0.5625,1.0]],
|
||||
"3":[[0.0,0.25,0.0,1.0,1.0,1.0]],
|
||||
"4":[[0.0,0.0,0.0,1.0,0.75,1.0]],
|
||||
"5":[[0.0,0.0,0.25,1.0,1.0,1.0]],
|
||||
"6":[[0.0,0.0,0.0,1.0,1.0,0.75]],
|
||||
"7":[[0.25,0.0,0.0,1.0,1.0,1.0]],
|
||||
"8":[[0.0,0.0,0.0,0.75,1.0,1.0]],
|
||||
"9":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.25]],
|
||||
"10":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.25,0.625]],
|
||||
"11":[[0.0,0.75,0.0,1.0,1.0,1.0],[0.375,-0.25,0.375,0.625,0.75,0.625]],
|
||||
"12":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,-0.25,0.625,0.625,0.75]],
|
||||
"13":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.25,0.625,0.625]],
|
||||
"14":[[0.75,0.0,0.0,1.0,1.0,1.0],[-0.25,0.375,0.375,0.75,0.625,0.625]],
|
||||
"15":[[0.0,0.0,0.0,1.0,0.5,1.0]],
|
||||
"16":[[0.0,0.5,0.0,1.0,1.0,1.0]],
|
||||
"17":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],
|
||||
"18":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],
|
||||
"19":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],
|
||||
"20":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0]],
|
||||
"21":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,0.5,1.0]],
|
||||
"22":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,0.5,0.5,1.0]],
|
||||
"23":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.5,1.0,0.5,1.0]],
|
||||
"24":[[0.0,0.5,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,0.5,0.5]],
|
||||
"25":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],
|
||||
"26":[[0.0,0.0,0.0,1.0,0.9375,1.0]],
|
||||
"27":[[0.0,0.0,0.8125,1.0,1.0,1.0]],
|
||||
"28":[[0.0,0.0,0.0,0.1875,1.0,1.0]],
|
||||
"29":[[0.0,0.0,0.0,1.0,1.0,0.1875]],
|
||||
"30":[[0.8125,0.0,0.0,1.0,1.0,1.0]],
|
||||
"31":[[0.0,0.0,0.0,1.0,0.125,1.0]],
|
||||
"32":[[0.0,0.0,0.0,1.0,0.25,1.0]],
|
||||
"33":[[0.0,0.0,0.0,1.0,0.375,1.0]],
|
||||
"34":[[0.0,0.0,0.0,1.0,0.625,1.0]],
|
||||
"35":[[0.0,0.0,0.0,1.0,0.875,1.0]],
|
||||
"36":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],
|
||||
"37":[[0.375,0.0,0.375,0.625,1.5,0.625]],
|
||||
"38":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"39":[[0.1875,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"40":[[0.3125,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"41":[[0.4375,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"42":[[0.5625,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"43":[[0.6875,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"44":[[0.8125,0.0,0.0625,0.9375,0.5,0.9375]],
|
||||
"45":[[0.0,0.0,0.0,1.0,0.1875,1.0]],
|
||||
"46":[[0.0,0.8125,0.0,1.0,1.0,1.0]],
|
||||
"47":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],
|
||||
"48":[[0.0,0.0,0.375,1.0,1.5,0.625]],
|
||||
"49":[[0.375,0.0,0.0,0.625,1.5,1.0]],
|
||||
"50":[[0.0625,0.0,0.0625,0.9375,0.09375,0.9375]],
|
||||
"51":[[0.4375,0.0,0.4375,0.5625,0.875,0.5625],[0.0,0.0,0.0,1.0,0.125,1.0]],
|
||||
"52":[[0.0,0.0,0.0,1.0,0.3125,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.875,1.0,1.0,1.0]],
|
||||
"53":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],
|
||||
"54":[[0.375,0.4375,0.0625,0.625,0.75,0.3125]],
|
||||
"55":[[0.375,0.4375,0.6875,0.625,0.75,0.9375]],
|
||||
"56":[[0.0625,0.4375,0.375,0.3125,0.75,0.625]],
|
||||
"57":[[0.6875,0.4375,0.375,0.9375,0.75,0.625]],
|
||||
"58":[[0.3125,0.3125,0.5625,0.6875,0.75,0.9375]],
|
||||
"59":[[0.0625,0.3125,0.3125,0.4375,0.75,0.6875]],
|
||||
"60":[[0.3125,0.3125,0.0625,0.6875,0.75,0.4375]],
|
||||
"61":[[0.5625,0.3125,0.3125,0.9375,0.75,0.6875]],
|
||||
"62":[[0.25,0.1875,0.4375,0.75,0.75,0.9375]],
|
||||
"63":[[0.0625,0.1875,0.25,0.5625,0.75,0.75]],
|
||||
"64":[[0.25,0.1875,0.0625,0.75,0.75,0.5625]],
|
||||
"65":[[0.4375,0.1875,0.25,0.9375,0.75,0.75]],
|
||||
"66":[[0.25,0.0,0.25,0.75,1.5,0.75]],
|
||||
"67":[[0.3125,0.0,0.3125,0.6875,0.375,0.6875]],
|
||||
"68":[[0.25,0.25,0.5,0.75,0.75,1.0]],
|
||||
"69":[[0.25,0.0,0.25,0.75,0.5,0.75]],
|
||||
"70":[[0.25,0.25,0.0,0.75,0.75,0.5]],
|
||||
"71":[[0.5,0.25,0.25,1.0,0.75,0.75]],
|
||||
"72":[[0.0,0.25,0.25,0.5,0.75,0.75]],
|
||||
"73":[[0.125,0.0,0.0,0.875,1.0,1.0]],
|
||||
"74":[[0.0,0.0,0.125,1.0,1.0,0.875]],
|
||||
"75":[[0.0,0.0,0.0,1.0,0.625,1.0],[0.0,0.0,0.0,0.125,1.0,1.0],[0.875,0.0,0.0,1.0,1.0,1.0],[0.0,0.0,0.0,1.0,1.0,0.125],[0.0,0.0,0.875,1.0,1.0,1.0]],
|
||||
"76":[[0.0,0.0,0.0,1.0,0.0625,1.0]],
|
||||
"77":[[0.375,0.0,0.375,0.625,1.0,0.625]],
|
||||
"78":[[0.375,0.375,0.0,0.625,0.625,1.0]],
|
||||
"79":[[0.0,0.375,0.375,1.0,0.625,0.625]],
|
||||
"80":[[0.1875,0.1875,0.1875,0.8125,0.8125,0.8125]],
|
||||
"81":[[0.0,0.0,0.0,1.0,0.8125,1.0]],
|
||||
"82":[[0.0,0.0,0.0,1.0,0.8125,1.0],[0.3125,0.8125,0.3125,0.6875,1.0,0.6875]]}}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,164 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Speed",
|
||||
"displayName": "Speed",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Slowness",
|
||||
"displayName": "Slowness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "Haste",
|
||||
"displayName": "Haste",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "MiningFatigue",
|
||||
"displayName": "Mining Fatigue",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Strength",
|
||||
"displayName": "Strength",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "InstantHealth",
|
||||
"displayName": "Instant Health",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "InstantDamage",
|
||||
"displayName": "Instant Damage",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "JumpBoost",
|
||||
"displayName": "Jump Boost",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "Nausea",
|
||||
"displayName": "Nausea",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "Regeneration",
|
||||
"displayName": "Regeneration",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "Resistance",
|
||||
"displayName": "Resistance",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "FireResistance",
|
||||
"displayName": "Fire Resistance",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "WaterBreathing",
|
||||
"displayName": "Water Breathing",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "Invisibility",
|
||||
"displayName": "Invisibility",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "Blindness",
|
||||
"displayName": "Blindness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "NightVision",
|
||||
"displayName": "Night Vision",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "Hunger",
|
||||
"displayName": "Hunger",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "Weakness",
|
||||
"displayName": "Weakness",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "Poison",
|
||||
"displayName": "Poison",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "Wither",
|
||||
"displayName": "Wither",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "HealthBoost",
|
||||
"displayName": "Health Boost",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "Absorption",
|
||||
"displayName": "Absorption",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "Saturation",
|
||||
"displayName": "Saturation",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "Glowing",
|
||||
"displayName": "Glowing",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "Levitation",
|
||||
"displayName": "Levitation",
|
||||
"type": "bad"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "Luck",
|
||||
"displayName": "Luck",
|
||||
"type": "good"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "BadLuck",
|
||||
"displayName": "Bad Luck",
|
||||
"type": "bad"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,669 @@
|
||||
[
|
||||
{
|
||||
"id": 0,
|
||||
"name": "protection",
|
||||
"displayName": "Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 11,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 11,
|
||||
"b": 1
|
||||
},
|
||||
"exclude": [
|
||||
"blast_protection",
|
||||
"fire_protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "fire_protection",
|
||||
"displayName": "Fire Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": 2
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 10
|
||||
},
|
||||
"exclude": [
|
||||
"blast_protection",
|
||||
"protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "feather_falling",
|
||||
"displayName": "Feather Falling",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 6,
|
||||
"b": -1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 6,
|
||||
"b": 5
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_feet",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "blast_protection",
|
||||
"displayName": "Blast Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 5
|
||||
},
|
||||
"exclude": [
|
||||
"fire_protection",
|
||||
"protection",
|
||||
"projectile_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "projectile_protection",
|
||||
"displayName": "Projectile Protection",
|
||||
"maxLevel": 4,
|
||||
"minCost": {
|
||||
"a": 6,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 6,
|
||||
"b": 3
|
||||
},
|
||||
"exclude": [
|
||||
"protection",
|
||||
"blast_protection",
|
||||
"fire_protection"
|
||||
],
|
||||
"category": "armor",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "respiration",
|
||||
"displayName": "Respiration",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 30
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_head",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "aqua_affinity",
|
||||
"displayName": "Aqua Affinity",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 1
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 41
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_head",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "thorns",
|
||||
"displayName": "Thorns",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "armor_chest",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "depth_strider",
|
||||
"displayName": "Depth Strider",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 15
|
||||
},
|
||||
"exclude": [
|
||||
"frost_walker"
|
||||
],
|
||||
"category": "armor_feet",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "frost_walker",
|
||||
"displayName": "Frost Walker",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 15
|
||||
},
|
||||
"exclude": [
|
||||
"depth_strider"
|
||||
],
|
||||
"category": "armor_feet",
|
||||
"weight": 2,
|
||||
"treasureOnly": true,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "binding_curse",
|
||||
"displayName": "Curse of Binding",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 25
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "wearable",
|
||||
"weight": 1,
|
||||
"treasureOnly": true,
|
||||
"curse": true,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "sharpness",
|
||||
"displayName": "Sharpness",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 11,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 11,
|
||||
"b": 10
|
||||
},
|
||||
"exclude": [
|
||||
"smite",
|
||||
"bane_of_arthropods"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "smite",
|
||||
"displayName": "Smite",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [
|
||||
"sharpness",
|
||||
"bane_of_arthropods"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "bane_of_arthropods",
|
||||
"displayName": "Bane of Arthropods",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 8,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [
|
||||
"smite",
|
||||
"sharpness"
|
||||
],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "knockback",
|
||||
"displayName": "Knockback",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -15
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "fire_aspect",
|
||||
"displayName": "Fire Aspect",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -10
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "looting",
|
||||
"displayName": "Looting",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "sweeping",
|
||||
"displayName": "Sweeping Edge",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": -4
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 9,
|
||||
"b": 11
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "weapon",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"name": "efficiency",
|
||||
"displayName": "Efficiency",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": -9
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "digger",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"name": "silk_touch",
|
||||
"displayName": "Silk Touch",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 15
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [
|
||||
"fortune"
|
||||
],
|
||||
"category": "digger",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"name": "unbreaking",
|
||||
"displayName": "Unbreaking",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 8,
|
||||
"b": -3
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "breakable",
|
||||
"weight": 5,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"name": "fortune",
|
||||
"displayName": "Fortune",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [
|
||||
"silk_touch"
|
||||
],
|
||||
"category": "digger",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"name": "power",
|
||||
"displayName": "Power",
|
||||
"maxLevel": 5,
|
||||
"minCost": {
|
||||
"a": 10,
|
||||
"b": -9
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 6
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 10,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"name": "punch",
|
||||
"displayName": "Punch",
|
||||
"maxLevel": 2,
|
||||
"minCost": {
|
||||
"a": 20,
|
||||
"b": -8
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 20,
|
||||
"b": 17
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"name": "flame",
|
||||
"displayName": "Flame",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 20
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "bow",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"name": "infinity",
|
||||
"displayName": "Infinity",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 20
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [
|
||||
"mending"
|
||||
],
|
||||
"category": "bow",
|
||||
"weight": 1,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"name": "luck_of_the_sea",
|
||||
"displayName": "Luck of the Sea",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "fishing_rod",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"name": "lure",
|
||||
"displayName": "Lure",
|
||||
"maxLevel": 3,
|
||||
"minCost": {
|
||||
"a": 9,
|
||||
"b": 6
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 10,
|
||||
"b": 51
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "fishing_rod",
|
||||
"weight": 2,
|
||||
"treasureOnly": false,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"name": "mending",
|
||||
"displayName": "Mending",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 25,
|
||||
"b": 0
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 25,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [
|
||||
"infinity"
|
||||
],
|
||||
"category": "breakable",
|
||||
"weight": 2,
|
||||
"treasureOnly": true,
|
||||
"curse": false,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"name": "vanishing_curse",
|
||||
"displayName": "Curse of Vanishing",
|
||||
"maxLevel": 1,
|
||||
"minCost": {
|
||||
"a": 0,
|
||||
"b": 25
|
||||
},
|
||||
"maxCost": {
|
||||
"a": 0,
|
||||
"b": 50
|
||||
},
|
||||
"exclude": [],
|
||||
"category": "vanishable",
|
||||
"weight": 1,
|
||||
"treasureOnly": true,
|
||||
"curse": true,
|
||||
"tradeable": true,
|
||||
"discoverable": true
|
||||
}
|
||||
]
|
||||
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