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/
|
.devres/
|
||||||
.idea/
|
.idea/
|
||||||
.failed_packets/
|
.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
|
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
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,
|
“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
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.
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
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”.
|
||||||
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.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
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.
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
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.
|
||||||
including but not limited to software source code, documentation
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
|
||||||
transformation or translation of a Source form, including but
|
2. Conveying Modified Versions.
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
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:
|
||||||
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).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
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
|
||||||
form, that is based on (or derived from) the Work and for which the
|
b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
|
||||||
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.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
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."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
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:
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
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.
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
b) Accompany the object code with a copy of the GNU GPL and this license document.
|
||||||
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.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
4. Combined Works.
|
||||||
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. Redistribution. You may reproduce and distribute copies of the
|
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:
|
||||||
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:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
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.
|
||||||
Derivative Works a copy of this License; and
|
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
|
5. Combined Libraries.
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
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:
|
||||||
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
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
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.
|
||||||
distribution, then any Derivative Works that You distribute must
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
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.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
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.
|
||||||
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.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
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.
|
||||||
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.
|
|
||||||
@@ -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"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/admin-else/strom/crypto"
|
|
||||||
"github.com/google/uuid"
|
"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 {
|
type Account struct {
|
||||||
|
*Servers
|
||||||
Name string
|
Name string
|
||||||
Uuid uuid.UUID
|
Uuid uuid.UUID
|
||||||
Ygg string
|
Ygg string
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
BaseUrlApi = "https://api.minecraftservices.com"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (a *Account) doMcApiRequest(method string, url string, from any, to any) (err error) {
|
func (a *Account) doMcApiRequest(method string, url string, from any, to any) (err error) {
|
||||||
var b []byte
|
var b []byte
|
||||||
if method != "GET" {
|
if method != "GET" {
|
||||||
b, err = json.Marshal(from)
|
b, err = json.Marshal(from)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r, err := http.NewRequest(method, url, bytes.NewReader(b))
|
r, err := http.NewRequest(method, url, bytes.NewReader(b))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Header.Set("Content-Type", "application/json")
|
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)
|
resp, err := http.DefaultClient.Do(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if !(resp.StatusCode >= 200 && resp.StatusCode <= 299) {
|
if !(resp.StatusCode >= 200 && resp.StatusCode <= 299) {
|
||||||
return fmt.Errorf("bad status code %v", resp.StatusCode)
|
return fmt.Errorf("bad status code %v", resp.StatusCode)
|
||||||
}
|
}
|
||||||
b, err = io.ReadAll(resp.Body)
|
b, err = io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
err = json.Unmarshal(b, to)
|
err = json.Unmarshal(b, to)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return
|
||||||
}
|
}
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
type PlayerKeys struct {
|
type PlayerKeys struct {
|
||||||
@@ -73,7 +82,7 @@ type PlayerKeys struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *Account) FetchKeys() (keys PlayerKeys, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,10 +99,12 @@ func (a *Account) JoinServer(serverId string) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
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 {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode != 204 {
|
if resp.StatusCode != 204 {
|
||||||
body, err = io.ReadAll(resp.Body)
|
body, err = io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -112,17 +123,10 @@ type NameChangResp struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *Account) NameChangeInfo() (r NameChangResp, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOfflineAccount(name string) *Account {
|
|
||||||
return &Account{
|
|
||||||
Name: name,
|
|
||||||
Uuid: crypto.FromOfflinePlayer(name),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlayerProfile represents the player's profile information
|
// PlayerProfile represents the player's profile information
|
||||||
type PlayerProfile struct {
|
type PlayerProfile struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
@@ -143,7 +147,7 @@ type PlayerProfile struct {
|
|||||||
|
|
||||||
// QueryProfile queries the player's profile
|
// QueryProfile queries the player's profile
|
||||||
func (a *Account) QueryProfile() (profile PlayerProfile, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,7 +185,7 @@ type PlayerAttributes struct {
|
|||||||
|
|
||||||
// QueryAttributes queries the player's attributes
|
// QueryAttributes queries the player's attributes
|
||||||
func (a *Account) QueryAttributes() (attrs PlayerAttributes, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,7 +198,7 @@ type ModifyAttributesRequest struct {
|
|||||||
|
|
||||||
// ModifyAttributes modifies the player's attributes
|
// ModifyAttributes modifies the player's attributes
|
||||||
func (a *Account) ModifyAttributes(req ModifyAttributesRequest) (attrs PlayerAttributes, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,24 +209,23 @@ type BlockedUsers struct {
|
|||||||
|
|
||||||
// GetBlocklist gets the list of blocked users
|
// GetBlocklist gets the list of blocked users
|
||||||
func (a *Account) GetBlocklist() (blocklist BlockedUsers, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckNameAvailability checks if a name is available
|
|
||||||
type NameAvailability struct {
|
type NameAvailability struct {
|
||||||
Status string `json:"status"` // DUPLICATE, AVAILABLE, NOT_ALLOWED
|
Status string `json:"status"` // DUPLICATE, AVAILABLE, NOT_ALLOWED
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckNameAvailability checks if a name is available
|
// CheckNameAvailability checks if a name is available
|
||||||
func (a *Account) CheckNameAvailability(name string) (avail NameAvailability, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChangeName changes the player's name
|
// ChangeName changes the player's name
|
||||||
func (a *Account) ChangeName(newName string) (profile PlayerProfile, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,19 +237,19 @@ type ChangeSkinRequest struct {
|
|||||||
|
|
||||||
// ChangeSkin changes the player's skin
|
// ChangeSkin changes the player's skin
|
||||||
func (a *Account) ChangeSkin(req ChangeSkinRequest) (profile PlayerProfile, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResetSkin resets the player's skin to default
|
// ResetSkin resets the player's skin to default
|
||||||
func (a *Account) ResetSkin() (profile PlayerProfile, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// HideCape hides the player's active cape
|
// HideCape hides the player's active cape
|
||||||
func (a *Account) HideCape() (profile PlayerProfile, err error) {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,29 +261,53 @@ type ShowCapeRequest struct {
|
|||||||
// ShowCape shows a specific cape
|
// ShowCape shows a specific cape
|
||||||
func (a *Account) ShowCape(capeID string) (profile PlayerProfile, err error) {
|
func (a *Account) ShowCape(capeID string) (profile PlayerProfile, err error) {
|
||||||
req := ShowCapeRequest{CapeID: capeID}
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckGiftCodeValidity checks if a gift code is valid
|
// CheckGiftCodeValidity checks if a gift code is valid
|
||||||
func (a *Account) CheckGiftCodeValidity(giftCode string) (valid bool, err error) {
|
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)
|
r, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Header.Set("Authorization", "Bearer "+a.Ygg)
|
r.Header.Set("Authorization", "Bearer "+a.Ygg)
|
||||||
|
|
||||||
resp, err := http.DefaultClient.Do(r)
|
resp, err := http.DefaultClient.Do(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
// Returns HTTP 200 or 204 if valid, 404 if invalid
|
// Returns HTTP 200 or 204 if valid, 404 if invalid
|
||||||
if resp.StatusCode == 200 || resp.StatusCode == 204 {
|
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
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/admin-else/strom/proto"
|
"github.com/admin-else/strom/proto"
|
||||||
"github.com/admin-else/strom/proto_base"
|
"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) {
|
func Connect(addr string) (ret *proto.Conn, err error) {
|
||||||
ret = &proto.Conn{}
|
s, err := Status(addr)
|
||||||
err = ret.SetVersion("1.21.8")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ret.SetState(proto_base.Handshaking)
|
ret, err = ConnectVersionLess(addr)
|
||||||
ret.CompressionThreshold = -1
|
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.Actor = proto_base.Client
|
||||||
ret.Conn, err = net.Dial("tcp", addr)
|
ret.Conn, err = (&net.Dialer{}).DialContext(ctx, "tcp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package modules
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -14,8 +14,12 @@ type ConfigIgnorer struct {
|
|||||||
*proto.Conn
|
*proto.Conn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConfigIgnorer) Default(event any) (err error) {
|
func (c *ConfigIgnorer) OnStart() (err error) {
|
||||||
fmt.Printf("%#v\n", event)
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConfigIgnorer) Default(e event.Anything) (err error) {
|
||||||
|
c.Log.Debug("Config ignorer", "packet", fmt.Sprintf("%#v", e))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +27,7 @@ func (c *ConfigIgnorer) OnKnownPacks(packet *v1_21_8.ConfigurationToClientPacket
|
|||||||
return c.Send(&v1_21_8.ConfigurationToServerPacketCommonSelectKnownPacks{Packs: packet.Packs})
|
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{})
|
err = c.Send(&v1_21_8.ConfigurationToServerPacketFinishConfiguration{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -44,7 +48,14 @@ func (c *ConfigIgnorer) OnKeepAlive(packet *v1_21_8.ConfigurationToClientPacketK
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IgnoreConfig(c *proto.Conn) (err error) {
|
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 {
|
if err != nil {
|
||||||
err = errors.Join(err, errors.New("failed to ignore config"))
|
err = errors.Join(err, errors.New("failed to ignore config"))
|
||||||
}
|
}
|
||||||
+113
-9
@@ -1,22 +1,126 @@
|
|||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
"net"
|
"net"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func LookupMinecraftSRV(host string, port uint16) (hostRet string, portRet uint16) {
|
type DNSCheckFunc func(addr string) error
|
||||||
hostRet = host // in case of error
|
|
||||||
portRet = port
|
// DoDns resolves a DNS name to an IP address
|
||||||
if port != 25565 {
|
// 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
|
return
|
||||||
}
|
}
|
||||||
_, srvs, err := net.LookupSRV("minecraft", "tcp", host)
|
if f == nil {
|
||||||
if err != nil || len(srvs) == 0 {
|
f = func(addr string) error { return nil }
|
||||||
|
}
|
||||||
|
|
||||||
|
err = f(host)
|
||||||
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
target := strings.TrimSuffix(srvs[0].Target, ".")
|
portN = uint16(porti)
|
||||||
hostRet = target
|
outIP, err := net.ResolveIPAddr("ip", host)
|
||||||
portRet = srvs[0].Port
|
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
|
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 (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
@@ -6,12 +6,8 @@ import (
|
|||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/admin-else/strom/api"
|
"github.com/admin-else/strom/api"
|
||||||
"github.com/admin-else/strom/client"
|
|
||||||
"github.com/admin-else/strom/crypto"
|
"github.com/admin-else/strom/crypto"
|
||||||
"github.com/admin-else/strom/event"
|
"github.com/admin-else/strom/event"
|
||||||
"github.com/admin-else/strom/proto"
|
"github.com/admin-else/strom/proto"
|
||||||
@@ -30,6 +26,12 @@ type LoginClient struct {
|
|||||||
GivenAccount *v1_21_8.LoginToClientPacketSuccess
|
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 {
|
type KickedDuringLoginErr struct {
|
||||||
text.Component
|
text.Component
|
||||||
}
|
}
|
||||||
@@ -38,46 +40,20 @@ func (k KickedDuringLoginErr) Error() string {
|
|||||||
return k.String()
|
return k.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *LoginClient) Default(event event.Unhandled) (err error) {
|
func (s *LoginClient) OnDefault(event event.Unhandled) (err error) {
|
||||||
err = fmt.Errorf("unexpected event: %#v", event)
|
if _, ok := event.Val.(proto_base.EncodeDecodeAble); !ok {
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *LoginClient) OnCycle(_ event.Tick) (err error) {
|
|
||||||
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 {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
s.SetState(proto_base.Login)
|
s.Log.Warn("unexpected packet during login client", "packet", event.Val)
|
||||||
err = s.Send(&v1_21_8.LoginToServerPacketLoginStart{Username: s.Account.Name, PlayerUUID: s.Account.Uuid})
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *LoginClient) OnClose(_ event.Close) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *LoginClient) OnCompress(compress *v1_21_8.LoginToClientPacketCompress) (err error) {
|
func (s *LoginClient) OnCompress(compress *v1_21_8.LoginToClientPacketCompress) (err error) {
|
||||||
s.CompressionThreshold = compress.Threshold
|
s.SetCompressionThreshold(compress.Threshold)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +63,7 @@ func (s *LoginClient) OnEncrypt(packet *v1_21_8.LoginToClientPacketEncryptionBeg
|
|||||||
|
|
||||||
if packet.ShouldAuthenticate {
|
if packet.ShouldAuthenticate {
|
||||||
if s.Account.Ygg == "" {
|
if s.Account.Ygg == "" {
|
||||||
err = fmt.Errorf("the account has no token so we cant join online servers")
|
err = NoTokenErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
serverId := crypto.AuthDigest([]byte(packet.ServerId), sharedSecret, packet.PublicKey)
|
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)
|
pub, ok := pubAny.(*rsa.PublicKey)
|
||||||
if !ok {
|
if !ok {
|
||||||
err = fmt.Errorf("public key is not rsa")
|
err = BadPublicKeyTypeErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
verifyTokenEnc, err := rsa.EncryptPKCS1v15(rand.Reader, pub, packet.VerifyToken)
|
verifyTokenEnc, err := rsa.EncryptPKCS1v15(rand.Reader, pub, packet.VerifyToken)
|
||||||
@@ -145,28 +121,59 @@ func (s *LoginClient) OnSuccess(success *v1_21_8.LoginToClientPacketSuccess) (er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Login(c *proto.Conn, account *api.Account) (err error) {
|
func (s *LoginClient) OnStart() (err error) {
|
||||||
err = c.Start(&LoginClient{
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoginRaw(c *proto.Conn, account *api.Account) (err error) {
|
||||||
|
lc := &LoginClient{
|
||||||
Conn: c,
|
Conn: c,
|
||||||
Account: account,
|
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 {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func ConnectAndLogin(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
func LoginNoSrv(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||||
c, err = client.Connect(connectTo)
|
c, err = Connect(connectTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = c.Start(&LoginClient{
|
err = LoginRaw(c, account)
|
||||||
Conn: c,
|
return
|
||||||
Account: account,
|
}
|
||||||
})
|
|
||||||
|
func Login(connectTo string, account *api.Account) (c *proto.Conn, err error) {
|
||||||
|
connectTo, err = DoDnsSimple(connectTo)
|
||||||
if err != nil {
|
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
|
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
|
package data
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
// [
|
// [
|
||||||
//
|
//
|
||||||
// {
|
// {
|
||||||
@@ -14,7 +16,7 @@ package data
|
|||||||
// },
|
// },
|
||||||
|
|
||||||
type Biome struct {
|
type Biome struct {
|
||||||
Id int
|
Id int32
|
||||||
Name string
|
Name string
|
||||||
Category string
|
Category string
|
||||||
Temperature float64
|
Temperature float64
|
||||||
@@ -24,22 +26,35 @@ type Biome struct {
|
|||||||
Color int
|
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
|
var ok bool
|
||||||
if ret, ok = BiomesCache[v]; ok {
|
if ret, ok = BiomesCache[v]; ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var b []Biome
|
var b []*Biome
|
||||||
must(LoadVersionedJson(v, "biomes", &b))
|
must(LoadVersionedJson(v, "biomes", &b))
|
||||||
BiomesCache[v] = b
|
BiomesCache[v] = b
|
||||||
return 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) {
|
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
|
biome = b
|
||||||
ok = true
|
ok = true
|
||||||
return
|
return
|
||||||
|
|||||||
+151
-13
@@ -1,6 +1,11 @@
|
|||||||
package data
|
package data
|
||||||
|
|
||||||
// {
|
import (
|
||||||
|
"errors"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// {
|
||||||
// "id": 0,
|
// "id": 0,
|
||||||
// "name": "air",
|
// "name": "air",
|
||||||
// "displayName": "Air",
|
// "displayName": "Air",
|
||||||
@@ -35,34 +40,167 @@ type Block struct {
|
|||||||
DefaultState int32
|
DefaultState int32
|
||||||
MinStateId int32
|
MinStateId int32
|
||||||
MaxStateId int32
|
MaxStateId int32
|
||||||
States []struct {
|
States []BlockState
|
||||||
Name string
|
Drops []int
|
||||||
Type string
|
BoundingBox string
|
||||||
NumValues int
|
|
||||||
}
|
|
||||||
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
|
var ok bool
|
||||||
if ret, ok = BlocksCache[v]; ok {
|
if ret, ok = BlocksCache[v]; ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var b []Block
|
var b []*Block
|
||||||
must(LoadVersionedJson(v, "blocks", &b))
|
must(LoadVersionedJson(v, "blocks", &b))
|
||||||
BlocksCache[v] = b
|
BlocksCache[v] = b
|
||||||
return 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) {
|
for _, b := range BlocksForVersion(version) {
|
||||||
if b.MinStateId <= stateId && stateId <= b.MaxStateId {
|
if b.Name == name {
|
||||||
block = b
|
block = b
|
||||||
ok = true
|
ok = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
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)
|
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"
|
"errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed minecraft-data/data
|
//go:embed minecraft-data/pc minecraft-data/dataPaths.json
|
||||||
var MinecraftData embed.FS
|
var MinecraftData embed.FS
|
||||||
|
|
||||||
func LoadJson(path string, data any) (err error) {
|
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) {
|
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 {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -9,5 +9,5 @@ var Paths struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
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