mirror of
https://github.com/GTNewHorizons/MagicBees.git
synced 2026-10-27 14:53:37 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53d085d292 | ||
|
|
4345981958 | ||
|
|
1dd3f7342e | ||
|
|
f88d1f8c96 | ||
|
|
59aa1ce79c | ||
|
|
d571f64b14 | ||
|
|
f3cf6407cf | ||
|
|
e3460d5dbc | ||
|
|
d9a7759c49 | ||
|
|
7c38b1101a | ||
|
|
9ce571f464 | ||
|
|
f881470241 | ||
|
|
d4bd32c67b | ||
|
|
60607bc521 | ||
|
|
2e7e1a3efc | ||
|
|
0bd57ed988 | ||
|
|
eccceab233 | ||
|
|
e5d696f210 | ||
|
|
0f59e8b4ef | ||
|
|
7248bac5d0 | ||
|
|
81cb972fff | ||
|
|
9589da0f00 | ||
|
|
b5cf82b574 | ||
|
|
c4cb9a19c6 | ||
|
|
8fb3407357 | ||
|
|
001f1b27f6 | ||
|
|
6429eea5d6 | ||
|
|
3ff6e91053 | ||
|
|
cdf3046e61 | ||
|
|
05476997e1 | ||
|
|
c2cafd4a98 | ||
|
|
e9606af217 | ||
|
|
c3abd86907 | ||
|
|
ddac6aeb67 | ||
|
|
31c130ebae | ||
|
|
77d5bcf6d1 | ||
|
|
b43e100d6f | ||
|
|
3483b613aa | ||
|
|
9919f54cc8 | ||
|
|
c4835b735a | ||
|
|
e035bdb914 | ||
|
|
dcaf57b506 | ||
|
|
6b34a53afa | ||
|
|
e990776988 | ||
|
|
53e83a0c1a | ||
|
|
3c39529c6f | ||
|
|
774defd118 | ||
|
|
6b5b6b0efe | ||
|
|
41a0528d2a | ||
|
|
eb05b5c1eb | ||
|
|
2f1bd92b33 | ||
|
|
3be904d27d | ||
|
|
08b1b9b456 | ||
|
|
6467ba4612 | ||
|
|
09dc0657ef | ||
|
|
dcfa448af3 | ||
|
|
786cb01b94 | ||
|
|
f6f4a988af | ||
|
|
5a823658ea | ||
|
|
8770492524 | ||
|
|
322203ac6a | ||
|
|
1e5c8db826 | ||
|
|
ef47b1863a | ||
|
|
c3dac80d44 | ||
|
|
f2beaae45c | ||
|
|
3a4e4dce04 | ||
|
|
99c3cb68eb | ||
|
|
38bc8a151c | ||
|
|
a64bd5f437 | ||
|
|
fb43f46bb8 | ||
|
|
9d2c667c35 | ||
|
|
67dfeb7daa | ||
|
|
e2080bc542 | ||
|
|
b0116884f1 | ||
|
|
a9948fcf26 | ||
|
|
828231c3c4 | ||
|
|
aed51fbd9a | ||
|
|
9bae32761c | ||
|
|
25c04cedcb | ||
|
|
cfe1cad9e8 | ||
|
|
766a440429 | ||
|
|
428bfb04f8 | ||
|
|
9fb5e3d8fb | ||
|
|
3da4083bba | ||
|
|
9d36165259 | ||
|
|
573c089b96 | ||
|
|
b82ce5e15f | ||
|
|
4f5358bea6 | ||
|
|
df0761c9af | ||
|
|
b5165b3e58 | ||
|
|
12f8ed9435 | ||
|
|
edf3ff7423 | ||
|
|
06571c1eb4 | ||
|
|
4823e44793 | ||
|
|
f55a9f7643 | ||
|
|
65b698face | ||
|
|
123ff12302 | ||
|
|
6e6cbbab48 | ||
|
|
b965d50bbc | ||
|
|
fb98d686fb | ||
|
|
ff20b5f600 | ||
|
|
2ade3e5705 | ||
|
|
b7a928bb06 | ||
|
|
ec4491994c | ||
|
|
89acb72f0b | ||
|
|
fc9ebd66d9 | ||
|
|
4c64395e21 | ||
|
|
121fe1c0a9 | ||
|
|
906b97064e | ||
|
|
ae736770fb | ||
|
|
27ea81cd09 | ||
|
|
aa25a5086d | ||
|
|
ac68e40b9f | ||
|
|
2935df3409 | ||
|
|
98c0810820 | ||
|
|
af2d06aa7b | ||
|
|
e88eb1756c | ||
|
|
b19979e88b | ||
|
|
974e459311 | ||
|
|
f366dcdfc6 | ||
|
|
e7e5292526 | ||
|
|
c79503d669 | ||
|
|
6529e7245d | ||
|
|
29e72ed7fc | ||
|
|
02c7fc7613 | ||
|
|
7416d21f6f | ||
|
|
d3ad57a622 | ||
|
|
0578441707 | ||
|
|
07a987151e | ||
|
|
c23401e45c | ||
|
|
e03d4da989 | ||
|
|
4c47f77214 | ||
|
|
bdd76306bb | ||
|
|
ae246d87eb | ||
|
|
c8aaeba7cb | ||
|
|
7345669405 | ||
|
|
5e912b69bd | ||
|
|
481c22a19d | ||
|
|
4103ce72e5 | ||
|
|
116e3610e6 | ||
|
|
702a02e943 | ||
|
|
b200f3006a | ||
|
|
322b8d0944 | ||
|
|
b5e1046904 | ||
|
|
f0f51be20e | ||
|
|
c3b0378096 | ||
|
|
baf9f915e5 | ||
|
|
0d97d836a3 | ||
|
|
f777cf976d | ||
|
|
bd6887c598 | ||
|
|
acf2525801 | ||
|
|
054bf8f329 | ||
|
|
418a322378 | ||
|
|
dcf47bb393 | ||
|
|
5ca5c11fc9 | ||
|
|
991c4fff5e | ||
|
|
137784f76d | ||
|
|
bde910d708 | ||
|
|
befd485d39 | ||
|
|
e56e056c5d | ||
|
|
ce4f1880ca | ||
|
|
520d2e09e1 | ||
|
|
870eafbbe4 | ||
|
|
d9ef30fe32 | ||
|
|
0112a7f104 | ||
|
|
9724d519e8 | ||
|
|
3d562d0052 | ||
|
|
9f17d8ceff | ||
|
|
614acf5114 | ||
|
|
b338d97517 | ||
|
|
2870e06387 | ||
|
|
96514b1aff | ||
|
|
f85900d9a8 | ||
|
|
66b1f3e075 | ||
|
|
e053b019af | ||
|
|
5dfa179c87 | ||
|
|
966e4ba2f2 | ||
|
|
1cbe881ae3 | ||
|
|
b0b38a472a | ||
|
|
5f56b46e00 | ||
|
|
83b0bfc504 | ||
|
|
fe56288c72 | ||
|
|
ff25ec619c | ||
|
|
c4ef06b027 | ||
|
|
0b6c1cc345 | ||
|
|
0efc169ef7 | ||
|
|
d83a0cc775 | ||
|
|
02afe5dbc8 | ||
|
|
951f5a1ad5 | ||
|
|
1cbc997be3 | ||
|
|
f3d3a0a2df | ||
|
|
fa10e888dc | ||
|
|
fdc1301b43 | ||
|
|
756b186db4 | ||
|
|
639c53a01d | ||
|
|
309a9c0818 | ||
|
|
2c547e3851 | ||
|
|
79d0283901 | ||
|
|
918ec20739 | ||
|
|
2ea0a44429 | ||
|
|
8f919fc688 | ||
|
|
c47b50b617 | ||
|
|
764fda0985 | ||
|
|
8412246e3e | ||
|
|
1391dd3ed6 | ||
|
|
cf6536c17f | ||
|
|
fddc31a8f5 | ||
|
|
840771f5f4 | ||
|
|
b76b77d4a3 | ||
|
|
5e5a80fb5c | ||
|
|
66c5bdf2ca | ||
|
|
a64ae86853 | ||
|
|
d612f8c520 | ||
|
|
806c326b62 | ||
|
|
c31726001b | ||
|
|
c209ef59fb | ||
|
|
98fd7c1e19 | ||
|
|
5b4aaf50f4 | ||
|
|
17768a1300 | ||
|
|
9f1642fd5b | ||
|
|
c3fcb6fc28 | ||
|
|
bc963b0d7e | ||
|
|
80c1c4d5da | ||
|
|
3afee4f553 | ||
|
|
1e0c7d3c5e | ||
|
|
9b21be0eb5 | ||
|
|
3a0d9352b1 | ||
|
|
108a11c119 | ||
|
|
e90b40159c | ||
|
|
61398d3139 | ||
|
|
e1d289bc48 | ||
|
|
75db1329ea | ||
|
|
32ffe03aa3 | ||
|
|
138e8d9c40 | ||
|
|
6c6b690d57 | ||
|
|
726831399d | ||
|
|
87ec6c63eb | ||
|
|
ef4359835a | ||
|
|
b9292af3d9 | ||
|
|
77936b6dab | ||
|
|
e24a94f0ba | ||
|
|
1d4a52c3af | ||
|
|
c7c47b9a1b | ||
|
|
e12eda73fc | ||
|
|
2b1e179eeb | ||
|
|
dbc4b23821 | ||
|
|
f5dc54e1fb | ||
|
|
500adb0357 | ||
|
|
7df6221e0b | ||
|
|
2d78a84df1 | ||
|
|
729908b1b0 | ||
|
|
e5cea4e3dd | ||
|
|
c17c2f3746 | ||
|
|
951df8a632 | ||
|
|
bdb7a53b96 | ||
|
|
e5f0fc2368 | ||
|
|
702cffe458 | ||
|
|
72b71021de | ||
|
|
0149c34d1d | ||
|
|
caca6a6329 | ||
|
|
6bd5cc24d3 | ||
|
|
4bef945c4e | ||
|
|
6fe4436226 | ||
|
|
0f7363c756 | ||
|
|
afa16af645 | ||
|
|
4ce1caa37e | ||
|
|
e565d86ed9 | ||
|
|
f1069a91f1 | ||
|
|
32411450d3 | ||
|
|
49ef624bd4 | ||
|
|
189d305a31 | ||
|
|
97a45e8e0a | ||
|
|
8c72b75e0e | ||
|
|
2cca9de690 | ||
|
|
6523fb0a1d | ||
|
|
8833aab1f1 | ||
|
|
7e9a54ced2 | ||
|
|
14a712260b | ||
|
|
d993c90c3e | ||
|
|
e73f5a841e | ||
|
|
9fcf50b61a | ||
|
|
337d8692c6 | ||
|
|
8cf54bb10f | ||
|
|
854ae94be6 | ||
|
|
aea52904d4 | ||
|
|
4704d4c18c | ||
|
|
2abb28bd8e | ||
|
|
011a5767a7 | ||
|
|
9fa67a8426 | ||
|
|
fb65570ce9 | ||
|
|
0901392f11 | ||
|
|
1359133050 | ||
|
|
b12577b506 | ||
|
|
b787d693b9 | ||
|
|
1f19dc2f5e | ||
|
|
4e638db2a7 | ||
|
|
db7d6ab7a2 | ||
|
|
1db58409ec | ||
|
|
ff9e54760a | ||
|
|
a15b899913 | ||
|
|
68a2880877 | ||
|
|
913c4e5d00 | ||
|
|
51f161c2e8 | ||
|
|
a49128337b | ||
|
|
4903f97de6 | ||
|
|
f87a689045 | ||
|
|
987d7c2b11 | ||
|
|
3550fe23d4 | ||
|
|
237abd6cef | ||
|
|
5e86d62433 | ||
|
|
4c71e42dd6 | ||
|
|
de793aa5fc | ||
|
|
58439c0936 | ||
|
|
ef76ab40e3 | ||
|
|
d2a3b91fe0 | ||
|
|
a370c61948 | ||
|
|
04ea5e8862 | ||
|
|
b411fec0c1 | ||
|
|
82368a06bf | ||
|
|
58a9fa9e0f | ||
|
|
bcb38e8718 | ||
|
|
59d2f6bdb0 | ||
|
|
989bb6f917 | ||
|
|
9c044ffc9a | ||
|
|
ce32e21597 | ||
|
|
2375121778 | ||
|
|
5e2543027d | ||
|
|
74afd10913 | ||
|
|
1ef16b4dba | ||
|
|
c1cc32b2f6 | ||
|
|
451f183e83 | ||
|
|
bff3c669bf | ||
|
|
6c28a687ab | ||
|
|
918334e5bf | ||
|
|
afee91a925 | ||
|
|
9196bee240 | ||
|
|
824e72ac82 | ||
|
|
fe7824eef4 | ||
|
|
c796902c91 | ||
|
|
d13d5ec3dd | ||
|
|
90186aa9be | ||
|
|
155d638647 | ||
|
|
130b7c6836 | ||
|
|
a2ab168d69 | ||
|
|
7987c846aa | ||
|
|
11eb9e4fb1 | ||
|
|
0569b81126 | ||
|
|
264385c778 | ||
|
|
93c8fb9dd0 | ||
|
|
36e3209167 | ||
|
|
5c81c964b1 | ||
|
|
dce77fb246 | ||
|
|
c9fe22c399 | ||
|
|
e314a79e24 | ||
|
|
a46274fc6d | ||
|
|
275f03ccba | ||
|
|
7fa6eb8953 | ||
|
|
e6ae553eb8 | ||
|
|
8f5e4127f0 | ||
|
|
1e082e087f | ||
|
|
8952663d40 | ||
|
|
2e82ba2bf1 | ||
|
|
9597ebb658 | ||
|
|
5615d2a75b | ||
|
|
3a3bc29155 | ||
|
|
c1043bb588 | ||
|
|
e555aeaec2 | ||
|
|
ab5b7c7532 | ||
|
|
80a078d2ed | ||
|
|
ab70d8aec2 | ||
|
|
e8002e069a | ||
|
|
90e5cf801b | ||
|
|
e5a26e1b88 | ||
|
|
72e8fb4c24 | ||
|
|
a76d0d1c29 | ||
|
|
167b1f5257 | ||
|
|
01cfec7169 | ||
|
|
3fde6fb08c | ||
|
|
eacb9f2609 | ||
|
|
3f43cc52c1 | ||
|
|
f1086f3095 | ||
|
|
2503c94b83 | ||
|
|
af44fb9d89 | ||
|
|
8569a43f87 | ||
|
|
bd8fa92266 | ||
|
|
4d2ea94b76 | ||
|
|
8d65e675d1 | ||
|
|
8beb50fcf8 | ||
|
|
800799e85c | ||
|
|
66c0f02a6e | ||
|
|
aa2ef7f24d | ||
|
|
4326da4013 | ||
|
|
3d61472a7e | ||
|
|
97d50f0405 | ||
|
|
ab8a16b26d | ||
|
|
ce8fb0323d | ||
|
|
89975c8718 | ||
|
|
7ae7af2238 | ||
|
|
0bdbcdb2f8 | ||
|
|
354f2ef71b | ||
|
|
4c93eb6bf4 | ||
|
|
922a8fffd6 | ||
|
|
ae15b9e77f | ||
|
|
03068d7ddb | ||
|
|
a1a4506a14 | ||
|
|
4f7370b521 | ||
|
|
25a17fcbfd | ||
|
|
9a3fb6ba16 | ||
|
|
07fde529a4 | ||
|
|
aad6b1fa13 | ||
|
|
651aa82045 | ||
|
|
c078d1a24c | ||
|
|
e87af0d409 | ||
|
|
fde41046d6 | ||
|
|
77d2833e7e | ||
|
|
cc4ac2a389 | ||
|
|
fa5c8aa264 | ||
|
|
7ee2bc991e | ||
|
|
5f78df9fe8 | ||
|
|
7124041129 | ||
|
|
dc7c54f85a | ||
|
|
d0ce872a13 | ||
|
|
fcdf5bd5b3 | ||
|
|
7a77dca7c7 | ||
|
|
3fad743f61 | ||
|
|
787a20c0da | ||
|
|
b326e366b6 | ||
|
|
be652f2fd8 | ||
|
|
6c61749d35 | ||
|
|
a0cf62c2a0 | ||
|
|
0f644270cc | ||
|
|
fbbc0c5050 | ||
|
|
71686766a9 | ||
|
|
8e7767d4ba | ||
|
|
e5f296cf83 | ||
|
|
e0432846d5 | ||
|
|
e9c1e5cf8c | ||
|
|
12dd21e35a | ||
|
|
8ef17ecbc9 | ||
|
|
bab96ead6b | ||
|
|
07ca48aa43 | ||
|
|
0715532170 | ||
|
|
b43137e399 | ||
|
|
707266cad7 | ||
|
|
7a028787c5 | ||
|
|
1c5d255f58 | ||
|
|
4f41f39f92 | ||
|
|
7e930f44be | ||
|
|
23b595e250 | ||
|
|
0c9b6df7b2 | ||
|
|
cddddca223 | ||
|
|
c62db23f79 | ||
|
|
223aba18a4 | ||
|
|
2e4a7d7bb1 | ||
|
|
913433b0c7 | ||
|
|
3b28e2499e | ||
|
|
090a6a2fc3 | ||
|
|
0a28b3fe63 | ||
|
|
b1a3223fbe | ||
|
|
be12564bcc | ||
|
|
e56afa8feb | ||
|
|
a74b2da532 | ||
|
|
ec00af6c09 | ||
|
|
43acadef2c | ||
|
|
25df457b18 | ||
|
|
07942d4218 | ||
|
|
079c572a1a | ||
|
|
975a63afef | ||
|
|
21b26e491c | ||
|
|
546ad5fc00 | ||
|
|
88fa3d6837 | ||
|
|
83f82decd8 | ||
|
|
549433e445 | ||
|
|
a6c235aa5a | ||
|
|
99c40a99a9 | ||
|
|
30509d4180 | ||
|
|
fe8c118f7f | ||
|
|
e14a3c6a62 | ||
|
|
83c5e49a28 | ||
|
|
2e42dd5be3 | ||
|
|
00d01c55ad | ||
|
|
7afda32063 | ||
|
|
eeb6cb356d | ||
|
|
61fdd7ad09 | ||
|
|
319682ae2b | ||
|
|
c8f20bd513 | ||
|
|
6f6823b6d2 | ||
|
|
a65c593c9a | ||
|
|
55840ac08e | ||
|
|
a7076ce817 | ||
|
|
e5e6474ff9 | ||
|
|
1703e8a862 | ||
|
|
b16524e919 | ||
|
|
d8cd023876 | ||
|
|
d64ec3caa2 | ||
|
|
515e0e1751 | ||
|
|
cc9bbefa3f | ||
|
|
18c7790abd | ||
|
|
ccbfa4995d | ||
|
|
54faf63bab | ||
|
|
e14bbe254a | ||
|
|
50d914e846 | ||
|
|
3b8dec5425 | ||
|
|
a332d3f2e5 | ||
|
|
d921717965 | ||
|
|
55f9e58297 | ||
|
|
7930108032 | ||
|
|
0fd8b319de | ||
|
|
051cc96514 | ||
|
|
40fdbb29c6 | ||
|
|
52798c8175 | ||
|
|
a5fed5c9b7 | ||
|
|
07624a3a4c | ||
|
|
dc4cd3331c | ||
|
|
6ea6f1e017 | ||
|
|
cb7b515626 | ||
|
|
46cb2cb95a | ||
|
|
cc987d6ac8 | ||
|
|
4f39132e4e | ||
|
|
4938c29e8c | ||
|
|
cbb0b15dee | ||
|
|
b881283492 | ||
|
|
5d4b84727d | ||
|
|
ad9135590d | ||
|
|
5cd884929f | ||
|
|
7bd5e7ac54 | ||
|
|
8cda9b9f43 | ||
|
|
444303d06d | ||
|
|
b3ca22fd1f | ||
|
|
1f8f324c56 | ||
|
|
3d1cdfa9af | ||
|
|
1275abc1c4 | ||
|
|
3347afb0c3 | ||
|
|
016049ef67 | ||
|
|
33b0af6682 | ||
|
|
8bf47d8f5f | ||
|
|
e9c91cda37 | ||
|
|
f645076eeb | ||
|
|
8ccb8f4d75 | ||
|
|
142637151a | ||
|
|
469867bc1f | ||
|
|
712679d8ac | ||
|
|
8eb8363b31 | ||
|
|
cd758dfec2 | ||
|
|
629cd06ef6 | ||
|
|
8e11456ea3 | ||
|
|
2c5e6ca041 | ||
|
|
a739206e01 | ||
|
|
9b9926b340 | ||
|
|
dac7c0ddef | ||
|
|
a6d1a9f1a4 | ||
|
|
98a5e73ddf | ||
|
|
f68b47473f | ||
|
|
a0df95b36c | ||
|
|
6ff6b72580 | ||
|
|
2f5cbb7d3c | ||
|
|
250e5c159f | ||
|
|
0c5f27e192 | ||
|
|
a6c439c078 | ||
|
|
300a22efab | ||
|
|
fdf89303e4 | ||
|
|
ffe3f9d33e | ||
|
|
0e0eaac495 | ||
|
|
e9c423579b | ||
|
|
1be990eb0e | ||
|
|
87a918b7c6 | ||
|
|
580f1f4e12 | ||
|
|
2b0b729ad0 | ||
|
|
f5a6ca61ba | ||
|
|
44ecbbdc45 | ||
|
|
d3c6ad5433 | ||
|
|
5b053dd990 | ||
|
|
e416d09dde | ||
|
|
723506d04f | ||
|
|
c352b42fc1 | ||
|
|
95275e57d6 | ||
|
|
02659b2816 | ||
|
|
02655f092e | ||
|
|
03bc6c0d83 | ||
|
|
85f8ab960d | ||
|
|
2146249b9c | ||
|
|
a4ebd6d859 | ||
|
|
6c79dfb104 | ||
|
|
9233d45b33 | ||
|
|
7082436190 | ||
|
|
fb8873b781 | ||
|
|
12c1b3b5c3 | ||
|
|
ecaa9babf7 | ||
|
|
16086558e4 | ||
|
|
cc4390ec21 | ||
|
|
0cb6505fd4 | ||
|
|
52128123ef | ||
|
|
6136a59a15 | ||
|
|
0886fd1389 | ||
|
|
ea409d34de | ||
|
|
1f7fe61afe | ||
|
|
1cb45e24c5 | ||
|
|
7ab175d8b6 | ||
|
|
31ff948c6d | ||
|
|
fa2590d41e | ||
|
|
0e77348285 | ||
|
|
608656be73 | ||
|
|
58c56623af | ||
|
|
f05c12b2ee | ||
|
|
4b802d4727 | ||
|
|
ffd6f2ca94 | ||
|
|
c309c20268 | ||
|
|
3d75e97b20 | ||
|
|
e23ebd1011 | ||
|
|
707a9bd64e | ||
|
|
6c567e247a | ||
|
|
132d9b47f0 | ||
|
|
5090aa76ea | ||
|
|
61e6b82bc3 | ||
|
|
533d7d55a8 | ||
|
|
7513ba1255 | ||
|
|
a560085ac9 | ||
|
|
f9ceeba358 | ||
|
|
c5d59a4505 | ||
|
|
0a6f6eda09 | ||
|
|
ca8b206912 | ||
|
|
3aea0376bc | ||
|
|
7751c01463 | ||
|
|
5699937179 | ||
|
|
abb7e64613 | ||
|
|
f31d3b9b09 | ||
|
|
a7515baf69 | ||
|
|
888f86d8bb | ||
|
|
3989430408 | ||
|
|
99a88cf9bc | ||
|
|
6c50d89353 | ||
|
|
dbc6acb9c9 | ||
|
|
ff476ad969 | ||
|
|
e20ab2dfb9 | ||
|
|
c3210c0883 | ||
|
|
c2c21301a6 | ||
|
|
91777b1960 | ||
|
|
532042393b | ||
|
|
c89c9b0d33 | ||
|
|
0b000d68b9 | ||
|
|
2f286e8e2c | ||
|
|
406132babc | ||
|
|
b7a071d887 | ||
|
|
37e8965a3c | ||
|
|
b7714a1435 | ||
|
|
c9bffd18d8 | ||
|
|
48b9d59f33 | ||
|
|
f7fcf5ed9d | ||
|
|
a95036aa2e | ||
|
|
10da83f082 | ||
|
|
bc596ee3a6 | ||
|
|
6ae6a8afc0 | ||
|
|
bde2baab2d | ||
|
|
f33e48ead9 | ||
|
|
6152508a0b | ||
|
|
f3ceac50cd | ||
|
|
98a38a1f6e | ||
|
|
7aba3f5f53 | ||
|
|
66c1a89c32 | ||
|
|
5f9b122d77 | ||
|
|
71d203bffc | ||
|
|
092c076dba | ||
|
|
ebb8298c9d | ||
|
|
ab2f6a64d5 | ||
|
|
62b7d28020 | ||
|
|
e5ae2527a9 | ||
|
|
aca8b2dcb1 | ||
|
|
88ec668999 | ||
|
|
9729d75252 | ||
|
|
fc2f40d100 | ||
|
|
ce0424b468 | ||
|
|
940846d069 | ||
|
|
b2d18fbb64 | ||
|
|
96389b5329 | ||
|
|
61afb3a0bc | ||
|
|
bf57ac3491 | ||
|
|
e8421f40fe | ||
|
|
b8d12b1f9a | ||
|
|
1476470054 | ||
|
|
89fb41b814 | ||
|
|
f44591b47d | ||
|
|
fd82a0ef72 | ||
|
|
cbbf2558fd | ||
|
|
76f541bc3f | ||
|
|
7f95da0f6c | ||
|
|
3798f1f771 | ||
|
|
721a60c994 | ||
|
|
4a03a5f48c | ||
|
|
c6720b7417 | ||
|
|
575c799587 | ||
|
|
2c324174e4 | ||
|
|
28f5a15f0a | ||
|
|
9bed2d3749 | ||
|
|
1a394ce858 | ||
|
|
5d3bd8bde2 | ||
|
|
5279a6e64a | ||
|
|
2c2306b223 | ||
|
|
8aaa24c3c1 | ||
|
|
e32c05ab3e | ||
|
|
f21bd467c2 | ||
|
|
d3e93188c0 | ||
|
|
e92d9c131e | ||
|
|
1bee56adf3 | ||
|
|
85a2723ef8 | ||
|
|
29069e7e9f | ||
|
|
c8be483bf0 | ||
|
|
92ace4e9a3 | ||
|
|
aed979a19f | ||
|
|
0fa9a6ed23 | ||
|
|
b3660ecf58 | ||
|
|
5eb787352b | ||
|
|
a7774e1fca | ||
|
|
596ae798ec | ||
|
|
902812e015 | ||
|
|
0b510e8426 | ||
|
|
d4c5d1e356 | ||
|
|
5a2f360e50 | ||
|
|
84ad8b0d7b | ||
|
|
6a26bec4e1 | ||
|
|
827199b518 | ||
|
|
ead879a913 | ||
|
|
47a2962bd6 | ||
|
|
105a8d47a0 | ||
|
|
ad16a3b999 | ||
|
|
63bb014de8 | ||
|
|
dc40994271 | ||
|
|
efc2309222 | ||
|
|
eafc34cb54 | ||
|
|
4125bbf647 | ||
|
|
bb5319f177 | ||
|
|
f3c933a537 | ||
|
|
2e6964af8e | ||
|
|
b49fbd7ccc | ||
|
|
41bc9d10f8 | ||
|
|
e6ac4e0b00 | ||
|
|
25024fc91f | ||
|
|
e40ac6b1e3 | ||
|
|
5d3053ea8d | ||
|
|
47e00474d0 |
No files matched your search
@@ -0,0 +1,19 @@
|
||||
# This is the universal Text Editor Configuration
|
||||
# for all GTNewHorizons projects
|
||||
# See: https://editorconfig.org/
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{bat,ini}]
|
||||
end_of_line = crlf
|
||||
|
||||
[*.{dtd,json,info,mcmeta,md,sh,svg,xml,xsd,xsl,yaml,yml}]
|
||||
indent_size = 2
|
||||
@@ -0,0 +1,2 @@
|
||||
# Ignore spotlessApply reformat
|
||||
f1069a91f1b2ea9469775696c097dd6fb484e6e8
|
||||
@@ -0,0 +1,44 @@
|
||||
* text eol=lf
|
||||
|
||||
*.[jJ][aA][rR] binary
|
||||
|
||||
*.[pP][nN][gG] binary
|
||||
*.[jJ][pP][gG] binary
|
||||
*.[jJ][pP][eE][gG] binary
|
||||
*.[gG][iI][fF] binary
|
||||
*.[tT][iI][fF] binary
|
||||
*.[tT][iI][fF][fF] binary
|
||||
*.[iI][cC][oO] binary
|
||||
*.[sS][vV][gG] text
|
||||
*.[eE][pP][sS] binary
|
||||
*.[xX][cC][fF] binary
|
||||
|
||||
*.[kK][aA][rR] binary
|
||||
*.[mM]4[aA] binary
|
||||
*.[mM][iI][dD] binary
|
||||
*.[mM][iI][dD][iI] binary
|
||||
*.[mM][pP]3 binary
|
||||
*.[oO][gG][gG] binary
|
||||
*.[rR][aA] binary
|
||||
|
||||
*.7[zZ] binary
|
||||
*.[gG][zZ] binary
|
||||
*.[tT][aA][rR] binary
|
||||
*.[tT][gG][zZ] binary
|
||||
*.[zZ][iI][pP] binary
|
||||
|
||||
*.[tT][cC][nN] binary
|
||||
*.[sS][oO] binary
|
||||
*.[dD][lL][lL] binary
|
||||
*.[dD][yY][lL][iI][bB] binary
|
||||
*.[pP][sS][dD] binary
|
||||
*.[tT][tT][fF] binary
|
||||
*.[oO][tT][fF] binary
|
||||
|
||||
*.[pP][aA][tT][cC][hH] -text
|
||||
|
||||
*.[bB][aA][tT] text eol=crlf
|
||||
*.[cC][mM][dD] text eol=crlf
|
||||
*.[pP][sS]1 text eol=crlf
|
||||
|
||||
*[aA][uU][tT][oO][gG][eE][nN][eE][rR][aA][tT][eE][dD]* binary
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
name: Build and test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master, main ]
|
||||
push:
|
||||
branches: [ master, main ]
|
||||
|
||||
jobs:
|
||||
build-and-test:
|
||||
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/build-and-test.yml@master
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,17 @@
|
||||
name: Optimize images
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master, main, release/** ]
|
||||
paths:
|
||||
- "**/*.png"
|
||||
|
||||
push:
|
||||
branches: [ master, main, release/** ]
|
||||
paths:
|
||||
- "**/*.png"
|
||||
|
||||
jobs:
|
||||
optimize-images:
|
||||
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/optimize-images.yml@master
|
||||
secrets: inherit
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
name: Release tagged build
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: [ '*' ]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
release-tags:
|
||||
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/release-tags.yml@master
|
||||
secrets: inherit
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
.gradle
|
||||
.settings
|
||||
/.idea/
|
||||
/run/
|
||||
/build/
|
||||
/eclipse/
|
||||
.classpath
|
||||
.project
|
||||
/bin/
|
||||
/config/
|
||||
/crash-reports/
|
||||
/logs/
|
||||
options.txt
|
||||
/saves/
|
||||
usernamecache.json
|
||||
banned-ips.json
|
||||
banned-players.json
|
||||
eula.txt
|
||||
ops.json
|
||||
server.properties
|
||||
servers.dat
|
||||
usercache.json
|
||||
whitelist.json
|
||||
/out/
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
src/main/resources/mixins.*.json
|
||||
*.bat
|
||||
*.DS_Store
|
||||
!gradlew.bat
|
||||
layout.json
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 7.6 KiB |
@@ -0,0 +1,3 @@
|
||||
# Any Github changes require admin approval
|
||||
/.github/** @GTNewHorizons/admin
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
Copyright © 2013 MysteriousAges
|
||||
This work is free. You can redistribute it and/or modify it under the
|
||||
terms of the Do What The Fuck You Want To Public License, Version 2,
|
||||
as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.
|
||||
@@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
@@ -0,0 +1,25 @@
|
||||
# MagicBees
|
||||
Magic Bees is an addon for Forestry that adds several new bee species with a magical theme. Breeding them will help you brew potions, or give you extra ways to make resources for other magic-themed mods such as Thaumcraft and Ars Magica.
|
||||
|
||||
## Installation
|
||||
Magic Bees depends on Forestry, which is required. You may [download Forestry here](http://www.curse.com/mc-mods/minecraft/forestry).
|
||||
|
||||
Minecraft Forge is also needed to run Forestry. Magic Bees will usually work with whichever version of Forge Forestry requires.
|
||||
|
||||
To install, simply download the mod from [CurseForge](http://minecraft.curseforge.com/mc-mods/65764-magic-bees) and place in the mods folder of your Minecraft instance.
|
||||
|
||||
## Compatability
|
||||
Adding the following mods will result in additional features being unlocked:
|
||||
* [Extra Bees](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1284348-1-7-10-1-6-4-forestry-binnies-mods-1-8-0-2-0-dev) - Mutations to get the Thaumic Bees species will use Extra Bees species in some cases. If Thaumcraft is installed, TB will add aspects to Extra Bees items. You will also get access to Thaumic Bees alleles though the genetic machines.
|
||||
* [Thaumcraft](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1292130-thaumcraft-4-2-3-0-updated-2015-1-5) - Adds several tools related to Thaumcraft & Forestry, as well as adding Thaumcraft aspects to many Forestry items and blocks.
|
||||
* [Equivalent Exchange 3](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1286564-equivalent-exchange-3-0-1-142) - Adds the Minium Bee, which produces Minium Shards. More features to come in the future.
|
||||
* [Ars Magica](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1286036-ars-magica-v5-52-014-updated-august-2-1-5-2) - Adds 13 bee species that interact with Ars Magica, or produce AM items.
|
||||
* [Tinker's Construct](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2218638-tinkers-construct) - Adds 3 new bee species to help produce some of the higher tier metals. The Aluminum bee will also help with producing some lower-tier alloys as well.
|
||||
|
||||
## License
|
||||
|
||||
MagicBees is licesed under the WTFPL ( http://www.wtfpl.net/ )
|
||||
|
||||
Seriously, do whatever. Just don't ask us to support it if we didn't distribute it. =D
|
||||
|
||||
We didn't distribute it if you downloaded it from a site other than CurseForge, or from a modpack that does not use CurseForge as their source.
|
||||
@@ -0,0 +1,5 @@
|
||||
//version: 1707058017
|
||||
|
||||
plugins {
|
||||
id 'com.gtnewhorizons.gtnhconvention'
|
||||
}
|
||||
+275
@@ -0,0 +1,275 @@
|
||||
2.1.22
|
||||
+ Added configoption to change thaumcraft saplingdroprate using thaumiumgrafter
|
||||
* First 1.7.10 update on CurseForge! Woohoo!
|
||||
* Updated chinese translation courtesy of Astrologers
|
||||
* Fixed texturebugs with thaumium scoop and grafter
|
||||
* Fixed backpack issues. Hopefully fixed for real this time
|
||||
|
||||
2.1.21
|
||||
* Bumped forestry requirement to 3.0.0.174 (Might work with lower versions, untested)
|
||||
* Fixed issue with Thaumic tools not having icons/localized names
|
||||
|
||||
2.1.20
|
||||
* Fixes crash due to not registrering backpack correctly
|
||||
* Fixes crash when breeding metal bees
|
||||
* Fixed a missing configoption
|
||||
* Started work on ThaumicApiary
|
||||
|
||||
2.1.19
|
||||
* Updated to Forestry 3. This is now required.
|
||||
* Updated Thaumcraft integration to work in 1.7.10
|
||||
* Updated ExtraBees integration
|
||||
* Changed all language files to the .lang format
|
||||
|
||||
2.1.18
|
||||
* A few critical bugfixes to stop centrifuge crashes.
|
||||
|
||||
2.1.13
|
||||
Updated to 1.7.2.
|
||||
|
||||
2.1.12
|
||||
Changing hive gen to use isGenMineableReplaceable, which should make Deep hives spawn in Underground Biomes stone.
|
||||
Fixing logic error in handling world gen/retrogen
|
||||
|
||||
2.1.11
|
||||
Thermal Expansion & Redstone Arsenal bees, courtesy of jadedcat.
|
||||
Adding missing loc string for Blinding speed allele
|
||||
|
||||
2.1.10
|
||||
Changing Aluminum bees to use changed ore dictionary entries. mDiyo Houuuuuuuuuuuuuuuuuse!
|
||||
Updating AM2 mob-spawning bees to use newer names.
|
||||
|
||||
2.1.9
|
||||
Adding configuration option to not spawn special hives in Magic Biomes for people who hate fun, and specialness.
|
||||
Adding a shadow to the Tempus aspect for Vazkii.
|
||||
Possibly fixing issues with fluid containers.
|
||||
|
||||
2.1.8
|
||||
Fixing inconcistent recipes between Thaumonomicon & actual crafting
|
||||
Added missing centrifuge recipe for the Transmuting combs. This is the source of Unstable Propolis.
|
||||
|
||||
2.1.7
|
||||
Some non-bee bug removals.
|
||||
Magnets are ... a bit expensive. >_>;
|
||||
|
||||
2.1.6
|
||||
How about not crashing because I forgot a colour tuple? >.>
|
||||
Presenting a new bee species: You can't see it though, because it's invisible. >_>
|
||||
|
||||
2.1.5
|
||||
Behold! The Mysterious Magnet! It attracts items to it, and thus, you, from great distances! (well, greater than your arms anyhow.)
|
||||
Updating TC4 API for when it releases.
|
||||
|
||||
2.1.4
|
||||
Some cleanup of Helper code
|
||||
Hammering out rest of Transmutation effect, and exposing parts of it in an API so other people can hook into it if they want.
|
||||
Have some Ars Magica 2 integration.
|
||||
Also, have some Thaumcraft 4 integration!
|
||||
|
||||
2.1.3
|
||||
Added a new mini bee branch: Polymorphic. It is said Unusual bees can have some unusual effects on the world if they are advanced...
|
||||
Altered mutation to get Minium bees to fit into the Polymorphic branch.
|
||||
Crumbling effect ages the area around the hive.
|
||||
Added an IMC Handler to allow other mods to send an IMC message with key 'addCrumblePair" and a value containing two NBT tags
|
||||
'source' and 'target' for ItemStacks of the source block and target block. Blocks added on a first-come-first-serve basis.
|
||||
Only one entry per source block is accepted. Several vanilla defaults are provided, can be overridden using IMC.
|
||||
Changing humidity tolerance of Sorcerous bees to be actually useful.
|
||||
Fixed issues with the bee effects rendering (the little bee icons that shoot out of the bee machine while they work) for custom effects.
|
||||
|
||||
2.1.2
|
||||
Fixed issue with mob spawning effects incorrectly checking for effect data variables.
|
||||
Updating localization files (RU, DE)
|
||||
|
||||
2.1.1
|
||||
Reworking some language entries & code to enable string formatting in capsule names.
|
||||
Localization file updates.
|
||||
Tinker's Construct bees (Ardite, Cobalt, Manyullyn) and Aluminum bees.
|
||||
|
||||
2.1.0
|
||||
Added new permanent methods for crafting all frames. These will be available even when Thaumcraft is installed.
|
||||
Removed temporary frame recipes which used to be available when Thaumcraft was not installed.
|
||||
Lowered the cost of creating several frames through Thaumcraft. These should still be a viable option with the new recipes.
|
||||
Fixed issue with foundation-requiring mutations in Forestry Alvearies. (Will likely not work with Extra Bees Alveary blocks)
|
||||
|
||||
2.0.5
|
||||
Fixed hard-coded value in a subroutine that should not have been hard-coded.
|
||||
|
||||
2.0.4
|
||||
Fixed backwards mutation logic.
|
||||
|
||||
2.0.3
|
||||
Adjusting Thaumcraft research notes to reflect recent (Hah!) changes.
|
||||
|
||||
2.0.2
|
||||
Fixed Escritoire/Mutation Notes for bees which require a Thaumcraft Node.
|
||||
Fixing colour data for Temporal Combs.
|
||||
Adjusting the production rates on some nugget-producing bees.
|
||||
Withering bee species now requires arid rather than normal humidity, to conform with the rest of the Infernal line.
|
||||
Withering and Slow Effects should now correctly be reduced while wearing Apiarist's Armor or other protective gear.
|
||||
|
||||
2.0.1
|
||||
Modifying mutation class to allow block-requiring mutations to work in Alvearies/other multiblock hive structures.
|
||||
Tweaking hive gen
|
||||
Fixing mistakes in bee genome templates
|
||||
Updating Biofuel capsule to use the Ethanol liquid in Forestry
|
||||
|
||||
2.0.0
|
||||
Enabling Retrogen of hives in case you missed them initially.
|
||||
Tearing out all old mutations, rewriting from the ground up. Maybe these will be less frustrating. ;)
|
||||
Adding subroutines to make MB species actually worthwhile to check out in the Escritoire. If you get stuck on a mutation, throw it into the table and try out the minigame!
|
||||
New bee species (Too many to list. Have fun finding them!)
|
||||
New hives
|
||||
Added zh_CN localization by crafteverywhere
|
||||
Added de_DE localization by philip98 and Vexatos
|
||||
Added ru_RU localization by CrazyTechno and VeryBigBro
|
||||
|
||||
|
||||
=========== Old Thaumic Bees Changelog ================
|
||||
|
||||
1.4.7b
|
||||
Fix for creative mode crash when a certain config option is enabled.
|
||||
|
||||
1.4.7a
|
||||
Update for Forestry Beta.
|
||||
|
||||
1.4.7
|
||||
Added the Bee Collector's Jar.
|
||||
Created an alternate recipe for the Temporal Frame that is always active.
|
||||
Adjusted TC3 alternate recipe for the Temporal Frame.
|
||||
Fixed an issue with the "Pick Block" function on the Greatwood & Silverwood planks. Should also stop NEI from providing incorrect block info on them.
|
||||
Fixed the Node flower growing flowers.
|
||||
Adding Apatite bees.
|
||||
|
||||
1.4.6
|
||||
Ars Magica integration! 13 new bee species to help you research & cast spells.
|
||||
Changing mutations around, because I'm still not happy with them. (Again.)
|
||||
Many icon & texture fixes. (derp!)
|
||||
|
||||
1.4.5a
|
||||
Repaired Thaumcraft 3 integration for 3.0.4a.
|
||||
Fixed Biofuel capsules being shown as "Empty x Capsule"
|
||||
Fixed missing texture for oil & fuel capsules
|
||||
|
||||
1.4.5
|
||||
Added the Jade Moon Dial - tells you what moon phase it currently is for breeding purposes.
|
||||
Added a creative menu tab for certain Thaumic Bees items - misc resources, capsules, tools.
|
||||
|
||||
1.4.4b
|
||||
Ported to 1.5! Wooo!
|
||||
|
||||
1.4.4a
|
||||
Fixed an isuse that caused GregTech to crash.
|
||||
|
||||
1.4.4
|
||||
Made greatwood & silverwood planks fireproof by default - added a config option to toggle it.
|
||||
Added Nuggets - Iron, Copper, Tin, Silver, Lead. Should craft into 1st ore dictionary ingot of appropriate type.
|
||||
Added Shards - Diamond, Emerald.
|
||||
Added 15 new bees. Have fun~ <3
|
||||
Added Equivalent Exchange 3 compatability! (It's 1 thing, don't get terribly excited.)
|
||||
New frame type! Search Strongholds for them.
|
||||
|
||||
1.4.3c
|
||||
Thaumium Grafter now doubles your chance to get Greatwood & Silverwood saplings.
|
||||
Thaumium Grafter now takes extra damage when trying to break Greatwood & Silverwood leaves.
|
||||
Thaumium Grafter now has a balancing feature when repairing.
|
||||
Extra... uh. "Enhancements". =D
|
||||
|
||||
1.4.3b
|
||||
Greatwood & Silverwood planks support BuildCraft facades.
|
||||
Tweaking Aura cost for Repair on Thaumium Grafters and other balance.
|
||||
Turns out I can't get the version crap to work properly. More fixes.
|
||||
|
||||
1.4.3a
|
||||
Changed Version info embedded in mod to match format supported by Version checking. Will need to make this more robust in the future.
|
||||
Fixed bug with Thaumium Grafter not being enchantable.
|
||||
|
||||
1.4.3
|
||||
Added automatic version-checking for ThaumicBees! From this version on, when a new version becomes available, it will notify you in-game. Notifications can be switched off via a config file option.
|
||||
Fixed missing aspects on Extra Bees combs.
|
||||
|
||||
1.4.2
|
||||
Added Void Capsules - hold up to 8 buckets of liquid with one! It's a waterproof bag of holding! Plus stacking.
|
||||
Fix: Added Greatwood & Silverwood slabs to the ore dictionary so they should work as normal.
|
||||
Added Thaumium Scoop - 30 uses, can be enchanted with Repair.
|
||||
Added Thaumium Grafter - 15 uses, can be enchanted with Repair.
|
||||
|
||||
1.4.1
|
||||
Added Greatwood and Silverwood planks. Since Greatwood and Silverwood are tougher than other trees, you'll need some extra machinery. To obtain these, jam a log of the appropriate tree into a Forestry carpenter and provide a half bucket of water.
|
||||
Added slabs for the new planks also.
|
||||
|
||||
1.4.0a
|
||||
Fixed some issues with the Node bee's effect.
|
||||
|
||||
1.4.0
|
||||
New branch of bees containing 3 new species. A new type of frame!
|
||||
Thaumaturge's Backpack now require Amber rather than Gold Nuggets.
|
||||
Due to popular complaint, the Bees & Magic node now requires Unified Thaumic Field Theory to unlock.
|
||||
Moving all kinds of string contstants out of code into Localization files.
|
||||
Also fixed crazy aspects showing up on things that shouldn't have those aspects.
|
||||
ACTUALLY fixed issue with untyped node mutations failing.
|
||||
|
||||
1.3.0d
|
||||
Fixed an issue with mutations requiring a non-specific type of node to fail.
|
||||
|
||||
1.3.0c
|
||||
Discovered a function call that will crash dedicated servers. If you are running ThuamicBees on a server, please update to this revision.
|
||||
|
||||
1.3.0b
|
||||
Fixed a problem with capsules not being registered with the Forge Liquid Dictionary. You should be able to use them just about everywhere, now.
|
||||
Fixed the issue with certain items appearing twice in Creative Mode tabs.
|
||||
|
||||
1.3.0a
|
||||
Some bug fixes, including uncommenting some mutation-related code, research tweaking.
|
||||
Added the last bee for a long while, probably. Good luck getting it.
|
||||
|
||||
Common TB crashes stemming from Forestry issues should now be reported a little better, especially the backpack registration & item texture file related things. Errors should appear in your log, so make sure you read the log before you report the error here. It could be something silly on your end that is causing the crash.
|
||||
|
||||
1.3.0
|
||||
3 new species of bee: Vis, Pure, and Flux! Each requires an aura node nearby, and may have some side-effects...
|
||||
New Thaumcraft research! Open up your Thaumanomicon to see it.
|
||||
New Apiary Frames! They run off magic, confers bees with bonuses, and may have an impact outside of your apiary...
|
||||
|
||||
1.2.705B - Replaced 1.2.705
|
||||
Fixed issue with bad Mutation class, allowing pure bees to turn into any bee that involves them in a mutation.
|
||||
Also ACTUALLY fixed issue with Extra Bees loading after ThaumicBees on *nix-based systems.
|
||||
|
||||
1.2.705
|
||||
*Stealth update: Fixed an issue with TB loading before Extra Bees, resulting in some Null Pointers getting passed and choked on. If you get this issue, please re-download 1.2.705. No other changes were made in this version.
|
||||
|
||||
*8 new species of bees, including "Praecantatio", which, like the other Elemental bees, may contain Vis shards in its propolis. Some of the new species may also have extra evil involved, so be ready for anything.
|
||||
*Extra integration with Extra Bees! Mutations for some of the new bees. If Extra Bees is present, their mutations will require EB species rather than the base Forestry species.
|
||||
*Changed the "Charmed" mutation to avoid conflicting with Extra Bees. (Binnie already had one there, so mine got moved.)
|
||||
*New bee branch, similar to Extra Bees's mob spawning bees.
|
||||
*One new bee from a new branch, the rest of which will come once Azanor releases the Thaumcraft API.
|
||||
|
||||
1.1.702-67 - Replaced 1.1.702-62
|
||||
Additional Magic Capsules, featuring ExtraBees liquids, and RailCraft Creosote & Steam. (Yes, steam capsules. It's magic. That's how. :P)
|
||||
Tagged additional Forestry items with Thaumcraft aspects.
|
||||
|
||||
1.1.702-62
|
||||
Added Magic Capsules!
|
||||
Compatible with BuildCraft and Forestry liquids, they function almost the same way as refactory capsules, except that they can store 2 buckets' worth of liquid. As such, you cannot right-click with them to scoop up water or lava, but you can use them in bottlers, carpenters, Railcraft's Iron Tanks, Thermal Expansion's liquid transposers, and other things that support the Forge Liquid Dictionary. They can be useful for storing larger amounts of liquids in chests and things. I am also able to add other liquids to them in the future, and liquids from mods that are not present will not appear in the Creative inventory or the NEI listings.
|
||||
|
||||
1.0.701-56
|
||||
Update to Forestry 1.7.0.1/1.7.0.2
|
||||
|
||||
Added all kinds of backpack integration for Thaumcraft, including a new Thaumaturge's Backpack and Woven variety. These will suck up shards, Thaumcraft resources such as quicksilver, amber, zombie brains, research fragments and other goodies. Other TC items such as marker blocks, warded stone, candles, logs, leaves and plants also can fall into Forestry's default backpacks as appropriate. (I may have missed some other obvious items.)
|
||||
|
||||
1.0.70-53
|
||||
Update to Forestry 1.7.0.0
|
||||
|
||||
1.0.0-50
|
||||
-Added Thaumcraft aspects to some Forestry items, notably combs and bees. (Finally, something to use those extra drones for!)
|
||||
-Added another Swarmer inducer item - craftable via carpenter using liquid honey, Royal Jelly, Pollen and Enchanting Drops from Arcane bees. 8 times more effective than Royal Jelly alone!
|
||||
-Added carpenter recipe for candles using magic wax. Same patterns as with beeswax.
|
||||
|
||||
1.0.0-48
|
||||
-Support for Forestry 1.6.5.5+
|
||||
-Extra alles for bee mutations!
|
||||
-Thaumcraft aspects associated with some Forestry items!
|
||||
|
||||
1.0.0-35
|
||||
-Bugfix version to account for launcher jars located outside of expected folder. Replaced 1.0.0-34
|
||||
|
||||
1.0.0-34
|
||||
-Initial Release
|
||||
@@ -0,0 +1,14 @@
|
||||
// Add your dependencies here
|
||||
|
||||
dependencies {
|
||||
api('com.github.GTNewHorizons:ForestryMC:4.11.8:dev')
|
||||
|
||||
compileOnly('com.github.GTNewHorizons:BloodMagic:1.8.14:dev')
|
||||
compileOnly('com.github.GTNewHorizons:ThaumicHorizons:1.8.11:dev')
|
||||
compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.11-GTNH:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Botania:1.13.16-GTNH:api') {transitive = false}
|
||||
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.347:dev')
|
||||
compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.7.34-GTNH:dev')
|
||||
}
|
||||
|
||||
@@ -0,0 +1,238 @@
|
||||
# ExampleMod tag to use as Blowdryer (Spotless, etc.) settings version, leave empty to disable.
|
||||
# LOCAL to test local config updates.
|
||||
gtnh.settings.blowdryerTag = 0.2.0
|
||||
|
||||
# Human-readable mod name, available for mcmod.info population.
|
||||
modName = Magic Bees
|
||||
|
||||
# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
|
||||
# Conventionally lowercase.
|
||||
modId = MagicBees
|
||||
|
||||
# Root package of the mod, used to find various classes in other properties,
|
||||
# mcmod.info substitution, enabling assertions in run tasks, etc.
|
||||
modGroup = magicbees
|
||||
|
||||
# Whether to use modGroup as the maven publishing group.
|
||||
# When false, com.github.GTNewHorizons is used.
|
||||
useModGroupForPublishing = false
|
||||
|
||||
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
|
||||
autoUpdateBuildScript = false
|
||||
|
||||
# Version of Minecraft to target
|
||||
minecraftVersion = 1.7.10
|
||||
|
||||
# Version of Minecraft Forge to target
|
||||
forgeVersion = 10.13.4.1614
|
||||
|
||||
# Specify an MCP channel for dependency deobfuscation and the deobfParams task.
|
||||
channel = stable
|
||||
|
||||
# Specify an MCP mappings version for dependency deobfuscation and the deobfParams task.
|
||||
mappingsVersion = 12
|
||||
|
||||
# Defines other MCP mappings for dependency deobfuscation.
|
||||
remoteMappings = https\://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/
|
||||
|
||||
# Select a default username for testing your mod. You can always override this per-run by running
|
||||
# `./gradlew runClient --username=AnotherPlayer`, or configuring this command in your IDE.
|
||||
developmentEnvironmentUserName = Developer
|
||||
|
||||
# Enables modern Java syntax support. Valid values:
|
||||
# - false: No modern syntax, Java 8 only
|
||||
# - jabel: Jabel syntax-only support, compiles to J8 bytecode
|
||||
# - jvmDowngrader: Full modern Java via JVM Downgrader (syntax + stdlib APIs)
|
||||
# - modern: Native modern Java bytecode, no downgrading
|
||||
enableModernJavaSyntax = false
|
||||
|
||||
# If set, ignores the above setting and compiles with the given toolchain. This may cause unexpected issues,
|
||||
# and should *not* be used in most situations. -1 disables this.
|
||||
# forceToolchainVersion = -1
|
||||
|
||||
# Target JVM version for JVM Downgrader bytecode downgrading.
|
||||
# Only used when enableModernJavaSyntax = jvmDowngrader
|
||||
# downgradeTargetVersion = 8
|
||||
|
||||
# Comma-separated list of Java versions for multi-release jar support (JVM Downgrader only).
|
||||
# Classes will be available in META-INF/versions/N/ for each version N in this list.
|
||||
# Default: "21,25" (J25+ gets native classes, J21-24 gets partial downgrade, J8-20 gets full downgrade).
|
||||
# jvmDowngraderMultiReleaseVersions = 21,25
|
||||
|
||||
# Specifies how JVM Downgrader API stubs are provided. Options:
|
||||
# - shade: Shade minimized stubs into the jar
|
||||
# - gtnhlib: GTNHLib provides stubs at runtime (adds version constraint)
|
||||
# - external: Another dependency provides stubs (no constraint, no warning)
|
||||
# - (empty): Warning reminding you to configure stubs
|
||||
# Note: 'shade' option requires you to verify license compliance, see: https://github.com/unimined/JvmDowngrader/blob/main/LICENSE.md
|
||||
# jvmDowngraderStubsProvider =
|
||||
|
||||
# Enables injecting missing generics into the decompiled source code for a better coding experience.
|
||||
# Turns most publicly visible List, Map, etc. into proper List<E>, Map<K, V> types.
|
||||
enableGenericInjection = false
|
||||
|
||||
# Generate a class with a String field for the mod version named as defined below.
|
||||
# If generateGradleTokenClass is empty or not missing, no such class will be generated.
|
||||
# If gradleTokenVersion is empty or missing, the field will not be present in the class.
|
||||
generateGradleTokenClass = magicbees.Tags
|
||||
|
||||
# Name of the token containing the project's current version to generate/replace.
|
||||
gradleTokenVersion = VERSION
|
||||
|
||||
# [DEPRECATED] Mod ID replacement token.
|
||||
gradleTokenModId =
|
||||
|
||||
# [DEPRECATED] Mod name replacement token.
|
||||
gradleTokenModName =
|
||||
|
||||
# [DEPRECATED] Mod Group replacement token.
|
||||
gradleTokenGroupName =
|
||||
|
||||
# [DEPRECATED]
|
||||
# Multiple source files can be defined here by providing a comma-separated list: Class1.java,Class2.java,Class3.java
|
||||
# public static final String VERSION = "GRADLETOKEN_VERSION";
|
||||
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
|
||||
# version in @Mod([...], version = VERSION, [...]).
|
||||
# Leave these properties empty to skip individual token replacements.
|
||||
replaceGradleTokenInFile =
|
||||
|
||||
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
|
||||
# leave this property empty.
|
||||
# Example value: (apiPackage = api) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.api
|
||||
apiPackage = api
|
||||
|
||||
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
|
||||
# There can be multiple files in a space-separated list.
|
||||
# Example value: mymodid_at.cfg nei_at.cfg
|
||||
accessTransformersFile =
|
||||
|
||||
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
|
||||
usesMixins = false
|
||||
|
||||
# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
|
||||
# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
|
||||
# Mixin classes will have access to "main" classes, but not the other way around.
|
||||
separateMixinSourceSet =
|
||||
|
||||
# Adds some debug arguments like verbose output and class export.
|
||||
usesMixinDebug = false
|
||||
|
||||
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
|
||||
mixinPlugin =
|
||||
|
||||
# Specify the package that contains all of your Mixins. The package must exist or
|
||||
# the build will fail. If you have a package property defined in your mixins.<modid>.json,
|
||||
# it must match with this or the build will fail.
|
||||
mixinsPackage =
|
||||
|
||||
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
|
||||
# This parameter is for legacy compatibility only
|
||||
# Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin
|
||||
coreModClass =
|
||||
|
||||
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
|
||||
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
|
||||
containsMixinsAndOrCoreModOnly = false
|
||||
|
||||
# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins.
|
||||
forceEnableMixins = false
|
||||
|
||||
# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated into your jar. It is your
|
||||
# responsibility to check the license and request permission for distribution if required.
|
||||
usesShadowedDependencies = false
|
||||
|
||||
# If disabled, won't remove unused classes from shadowed dependencies. Some libraries use reflection to access
|
||||
# their own classes, making the minimization unreliable.
|
||||
minimizeShadowedDependencies = true
|
||||
|
||||
# If disabled, won't rename the shadowed classes.
|
||||
relocateShadowedDependencies = true
|
||||
|
||||
# Adds CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
|
||||
includeWellKnownRepositories = true
|
||||
|
||||
# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
|
||||
# list of strings, with the acceptable keys being(case does not matter):
|
||||
# cursemaven
|
||||
# modrinth
|
||||
excludeWellKnownRepositories =
|
||||
|
||||
# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven.
|
||||
# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables.
|
||||
# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle.
|
||||
usesMavenPublishing = true
|
||||
|
||||
# Maven repository to publish the mod to.
|
||||
# mavenPublishUrl = https\://nexus.gtnewhorizons.com/repository/releases/
|
||||
|
||||
# Publishing to Modrinth requires you to set the MODRINTH_TOKEN environment variable to your current Modrinth API token.
|
||||
#
|
||||
# The project's ID on Modrinth. Can be either the slug or the ID.
|
||||
# Leave this empty if you don't want to publish to Modrinth.
|
||||
modrinthProjectId =
|
||||
|
||||
# The project's relations on Modrinth. You can use this to refer to other projects on Modrinth.
|
||||
# Syntax: scope1-type1:name1;scope2-type2:name2;...
|
||||
# Where scope can be one of [required, optional, incompatible, embedded],
|
||||
# type can be one of [project, version],
|
||||
# and the name is the Modrinth project or version slug/id of the other mod.
|
||||
# Example: required-project:fplib;optional-project:gasstation;incompatible-project:gregtech
|
||||
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
|
||||
modrinthRelations =
|
||||
|
||||
# Publishing to CurseForge requires you to set the CURSEFORGE_TOKEN environment variable to one of your CurseForge API tokens.
|
||||
#
|
||||
# The project's numeric ID on CurseForge. You can find this in the About Project box.
|
||||
# Leave this empty if you don't want to publish on CurseForge.
|
||||
curseForgeProjectId =
|
||||
|
||||
# The project's relations on CurseForge. You can use this to refer to other projects on CurseForge.
|
||||
# Syntax: type1:name1;type2:name2;...
|
||||
# Where type can be one of [requiredDependency, embeddedLibrary, optionalDependency, tool, incompatible],
|
||||
# and the name is the CurseForge project slug of the other mod.
|
||||
# Example: requiredDependency:railcraft;embeddedLibrary:cofhlib;incompatible:buildcraft
|
||||
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
|
||||
curseForgeRelations =
|
||||
|
||||
# Optional parameter to customize the produced artifacts. Use this to preserve artifact naming when migrating older
|
||||
# projects. New projects should not use this parameter.
|
||||
customArchiveBaseName = magicbees
|
||||
|
||||
# Optional parameter to customize the default working directory used by the runClient* tasks. Relative to the project directory.
|
||||
# runClientWorkingDirectory = run/client
|
||||
|
||||
# Optional parameter to customize the default working directory used by the runServer* tasks. Relative to the project directory.
|
||||
# runServerWorkingDirectory = run/server
|
||||
|
||||
# Optional parameter to have the build automatically fail if an illegal version is used.
|
||||
# This can be useful if you e.g. only want to allow versions in the form of '1.1.xxx'.
|
||||
# The check is ONLY performed if the version is a git tag.
|
||||
# Note: the specified string must be escaped, so e.g. 1\\.1\\.\\d+ instead of 1\.1\.\d+
|
||||
# versionPattern =
|
||||
|
||||
# Uncomment to prevent the source code from being published.
|
||||
# noPublishedSources = true
|
||||
|
||||
# Uncomment this to disable Spotless checks.
|
||||
# This should only be uncommented to keep it easier to sync with upstream/other forks.
|
||||
# That is, if there is no other active fork/upstream, NEVER change this.
|
||||
# disableSpotless = true
|
||||
|
||||
# Uncomment this to disable Checkstyle checks (currently wildcard import check).
|
||||
# disableCheckstyle = true
|
||||
|
||||
# Override the IDEA build type. Valid values are: "" (leave blank, do not override), "idea" (force use native IDEA build), "gradle"
|
||||
# (force use delegated build).
|
||||
# This is meant to be set in $HOME/.gradle/gradle.properties.
|
||||
# e.g. add "systemProp.org.gradle.project.ideaOverrideBuildType=idea" will override the build type to be native build.
|
||||
# WARNING: If you do use this option, it will overwrite whatever you have in your existing projects. This might not be what you want!
|
||||
# Usually there is no need to uncomment this here as other developers do not necessarily use the same build type as you.
|
||||
# ideaOverrideBuildType = idea
|
||||
|
||||
# Whether IDEA should run spotless checks when pressing the Build button.
|
||||
# This is meant to be set in $HOME/.gradle/gradle.properties.
|
||||
# ideaCheckSpotlessOnBuild = true
|
||||
|
||||
# Non-GTNH properties
|
||||
org.gradle.configuration-cache = true
|
||||
org.gradle.parallel = true
|
||||
@@ -0,0 +1,12 @@
|
||||
#This file is generated by updateDaemonJvm
|
||||
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect
|
||||
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
|
||||
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect
|
||||
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
|
||||
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d4fd992c9557644e637ebe98263e0ae7/redirect
|
||||
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/59a9771cad43219260d9aac9a8ec4d6a/redirect
|
||||
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect
|
||||
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
|
||||
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/3689d0bcdd77ac01674ba3c9dbbe94d0/redirect
|
||||
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/8e1d9ee5d0f13e442218f6884a306da1/redirect
|
||||
toolchainVersion=25
|
||||
Vendored
BIN
Binary file not shown.
+7
@@ -0,0 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@@ -0,0 +1,248 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015 the original authors.
|
||||
#
|
||||
# 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
|
||||
#
|
||||
# https://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.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/b631911858264c0b6e4d6603d677ff5218766cee/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
Vendored
+93
@@ -0,0 +1,93 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@@ -0,0 +1,4 @@
|
||||
// Add any additional repositories for your dependencies here
|
||||
|
||||
repositories {
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
pluginManagement {
|
||||
repositories {
|
||||
maven {
|
||||
// RetroFuturaGradle
|
||||
name "GTNH Maven"
|
||||
url "https://nexus.gtnewhorizons.com/repository/public/"
|
||||
mavenContent {
|
||||
includeGroup("com.gtnewhorizons")
|
||||
includeGroupByRegex("com\\.gtnewhorizons\\..+")
|
||||
}
|
||||
}
|
||||
gradlePluginPortal()
|
||||
mavenCentral()
|
||||
mavenLocal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.24'
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package magicbees.api;
|
||||
|
||||
import magicbees.api.bees.ITransmutationEffectController;
|
||||
|
||||
public class MagicBeesAPI {
|
||||
|
||||
// Use this object during or after the Mod.Init phase to add your logic to the Transmutation bee effect.
|
||||
public static ITransmutationEffectController transmutationEffectController;
|
||||
|
||||
// This is a reference to the Tempus aspect. Initialized after MagicBees's post init phase.
|
||||
// Ensure it is not null, and cast it to thaumcraft.api.aspects.Aspect.
|
||||
public static Object thaumcraftAspectTempus;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package magicbees.api.bees;
|
||||
|
||||
public enum AuraChargeType {
|
||||
MUTATION,
|
||||
DEATH,
|
||||
PRODUCTION,;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package magicbees.api.bees;
|
||||
|
||||
/**
|
||||
* Allows a tile entity to provide a Magic Apiary with 'aura' to boost bee production, mutation rate, or decrease bee
|
||||
* lifespan.
|
||||
*
|
||||
* @author MysteriousAges
|
||||
*/
|
||||
public interface IMagicApiaryAuraProvider {
|
||||
|
||||
/**
|
||||
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
|
||||
* internal charge by one. If there are no charges remaining, it should return false.
|
||||
*
|
||||
* @return True if a charge is given; false otherwise.
|
||||
*/
|
||||
boolean getMutationCharge();
|
||||
|
||||
/**
|
||||
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
|
||||
* internal charge by one. If there are no charges remaining, it should return false.
|
||||
*
|
||||
* @return True if a charge is given; false otherwise.
|
||||
*/
|
||||
boolean getDeathRateCharge();
|
||||
|
||||
/**
|
||||
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
|
||||
* internal charge by one. If there are no charges remaining, it should return false.
|
||||
*
|
||||
* @return True if a charge is given; false otherwise.
|
||||
*/
|
||||
boolean getProductionCharge();
|
||||
|
||||
/**
|
||||
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
|
||||
* internal charge by one. If there are no charges remaining, it should return false.
|
||||
*
|
||||
* @return True if a charge is given; false otherwise.
|
||||
*/
|
||||
boolean getCharge(AuraChargeType auraChargeType);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package magicbees.api.bees;
|
||||
|
||||
/**
|
||||
* Manages adding custom ITransmutationEffectLogic instances into the bee effect system.
|
||||
*
|
||||
* @author MysteriousAges
|
||||
*
|
||||
*/
|
||||
public interface ITransmutationEffectController {
|
||||
|
||||
public void addEffectLogic(ITransmutationEffectLogic logic);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package magicbees.api.bees;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
/**
|
||||
* Class to control plugin logic for the Transmutation bee effect. Turns blocks into other blocks based on biome, time
|
||||
* of day, or whatever is deemed appropriate at the time.
|
||||
*
|
||||
* @author MysteriousAges
|
||||
*
|
||||
*/
|
||||
public interface ITransmutationEffectLogic {
|
||||
|
||||
/**
|
||||
* Allows an external mod to add transmutation logic to the Transmuting bee effect. Called from a list of
|
||||
* ITransmutationEffectLogic until one returns true. You can implement more than one transmutation effect in a
|
||||
* single implementation of the interface. Function checks for a series of conditions based on block ID/meta, or
|
||||
* biome information, or world information.
|
||||
*
|
||||
* @param world World object
|
||||
* @param biome Biome information for current coordinates
|
||||
* @param sourceBlock ItemStack representing the block at current coordinates
|
||||
* @param x Current X coordinate to attempt a transmute
|
||||
* @param y Current Y coordinate to attempt a transmute
|
||||
* @param z Current Z coordinate to attempt a transmute
|
||||
* @return true if a block was changed.
|
||||
*/
|
||||
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z);
|
||||
}
|
||||
@@ -0,0 +1,323 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import net.minecraft.potion.Potion;
|
||||
|
||||
import forestry.api.apiculture.EnumBeeChromosome;
|
||||
import forestry.api.apiculture.IAlleleBeeEffect;
|
||||
import forestry.api.apiculture.IAlleleBeeSpecies;
|
||||
import forestry.api.genetics.AlleleManager;
|
||||
import forestry.api.genetics.IAllele;
|
||||
import forestry.api.genetics.IAlleleEffect;
|
||||
import forestry.api.genetics.IAlleleFlowers;
|
||||
import forestry.api.genetics.IAlleleRegistry;
|
||||
import forestry.api.genetics.IChromosomeType;
|
||||
import forestry.api.genetics.IFlowerProvider;
|
||||
import magicbees.api.MagicBeesAPI;
|
||||
import magicbees.bees.allele.effect.AlleleEffectCrumbling;
|
||||
import magicbees.bees.allele.effect.AlleleEffectCure;
|
||||
import magicbees.bees.allele.effect.AlleleEffectEmpowering;
|
||||
import magicbees.bees.allele.effect.AlleleEffectNodeConversion;
|
||||
import magicbees.bees.allele.effect.AlleleEffectNodeRepair;
|
||||
import magicbees.bees.allele.effect.AlleleEffectPlaceholder;
|
||||
import magicbees.bees.allele.effect.AlleleEffectPotion;
|
||||
import magicbees.bees.allele.effect.AlleleEffectRecharge;
|
||||
import magicbees.bees.allele.effect.AlleleEffectSpawnMob;
|
||||
import magicbees.bees.allele.effect.AlleleEffectSpawnMobWeighted;
|
||||
import magicbees.bees.allele.effect.AlleleEffectSpawnWisp;
|
||||
import magicbees.bees.allele.effect.AlleleEffectTransmuting;
|
||||
import magicbees.bees.allele.effect.TransmutationEffectController;
|
||||
import magicbees.bees.allele.effect.TransmutationEffectLBotaniaLiving;
|
||||
import magicbees.bees.allele.effect.TransmutationEffectRailcraft;
|
||||
import magicbees.bees.allele.effect.TransmutationEffectVanilla;
|
||||
import magicbees.bees.allele.flowerProvider.FlowerProviderArsMagicaFlower;
|
||||
import magicbees.bees.allele.flowerProvider.FlowerProviderAuraNode;
|
||||
import magicbees.bees.allele.flowerProvider.FlowerProviderBookshelf;
|
||||
import magicbees.bees.allele.flowerProvider.FlowerProviderBotania;
|
||||
import magicbees.bees.allele.flowerProvider.FlowerProviderThaumcraftFlower;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.compat.ArsMagicaHelper;
|
||||
import magicbees.main.utils.compat.BotaniaHelper;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
import magicbees.main.utils.compat.ThermalModsHelper;
|
||||
import thaumcraft.api.nodes.NodeType;
|
||||
|
||||
public class Allele implements IAllele {
|
||||
|
||||
private static final String FLOWER_ARS_MAGICA_PLANT = "flowerArsMagicaPlant";
|
||||
private static final String FLOWER_BOTANIA = "flowerBotania";
|
||||
private static final String EFFECT_TE_BLIZZY = "TEBlizzy";
|
||||
private static final String EFFECT_TE_BLITZ = "TEBlitz";
|
||||
private static final String EFFECT_TE_BASALZ = "TEBasalz";
|
||||
private static final String EFFECT_AM_WISP = "AMWisp";
|
||||
private static final String EFFECT_MANA_DRAIN = "ManaDrain";
|
||||
private static final String EFFECT_DREAMING = "Dreaming";
|
||||
private static final String EFFECT_WISPY = "Wispy";
|
||||
private static final String EFFECT_BATTY = "Batty";
|
||||
private static final String EFFECT_BRAINY = "Brainy";
|
||||
private static final String EFFECT_NODE_RAVENING = "NodeRavening";
|
||||
private static final String EFFECT_NODE_PURIFYING = "NodePurifying";
|
||||
private static final String EFFECT_NODE_TAINTING = "NodeTainting";
|
||||
private static final String EFFECT_NODE_REPAIR = "NodeRepair";
|
||||
private static final String EFFECT_NODE_EMPOWER = "NodeEmpower";
|
||||
private static final String EFFECT_VIS_RECHARGE = "VisRecharge";
|
||||
private static final String FLOWERS_AURA_NODE = "AuraNode";
|
||||
private static final String FLOWERS_THAUMCRAFT_PLANT = "ThaumcraftPlant";
|
||||
|
||||
public static AlleleFloat speedBlinding;
|
||||
|
||||
public static IAlleleBeeEffect forestryBaseEffect;
|
||||
|
||||
public static IAlleleFlowers flowerBookshelf;
|
||||
public static IAlleleFlowers flowerThaumcraft;
|
||||
public static IAlleleFlowers flowerArsMagica;
|
||||
public static IAlleleFlowers flowerAuraNode;
|
||||
public static IAlleleFlowers flowerBotania;
|
||||
|
||||
public static IAlleleEffect effectCleansing;
|
||||
public static IAlleleEffect effectDigSpeed;
|
||||
public static IAlleleEffect effectMoveSpeed;
|
||||
public static IAlleleEffect effectSlowSpeed;
|
||||
public static IAlleleEffect effectWithering;
|
||||
public static IAlleleEffect effectVisRecharge;
|
||||
public static IAlleleEffect effectNodeEmpower;
|
||||
public static IAlleleEffect effectNodeRepair;
|
||||
public static IAlleleEffect effectNodeConversionTaint;
|
||||
public static IAlleleEffect effectNodeConversionPure;
|
||||
public static IAlleleEffect effectNodeConversionHungry;
|
||||
public static IAlleleEffect effectTransmuting;
|
||||
public static IAlleleEffect effectCrumbling;
|
||||
public static IAlleleEffect effectInvisibility;
|
||||
public static IAlleleEffect effectDreaming;
|
||||
|
||||
public static IAlleleEffect spawnWolf;
|
||||
public static IAlleleEffect spawnBats;
|
||||
public static IAlleleEffect spawnCow;
|
||||
public static IAlleleEffect spawnChicken;
|
||||
public static IAlleleEffect spawnPig;
|
||||
public static IAlleleEffect spawnSheep;
|
||||
public static IAlleleEffect spawnCat;
|
||||
public static IAlleleEffect spawnHorse;
|
||||
public static IAlleleEffect spawnGhast;
|
||||
public static IAlleleEffect spawnSpider;
|
||||
public static IAlleleEffect spawnBlaze;
|
||||
public static IAlleleEffect spawnBrainyZombie;
|
||||
public static IAlleleEffect spawnWisp;
|
||||
public static IAlleleEffect spawnBlizz;
|
||||
public static IAlleleEffect spawnBlitz;
|
||||
public static IAlleleEffect spawnBasalz;
|
||||
public static IAlleleEffect spawnManaDrainer;
|
||||
public static IAlleleEffect spawnWispOrHecate;
|
||||
|
||||
public static void setupAdditionalAlleles() {
|
||||
forestryBaseEffect = (IAlleleBeeEffect) getBaseAllele("effectNone");
|
||||
IFlowerProvider vanillaFlowers = ((IAlleleFlowers) getBaseAllele("flowersVanilla")).getProvider();
|
||||
|
||||
speedBlinding = new AlleleFloat("speedBlinding", 2f, false, EnumBeeChromosome.SPEED);
|
||||
flowerBookshelf = new AlleleFlower("Bookshelf", new FlowerProviderBookshelf(), true);
|
||||
|
||||
effectCleansing = new AlleleEffectCure("Curative", false);
|
||||
effectDigSpeed = new AlleleEffectPotion("DigSpeed", Potion.digSpeed, 15, false);
|
||||
effectMoveSpeed = new AlleleEffectPotion("MoveSpeed", Potion.moveSpeed, 10, false);
|
||||
effectSlowSpeed = new AlleleEffectPotion("SlowSpeed", Potion.moveSlowdown, 3, false).setMalicious();
|
||||
effectWithering = new AlleleEffectPotion("Withering", Potion.wither, 10, false).setMalicious();
|
||||
|
||||
TransmutationEffectController controller = new TransmutationEffectController(
|
||||
new TransmutationEffectRailcraft(),
|
||||
new TransmutationEffectVanilla());
|
||||
MagicBeesAPI.transmutationEffectController = controller;
|
||||
effectTransmuting = new AlleleEffectTransmuting("Transmuting", true, controller, 200);
|
||||
effectCrumbling = new AlleleEffectCrumbling("Crumbling", true);
|
||||
|
||||
effectInvisibility = new AlleleEffectPotion("Invisibility", Potion.invisibility, 10, false);
|
||||
|
||||
spawnGhast = new AlleleEffectSpawnMob("Ghastly", false, "Ghast", "mob.ghast.moan").setThrottle(2060)
|
||||
.setChanceToSpawn(10).setMaxMobsInSpawnZone(1);
|
||||
spawnSpider = new AlleleEffectSpawnMob("Spidery", false, "Spider", "mob.spider.step").setThrottle(400)
|
||||
.setChanceToSpawn(70).setMaxMobsInSpawnZone(4);
|
||||
spawnBlaze = new AlleleEffectSpawnMob("Ablaze", false, "Blaze", "mob.blaze.breathe").setThrottle(800)
|
||||
.setChanceToSpawn(60).setMaxMobsInSpawnZone(2);
|
||||
spawnWolf = new AlleleEffectSpawnMob("Canine", false, "Wolf", "mob.wolf.panting").setThrottle(650)
|
||||
.setChanceToSpawn(40).setMaxMobsInSpawnZone(2);
|
||||
spawnPig = new AlleleEffectSpawnMob("Porcine", true, "Pig", "mob.pig.say").setThrottle(350)
|
||||
.setMaxMobsInSpawnZone(4);
|
||||
spawnCow = new AlleleEffectSpawnMob("Bovine", true, "Cow", "mob.cow.say").setThrottle(640)
|
||||
.setMaxMobsInSpawnZone(3);
|
||||
spawnChicken = new AlleleEffectSpawnMob("Chicken", true, "Chicken", "mob.chicken.hurt").setThrottle(20)
|
||||
.setMaxMobsInSpawnZone(20);
|
||||
spawnSheep = new AlleleEffectSpawnMob("Sheep", false, "Sheep", "mob.sheep.say").setThrottle(450)
|
||||
.setMaxMobsInSpawnZone(5);
|
||||
spawnCat = new AlleleEffectSpawnMob("Catty", false, "Ozelot", "mob.cat.meow").setThrottle(702)
|
||||
.setChanceToSpawn(60).setMaxMobsInSpawnZone(2);
|
||||
spawnHorse = new AlleleEffectSpawnMob("Horse", false, "EntityHorse", "mob.horse.idle").setThrottle(450)
|
||||
.setChanceToSpawn(59).setMaxMobsInSpawnZone(2);
|
||||
|
||||
if (ThaumcraftHelper.isActive()) {
|
||||
flowerThaumcraft = new AlleleFlower(FLOWERS_THAUMCRAFT_PLANT, new FlowerProviderThaumcraftFlower(), false);
|
||||
flowerAuraNode = new AlleleFlower(FLOWERS_AURA_NODE, new FlowerProviderAuraNode(), true);
|
||||
|
||||
effectVisRecharge = new AlleleEffectRecharge(EFFECT_VIS_RECHARGE, false);
|
||||
effectNodeEmpower = new AlleleEffectEmpowering(EFFECT_NODE_EMPOWER, false);
|
||||
effectNodeRepair = new AlleleEffectNodeRepair(EFFECT_NODE_REPAIR, false);
|
||||
effectNodeConversionTaint = new AlleleEffectNodeConversion(
|
||||
EFFECT_NODE_TAINTING,
|
||||
NodeType.TAINTED,
|
||||
false,
|
||||
250);
|
||||
effectNodeConversionPure = new AlleleEffectNodeConversion(EFFECT_NODE_PURIFYING, NodeType.PURE, false, 250);
|
||||
effectNodeConversionHungry = new AlleleEffectNodeConversion(
|
||||
EFFECT_NODE_RAVENING,
|
||||
NodeType.HUNGRY,
|
||||
false,
|
||||
2);
|
||||
|
||||
spawnBrainyZombie = new AlleleEffectSpawnMob(
|
||||
EFFECT_BRAINY,
|
||||
false,
|
||||
ThaumcraftHelper.Entity.BRAINY_ZOMBIE.entityID).setAggrosPlayerOnSpawn().setThrottle(800)
|
||||
.setSpawnsOnPlayerNear(null).setMaxMobsInSpawnZone(2);
|
||||
|
||||
spawnBats = new AlleleEffectSpawnMob(EFFECT_BATTY, false, ThaumcraftHelper.Entity.FIREBAT.entityID)
|
||||
.setThrottle(300).setSpawnsOnPlayerNear("Bat");
|
||||
|
||||
spawnWisp = new AlleleEffectSpawnWisp(
|
||||
EFFECT_WISPY,
|
||||
false,
|
||||
ThaumcraftHelper.Entity.WISP.entityID,
|
||||
"thaumcraft.wisplive").setThrottle(1800).setChanceToSpawn(79);
|
||||
} else {
|
||||
spawnBats = new AlleleEffectSpawnMob(EFFECT_BATTY, false, "Bat").setThrottle(150);
|
||||
|
||||
flowerThaumcraft = new AlleleFlower(FLOWERS_THAUMCRAFT_PLANT, vanillaFlowers, false);
|
||||
flowerAuraNode = new AlleleFlower(FLOWERS_AURA_NODE, vanillaFlowers, true);
|
||||
Allele.effectVisRecharge = new AlleleEffectRecharge(EFFECT_VIS_RECHARGE, false);
|
||||
effectNodeEmpower = new AlleleEffectPlaceholder(EFFECT_NODE_EMPOWER, false);
|
||||
effectNodeRepair = new AlleleEffectPlaceholder(EFFECT_NODE_REPAIR, false);
|
||||
effectNodeConversionTaint = new AlleleEffectPlaceholder(EFFECT_NODE_TAINTING, false);
|
||||
effectNodeConversionPure = new AlleleEffectPlaceholder(EFFECT_NODE_PURIFYING, false);
|
||||
effectNodeConversionHungry = new AlleleEffectPlaceholder(EFFECT_NODE_RAVENING, false);
|
||||
spawnBrainyZombie = new AlleleEffectPlaceholder(EFFECT_BRAINY, false);
|
||||
spawnWisp = new AlleleEffectPlaceholder(EFFECT_WISPY, false);
|
||||
}
|
||||
|
||||
if (BotaniaHelper.isActive()) {
|
||||
flowerBotania = new AlleleFlower(FLOWER_BOTANIA, new FlowerProviderBotania(), true);
|
||||
effectDreaming = new AlleleEffectTransmuting(
|
||||
EFFECT_DREAMING,
|
||||
false,
|
||||
new TransmutationEffectController(new TransmutationEffectLBotaniaLiving()),
|
||||
100);
|
||||
} else {
|
||||
flowerBotania = new AlleleFlower(FLOWER_BOTANIA, vanillaFlowers, true);
|
||||
effectDreaming = new AlleleEffectPlaceholder(EFFECT_DREAMING, false);
|
||||
}
|
||||
|
||||
if (ArsMagicaHelper.isActive()) {
|
||||
flowerArsMagica = new AlleleFlower(FLOWER_ARS_MAGICA_PLANT, new FlowerProviderArsMagicaFlower(), false);
|
||||
spawnManaDrainer = new AlleleEffectSpawnMobWeighted(
|
||||
EFFECT_MANA_DRAIN,
|
||||
true,
|
||||
20,
|
||||
new String[] { ArsMagicaHelper.Name + ".MobManaCreeper", ArsMagicaHelper.Name + ".ManaVortex" },
|
||||
new int[] { 60, 2 });
|
||||
|
||||
spawnWispOrHecate = new AlleleEffectSpawnMobWeighted(
|
||||
EFFECT_AM_WISP,
|
||||
true,
|
||||
20,
|
||||
new String[] { ArsMagicaHelper.Name + ".MobWisp", ArsMagicaHelper.Name + ".MobHecate" },
|
||||
new int[] { 40, 3 });
|
||||
} else {
|
||||
flowerArsMagica = new AlleleFlower(FLOWER_ARS_MAGICA_PLANT, vanillaFlowers, false);
|
||||
spawnManaDrainer = new AlleleEffectPlaceholder(EFFECT_MANA_DRAIN, true);
|
||||
spawnWispOrHecate = new AlleleEffectPlaceholder(EFFECT_AM_WISP, true);
|
||||
}
|
||||
|
||||
// TODO TE spawning
|
||||
if (ThermalModsHelper.isActive()) {
|
||||
spawnBlizz = new AlleleEffectSpawnMob(
|
||||
EFFECT_TE_BLIZZY,
|
||||
true,
|
||||
ThermalModsHelper.Entity.BLIZZ.entityID,
|
||||
ThermalModsHelper.Entity.BLIZZ.soundName).setThrottle(100).setChanceToSpawn(80);
|
||||
spawnBlitz = new AlleleEffectSpawnMob(
|
||||
EFFECT_TE_BLITZ,
|
||||
true,
|
||||
ThermalModsHelper.Entity.BLITZ.entityID,
|
||||
ThermalModsHelper.Entity.BLITZ.soundName).setThrottle(100).setChanceToSpawn(80);
|
||||
spawnBasalz = new AlleleEffectSpawnMob(
|
||||
EFFECT_TE_BASALZ,
|
||||
true,
|
||||
ThermalModsHelper.Entity.BASALZ.entityID,
|
||||
ThermalModsHelper.Entity.BASALZ.soundName).setThrottle(100).setChanceToSpawn(80);
|
||||
} else {
|
||||
spawnBlizz = new AlleleEffectPlaceholder(EFFECT_TE_BLIZZY, true);
|
||||
spawnBlitz = new AlleleEffectPlaceholder(EFFECT_TE_BLITZ, true);
|
||||
spawnBasalz = new AlleleEffectPlaceholder(EFFECT_TE_BASALZ, true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void registerDeprecatedAlleleReplacements() {
|
||||
IAlleleRegistry registry = AlleleManager.alleleRegistry;
|
||||
|
||||
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodeAttract", effectNodeEmpower);
|
||||
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodePurify", effectNodeConversionPure);
|
||||
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodeFlux", effectNodeConversionTaint);
|
||||
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodeCharge", effectNodeEmpower);
|
||||
registry.registerDeprecatedAlleleReplacement(
|
||||
"magicbees.speciesTCAttractive",
|
||||
BeeSpecies.TC_EMPOWERING.getSpecies());
|
||||
registry.registerDeprecatedAlleleReplacement(
|
||||
"magicbees.speciesBMBloodyBMBloody",
|
||||
BeeSpecies.EARTHY.getSpecies());
|
||||
registry.registerDeprecatedAlleleReplacement(
|
||||
"magicbees.speciesBMBloodyBMBound",
|
||||
BeeSpecies.ARCANE.getSpecies());
|
||||
}
|
||||
|
||||
public static IAlleleBeeSpecies getBaseSpecies(String name) {
|
||||
return (IAlleleBeeSpecies) AlleleManager.alleleRegistry
|
||||
.getAllele((new StringBuilder()).append("forestry.species").append(name).toString());
|
||||
}
|
||||
|
||||
public static IAlleleBeeSpecies getExtraSpecies(String name) {
|
||||
return (IAlleleBeeSpecies) AlleleManager.alleleRegistry
|
||||
.getAllele((new StringBuilder()).append("extrabees.species.").append(name.toLowerCase()).toString());
|
||||
}
|
||||
|
||||
public static IAllele getBaseAllele(String name) {
|
||||
return AlleleManager.alleleRegistry.getAllele("forestry." + name);
|
||||
}
|
||||
|
||||
public static IAllele getAllele(String name) {
|
||||
return AlleleManager.alleleRegistry.getAllele(name);
|
||||
}
|
||||
|
||||
private String uid;
|
||||
private boolean dominant;
|
||||
|
||||
public Allele(String id, boolean isDominant, IChromosomeType... chromosomeTypes) {
|
||||
this.uid = "magicbees." + id;
|
||||
this.dominant = isDominant;
|
||||
AlleleManager.alleleRegistry.registerAllele(this, chromosomeTypes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUID() {
|
||||
return this.uid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDominant() {
|
||||
return this.dominant;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return LocalizationManager.getLocalizedString(getUID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName() {
|
||||
return this.uid;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
|
||||
import forestry.api.apiculture.EnumBeeChromosome;
|
||||
import forestry.api.apiculture.IAlleleBeeEffect;
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
|
||||
public abstract class AlleleEffect extends Allele implements IAlleleBeeEffect {
|
||||
|
||||
protected int throttle;
|
||||
protected boolean combinable;
|
||||
|
||||
public AlleleEffect(String id, boolean isDominant, int timeout) {
|
||||
super("effect" + id, isDominant, EnumBeeChromosome.EFFECT);
|
||||
this.throttle = timeout;
|
||||
combinable = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCombinable() {
|
||||
return combinable;
|
||||
}
|
||||
|
||||
public AlleleEffect setIsCombinable(boolean canCombine) {
|
||||
combinable = canCombine;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract IEffectData validateStorage(IEffectData storedData);
|
||||
|
||||
@Override
|
||||
public final IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
int count = storedData.getInteger(0);
|
||||
if (count >= this.throttle) {
|
||||
storedData = this.doEffectThrottled(genome, storedData, housing);
|
||||
} else {
|
||||
storedData.setInteger(0, count + 1);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param genome
|
||||
* @param storedData
|
||||
* @param housing
|
||||
* @return
|
||||
*/
|
||||
protected abstract IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
|
||||
|
||||
@Override
|
||||
public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
return Allele.forestryBaseEffect.doFX(genome, storedData, housing);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected <T extends Entity> List<T> getEntitiesWithinRange(IBeeGenome genome, IBeeHousing housing,
|
||||
Class<T> entityClass) {
|
||||
// Get the size of the affected area
|
||||
int[] area = genome.getTerritory();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
|
||||
// Calculate offset
|
||||
int[] min = new int[3];
|
||||
int[] max = new int[3];
|
||||
min[0] = coords.posX - area[0] / 2;
|
||||
max[0] = coords.posX + area[0] / 2;
|
||||
|
||||
min[1] = coords.posY - area[1] / 2;
|
||||
max[1] = coords.posY + area[1] / 2;
|
||||
|
||||
min[2] = coords.posZ - area[2] / 2;
|
||||
max[2] = coords.posZ + area[2] / 2;
|
||||
|
||||
AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(min[0], min[1], min[2], max[0], max[1], max[2]);
|
||||
return (List<T>) housing.getWorld().getEntitiesWithinAABB(entityClass, bounds);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import forestry.api.genetics.IAlleleFloat;
|
||||
import forestry.api.genetics.IChromosomeType;
|
||||
|
||||
public class AlleleFloat extends Allele implements IAlleleFloat {
|
||||
|
||||
private float value;
|
||||
|
||||
public AlleleFloat(String id, float val, boolean isDominant, IChromosomeType... chromosomeTypes) {
|
||||
super(id, isDominant, chromosomeTypes);
|
||||
this.value = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getValue() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import forestry.api.apiculture.EnumBeeChromosome;
|
||||
import forestry.api.genetics.IAlleleFlowers;
|
||||
import forestry.api.genetics.IFlowerProvider;
|
||||
|
||||
public class AlleleFlower extends Allele implements IAlleleFlowers {
|
||||
|
||||
private IFlowerProvider provider;
|
||||
|
||||
public AlleleFlower(String uid, IFlowerProvider flowerProvider, boolean isDominant) {
|
||||
super("flower" + uid, isDominant, EnumBeeChromosome.FLOWER_PROVIDER);
|
||||
this.provider = flowerProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IFlowerProvider getProvider() {
|
||||
return this.provider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return this.provider.getDescription();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import magicbees.api.bees.AuraChargeType;
|
||||
|
||||
public enum AuraCharge {
|
||||
|
||||
MUTATION(AuraChargeType.MUTATION, 850, 11),
|
||||
DEATH(AuraChargeType.DEATH, 400, 5),
|
||||
PRODUCTION(AuraChargeType.PRODUCTION, 300, 3),;
|
||||
|
||||
public final AuraChargeType type;
|
||||
public final int duration;
|
||||
/** The number of ticks to count between draining vis from the environment **/
|
||||
public final int tickRate;
|
||||
|
||||
public final int flag;
|
||||
|
||||
AuraCharge(AuraChargeType chargeType, int duration, int tickRate) {
|
||||
this.type = chargeType;
|
||||
this.duration = duration;
|
||||
this.tickRate = tickRate;
|
||||
flag = 1 << ordinal();
|
||||
}
|
||||
|
||||
public static AuraCharge fromChargeType(AuraChargeType type) {
|
||||
for (AuraCharge charge : values()) {
|
||||
if (type == charge.type) {
|
||||
return charge;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import forestry.api.genetics.AlleleManager;
|
||||
import forestry.api.genetics.IAlleleSpecies;
|
||||
import forestry.api.genetics.IClassification;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
|
||||
public enum BeeClassification implements IClassification {
|
||||
|
||||
VEILED("Veiled", "Velatapis"),
|
||||
ARCANE("Arcane", "Arcanapis"),
|
||||
SUPERNATURAL("Supernatural", "Occultapis"),
|
||||
SCHOLARLY("Scholarly", "Doctapis"),
|
||||
SKULKING("Skulking", "Malevolenapis"),
|
||||
MAGICAL("Magic", "Magicapis"),
|
||||
TIME("Time", "Tempestivapis"),
|
||||
SOUL("Soul", "Animapis"),
|
||||
|
||||
ABOMINABLE("Abominable", "Detestabilapis"),
|
||||
EXTRINSIC("Extrinsic", "Extrarapis"),
|
||||
|
||||
METALLIC("Metallic", "Metalliapis"),
|
||||
GEM("Gem", "Lapidapis"),
|
||||
TRANSMUTING("Transmuting", "Transmutapis"),
|
||||
|
||||
THAUMIC("Thaumic", "Thaumiapis"),
|
||||
FLESHY("Fleshy", "Carnosapis"),
|
||||
|
||||
ALCHEMICAL("Alchemical", "Alchimiapis"),
|
||||
|
||||
ESSENTIAL("Essential", "Essentiapis"),
|
||||
|
||||
THERMAL("Thermal", "Thermametallic"),
|
||||
ADORABLE("Adorable", "Amabilis"),
|
||||
|
||||
BLOODY("Bloody", "Sanguis"),
|
||||
|
||||
BOTANICAL("Botanical", "Botanica"),;
|
||||
|
||||
private String uID;
|
||||
private String latin;
|
||||
private ArrayList<IAlleleSpecies> species;
|
||||
private IClassification parent;
|
||||
private EnumClassLevel level;
|
||||
|
||||
private BeeClassification(String name, String scientific) {
|
||||
this.uID = "classification." + name.toLowerCase();
|
||||
this.latin = scientific;
|
||||
this.level = EnumClassLevel.GENUS;
|
||||
this.species = new ArrayList<IAlleleSpecies>();
|
||||
this.parent = AlleleManager.alleleRegistry.getClassification("family.apidae");
|
||||
AlleleManager.alleleRegistry.registerClassification(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumClassLevel getLevel() {
|
||||
return this.level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUID() {
|
||||
return this.uID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return LocalizationManager.getLocalizedString(getUID());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getScientific() {
|
||||
return this.latin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return LocalizationManager.getLocalizedString(getUID() + ".description");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IClassification[] getMemberGroups() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMemberGroup(IClassification group) {}
|
||||
|
||||
@Override
|
||||
public IAlleleSpecies[] getMemberSpecies() {
|
||||
return this.species.toArray(new IAlleleSpecies[this.species.size()]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMemberSpecies(IAlleleSpecies species) {
|
||||
if (!this.species.contains(species)) {
|
||||
this.species.add(species);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IClassification getParent() {
|
||||
return this.parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParent(IClassification parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,24 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import forestry.api.apiculture.IBeeIconColourProvider;
|
||||
|
||||
public enum BeeIconColourProvider implements IBeeIconColourProvider {
|
||||
RAINBOW {
|
||||
|
||||
@Override
|
||||
public int getIconColour(int renderPass) {
|
||||
if (renderPass == 0) {
|
||||
int hue = (int) (System.currentTimeMillis() >> 2) % 360;
|
||||
return Color.getHSBColor(hue / 360f, 0.75f, 0.80f).getRGB();
|
||||
} else if (renderPass == 1) {
|
||||
int hue = (int) (System.currentTimeMillis() >> 3) % 360;
|
||||
hue += 60;
|
||||
hue = hue % 360;
|
||||
return Color.getHSBColor(hue / 360f, 0.5f, 0.6f).getRGB();
|
||||
}
|
||||
return 0xffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import forestry.api.apiculture.EnumBeeType;
|
||||
import forestry.api.apiculture.IBeeIconProvider;
|
||||
import magicbees.main.CommonProxy;
|
||||
|
||||
public enum BeeIconProvider implements IBeeIconProvider {
|
||||
|
||||
SKULKING(CommonProxy.DOMAIN + ":bees/skulking/"),
|
||||
DOCTORAL(CommonProxy.DOMAIN + ":bees/doctoral/");
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon[][] icons;
|
||||
|
||||
private final String iconPath;
|
||||
|
||||
BeeIconProvider(String iconPath) {
|
||||
this.iconPath = iconPath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerIcons(IIconRegister itemMap) {
|
||||
this.icons = new IIcon[EnumBeeType.VALUES.length][3];
|
||||
|
||||
IIcon body1 = itemMap.registerIcon(iconPath + "body1");
|
||||
|
||||
for (int i = 0; i < EnumBeeType.VALUES.length; i++) {
|
||||
EnumBeeType beeType = EnumBeeType.VALUES[i];
|
||||
if (beeType == EnumBeeType.NONE) continue;
|
||||
|
||||
String beeTypeIconPath = iconPath + beeType.toString().toLowerCase(Locale.ENGLISH);
|
||||
|
||||
icons[i][0] = itemMap.registerIcon(beeTypeIconPath + ".outline");
|
||||
icons[i][1] = (beeType != EnumBeeType.LARVAE) ? body1 : itemMap.registerIcon(beeTypeIconPath + ".body");
|
||||
icons[i][2] = itemMap.registerIcon(beeTypeIconPath + ".body2");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(EnumBeeType type, int renderPass) {
|
||||
return icons[type.ordinal()][Math.min(renderPass, 2)];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.apiculture.EnumBeeType;
|
||||
import forestry.api.apiculture.IAlleleBeeSpecies;
|
||||
import forestry.api.apiculture.IBee;
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeRoot;
|
||||
import forestry.api.genetics.AlleleManager;
|
||||
import forestry.api.genetics.IAllele;
|
||||
import magicbees.block.types.HiveType;
|
||||
import magicbees.item.types.DropType;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.Tuple;
|
||||
import magicbees.main.utils.compat.ExtraBeesHelper;
|
||||
|
||||
public class BeeManager {
|
||||
|
||||
public static IBeeRoot beeRoot;
|
||||
|
||||
private static List<Tuple<IAlleleBeeSpecies, Double>> worldgenSpeciesWeights = new ArrayList<Tuple<IAlleleBeeSpecies, Double>>();
|
||||
private static double worldgenSpeciesWeightsTotal = 0;
|
||||
|
||||
public static void getBeeRoot() {
|
||||
beeRoot = (IBeeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootBees");
|
||||
}
|
||||
|
||||
public static void setupAlleles() {
|
||||
Allele.setupAdditionalAlleles();
|
||||
BeeSpecies.setupBeeSpecies();
|
||||
Allele.registerDeprecatedAlleleReplacements();
|
||||
}
|
||||
|
||||
public static void lateBeeInit() {
|
||||
BeeMutation.setupMutations();
|
||||
BeeProductHelper.initBaseProducts();
|
||||
BeeProductHelper.initOreDictSProducts();
|
||||
|
||||
HiveType.initHiveData();
|
||||
|
||||
beeRoot.setResearchSuitability(Config.drops.getStackForType(DropType.INTELLECT), 0.5f);
|
||||
}
|
||||
|
||||
public static ItemStack getDefaultItemStackForSpecies(IAlleleBeeSpecies beeSpecies, EnumBeeType type) {
|
||||
IBee bee = getBeeFromSpecies(beeSpecies, false);
|
||||
return BeeManager.beeRoot.getMemberStack(bee, type.ordinal());
|
||||
}
|
||||
|
||||
public static IBee getBeeFromSpecies(IAlleleBeeSpecies beeSpecies, boolean applyRainResist) {
|
||||
IAllele[] speciesTemplate = BeeManager.beeRoot.getTemplate(beeSpecies.getUID());
|
||||
|
||||
if (applyRainResist) {
|
||||
speciesTemplate = BeeGenomeManager.addRainResist(speciesTemplate);
|
||||
}
|
||||
|
||||
IBeeGenome genome = BeeManager.beeRoot.templateAsGenome(speciesTemplate);
|
||||
return BeeManager.beeRoot.getBee(null, genome);
|
||||
}
|
||||
|
||||
public static IAlleleBeeSpecies getRandomWorldgenSpecies(Random r) {
|
||||
Collections.shuffle(worldgenSpeciesWeights);
|
||||
double value = r.nextDouble() * worldgenSpeciesWeightsTotal;
|
||||
IAlleleBeeSpecies species = Allele.getBaseSpecies("Forest");
|
||||
|
||||
for (Tuple<IAlleleBeeSpecies, Double> t : worldgenSpeciesWeights) {
|
||||
value -= t.right.doubleValue();
|
||||
if (value <= 0.0) {
|
||||
species = t.left;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return species;
|
||||
}
|
||||
|
||||
public static void addWorldgenSpeciesWeight(IAlleleBeeSpecies species, double d) {
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(species, d));
|
||||
worldgenSpeciesWeightsTotal += d;
|
||||
}
|
||||
|
||||
public static void populateSpeciesListRarity() {
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Forest"), 20.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Meadows"), 20.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Tropical"), 10.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Modest"), 16.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Wintry"), 10.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Ended"), 0.5));
|
||||
|
||||
if (ExtraBeesHelper.isActive()) {
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getExtraSpecies("Water"), 12.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getExtraSpecies("Rock"), 16.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getExtraSpecies("Basalt"), 10.0));
|
||||
}
|
||||
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.MYSTICAL.getSpecies(), 20.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.UNUSUAL.getSpecies(), 20.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.SORCEROUS.getSpecies(), 13.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.ATTUNED.getSpecies(), 6.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.INFERNAL.getSpecies(), 10.0));
|
||||
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.OBLIVION.getSpecies(), 1.0));
|
||||
|
||||
for (Tuple<IAlleleBeeSpecies, Double> t : worldgenSpeciesWeights) {
|
||||
worldgenSpeciesWeightsTotal += t.right.doubleValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,804 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraftforge.common.BiomeDictionary;
|
||||
import net.minecraftforge.common.BiomeDictionary.Type;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import forestry.api.apiculture.IAlleleBeeSpecies;
|
||||
import forestry.api.apiculture.IBeeMutationCustom;
|
||||
import forestry.api.apiculture.IBeeMutationFactory;
|
||||
import magicbees.main.utils.LogHelper;
|
||||
import magicbees.main.utils.MoonPhase;
|
||||
import magicbees.main.utils.compat.AppliedEnergisticsHelper;
|
||||
import magicbees.main.utils.compat.ArsMagicaHelper;
|
||||
import magicbees.main.utils.compat.BotaniaHelper;
|
||||
import magicbees.main.utils.compat.EquivalentExchangeHelper;
|
||||
import magicbees.main.utils.compat.ExtraBeesHelper;
|
||||
import magicbees.main.utils.compat.ForestryHelper;
|
||||
import magicbees.main.utils.compat.RedstoneArsenalHelper;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
import magicbees.main.utils.compat.ThermalModsHelper;
|
||||
|
||||
public class BeeMutation {
|
||||
|
||||
private static IBeeMutationFactory beeMutationFactory = forestry.api.apiculture.BeeManager.beeMutationFactory;
|
||||
|
||||
public static void setupMutations() {
|
||||
IAlleleBeeSpecies baseA, baseB;
|
||||
IBeeMutationCustom mutation;
|
||||
|
||||
// Forestry + These -> Common
|
||||
|
||||
BeeSpecies[] magicMundane = new BeeSpecies[] { BeeSpecies.MYSTICAL, BeeSpecies.SORCEROUS, BeeSpecies.UNUSUAL,
|
||||
BeeSpecies.ATTUNED };
|
||||
String[] forestryMundane = new String[] { "Forest", "Meadows", "Modest", "Wintry", "Tropical", "Marshy" };
|
||||
String[] binnieMundane = new String[] { "marble", "rock", "water", "basalt" };
|
||||
|
||||
for (BeeSpecies species : magicMundane) {
|
||||
for (String str : forestryMundane) {
|
||||
beeMutationFactory.createMutation(
|
||||
species.getSpecies(),
|
||||
Allele.getBaseSpecies(str),
|
||||
ForestryHelper.getTemplateForestryForSpecies("Common"),
|
||||
15);
|
||||
}
|
||||
if (ExtraBeesHelper.isActive()) {
|
||||
for (String str : binnieMundane) {
|
||||
LogHelper.info("Registering " + str);
|
||||
try {
|
||||
beeMutationFactory.createMutation(
|
||||
species.getSpecies(),
|
||||
Allele.getExtraSpecies(str),
|
||||
ForestryHelper.getTemplateForestryForSpecies("Common"),
|
||||
15);
|
||||
} catch (Exception e) {
|
||||
LogHelper.info("Unable to register! This mutation will not be available.");
|
||||
}
|
||||
}
|
||||
}
|
||||
beeMutationFactory.createMutation(
|
||||
species.getSpecies(),
|
||||
Allele.getBaseSpecies("Common"),
|
||||
ForestryHelper.getTemplateForestryForSpecies("Cultivated"),
|
||||
12);
|
||||
beeMutationFactory.createMutation(
|
||||
species.getSpecies(),
|
||||
Allele.getBaseSpecies("Cultivated"),
|
||||
BeeSpecies.ELDRITCH.getGenome(),
|
||||
12);
|
||||
}
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Cultivated"),
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.ESOTERIC.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.ESOTERIC.getSpecies(),
|
||||
BeeSpecies.MYSTERIOUS.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ESOTERIC.getSpecies(),
|
||||
BeeSpecies.MYSTERIOUS.getSpecies(),
|
||||
BeeSpecies.ARCANE.getGenome(),
|
||||
8).addMutationCondition(
|
||||
new MoonPhaseMutationBonus(MoonPhase.WAXING_CRESCENT, MoonPhase.WAXING_GIBBOUS, 1.2f));
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Cultivated"),
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.CHARMED.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.CHARMED.getSpecies(),
|
||||
BeeSpecies.ENCHANTED.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.CHARMED.getSpecies(),
|
||||
BeeSpecies.ENCHANTED.getSpecies(),
|
||||
BeeSpecies.SUPERNATURAL.getGenome(),
|
||||
8).addMutationCondition(
|
||||
new MoonPhaseMutationBonus(MoonPhase.WANING_GIBBOUS, MoonPhase.WANING_CRESCENT, 1.2f));
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ARCANE.getSpecies(),
|
||||
BeeSpecies.SUPERNATURAL.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getGenome(),
|
||||
7);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SUPERNATURAL.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.WINDY.getGenome(),
|
||||
14).requireResource("treeLeaves");
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SUPERNATURAL.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.WATERY.getGenome(),
|
||||
14).requireResource(Blocks.water, 0);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SUPERNATURAL.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.EARTHY.getGenome(),
|
||||
14).requireResource(Blocks.brick_block, 0);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SUPERNATURAL.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.FIREY.getGenome(),
|
||||
14).requireResource(Blocks.lava, 0);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.ATTUNED.getSpecies(),
|
||||
BeeSpecies.AWARE.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.AWARE.getSpecies(),
|
||||
BeeSpecies.SPIRIT.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ATTUNED.getSpecies(),
|
||||
BeeSpecies.AWARE.getSpecies(),
|
||||
BeeSpecies.SPIRIT.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.AWARE.getSpecies(),
|
||||
BeeSpecies.SPIRIT.getSpecies(),
|
||||
BeeSpecies.SOUL.getGenome(),
|
||||
7);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Monastic"),
|
||||
BeeSpecies.ARCANE.getSpecies(),
|
||||
BeeSpecies.PUPIL.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ARCANE.getSpecies(),
|
||||
BeeSpecies.PUPIL.getSpecies(),
|
||||
BeeSpecies.SCHOLARLY.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.PUPIL.getSpecies(),
|
||||
BeeSpecies.SCHOLARLY.getSpecies(),
|
||||
BeeSpecies.SAVANT.getGenome(),
|
||||
6);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.TIMELY.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
BeeSpecies.TIMELY.getSpecies(),
|
||||
BeeSpecies.LORDLY.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TIMELY.getSpecies(),
|
||||
BeeSpecies.LORDLY.getSpecies(),
|
||||
BeeSpecies.DOCTORAL.getGenome(),
|
||||
7);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.HATEFUL.getGenome(),
|
||||
9).restrictBiomeType(BiomeDictionary.Type.NETHER);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.HATEFUL.getSpecies(),
|
||||
BeeSpecies.SPITEFUL.getGenome(),
|
||||
7).restrictBiomeType(BiomeDictionary.Type.NETHER);
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Demonic"),
|
||||
BeeSpecies.SPITEFUL.getSpecies(),
|
||||
BeeSpecies.WITHERING.getGenome(),
|
||||
6).restrictBiomeType(BiomeDictionary.Type.NETHER);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Modest"),
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.SKULKING.getGenome(),
|
||||
12);
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Tropical"),
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.SPIDERY.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.BATTY.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.GHASTLY.getGenome(),
|
||||
9);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.GHASTLY.getSpecies(),
|
||||
BeeSpecies.HATEFUL.getSpecies(),
|
||||
BeeSpecies.SMOULDERING.getGenome(),
|
||||
7).restrictBiomeType(BiomeDictionary.Type.NETHER);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.MYSTERIOUS.getSpecies(),
|
||||
BeeSpecies.BIGBAD.getGenome(),
|
||||
7).addMutationCondition(new MoonPhaseMutationRestriction(MoonPhase.FULL));
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Common"),
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.CHICKEN.getGenome(),
|
||||
12).restrictBiomeType(Type.FOREST);
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Common"),
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.BEEF.getGenome(),
|
||||
12).restrictBiomeType(Type.PLAINS);
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Common"),
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.PORK.getGenome(),
|
||||
12).restrictBiomeType(Type.MOUNTAIN);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.PORK.getSpecies(),
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.SHEEPISH.getGenome(),
|
||||
13).restrictBiomeType(Type.PLAINS);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.BEEF.getSpecies(),
|
||||
BeeSpecies.SHEEPISH.getSpecies(),
|
||||
BeeSpecies.HORSE.getGenome(),
|
||||
12).restrictBiomeType(Type.PLAINS);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.CHICKEN.getSpecies(),
|
||||
BeeSpecies.SPIDERY.getSpecies(),
|
||||
BeeSpecies.CATTY.getGenome(),
|
||||
15).restrictBiomeType(Type.JUNGLE);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.BATTY.getGenome(),
|
||||
9);
|
||||
if (ThaumcraftHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.PUPIL.getSpecies(),
|
||||
BeeSpecies.BRAINY.getGenome(),
|
||||
9);
|
||||
} else {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.MUTABLE.getSpecies(),
|
||||
BeeSpecies.BRAINY.getGenome(),
|
||||
14);
|
||||
}
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.OBLIVION.getSpecies(),
|
||||
BeeSpecies.NAMELESS.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.OBLIVION.getSpecies(),
|
||||
BeeSpecies.NAMELESS.getSpecies(),
|
||||
BeeSpecies.ABANDONED.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.NAMELESS.getSpecies(),
|
||||
BeeSpecies.ABANDONED.getSpecies(),
|
||||
BeeSpecies.FORLORN.getGenome(),
|
||||
6);
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
BeeSpecies.ABANDONED.getSpecies(),
|
||||
BeeSpecies.DRACONIC.getGenome(),
|
||||
6).restrictBiomeType(BiomeDictionary.Type.END);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.UNUSUAL.getSpecies(),
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
BeeSpecies.MUTABLE.getGenome(),
|
||||
12);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.UNUSUAL.getSpecies(),
|
||||
BeeSpecies.MUTABLE.getSpecies(),
|
||||
BeeSpecies.TRANSMUTING.getGenome(),
|
||||
9);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.UNUSUAL.getSpecies(),
|
||||
BeeSpecies.MUTABLE.getSpecies(),
|
||||
BeeSpecies.CRUMBLING.getGenome(),
|
||||
9);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.MYSTICAL.getSpecies(),
|
||||
BeeSpecies.MUTABLE.getSpecies(),
|
||||
BeeSpecies.INVISIBLE.getGenome(),
|
||||
15);
|
||||
|
||||
if (BeeSpecies.COPPER.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Industrious"),
|
||||
Allele.getBaseSpecies("Meadows"),
|
||||
BeeSpecies.COPPER.getGenome(),
|
||||
12).requireResource("blockCopper");
|
||||
}
|
||||
|
||||
if (BeeSpecies.TIN.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Industrious"),
|
||||
Allele.getBaseSpecies("Forest"),
|
||||
BeeSpecies.TIN.getGenome(),
|
||||
12).requireResource("blockTin");
|
||||
}
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Common"),
|
||||
Allele.getBaseSpecies("Industrious"),
|
||||
BeeSpecies.IRON.getGenome(),
|
||||
12).requireResource(Blocks.iron_block, 0);
|
||||
|
||||
if (BeeSpecies.LEAD.isActive()) {
|
||||
baseA = (BeeSpecies.TIN.isActive()) ? BeeSpecies.TIN.getSpecies()
|
||||
: (BeeSpecies.COPPER.isActive()) ? BeeSpecies.COPPER.getSpecies() : BeeSpecies.IRON.getSpecies();
|
||||
mutation = beeMutationFactory
|
||||
.createMutation(baseA, Allele.getBaseSpecies("Common"), BeeSpecies.LEAD.getGenome(), 10);
|
||||
if (OreDictionary.getOres("blockLead").size() > 0) {
|
||||
mutation.requireResource("blockLead");
|
||||
}
|
||||
}
|
||||
|
||||
if (BeeSpecies.SILVER.isActive()) {
|
||||
mutation = beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
Allele.getBaseSpecies("Modest"),
|
||||
BeeSpecies.SILVER.getGenome(),
|
||||
8);
|
||||
if (OreDictionary.getOres("blockSilver").size() > 0) {
|
||||
mutation.requireResource("blockSilver");
|
||||
}
|
||||
}
|
||||
|
||||
baseA = (BeeSpecies.EE_MINIUM.isActive()) ? BeeSpecies.EE_MINIUM.getSpecies()
|
||||
: Allele.getBaseSpecies("Imperial");
|
||||
baseB = (BeeSpecies.LEAD.isActive()) ? BeeSpecies.LEAD.getSpecies() : BeeSpecies.IRON.getSpecies();
|
||||
beeMutationFactory.createMutation(baseA, baseB, BeeSpecies.GOLD.getGenome(), 8)
|
||||
.requireResource(Blocks.gold_block, 0);
|
||||
|
||||
if (BeeSpecies.ALUMINUM.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Industrious"),
|
||||
Allele.getBaseSpecies("Cultivated"),
|
||||
BeeSpecies.ALUMINUM.getGenome(),
|
||||
10).requireResource("blockAluminum");
|
||||
}
|
||||
|
||||
if (BeeSpecies.ARDITE.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Industrious"),
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.ARDITE.getGenome(),
|
||||
9).requireResource("blockArdite");
|
||||
}
|
||||
|
||||
if (BeeSpecies.COBALT.isActive()) {
|
||||
boolean hasTConCobalt = OreDictionary.getOres("nuggetCobalt").size() > 0
|
||||
&& OreDictionary.getOres("blockCobalt").size() > 0;
|
||||
boolean hasNaturalCobalt = OreDictionary.getOres("nuggetNaturalCobalt").size() > 0
|
||||
&& OreDictionary.getOres("blockNaturalCobalt").size() > 0;
|
||||
if (hasTConCobalt) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.COBALT.getGenome(),
|
||||
11).requireResource("blockCobalt");
|
||||
}
|
||||
if (hasNaturalCobalt) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.COBALT.getGenome(),
|
||||
11).requireResource("blockNaturalCobalt");
|
||||
}
|
||||
if (!(hasTConCobalt || hasNaturalCobalt)) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Imperial"),
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.COBALT.getGenome(),
|
||||
7);
|
||||
}
|
||||
}
|
||||
|
||||
if (BeeSpecies.MANYULLYN.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ARDITE.getSpecies(),
|
||||
BeeSpecies.COBALT.getSpecies(),
|
||||
BeeSpecies.MANYULLYN.getGenome(),
|
||||
9).requireResource("blockManyullyn");
|
||||
}
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Austere"),
|
||||
BeeSpecies.GOLD.getSpecies(),
|
||||
BeeSpecies.DIAMOND.getGenome(),
|
||||
7).requireResource("blockDiamond");
|
||||
baseA = (BeeSpecies.SILVER.isActive()) ? BeeSpecies.SILVER.getSpecies() : Allele.getBaseSpecies("Imperial");
|
||||
beeMutationFactory.createMutation(Allele.getBaseSpecies("Austere"), baseA, BeeSpecies.EMERALD.getGenome(), 6)
|
||||
.requireResource("blockEmerald");
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Rural"),
|
||||
BeeSpecies.COPPER.getSpecies(),
|
||||
BeeSpecies.APATITE.getGenome(),
|
||||
12).requireResource("blockApatite");
|
||||
|
||||
if (BeeSpecies.SILICON.isActive()) {
|
||||
baseA = (BeeSpecies.AE_SKYSTONE.isActive()) ? BeeSpecies.AE_SKYSTONE.getSpecies()
|
||||
: BeeSpecies.EARTHY.getSpecies();
|
||||
beeMutationFactory.createMutation(baseA, BeeSpecies.IRON.getSpecies(), BeeSpecies.SILICON.getGenome(), 17);
|
||||
}
|
||||
|
||||
if (BeeSpecies.CERTUS.isActive()) {
|
||||
baseA = (BeeSpecies.SILICON.isActive()) ? BeeSpecies.SILICON.getSpecies() : BeeSpecies.IRON.getSpecies();
|
||||
baseB = (BeeSpecies.AE_SKYSTONE.isActive()) ? BeeSpecies.AE_SKYSTONE.getSpecies()
|
||||
: BeeSpecies.EARTHY.getSpecies();
|
||||
beeMutationFactory.createMutation(baseA, baseB, BeeSpecies.CERTUS.getGenome(), 13);
|
||||
}
|
||||
|
||||
if (BeeSpecies.FLUIX.isActive()) {
|
||||
if (BeeSpecies.CERTUS.isActive()) {
|
||||
baseA = BeeSpecies.CERTUS.getSpecies();
|
||||
} else if (BeeSpecies.SILICON.isActive()) {
|
||||
baseA = BeeSpecies.SILICON.getSpecies();
|
||||
} else {
|
||||
baseA = BeeSpecies.IRON.getSpecies();
|
||||
}
|
||||
baseB = (BeeSpecies.AE_SKYSTONE.isActive()) ? BeeSpecies.AE_SKYSTONE.getSpecies()
|
||||
: BeeSpecies.EARTHY.getSpecies();
|
||||
beeMutationFactory.createMutation(baseA, baseB, BeeSpecies.FLUIX.getGenome(), 17);
|
||||
}
|
||||
|
||||
if (ThaumcraftHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.TC_AIR.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.AIR.ordinal());
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.FIREY.getSpecies(),
|
||||
BeeSpecies.FIREY.getSpecies(),
|
||||
BeeSpecies.TC_FIRE.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.FIRE.ordinal());
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.WATERY.getSpecies(),
|
||||
BeeSpecies.WATERY.getSpecies(),
|
||||
BeeSpecies.TC_WATER.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.WATER.ordinal());
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.TC_EARTH.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.EARTH.ordinal());
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.ARCANE.getSpecies(),
|
||||
BeeSpecies.TC_ORDER.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.ORDER.ordinal());
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.SUPERNATURAL.getSpecies(),
|
||||
BeeSpecies.TC_CHAOS.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.CHAOS.ordinal());
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TC_ORDER.getSpecies(),
|
||||
BeeSpecies.TC_CHAOS.getSpecies(),
|
||||
BeeSpecies.TC_ESSENTIA.getGenome(),
|
||||
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.CHAOS.ordinal());
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.TC_VIS.getGenome(),
|
||||
9).addMutationCondition(
|
||||
new MoonPhaseMutationRestriction(MoonPhase.WAXING_HALF, MoonPhase.WANING_HALF));
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ATTUNED.getSpecies(),
|
||||
BeeSpecies.TC_VIS.getSpecies(),
|
||||
BeeSpecies.TC_REJUVENATING.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TC_VIS.getSpecies(),
|
||||
BeeSpecies.TC_REJUVENATING.getSpecies(),
|
||||
BeeSpecies.TC_EMPOWERING.getGenome(),
|
||||
6).addMutationCondition(new MoonPhaseMutationBonus(MoonPhase.FULL, 1.322f));
|
||||
beeMutationFactory
|
||||
.createMutation(
|
||||
BeeSpecies.TC_REJUVENATING.getSpecies(),
|
||||
BeeSpecies.TC_EMPOWERING.getSpecies(),
|
||||
BeeSpecies.TC_NEXUS.getGenome(),
|
||||
10)
|
||||
.restrictBiomeType(Type.MAGICAL)
|
||||
.requireResource(ThaumcraftHelper.airy, ThaumcraftHelper.AiryBlockType.NODE.ordinal());
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TRANSMUTING.getSpecies(),
|
||||
BeeSpecies.TC_EMPOWERING.getSpecies(),
|
||||
BeeSpecies.TC_TAINT.getGenome(),
|
||||
11).addMutationCondition(new MoonPhaseMutationRestriction(MoonPhase.NEW));
|
||||
beeMutationFactory
|
||||
.createMutation(
|
||||
BeeSpecies.TRANSMUTING.getSpecies(),
|
||||
BeeSpecies.TC_REJUVENATING.getSpecies(),
|
||||
BeeSpecies.TC_PURE.getGenome(),
|
||||
8)
|
||||
.restrictBiomeType(Type.MAGICAL)
|
||||
.addMutationCondition(new MoonPhaseMutationRestriction(MoonPhase.NEW));
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.BIGBAD.getSpecies(),
|
||||
BeeSpecies.TC_VIS.getSpecies(),
|
||||
BeeSpecies.TC_HUNGRY.getGenome(),
|
||||
20);
|
||||
|
||||
beeMutationFactory
|
||||
.createMutation(
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.GHASTLY.getSpecies(),
|
||||
BeeSpecies.TC_WISPY.getGenome(),
|
||||
9)
|
||||
.addMutationCondition(
|
||||
new MoonPhaseMutationRestriction(MoonPhase.WANING_CRESCENT, MoonPhase.WAXING_CRESCENT));
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.IRON.getSpecies(),
|
||||
BeeSpecies.TC_TAINT.getSpecies(),
|
||||
BeeSpecies.TC_VOID.getGenome(),
|
||||
5).restrictBiomeType(Type.MAGICAL).requireNight();
|
||||
}
|
||||
|
||||
if (ArsMagicaHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ARCANE.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.AM_ESSENCE.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ARCANE.getSpecies(),
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.AM_QUINTESSENCE.getGenome(),
|
||||
7);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.AM_AIR.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.AM_EARTH.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.FIREY.getSpecies(),
|
||||
BeeSpecies.AM_FIRE.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.WATERY.getSpecies(),
|
||||
BeeSpecies.AM_WATER.getGenome(),
|
||||
10);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.ETHEREAL.getSpecies(),
|
||||
BeeSpecies.AM_ARCANE.getGenome(),
|
||||
10);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.AM_AIR.getSpecies(),
|
||||
BeeSpecies.AM_LIGHTNING.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.AM_EARTH.getSpecies(),
|
||||
BeeSpecies.AM_PLANT.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.WATERY.getSpecies(),
|
||||
BeeSpecies.AM_WATER.getSpecies(),
|
||||
BeeSpecies.AM_ICE.getGenome(),
|
||||
8);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.AM_ESSENCE.getSpecies(),
|
||||
BeeSpecies.AM_VORTEX.getGenome(),
|
||||
8);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
BeeSpecies.GHASTLY.getSpecies(),
|
||||
BeeSpecies.AM_WIGHT.getGenome(),
|
||||
8);
|
||||
}
|
||||
|
||||
if (EquivalentExchangeHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
Allele.getBaseSpecies("Frugal"),
|
||||
BeeSpecies.MUTABLE.getSpecies(),
|
||||
BeeSpecies.EE_MINIUM.getGenome(),
|
||||
8);
|
||||
}
|
||||
|
||||
if (RedstoneArsenalHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_ELECTRUM.getSpecies(),
|
||||
BeeSpecies.TE_DESTABILIZED.getSpecies(),
|
||||
BeeSpecies.RSA_FLUXED.getGenome(),
|
||||
10).requireResource("blockElectrumFlux");
|
||||
}
|
||||
|
||||
if (ThermalModsHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TIN.getSpecies(),
|
||||
BeeSpecies.COPPER.getSpecies(),
|
||||
BeeSpecies.TE_BRONZE.getGenome(),
|
||||
12).requireResource("blockBronze");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.GOLD.getSpecies(),
|
||||
BeeSpecies.SILVER.getSpecies(),
|
||||
BeeSpecies.TE_ELECTRUM.getGenome(),
|
||||
10).requireResource("blockElectrum");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.IRON.getSpecies(),
|
||||
BeeSpecies.ESOTERIC.getSpecies(),
|
||||
BeeSpecies.TE_NICKEL.getGenome(),
|
||||
14).requireResource("blockNickel");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.IRON.getSpecies(),
|
||||
BeeSpecies.TE_NICKEL.getSpecies(),
|
||||
BeeSpecies.TE_INVAR.getGenome(),
|
||||
14).requireResource("blockInvar");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_NICKEL.getSpecies(),
|
||||
BeeSpecies.TE_INVAR.getSpecies(),
|
||||
BeeSpecies.TE_PLATINUM.getGenome(),
|
||||
10).requireResource("blockPlatinum");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TIN.getSpecies(),
|
||||
BeeSpecies.COPPER.getSpecies(),
|
||||
BeeSpecies.TE_BRONZE.getGenome(),
|
||||
12).requireResource("blockBronze");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SPITEFUL.getSpecies(),
|
||||
BeeSpecies.TIN.getSpecies(),
|
||||
BeeSpecies.TE_COAL.getGenome(),
|
||||
12).requireResource(Blocks.coal_ore, 0);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SPITEFUL.getSpecies(),
|
||||
Allele.getBaseSpecies("Industrious"),
|
||||
BeeSpecies.TE_DESTABILIZED.getGenome(),
|
||||
12).requireResource(Blocks.redstone_ore, 0);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SMOULDERING.getSpecies(),
|
||||
BeeSpecies.INFERNAL.getSpecies(),
|
||||
BeeSpecies.TE_LUX.getGenome(),
|
||||
12).requireResource(Blocks.glowstone, 0);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SMOULDERING.getSpecies(),
|
||||
Allele.getBaseSpecies("Austere"),
|
||||
BeeSpecies.TE_DANTE.getGenome(),
|
||||
12).restrictBiomeType(BiomeDictionary.Type.NETHER);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_DANTE.getSpecies(),
|
||||
BeeSpecies.TE_COAL.getSpecies(),
|
||||
BeeSpecies.TE_PYRO.getGenome(),
|
||||
8).restrictBiomeType(BiomeDictionary.Type.NETHER);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SKULKING.getSpecies(),
|
||||
Allele.getBaseSpecies("Wintry"),
|
||||
BeeSpecies.TE_BLIZZY.getGenome(),
|
||||
12);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_BLIZZY.getSpecies(),
|
||||
Allele.getBaseSpecies("Icy"),
|
||||
BeeSpecies.TE_GELID.getGenome(),
|
||||
8);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SMOULDERING.getSpecies(),
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.TE_SHOCKING.getGenome(),
|
||||
13);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_SHOCKING.getSpecies(),
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.TE_AMPED.getGenome(),
|
||||
8);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.SMOULDERING.getSpecies(),
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.TE_GROUNDED.getGenome(),
|
||||
12);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_GROUNDED.getSpecies(),
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.TE_ROCKING.getGenome(),
|
||||
9);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_PLATINUM.getSpecies(),
|
||||
BeeSpecies.OBLIVION.getSpecies(),
|
||||
BeeSpecies.TE_WINSOME.getGenome(),
|
||||
12);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TE_WINSOME.getSpecies(),
|
||||
BeeSpecies.TE_COAL.getSpecies(),
|
||||
BeeSpecies.TE_ENDEARING.getGenome(),
|
||||
8).requireResource("blockEnderium");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.COPPER.getSpecies(),
|
||||
BeeSpecies.TE_DESTABILIZED.getSpecies(),
|
||||
BeeSpecies.TE_SIGNALUS.getGenome(),
|
||||
8).requireResource("blockSignalum");
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.TIN.getSpecies(),
|
||||
BeeSpecies.TE_LUX.getSpecies(),
|
||||
BeeSpecies.TE_LUMIUS.getGenome(),
|
||||
8).requireResource("blockLumium");
|
||||
}
|
||||
|
||||
if (BotaniaHelper.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.ELDRITCH.getSpecies(),
|
||||
Allele.getBaseSpecies("Forest"),
|
||||
BeeSpecies.BOT_ROOTED.getGenome(),
|
||||
15).requireResource(BotaniaHelper.blockLivingWood, 0);
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.BOT_ROOTED.getSpecies(),
|
||||
BeeSpecies.WATERY.getSpecies(),
|
||||
BeeSpecies.BOT_SOMNOLENT.getGenome(),
|
||||
16).requireNight();
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.BOT_SOMNOLENT.getSpecies(),
|
||||
BeeSpecies.BOT_DREAMING.getGenome(),
|
||||
8).requireNight();
|
||||
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.BOT_BOTANIC.getSpecies(),
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.BOT_BLOSSOM.getGenome(),
|
||||
12);
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.BOT_BOTANIC.getSpecies(),
|
||||
BeeSpecies.BOT_BLOSSOM.getSpecies(),
|
||||
BeeSpecies.BOT_FLORAL.getGenome(),
|
||||
8);
|
||||
}
|
||||
|
||||
if (AppliedEnergisticsHelper.isActive()) {
|
||||
if (BeeSpecies.AE_SKYSTONE.isActive()) {
|
||||
beeMutationFactory.createMutation(
|
||||
BeeSpecies.EARTHY.getSpecies(),
|
||||
BeeSpecies.WINDY.getSpecies(),
|
||||
BeeSpecies.AE_SKYSTONE.getGenome(),
|
||||
20).requireResource(AppliedEnergisticsHelper.skystone, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,611 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import static magicbees.bees.BeeSpecies.ABANDONED;
|
||||
import static magicbees.bees.BeeSpecies.AE_SKYSTONE;
|
||||
import static magicbees.bees.BeeSpecies.ALUMINUM;
|
||||
import static magicbees.bees.BeeSpecies.AM_AIR;
|
||||
import static magicbees.bees.BeeSpecies.AM_ARCANE;
|
||||
import static magicbees.bees.BeeSpecies.AM_EARTH;
|
||||
import static magicbees.bees.BeeSpecies.AM_ESSENCE;
|
||||
import static magicbees.bees.BeeSpecies.AM_FIRE;
|
||||
import static magicbees.bees.BeeSpecies.AM_ICE;
|
||||
import static magicbees.bees.BeeSpecies.AM_LIGHTNING;
|
||||
import static magicbees.bees.BeeSpecies.AM_PLANT;
|
||||
import static magicbees.bees.BeeSpecies.AM_QUINTESSENCE;
|
||||
import static magicbees.bees.BeeSpecies.AM_VORTEX;
|
||||
import static magicbees.bees.BeeSpecies.AM_WATER;
|
||||
import static magicbees.bees.BeeSpecies.AM_WIGHT;
|
||||
import static magicbees.bees.BeeSpecies.APATITE;
|
||||
import static magicbees.bees.BeeSpecies.ARCANE;
|
||||
import static magicbees.bees.BeeSpecies.ARDITE;
|
||||
import static magicbees.bees.BeeSpecies.ATTUNED;
|
||||
import static magicbees.bees.BeeSpecies.AWARE;
|
||||
import static magicbees.bees.BeeSpecies.BATTY;
|
||||
import static magicbees.bees.BeeSpecies.BEEF;
|
||||
import static magicbees.bees.BeeSpecies.BIGBAD;
|
||||
import static magicbees.bees.BeeSpecies.BOT_ALFHEIM;
|
||||
import static magicbees.bees.BeeSpecies.BOT_BLOSSOM;
|
||||
import static magicbees.bees.BeeSpecies.BOT_BOTANIC;
|
||||
import static magicbees.bees.BeeSpecies.BOT_DREAMING;
|
||||
import static magicbees.bees.BeeSpecies.BOT_FLORAL;
|
||||
import static magicbees.bees.BeeSpecies.BOT_ROOTED;
|
||||
import static magicbees.bees.BeeSpecies.BOT_SOMNOLENT;
|
||||
import static magicbees.bees.BeeSpecies.BOT_VAZBEE;
|
||||
import static magicbees.bees.BeeSpecies.BRAINY;
|
||||
import static magicbees.bees.BeeSpecies.CATTY;
|
||||
import static magicbees.bees.BeeSpecies.CERTUS;
|
||||
import static magicbees.bees.BeeSpecies.CHARMED;
|
||||
import static magicbees.bees.BeeSpecies.CHICKEN;
|
||||
import static magicbees.bees.BeeSpecies.COBALT;
|
||||
import static magicbees.bees.BeeSpecies.COPPER;
|
||||
import static magicbees.bees.BeeSpecies.CRUMBLING;
|
||||
import static magicbees.bees.BeeSpecies.DIAMOND;
|
||||
import static magicbees.bees.BeeSpecies.DOCTORAL;
|
||||
import static magicbees.bees.BeeSpecies.DRACONIC;
|
||||
import static magicbees.bees.BeeSpecies.EARTHY;
|
||||
import static magicbees.bees.BeeSpecies.EE_MINIUM;
|
||||
import static magicbees.bees.BeeSpecies.ELDRITCH;
|
||||
import static magicbees.bees.BeeSpecies.EMERALD;
|
||||
import static magicbees.bees.BeeSpecies.ENCHANTED;
|
||||
import static magicbees.bees.BeeSpecies.ESOTERIC;
|
||||
import static magicbees.bees.BeeSpecies.ETHEREAL;
|
||||
import static magicbees.bees.BeeSpecies.FIREY;
|
||||
import static magicbees.bees.BeeSpecies.FLUIX;
|
||||
import static magicbees.bees.BeeSpecies.FORLORN;
|
||||
import static magicbees.bees.BeeSpecies.GHASTLY;
|
||||
import static magicbees.bees.BeeSpecies.GOLD;
|
||||
import static magicbees.bees.BeeSpecies.HATEFUL;
|
||||
import static magicbees.bees.BeeSpecies.HORSE;
|
||||
import static magicbees.bees.BeeSpecies.INFERNAL;
|
||||
import static magicbees.bees.BeeSpecies.INVISIBLE;
|
||||
import static magicbees.bees.BeeSpecies.IRON;
|
||||
import static magicbees.bees.BeeSpecies.LEAD;
|
||||
import static magicbees.bees.BeeSpecies.LORDLY;
|
||||
import static magicbees.bees.BeeSpecies.MANYULLYN;
|
||||
import static magicbees.bees.BeeSpecies.MUTABLE;
|
||||
import static magicbees.bees.BeeSpecies.MYSTERIOUS;
|
||||
import static magicbees.bees.BeeSpecies.MYSTICAL;
|
||||
import static magicbees.bees.BeeSpecies.NAMELESS;
|
||||
import static magicbees.bees.BeeSpecies.OBLIVION;
|
||||
import static magicbees.bees.BeeSpecies.PORK;
|
||||
import static magicbees.bees.BeeSpecies.PUPIL;
|
||||
import static magicbees.bees.BeeSpecies.RSA_FLUXED;
|
||||
import static magicbees.bees.BeeSpecies.SAVANT;
|
||||
import static magicbees.bees.BeeSpecies.SCHOLARLY;
|
||||
import static magicbees.bees.BeeSpecies.SHEEPISH;
|
||||
import static magicbees.bees.BeeSpecies.SILICON;
|
||||
import static magicbees.bees.BeeSpecies.SILVER;
|
||||
import static magicbees.bees.BeeSpecies.SKULKING;
|
||||
import static magicbees.bees.BeeSpecies.SMOULDERING;
|
||||
import static magicbees.bees.BeeSpecies.SORCEROUS;
|
||||
import static magicbees.bees.BeeSpecies.SOUL;
|
||||
import static magicbees.bees.BeeSpecies.SPIDERY;
|
||||
import static magicbees.bees.BeeSpecies.SPIRIT;
|
||||
import static magicbees.bees.BeeSpecies.SPITEFUL;
|
||||
import static magicbees.bees.BeeSpecies.SUPERNATURAL;
|
||||
import static magicbees.bees.BeeSpecies.TC_AIR;
|
||||
import static magicbees.bees.BeeSpecies.TC_CHAOS;
|
||||
import static magicbees.bees.BeeSpecies.TC_EARTH;
|
||||
import static magicbees.bees.BeeSpecies.TC_EMPOWERING;
|
||||
import static magicbees.bees.BeeSpecies.TC_FIRE;
|
||||
import static magicbees.bees.BeeSpecies.TC_HUNGRY;
|
||||
import static magicbees.bees.BeeSpecies.TC_NEXUS;
|
||||
import static magicbees.bees.BeeSpecies.TC_ORDER;
|
||||
import static magicbees.bees.BeeSpecies.TC_PURE;
|
||||
import static magicbees.bees.BeeSpecies.TC_REJUVENATING;
|
||||
import static magicbees.bees.BeeSpecies.TC_TAINT;
|
||||
import static magicbees.bees.BeeSpecies.TC_VIS;
|
||||
import static magicbees.bees.BeeSpecies.TC_VOID;
|
||||
import static magicbees.bees.BeeSpecies.TC_WATER;
|
||||
import static magicbees.bees.BeeSpecies.TC_WISPY;
|
||||
import static magicbees.bees.BeeSpecies.TE_AMPED;
|
||||
import static magicbees.bees.BeeSpecies.TE_BLIZZY;
|
||||
import static magicbees.bees.BeeSpecies.TE_BRONZE;
|
||||
import static magicbees.bees.BeeSpecies.TE_COAL;
|
||||
import static magicbees.bees.BeeSpecies.TE_DANTE;
|
||||
import static magicbees.bees.BeeSpecies.TE_DESTABILIZED;
|
||||
import static magicbees.bees.BeeSpecies.TE_ELECTRUM;
|
||||
import static magicbees.bees.BeeSpecies.TE_ENDEARING;
|
||||
import static magicbees.bees.BeeSpecies.TE_GELID;
|
||||
import static magicbees.bees.BeeSpecies.TE_GROUNDED;
|
||||
import static magicbees.bees.BeeSpecies.TE_INVAR;
|
||||
import static magicbees.bees.BeeSpecies.TE_LUMIUS;
|
||||
import static magicbees.bees.BeeSpecies.TE_LUX;
|
||||
import static magicbees.bees.BeeSpecies.TE_NICKEL;
|
||||
import static magicbees.bees.BeeSpecies.TE_PLATINUM;
|
||||
import static magicbees.bees.BeeSpecies.TE_PYRO;
|
||||
import static magicbees.bees.BeeSpecies.TE_ROCKING;
|
||||
import static magicbees.bees.BeeSpecies.TE_SHOCKING;
|
||||
import static magicbees.bees.BeeSpecies.TE_SIGNALUS;
|
||||
import static magicbees.bees.BeeSpecies.TE_WINSOME;
|
||||
import static magicbees.bees.BeeSpecies.TIMELY;
|
||||
import static magicbees.bees.BeeSpecies.TIN;
|
||||
import static magicbees.bees.BeeSpecies.TRANSMUTING;
|
||||
import static magicbees.bees.BeeSpecies.UNUSUAL;
|
||||
import static magicbees.bees.BeeSpecies.WATERY;
|
||||
import static magicbees.bees.BeeSpecies.WINDY;
|
||||
import static magicbees.bees.BeeSpecies.WITHERING;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import gregtech.api.enums.Materials;
|
||||
import magicbees.item.types.CombType;
|
||||
import magicbees.item.types.DropType;
|
||||
import magicbees.item.types.NuggetType;
|
||||
import magicbees.item.types.PollenType;
|
||||
import magicbees.item.types.PropolisType;
|
||||
import magicbees.item.types.ResourceType;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.LogHelper;
|
||||
import magicbees.main.utils.compat.AppliedEnergisticsHelper;
|
||||
import magicbees.main.utils.compat.ArsMagicaHelper;
|
||||
import magicbees.main.utils.compat.BotaniaHelper;
|
||||
import magicbees.main.utils.compat.BotaniaHelper.PastureSeed;
|
||||
import magicbees.main.utils.compat.EquivalentExchangeHelper;
|
||||
import magicbees.main.utils.compat.ForestryHelper;
|
||||
import magicbees.main.utils.compat.RedstoneArsenalHelper;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
import magicbees.main.utils.compat.ThermalModsHelper;
|
||||
|
||||
public class BeeProductHelper {
|
||||
|
||||
public static void initBaseProducts() {
|
||||
MYSTICAL.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
|
||||
SORCEROUS.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
|
||||
UNUSUAL.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
|
||||
ATTUNED.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
|
||||
ELDRITCH.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
|
||||
|
||||
ESOTERIC.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.18f);
|
||||
MYSTERIOUS.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.20f);
|
||||
ARCANE.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.25f)
|
||||
.addSpecialty(Config.drops.getStackForType(DropType.ENCHANTED, 1), 0.09f);
|
||||
|
||||
CHARMED.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.18f);
|
||||
ENCHANTED.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.20f);
|
||||
SUPERNATURAL.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.25f)
|
||||
.addSpecialty(Config.pollen.getStackForType(PollenType.UNUSUAL), 0.08f);
|
||||
|
||||
ETHEREAL.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.10f);
|
||||
|
||||
WINDY.addProduct(Config.combs.getStackForType(CombType.AIRY), 0.25f);
|
||||
FIREY.addProduct(Config.combs.getStackForType(CombType.FIREY), 0.25f);
|
||||
EARTHY.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.25f);
|
||||
WATERY.addProduct(Config.combs.getStackForType(CombType.WATERY), 0.25f)
|
||||
.addSpecialty(new ItemStack(Blocks.ice), 0.025f);
|
||||
|
||||
PUPIL.addProduct(Config.combs.getStackForType(CombType.PAPERY), 0.20f);
|
||||
SCHOLARLY.addProduct(Config.combs.getStackForType(CombType.PAPERY), 0.25f);
|
||||
SAVANT.addProduct(Config.combs.getStackForType(CombType.PAPERY), 0.40f);
|
||||
|
||||
AWARE.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.18f);
|
||||
SPIRIT.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.22f)
|
||||
.addSpecialty(Config.combs.getStackForType(CombType.SOUL), 0.16f);
|
||||
SOUL.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.28f)
|
||||
.addSpecialty(Config.combs.getStackForType(CombType.SOUL), 0.20f);
|
||||
|
||||
SKULKING.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f);
|
||||
GHASTLY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.08f)
|
||||
.addSpecialty(new ItemStack(Items.ghast_tear), 0.099f);
|
||||
SPIDERY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.13f)
|
||||
.addProduct(new ItemStack(Items.string), 0.08f).addSpecialty(new ItemStack(Items.spider_eye), 0.08f);
|
||||
SMOULDERING.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.blaze_rod), 0.05f);
|
||||
BRAINY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addProduct(new ItemStack(Items.rotten_flesh), 0.06f);
|
||||
BIGBAD.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.18f)
|
||||
.addProduct(new ItemStack(Items.beef), 0.12f).addProduct(new ItemStack(Items.chicken), 0.12f)
|
||||
.addSpecialty(new ItemStack(Items.melon), 0.20f);
|
||||
BATTY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.string), 0.20f);
|
||||
CHICKEN.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.23f)
|
||||
.addSpecialty(new ItemStack(Items.feather), 0.08f).addSpecialty(new ItemStack(Items.egg), 0.08f);
|
||||
BEEF.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
|
||||
.addSpecialty(new ItemStack(Items.leather), 0.165f);
|
||||
PORK.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.carrot), 0.165f);
|
||||
SHEEPISH.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
|
||||
.addSpecialty(new ItemStack(Blocks.wool), 0.16f).addSpecialty(new ItemStack(Items.wheat), 0.24f);
|
||||
HORSE.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
|
||||
.addSpecialty(new ItemStack(Items.leather), 0.24f).addSpecialty(new ItemStack(Items.apple), 0.38f);
|
||||
CATTY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
|
||||
.addSpecialty(new ItemStack(Items.fish), 0.24f);
|
||||
|
||||
TIMELY.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.16f);
|
||||
LORDLY.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.19f);
|
||||
DOCTORAL.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.24f)
|
||||
.addSpecialty(new ItemStack(Config.jellyBaby), 0.078f);
|
||||
|
||||
INFERNAL.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.12f);
|
||||
HATEFUL.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.18f);
|
||||
SPITEFUL.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.24f);
|
||||
WITHERING.addSpecialty(Config.miscResources.getStackForType(ResourceType.SKULL_CHIP), 0.15f);
|
||||
|
||||
OBLIVION.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.14f);
|
||||
NAMELESS.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.19f);
|
||||
ABANDONED.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.24f);
|
||||
FORLORN.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.30f);
|
||||
DRACONIC.addSpecialty(Config.miscResources.getStackForType(ResourceType.DRAGON_DUST), 0.15f);
|
||||
|
||||
IRON.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addSpecialty(Config.nuggets.getStackForType(NuggetType.IRON), 0.18f);
|
||||
GOLD.addProduct(ForestryHelper.itemHoneycomb, 0.10f).addSpecialty(new ItemStack(Items.gold_nugget, 1), 0.16f);
|
||||
DIAMOND.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addSpecialty(Config.nuggets.getStackForType(NuggetType.DIAMOND), 0.06f);
|
||||
EMERALD.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addSpecialty(Config.nuggets.getStackForType(NuggetType.EMERALD), 0.04f);
|
||||
COPPER.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addSpecialty(Config.nuggets.getStackForType(NuggetType.COPPER), 0.20f);
|
||||
TIN.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addSpecialty(Config.nuggets.getStackForType(NuggetType.TIN), 0.20f);
|
||||
APATITE.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addSpecialty(Config.nuggets.getStackForType(NuggetType.APATITE), 0.10f);
|
||||
|
||||
MUTABLE.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 0.30f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.10f);
|
||||
TRANSMUTING.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.30f)
|
||||
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.SILKY.ordinal()), 0.05f)
|
||||
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.SIMMERING.ordinal()), 0.05f);
|
||||
CRUMBLING.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.30f)
|
||||
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.POWDERY.ordinal()), 0.10f)
|
||||
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.COCOA.ordinal()), 0.15f);
|
||||
|
||||
INVISIBLE.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.35f);
|
||||
}
|
||||
|
||||
public static void initOreDictSProducts() {
|
||||
boolean isGTNHCoreModLoaded = Config.isGTNHCoreModLoaded;
|
||||
SILVER.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetSilver").size() > 0) {
|
||||
SILVER.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Silver.getNuggets(1) : OreDictionary.getOres("nuggetSilver").get(0),
|
||||
0.16f);
|
||||
} else {
|
||||
SILVER.setInactive();
|
||||
}
|
||||
|
||||
LEAD.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetLead").size() > 0) {
|
||||
LEAD.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Lead.getNuggets(1) : OreDictionary.getOres("nuggetLead").get(0),
|
||||
0.17f);
|
||||
} else {
|
||||
LEAD.setInactive();
|
||||
}
|
||||
|
||||
// Oil berry alu bee
|
||||
ALUMINUM.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetAluminum").size() > 0) {
|
||||
ALUMINUM.addSpecialty(OreDictionary.getOres("nuggetAluminum").get(0), 0.20f);
|
||||
} else {
|
||||
ALUMINUM.setInactive();
|
||||
}
|
||||
|
||||
TE_PLATINUM.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetPlatinum").size() > 0) {
|
||||
TE_PLATINUM.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Platinum.getNuggets(1)
|
||||
: OreDictionary.getOres("nuggetPlatinum").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
TE_PLATINUM.setInactive();
|
||||
}
|
||||
|
||||
TE_NICKEL.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetNickel").size() > 0) {
|
||||
TE_NICKEL.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Nickel.getNuggets(1) : OreDictionary.getOres("nuggetNickel").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
TE_NICKEL.setInactive();
|
||||
}
|
||||
|
||||
ARDITE.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetArdite").size() > 0) {
|
||||
ARDITE.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Ardite.getNuggets(1) : OreDictionary.getOres("nuggetArdite").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
ARDITE.setInactive();
|
||||
}
|
||||
|
||||
COBALT.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetCobalt").size() > 0) {
|
||||
COBALT.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Cobalt.getNuggets(1) : OreDictionary.getOres("nuggetCobalt").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
COBALT.setInactive();
|
||||
}
|
||||
|
||||
TE_BRONZE.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetBronze").size() > 0) {
|
||||
TE_BRONZE.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Bronze.getNuggets(1) : OreDictionary.getOres("nuggetBronze").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
TE_BRONZE.setInactive();
|
||||
}
|
||||
|
||||
TE_INVAR.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetInvar").size() > 0) {
|
||||
TE_INVAR.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Invar.getNuggets(1) : OreDictionary.getOres("nuggetInvar").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
TE_INVAR.setInactive();
|
||||
}
|
||||
|
||||
TE_ELECTRUM.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetElectrum").size() > 0) {
|
||||
TE_ELECTRUM.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Electrum.getNuggets(1)
|
||||
: OreDictionary.getOres("nuggetElectrum").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
TE_ELECTRUM.setInactive();
|
||||
}
|
||||
|
||||
MANYULLYN.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("nuggetManyullyn").size() > 0) {
|
||||
MANYULLYN.addSpecialty(
|
||||
isGTNHCoreModLoaded ? Materials.Manyullyn.getNuggets(1)
|
||||
: OreDictionary.getOres("nuggetManyullyn").get(0),
|
||||
0.18f);
|
||||
} else {
|
||||
MANYULLYN.setInactive();
|
||||
}
|
||||
|
||||
CERTUS.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("crystalCertusQuartz").size() > 0) {
|
||||
CERTUS.addSpecialty(OreDictionary.getOres("crystalCertusQuartz").get(0), 0.08f);
|
||||
} else {
|
||||
CERTUS.setInactive();
|
||||
}
|
||||
|
||||
SILICON.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("dustSilicon").size() > 0) {
|
||||
SILICON.addSpecialty(OreDictionary.getOres("dustSilicon").get(0), 0.30f);
|
||||
} else {
|
||||
SILICON.setInactive();
|
||||
}
|
||||
|
||||
FLUIX.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
if (OreDictionary.getOres("crystalFluix").size() > 0) {
|
||||
FLUIX.addSpecialty(OreDictionary.getOres("crystalFluix").get(0), 0.06f);
|
||||
} else {
|
||||
FLUIX.setInactive();
|
||||
}
|
||||
}
|
||||
|
||||
public static void initThaumcraftProducts() {
|
||||
TC_AIR.addProduct(Config.combs.getStackForType(CombType.TC_AIR), 0.20f);
|
||||
TC_FIRE.addProduct(Config.combs.getStackForType(CombType.TC_FIRE), 0.20f);
|
||||
TC_WATER.addProduct(Config.combs.getStackForType(CombType.TC_WATER), 0.20f);
|
||||
TC_EARTH.addProduct(Config.combs.getStackForType(CombType.TC_EARTH), 0.20f);
|
||||
TC_ORDER.addProduct(Config.combs.getStackForType(CombType.TC_ORDER), 0.20f);
|
||||
TC_CHAOS.addProduct(Config.combs.getStackForType(CombType.TC_CHAOS), 0.20f);
|
||||
|
||||
TC_VIS.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.10f);
|
||||
TC_REJUVENATING.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.18f);
|
||||
TC_EMPOWERING.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.14f);
|
||||
TC_EMPOWERING.addSpecialty(
|
||||
new ItemStack(ForestryHelper.pollen, 1, ForestryHelper.Pollen.CRYSTALLINE.ordinal()),
|
||||
0.02f);
|
||||
TC_NEXUS.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.25f);
|
||||
TC_NEXUS.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.12f);
|
||||
TC_NEXUS.addSpecialty(
|
||||
new ItemStack(ForestryHelper.pollen, 1, ForestryHelper.Pollen.CRYSTALLINE.ordinal()),
|
||||
0.02f);
|
||||
TC_TAINT.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.18f);
|
||||
TC_TAINT.addProduct(
|
||||
new ItemStack(ForestryHelper.craftingResource, 1, ForestryHelper.Propolis.STICKY.ordinal()),
|
||||
0.213f);
|
||||
TC_PURE.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.16f);
|
||||
TC_PURE.addSpecialty(Config.combs.getStackForType(CombType.SOUL), 0.19f);
|
||||
TC_HUNGRY.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.28f);
|
||||
TC_HUNGRY.addSpecialty(Config.combs.getStackForType(CombType.TEMPORAL), 0.195f);
|
||||
TC_WISPY.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.SILKY.ordinal()), 0.22f)
|
||||
.addSpecialty(
|
||||
new ItemStack(
|
||||
ForestryHelper.craftingResource,
|
||||
1,
|
||||
ForestryHelper.CraftingMaterial.SILK_WISP.ordinal()),
|
||||
0.04f);
|
||||
TC_VOID.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
|
||||
if (ThaumcraftHelper.isActive()) {
|
||||
SCHOLARLY.addSpecialty(Config.miscResources.getStackForType(ResourceType.LORE_FRAGMENT), 0.02f);
|
||||
SAVANT.addSpecialty(Config.miscResources.getStackForType(ResourceType.LORE_FRAGMENT), 0.05f);
|
||||
|
||||
TC_AIR.addSpecialty(Config.propolis.getStackForType(PropolisType.AIR), 0.18f);
|
||||
TC_FIRE.addSpecialty(Config.propolis.getStackForType(PropolisType.FIRE), 0.18f);
|
||||
TC_WATER.addSpecialty(Config.propolis.getStackForType(PropolisType.WATER), 0.18f);
|
||||
TC_EARTH.addSpecialty(Config.propolis.getStackForType(PropolisType.EARTH), 0.18f);
|
||||
TC_ORDER.addSpecialty(Config.propolis.getStackForType(PropolisType.ORDER), 0.18f);
|
||||
TC_CHAOS.addSpecialty(Config.propolis.getStackForType(PropolisType.CHAOS), 0.18f);
|
||||
|
||||
BATTY.addSpecialty(new ItemStack(Items.gunpowder), 0.04f);
|
||||
BRAINY.addSpecialty(new ItemStack(ThaumcraftHelper.zombieBrain, 1), 0.02f);
|
||||
CHICKEN.addSpecialty(new ItemStack(ThaumcraftHelper.nuggetChicken, 1), 0.09f);
|
||||
BEEF.addSpecialty(new ItemStack(ThaumcraftHelper.nuggetBeef, 1), 0.09f);
|
||||
PORK.addSpecialty(new ItemStack(ThaumcraftHelper.nuggetPork, 1), 0.09f);
|
||||
TC_VOID.addSpecialty(
|
||||
new ItemStack(ThaumcraftHelper.nuggetMetal, 1, ThaumcraftHelper.NuggetType.VOID_METAL.ordinal()),
|
||||
0.155f);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initEquivalentExchange3Species() {
|
||||
EE_MINIUM.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.16f);
|
||||
|
||||
if (EquivalentExchangeHelper.isActive()) {
|
||||
EE_MINIUM.addSpecialty(new ItemStack(EquivalentExchangeHelper.minuimShard), 0.06f);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initArsMagicaSpecies() {
|
||||
AM_ESSENCE.addProduct(Config.combs.getStackForType(CombType.AM_ESSENCE), 0.12f);
|
||||
AM_QUINTESSENCE.addProduct(Config.combs.getStackForType(CombType.AM_ESSENCE), 0.23f);
|
||||
AM_EARTH.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_AIR.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_FIRE.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_WATER.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_LIGHTNING.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_PLANT.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_ICE.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
|
||||
AM_ARCANE.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.19f);
|
||||
AM_VORTEX.addProduct(Config.combs.getStackForType(CombType.AM_ESSENCE), 0.10f);
|
||||
AM_WIGHT.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.30f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f);
|
||||
|
||||
if (ArsMagicaHelper.isActive()) {
|
||||
AM_QUINTESSENCE.addSpecialty(
|
||||
new ItemStack(
|
||||
ArsMagicaHelper.itemResource,
|
||||
1,
|
||||
ArsMagicaHelper.ResourceType.ARCANE_COMPOUND.ordinal()),
|
||||
0.05f);
|
||||
AM_EARTH.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.EARTH.ordinal()),
|
||||
0.07f);
|
||||
AM_AIR.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.AIR.ordinal()),
|
||||
0.07f);
|
||||
AM_FIRE.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.FIRE.ordinal()),
|
||||
0.07f);
|
||||
AM_WATER.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.WATER.ordinal()),
|
||||
0.07f);
|
||||
AM_LIGHTNING.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.LIGHTNING.ordinal()),
|
||||
0.07f);
|
||||
AM_PLANT.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.PLANT.ordinal()),
|
||||
0.07f);
|
||||
AM_ICE.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.ICE.ordinal()),
|
||||
0.07f);
|
||||
AM_ARCANE.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.ARCANE.ordinal()),
|
||||
0.11f);
|
||||
AM_VORTEX.addSpecialty(
|
||||
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.EARTH.ordinal()),
|
||||
0.15f);
|
||||
AM_WIGHT.addSpecialty(
|
||||
new ItemStack(
|
||||
ArsMagicaHelper.itemResource,
|
||||
1,
|
||||
ArsMagicaHelper.ResourceType.ARCANE_COMPOUND.ordinal()),
|
||||
0.11f);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initThermalExpansionProducts() {
|
||||
TE_DANTE.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.blaze_powder), 0.05f);
|
||||
TE_PYRO.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.blaze_powder), 0.05f);
|
||||
TE_DESTABILIZED.addProduct(Config.combs.getStackForType(CombType.TE_DESTABILIZED), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.redstone), 0.05f);
|
||||
TE_LUX.addProduct(Config.combs.getStackForType(CombType.TE_LUX), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f)
|
||||
.addSpecialty(new ItemStack(Items.glowstone_dust), 0.05f);
|
||||
TE_WINSOME.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TE_ENDEARING), 0.05f)
|
||||
.addSpecialty(new ItemStack(Items.ender_pearl), 0.05f);
|
||||
TE_ENDEARING
|
||||
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TE_ENDEARING), 0.05f);
|
||||
TE_COAL.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TE_CARBON), 0.05f)
|
||||
.addSpecialty(new ItemStack(Items.coal), 0.05f);
|
||||
TE_BLIZZY.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.FROZEN.ordinal()), 0.10f);
|
||||
TE_GELID.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.FROZEN.ordinal()), 0.10f);
|
||||
TE_SHOCKING.addProduct(Config.combs.getStackForType(CombType.AIRY), 0.16f);
|
||||
TE_AMPED.addProduct(Config.combs.getStackForType(CombType.AIRY), 0.29f);
|
||||
TE_GROUNDED.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.16f);
|
||||
TE_ROCKING.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.29f);
|
||||
|
||||
TE_SIGNALUS.addProduct(Config.combs.getStackForType(CombType.TE_DESTABILIZED), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f);
|
||||
TE_LUMIUS.addProduct(Config.combs.getStackForType(CombType.TE_LUX), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f);
|
||||
|
||||
if (ThermalModsHelper.isActive()) {
|
||||
LogHelper.info("Thermal Expansion bees active");
|
||||
TE_BLIZZY.addSpecialty(ThermalModsHelper.dustBlizz, 0.09f);
|
||||
TE_GELID.addSpecialty(ThermalModsHelper.dustCryotheum, 0.09f);
|
||||
TE_DANTE.addSpecialty(ThermalModsHelper.dustSulfur, 0.09f);
|
||||
TE_PYRO.addSpecialty(ThermalModsHelper.dustPyrotheum, 0.09f);
|
||||
TE_SHOCKING.addSpecialty(ThermalModsHelper.dustBlitz, 0.09f);
|
||||
TE_AMPED.addSpecialty(ThermalModsHelper.dustAerotheum, 0.09f);
|
||||
TE_GROUNDED.addSpecialty(ThermalModsHelper.dustBasalz, 0.09f);
|
||||
TE_ROCKING.addSpecialty(ThermalModsHelper.dustPetrotheum, 0.09f);
|
||||
TE_WINSOME.addSpecialty(ThermalModsHelper.dustPlatinum, 0.09f);
|
||||
TE_ENDEARING.addSpecialty(ThermalModsHelper.enderiumNugget, 0.09f);
|
||||
TE_SIGNALUS.addSpecialty(ThermalModsHelper.signalumNugget, 0.09f);
|
||||
TE_LUMIUS.addSpecialty(ThermalModsHelper.lumiumNugget, 0.09f);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initRedstoneArsenelProducts() {
|
||||
RSA_FLUXED.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
|
||||
|
||||
if (RedstoneArsenalHelper.isActive()) {
|
||||
RSA_FLUXED.addSpecialty(RedstoneArsenalHelper.fluxNugget, 0.09f);
|
||||
}
|
||||
}
|
||||
|
||||
public static void initBotaniaProducts() {
|
||||
BOT_ROOTED.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.10f);
|
||||
BOT_BOTANIC.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.10f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.05f);
|
||||
BOT_BLOSSOM.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.20f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.05f);
|
||||
BOT_FLORAL.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.25f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.05f);
|
||||
BOT_VAZBEE.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.05f)
|
||||
.addProduct(new ItemStack(Items.dye, 1, 9), 0.20f).addProduct(new ItemStack(Blocks.wool, 1, 9), 0.02f)
|
||||
.addProduct(new ItemStack(Blocks.red_flower, 1, 7), 0.06f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.15f);
|
||||
BOT_SOMNOLENT.addProduct(Config.combs.getStackForType(CombType.WATERY), 0.08f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.15f);
|
||||
BOT_DREAMING.addProduct(Config.combs.getStackForType(CombType.WATERY), 0.16f)
|
||||
.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.33f);
|
||||
BOT_ALFHEIM.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.28f);
|
||||
|
||||
if (BotaniaHelper.isActive()) {
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
ItemStack petal = new ItemStack(BotaniaHelper.itemPetal, 1, i);
|
||||
BOT_BOTANIC.addSpecialty(petal, 0.01f);
|
||||
BOT_BLOSSOM.addSpecialty(petal, 0.04f);
|
||||
BOT_FLORAL.addSpecialty(petal, 0.16f);
|
||||
}
|
||||
|
||||
for (PastureSeed type : PastureSeed.values()) {
|
||||
BOT_VAZBEE.addSpecialty(new ItemStack(BotaniaHelper.itemPastureSeed, 1, type.ordinal()), 0.04f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void initAppEngProducts() {
|
||||
AE_SKYSTONE.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.19f);
|
||||
if (AppliedEnergisticsHelper.skystone != null) {
|
||||
AE_SKYSTONE.addSpecialty(new ItemStack(AppliedEnergisticsHelper.skystone), 0.02f);
|
||||
} else {
|
||||
AE_SKYSTONE.setInactive();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,788 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.apiculture.EnumBeeChromosome;
|
||||
import forestry.api.apiculture.EnumBeeType;
|
||||
import forestry.api.apiculture.IAlleleBeeSpecies;
|
||||
import forestry.api.apiculture.IAlleleBeeSpeciesCustom;
|
||||
import forestry.api.apiculture.IBeeFactory;
|
||||
import forestry.api.apiculture.IBeeIconColourProvider;
|
||||
import forestry.api.apiculture.IBeeIconProvider;
|
||||
import forestry.api.core.EnumHumidity;
|
||||
import forestry.api.core.EnumTemperature;
|
||||
import forestry.api.genetics.AlleleManager;
|
||||
import forestry.api.genetics.EnumTolerance;
|
||||
import forestry.api.genetics.IAllele;
|
||||
import forestry.api.genetics.IAlleleTolerance;
|
||||
import forestry.api.genetics.IClassification;
|
||||
import magicbees.main.utils.compat.AppliedEnergisticsHelper;
|
||||
import magicbees.main.utils.compat.ArsMagicaHelper;
|
||||
import magicbees.main.utils.compat.BotaniaHelper;
|
||||
import magicbees.main.utils.compat.EquivalentExchangeHelper;
|
||||
import magicbees.main.utils.compat.RedstoneArsenalHelper;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
import magicbees.main.utils.compat.ThermalModsHelper;
|
||||
|
||||
public enum BeeSpecies {
|
||||
|
||||
MYSTICAL("Mystical", "mysticum", BeeClassification.VEILED, 0xAFFFB7, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false, true),
|
||||
SORCEROUS("Sorcerous", "fascinatio", BeeClassification.VEILED, 0xEA9A9A, EnumTemperature.HOT, EnumHumidity.ARID,
|
||||
false, false, true),
|
||||
UNUSUAL("Unusual", "inusitatus", BeeClassification.VEILED, 0x72D361, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false, true),
|
||||
ATTUNED("Attuned", "similis", BeeClassification.VEILED, 0x0086A8, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false, true),
|
||||
|
||||
ELDRITCH("Eldritch", "prodigiosus", BeeClassification.VEILED, 0x8D75A0, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
|
||||
ESOTERIC("Esoteric", "secretiore", BeeClassification.ARCANE, 0x001099, BodyColours.ARCANE, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
MYSTERIOUS("Mysterious", "mysticus", BeeClassification.ARCANE, 0x762bc2, BodyColours.ARCANE, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
ARCANE("Arcane", "arcanus", BeeClassification.ARCANE, 0xd242df, BodyColours.ARCANE, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, true, true),
|
||||
|
||||
CHARMED("Charmed", "larvatus", BeeClassification.SUPERNATURAL, 0x48EEEC, BodyColours.ARCANE, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
ENCHANTED("Enchanted", "cantatus", BeeClassification.SUPERNATURAL, 0x18e726, BodyColours.ARCANE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
SUPERNATURAL("Supernatural", "coeleste", BeeClassification.SUPERNATURAL, 0x005614, BodyColours.ARCANE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
|
||||
|
||||
ETHEREAL("Ethereal", "diaphanum", BeeClassification.MAGICAL, 0xBA3B3B, 0xEFF8FF, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
|
||||
WATERY("Watery", "aquatilis", BeeClassification.MAGICAL, 0x313C5E, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
EARTHY("Earthen", "fictili", BeeClassification.MAGICAL, 0x78822D, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
FIREY("Firey", "ardens", BeeClassification.MAGICAL, 0xD35119, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
|
||||
true),
|
||||
WINDY("Windy", "ventosum", BeeClassification.MAGICAL, 0xFFFDBA, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
|
||||
true),
|
||||
|
||||
PUPIL("Pupil", "disciplina", BeeClassification.SCHOLARLY, 0xFFFF00, EnumTemperature.NORMAL, EnumHumidity.ARID,
|
||||
false, true),
|
||||
SCHOLARLY("Scholarly", "studiosis", BeeClassification.SCHOLARLY, 0x6E0000, EnumTemperature.NORMAL,
|
||||
EnumHumidity.ARID, false, false),
|
||||
SAVANT("Savant", "philologus", BeeClassification.SCHOLARLY, 0xFFA042, EnumTemperature.NORMAL, EnumHumidity.ARID,
|
||||
true, false),
|
||||
|
||||
AWARE("Aware", "sensibilis", BeeClassification.MAGICAL, 0x5E95B5, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false),
|
||||
SPIRIT("Spirit", "larva", BeeClassification.SOUL, 0xb2964b, EnumTemperature.WARM, EnumHumidity.NORMAL, false, true),
|
||||
SOUL("Soul", "anima", BeeClassification.SOUL, 0x7d591b, EnumTemperature.HELLISH, EnumHumidity.NORMAL, true, false),
|
||||
|
||||
SKULKING("Skulking", "malevolens", BeeClassification.SKULKING, 0x524827, BodyColours.SKULKING,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
GHASTLY("Ghastly", "pallens", BeeClassification.SKULKING, 0xccccee, 0xbf877c, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
SPIDERY("Spidery", "araneolus", BeeClassification.SKULKING, 0x0888888, 0x222222, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
SMOULDERING("Smouldering", "flagrantia", BeeClassification.SKULKING, 0xFFC747, 0xEA8344, EnumTemperature.HELLISH,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
BRAINY("TCBrainy", "cerebrum", BeeClassification.SKULKING, 0x83FF70, BodyColours.SKULKING, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
BIGBAD("BigBad", "magnumalum", BeeClassification.SKULKING, 0xA9344B, 0x453536, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false, true, true, true),
|
||||
CHICKEN("TCChicken", "pullus", BeeClassification.FLESHY, 0xFF0000, 0xD3D3D3, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
BEEF("TCBeef", "bubulae", BeeClassification.FLESHY, 0xB7B7B7, 0x3F3024, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
PORK("TCPork", "porcina", BeeClassification.FLESHY, 0xF1AEAC, 0xDF847B, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
BATTY("TCBatty", "chiroptera", BeeClassification.FLESHY, 0x5B482B, 0x271B0F, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
SHEEPISH("Sheepish", "balans", BeeClassification.FLESHY, 0xF7F7F7, 0xCACACA, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
HORSE("Horse", "equus", BeeClassification.FLESHY, 0x906330, 0x7B4E1B, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
CATTY("Catty", "feline", BeeClassification.FLESHY, 0xECE684, 0x563C24, EnumTemperature.HOT, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
|
||||
TIMELY("Timely", "gallifreis", BeeClassification.TIME, 0xC6AF86, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
|
||||
true),
|
||||
LORDLY("Lordly", "rassilonis", BeeClassification.TIME, 0xC6AF86, 0x8E0213, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
DOCTORAL("Doctoral", "medicus qui", BeeClassification.TIME, 0xDDE5FC, 0x4B6E8C, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
|
||||
INFERNAL("Infernal", "infernales", BeeClassification.ABOMINABLE, 0xFF1C1C, BodyColours.ABOMINABLE,
|
||||
EnumTemperature.HELLISH, EnumHumidity.ARID, false, true),
|
||||
HATEFUL("Hateful", "odibilis", BeeClassification.ABOMINABLE, 0xDB00DB, BodyColours.ABOMINABLE,
|
||||
EnumTemperature.HELLISH, EnumHumidity.ARID, false, false),
|
||||
SPITEFUL("Spiteful", "maligna", BeeClassification.ABOMINABLE, 0x5FCC00, BodyColours.ABOMINABLE,
|
||||
EnumTemperature.HELLISH, EnumHumidity.ARID, true, false),
|
||||
WITHERING("Withering", "vietus", BeeClassification.ABOMINABLE, 0x5B5B5B, BodyColours.ABOMINABLE,
|
||||
EnumTemperature.HELLISH, EnumHumidity.ARID, true, false),
|
||||
|
||||
OBLIVION("Oblivion", "oblivioni", BeeClassification.EXTRINSIC, 0xD5C3E5, BodyColours.EXTRINSIC,
|
||||
EnumTemperature.COLD, EnumHumidity.NORMAL, false, false),
|
||||
NAMELESS("Nameless", "sine nomine", BeeClassification.EXTRINSIC, 0x8ca7cb, BodyColours.EXTRINSIC,
|
||||
EnumTemperature.COLD, EnumHumidity.NORMAL, false, true),
|
||||
ABANDONED("Abandoned", "reliquit", BeeClassification.EXTRINSIC, 0xc5cb8c, BodyColours.EXTRINSIC,
|
||||
EnumTemperature.COLD, EnumHumidity.NORMAL, false, true),
|
||||
FORLORN("Forlorn", "perditus", BeeClassification.EXTRINSIC, 0xcba88c, BodyColours.EXTRINSIC, EnumTemperature.COLD,
|
||||
EnumHumidity.NORMAL, true, false),
|
||||
DRACONIC("Draconic", "draconic", BeeClassification.EXTRINSIC, 0x9f56ad, 0x5a3b62, EnumTemperature.COLD,
|
||||
EnumHumidity.NORMAL, true, false),
|
||||
|
||||
IRON("Iron", "ferrus", BeeClassification.METALLIC, 0x686868, 0xE9E9E9, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
GOLD("Gold", "aurum", BeeClassification.METALLIC, 0x684B01, 0xFFFF0B, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
true, false),
|
||||
COPPER("Copper", "aercus", BeeClassification.METALLIC, 0x684B01, 0xFFC81A, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
TIN("Tin", "stannum", BeeClassification.METALLIC, 0x3E596D, 0xA6BACB, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, true),
|
||||
SILVER("Silver", "argenteus", BeeClassification.METALLIC, 0x747C81, 0x96BFC4, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
LEAD("Lead", "plumbeus", BeeClassification.METALLIC, 0x96BFC4, 0x91A9F3, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
ALUMINUM("Aluminum", "aluminium", BeeClassification.METALLIC, 0xEDEDED, 0x767676, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
ARDITE("Ardite", "aurantiaco", BeeClassification.METALLIC, 0x720000, 0xFF9E00, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, false, false),
|
||||
COBALT("Cobalt", "caeruleo", BeeClassification.METALLIC, 0x03265F, 0x59AAEF, EnumTemperature.HOT, EnumHumidity.ARID,
|
||||
false, false),
|
||||
MANYULLYN("Manyullyn", "manahmanah", BeeClassification.METALLIC, 0x481D6D, 0xBD92F1, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, true, false),
|
||||
DIAMOND("Diamond", "diamond", BeeClassification.GEM, 0x209581, 0x8DF5E3, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, true, false),
|
||||
EMERALD("Emerald", "prasinus", BeeClassification.GEM, 0x005300, 0x17DD62, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, true, false),
|
||||
APATITE("Apatite", "apatite", BeeClassification.GEM, 0x2EA7EC, 0x001D51, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
SILICON("Silicon", "siliconisque", BeeClassification.GEM, 0xADA2A7, 0x736675, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
CERTUS("Certus", "alia cristallum", BeeClassification.GEM, 0x93C7FF, 0xA6B8C7, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
FLUIX("Fluix", "alien cristallum", BeeClassification.GEM, 0xFC639E, 0x534797, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
|
||||
MUTABLE("Mutable", "mutable", BeeClassification.TRANSMUTING, 0xDBB24C, 0xE0D5A6, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
TRANSMUTING("Transmuting", "transmuting", BeeClassification.TRANSMUTING, 0xDBB24C, 0xA2D2D8, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
CRUMBLING("Crumbling", "crumbling", BeeClassification.TRANSMUTING, 0xDBB24C, 0xDBA4A4, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, false, false),
|
||||
|
||||
INVISIBLE("Invisible", "invisible", BeeClassification.VEILED, 0xffccff, 0xffffff, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
|
||||
// --------- Thaumcraft Bees ---------------------------------------------------------------------------------------
|
||||
TC_AIR("TCAir", "aether", BeeClassification.THAUMIC, 0xD9D636, BodyColours.THAUMCRAFT_SHARD, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, true, true),
|
||||
TC_FIRE("TCFire", "praefervidus", BeeClassification.THAUMIC, 0xE50B0B, BodyColours.THAUMCRAFT_SHARD,
|
||||
EnumTemperature.HOT, EnumHumidity.ARID, true, true),
|
||||
TC_WATER("TCWater", "umidus", BeeClassification.THAUMIC, 0x36CFD9, BodyColours.THAUMCRAFT_SHARD,
|
||||
EnumTemperature.NORMAL, EnumHumidity.DAMP, true, true),
|
||||
TC_EARTH("TCEarth", "sordida", BeeClassification.THAUMIC, 0x005100, BodyColours.THAUMCRAFT_SHARD,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
|
||||
TC_ORDER("TCOrder", "ordinatus", BeeClassification.THAUMIC, 0xaa32fc, BodyColours.THAUMCRAFT_SHARD,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
|
||||
TC_CHAOS("TCChaos", "tenebrarum", BeeClassification.THAUMIC, 0xCCCCCC, BodyColours.THAUMCRAFT_SHARD,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
|
||||
TC_ESSENTIA("TCEssentia", "defaultium essentia apis", BeeClassification.THAUMIC, 0xCCCCCC,
|
||||
BodyColours.THAUMCRAFT_SHARD, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
|
||||
|
||||
TC_VIS("TCVis", "arcanus saecula", BeeClassification.THAUMIC, 0x004c99, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
TC_REJUVENATING("TCRejuvenating", "arcanus vitae", BeeClassification.THAUMIC, 0x91D0D9, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
TC_EMPOWERING("TCEmpowering", "tractus", BeeClassification.THAUMIC, 0x96FFBC, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
TC_NEXUS("TCNexus", "nexi", BeeClassification.THAUMIC, 0x15AFAF, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
|
||||
TC_TAINT("TCFlux", "arcanus labe", BeeClassification.THAUMIC, 0x91376A, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
TC_PURE("TCPure", "arcanus puritatem", BeeClassification.THAUMIC, 0xE23F65, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
TC_HUNGRY("TCHungry", "omnique", BeeClassification.THAUMIC, 0xDCA5E2, BodyColours.THAUMCRAFT_NODE,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
|
||||
TC_WISPY("TCWispy", "umbrabilis", BeeClassification.THAUMIC, 0x9cb8d5, BodyColours.SKULKING, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
TC_VOID("TCVoid", "obscurus", BeeClassification.METALLIC, 0x180A29, 0x4B2A74, EnumTemperature.ICY,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
|
||||
// --------- Equivalent Exchange Bees -----------------------------------------------------------------------------
|
||||
EE_MINIUM("EEMinium", "mutabilis", BeeClassification.ALCHEMICAL, 0xac0921, 0x3a030b, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
|
||||
// --------- Ars Magica Bees --------------------------------------------------------------------------------------
|
||||
AM_ESSENCE("AMEssence", "essentia", BeeClassification.ESSENTIAL, 0x86BBC5, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
AM_QUINTESSENCE("AMQuintessence", "cor essentia", BeeClassification.ESSENTIAL, 0xE3A45B, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
|
||||
|
||||
AM_EARTH("AMEarth", "magica terra", BeeClassification.ESSENTIAL, 0xAA875E, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.WARM, EnumHumidity.ARID, false, false),
|
||||
AM_AIR("AMAir", "magica aer", BeeClassification.ESSENTIAL, 0xD5EB9D, BodyColours.ARSMAGICA, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
AM_FIRE("AMFire", "magica ignis", BeeClassification.ESSENTIAL, 0x93451E, BodyColours.ARSMAGICA, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, false, false),
|
||||
AM_WATER("AMWater", "magica aqua", BeeClassification.ESSENTIAL, 0x3B7D8C, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.DAMP, false, false),
|
||||
AM_LIGHTNING("AMLightning", "magica fulgur", BeeClassification.ESSENTIAL, 0xEBEFA1, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
AM_PLANT("AMPlant", "magica herba", BeeClassification.ESSENTIAL, 0x49B549, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
AM_ICE("AMIce", "magica glacium", BeeClassification.ESSENTIAL, 0x86BAC6, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.COLD, EnumHumidity.NORMAL, false, false),
|
||||
AM_ARCANE("AMArcane", "magica arcanum", BeeClassification.ESSENTIAL, 0x76184D, BodyColours.ARSMAGICA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
|
||||
|
||||
AM_VORTEX("AMVortex", "gurges", BeeClassification.ESSENTIAL, 0x71BBE2, 0x0B35A8, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, true),
|
||||
AM_WIGHT("AMWight", "vectem", BeeClassification.ESSENTIAL, 0xB50000, 0x4C4837, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
|
||||
// ---------------------Thermal Expansion Bees---------------------------
|
||||
TE_BLIZZY("TEBlizzy", "blizzard", BeeClassification.ABOMINABLE, 0x0073C4, EnumTemperature.COLD, EnumHumidity.NORMAL,
|
||||
false, false),
|
||||
TE_GELID("TEGelid", "cyro", BeeClassification.ABOMINABLE, 0x4AAFF7, EnumTemperature.COLD, EnumHumidity.NORMAL, true,
|
||||
true),
|
||||
TE_DANTE("TEDante", "inferno", BeeClassification.ABOMINABLE, 0xF7AC4A, EnumTemperature.HELLISH, EnumHumidity.ARID,
|
||||
false, false),
|
||||
TE_PYRO("TEPyro", "pyromania", BeeClassification.ABOMINABLE, 0xFA930C, EnumTemperature.HELLISH, EnumHumidity.ARID,
|
||||
true, true),
|
||||
TE_SHOCKING("TEShocking", "horrendum", BeeClassification.ABOMINABLE, 0xC5FF26, 0xF8EE00, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
TE_AMPED("TEAmped", "concitatus", BeeClassification.ABOMINABLE, 0x8AFFFF, 0xECE670, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, true, false),
|
||||
TE_GROUNDED("TEGrounded", "tellus", BeeClassification.ABOMINABLE, 0xCEC1C1, 0x826767, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, false, true),
|
||||
TE_ROCKING("TERocking", "saxsous", BeeClassification.ABOMINABLE, 0x980000, 0xAB9D9B, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, true, true),
|
||||
|
||||
TE_ELECTRUM("TEElectrum", "electrum", BeeClassification.THERMAL, 0xEAF79E, EnumTemperature.HOT, EnumHumidity.ARID,
|
||||
false, false),
|
||||
TE_PLATINUM("TEPlatinum", "platina", BeeClassification.THERMAL, 0x9EE7F7, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
TE_NICKEL("TENickel", "nickel", BeeClassification.THERMAL, 0xB4C989, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false),
|
||||
TE_INVAR("TEInvar", "invar", BeeClassification.THERMAL, 0xCDE3A1, EnumTemperature.HOT, EnumHumidity.ARID, false,
|
||||
false),
|
||||
TE_BRONZE("TEBronze", "pyropus", BeeClassification.THERMAL, 0xB56D07, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false),
|
||||
TE_COAL("TECoal", "carbonis", BeeClassification.THERMAL, 0x2E2D2D, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
false, false),
|
||||
TE_DESTABILIZED("TEDestabilized", "electric", BeeClassification.THERMAL, 0x5E0203, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
TE_LUX("TELux", "lux", BeeClassification.THERMAL, 0xF1FA89, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
|
||||
false),
|
||||
TE_WINSOME("TEWinsome", "cuniculus", BeeClassification.ADORABLE, 0x096B67, EnumTemperature.COLD,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
TE_ENDEARING("TEEndearing", "cognito", BeeClassification.ADORABLE, 0x069E97, EnumTemperature.COLD,
|
||||
EnumHumidity.NORMAL, true, true),
|
||||
TE_SIGNALUS("TESignalus", "scelerisque", BeeClassification.THERMAL, 0x5E0203, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, true, true),
|
||||
TE_LUMIUS("TELumius", "lucidum", BeeClassification.THERMAL, 0xF1FA89, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
|
||||
true, true),
|
||||
|
||||
// --------------------Redstone Arsenal Bees-----------------------------
|
||||
RSA_FLUXED("RSAFluxed", "Thermametallic electroflux", BeeClassification.THERMAL, 0x9E060D, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
|
||||
// ----------------------Botania Bees---------------------------------------
|
||||
BOT_ROOTED("BotRooted", "truncus", BeeClassification.BOTANICAL, 0x00A800, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
|
||||
BOT_BOTANIC("BotBotanic", "botanica", BeeClassification.BOTANICAL, 0x94C661, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
BOT_BLOSSOM("BotBlossom", "viridis", BeeClassification.BOTANICAL, 0xA4C193, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
BOT_FLORAL("BotFloral", "florens", BeeClassification.BOTANICAL, 0x29D81A, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
|
||||
|
||||
BOT_VAZBEE("BotVazbee", "vazbii", BeeClassification.BOTANICAL, 0xff6b9c, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
|
||||
|
||||
BOT_SOMNOLENT("BotSomnolent", "soporatus", BeeClassification.BOTANICAL, 0x2978C6, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false, true, true, true),
|
||||
BOT_DREAMING("BotDreaming", "somnior", BeeClassification.BOTANICAL, 0x123456, BodyColours.BOTANIA,
|
||||
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false, true, true, true),
|
||||
|
||||
BOT_ALFHEIM("BotAlfheim", "alfheimis", BeeClassification.BOTANICAL, -1, -1, EnumTemperature.NORMAL,
|
||||
EnumHumidity.NORMAL, false, false),
|
||||
|
||||
// -------------------Applied Energistics 2 Bees---------------------------
|
||||
AE_SKYSTONE("AESkystone", "terra astris", BeeClassification.TRANSMUTING, 0x4B8381, 0x252929, EnumTemperature.HOT,
|
||||
EnumHumidity.ARID, false, true),;
|
||||
|
||||
// For body colours used by more than one bee.
|
||||
private class BodyColours {
|
||||
|
||||
static final int DEFAULT = 0xFF7C26;
|
||||
static final int ARCANE = 0xFF9D60;
|
||||
static final int ABOMINABLE = 0x960F00;
|
||||
static final int EXTRINSIC = 0xF696FF;
|
||||
static final int SKULKING = 0xe15236;
|
||||
static final int THAUMCRAFT_SHARD = 0x999999;
|
||||
static final int THAUMCRAFT_NODE = 0x675ED1;
|
||||
static final int ARSMAGICA = 0xE3A55B;
|
||||
static final int BOTANIA = 0xFFB2BB;
|
||||
}
|
||||
|
||||
public static void setupBeeSpecies() {
|
||||
MYSTICAL.registerGenomeTemplate(BeeGenomeManager.getTemplateMystical());
|
||||
SORCEROUS.registerGenomeTemplate(BeeGenomeManager.getTemplateSorcerous());
|
||||
UNUSUAL.registerGenomeTemplate(BeeGenomeManager.getTemplateUnusual());
|
||||
ATTUNED.registerGenomeTemplate(BeeGenomeManager.getTemplateAttuned());
|
||||
ELDRITCH.registerGenomeTemplate(BeeGenomeManager.getTemplateEldritch());
|
||||
ESOTERIC.registerGenomeTemplate(BeeGenomeManager.getTemplateEsoteric());
|
||||
MYSTERIOUS.registerGenomeTemplate(BeeGenomeManager.getTemplateMysterious());
|
||||
ARCANE.registerGenomeTemplate(BeeGenomeManager.getTemplateArcane());
|
||||
CHARMED.registerGenomeTemplate(BeeGenomeManager.getTemplateCharmed());
|
||||
ENCHANTED.registerGenomeTemplate(BeeGenomeManager.getTemplateEnchanted());
|
||||
SUPERNATURAL.registerGenomeTemplate(BeeGenomeManager.getTemplateSupernatural());
|
||||
ETHEREAL.registerGenomeTemplate(BeeGenomeManager.getTemplateEthereal());
|
||||
WATERY.registerGenomeTemplate(BeeGenomeManager.getTemplateWatery());
|
||||
EARTHY.registerGenomeTemplate(BeeGenomeManager.getTemplateEarthy());
|
||||
FIREY.registerGenomeTemplate(BeeGenomeManager.getTemplateFirey());
|
||||
WINDY.registerGenomeTemplate(BeeGenomeManager.getTemplateWindy());
|
||||
PUPIL.registerGenomeTemplate(BeeGenomeManager.getTemplatePupil());
|
||||
SCHOLARLY.registerGenomeTemplate(BeeGenomeManager.getTemplateScholarly());
|
||||
SAVANT.registerGenomeTemplate(BeeGenomeManager.getTemplateSavant());
|
||||
AWARE.registerGenomeTemplate(BeeGenomeManager.getTemplateAware());
|
||||
SPIRIT.registerGenomeTemplate(BeeGenomeManager.getTemplateSpirit());
|
||||
SOUL.registerGenomeTemplate(BeeGenomeManager.getTemplateSoul());
|
||||
SKULKING.registerGenomeTemplate(BeeGenomeManager.getTemplateSkulking());
|
||||
GHASTLY.registerGenomeTemplate(BeeGenomeManager.getTemplateGhastly());
|
||||
SPIDERY.registerGenomeTemplate(BeeGenomeManager.getTemplateSpidery());
|
||||
SMOULDERING.registerGenomeTemplate(BeeGenomeManager.getTemplateSmouldering());
|
||||
BIGBAD.registerGenomeTemplate(BeeGenomeManager.getTemplateBigbad());
|
||||
CHICKEN.registerGenomeTemplate(BeeGenomeManager.getTemplateChicken());
|
||||
BEEF.registerGenomeTemplate(BeeGenomeManager.getTemplateBeef());
|
||||
PORK.registerGenomeTemplate(BeeGenomeManager.getTemplatePork());
|
||||
SHEEPISH.registerGenomeTemplate(BeeGenomeManager.getTemplateSheepish());
|
||||
HORSE.registerGenomeTemplate(BeeGenomeManager.getTemplateHorse());
|
||||
CATTY.registerGenomeTemplate(BeeGenomeManager.getTemplateCatty());
|
||||
TIMELY.registerGenomeTemplate(BeeGenomeManager.getTemplateTimely());
|
||||
LORDLY.registerGenomeTemplate(BeeGenomeManager.getTemplateLordly());
|
||||
DOCTORAL.registerGenomeTemplate(BeeGenomeManager.getTemplateDoctoral());
|
||||
INFERNAL.registerGenomeTemplate(BeeGenomeManager.getTemplateInfernal());
|
||||
HATEFUL.registerGenomeTemplate(BeeGenomeManager.getTemplateHateful());
|
||||
SPITEFUL.registerGenomeTemplate(BeeGenomeManager.getTemplateSpiteful());
|
||||
WITHERING.registerGenomeTemplate(BeeGenomeManager.getTemplateWithering());
|
||||
OBLIVION.registerGenomeTemplate(BeeGenomeManager.getTemplateOblivion());
|
||||
NAMELESS.registerGenomeTemplate(BeeGenomeManager.getTemplateNameless());
|
||||
ABANDONED.registerGenomeTemplate(BeeGenomeManager.getTemplateAbandoned());
|
||||
FORLORN.registerGenomeTemplate(BeeGenomeManager.getTemplateForlorn());
|
||||
DRACONIC.registerGenomeTemplate(BeeGenomeManager.getTemplateDraconic());
|
||||
IRON.registerGenomeTemplate(BeeGenomeManager.getTemplateIron());
|
||||
GOLD.registerGenomeTemplate(BeeGenomeManager.getTemplateGold());
|
||||
COPPER.registerGenomeTemplate(BeeGenomeManager.getTemplateCopper());
|
||||
TIN.registerGenomeTemplate(BeeGenomeManager.getTemplateTin());
|
||||
SILVER.registerGenomeTemplate(BeeGenomeManager.getTemplateSilver());
|
||||
LEAD.registerGenomeTemplate(BeeGenomeManager.getTemplateLead());
|
||||
ALUMINUM.registerGenomeTemplate(BeeGenomeManager.getTemplateAluminum());
|
||||
ARDITE.registerGenomeTemplate(BeeGenomeManager.getTemplateArdite());
|
||||
COBALT.registerGenomeTemplate(BeeGenomeManager.getTemplateCobalt());
|
||||
MANYULLYN.registerGenomeTemplate(BeeGenomeManager.getTemplateManyullyn());
|
||||
DIAMOND.registerGenomeTemplate(BeeGenomeManager.getTemplateDiamond());
|
||||
EMERALD.registerGenomeTemplate(BeeGenomeManager.getTemplateEmerald());
|
||||
APATITE.registerGenomeTemplate(BeeGenomeManager.getTemplateApatite());
|
||||
SILICON.registerGenomeTemplate(BeeGenomeManager.getTemplateSilicon());
|
||||
FLUIX.registerGenomeTemplate(BeeGenomeManager.getTemplateFluix());
|
||||
CERTUS.registerGenomeTemplate(BeeGenomeManager.getTemplateCertus());
|
||||
MUTABLE.registerGenomeTemplate(BeeGenomeManager.getTemplateMutable());
|
||||
TRANSMUTING.registerGenomeTemplate(BeeGenomeManager.getTemplateTransmuting());
|
||||
CRUMBLING.registerGenomeTemplate(BeeGenomeManager.getTemplateCrumbling());
|
||||
INVISIBLE.registerGenomeTemplate(BeeGenomeManager.getTemplateInvisible());
|
||||
TC_AIR.registerGenomeTemplate(BeeGenomeManager.getTemplateTCAir());
|
||||
TC_FIRE.registerGenomeTemplate(BeeGenomeManager.getTemplateTCFire());
|
||||
TC_WATER.registerGenomeTemplate(BeeGenomeManager.getTemplateTCWater());
|
||||
TC_EARTH.registerGenomeTemplate(BeeGenomeManager.getTemplateTCEarth());
|
||||
TC_ORDER.registerGenomeTemplate(BeeGenomeManager.getTemplateTCOrder());
|
||||
TC_CHAOS.registerGenomeTemplate(BeeGenomeManager.getTemplateTCChaos());
|
||||
TC_ESSENTIA.registerGenomeTemplate(BeeGenomeManager.getTemplateTCEssentia());
|
||||
TC_VIS.registerGenomeTemplate(BeeGenomeManager.getTemplateTCVis());
|
||||
TC_REJUVENATING.registerGenomeTemplate(BeeGenomeManager.getTemplateTCRejuvinating());
|
||||
TC_EMPOWERING.registerGenomeTemplate(BeeGenomeManager.getTemplateTCEmpowering());
|
||||
TC_NEXUS.registerGenomeTemplate(BeeGenomeManager.getTemplateTCNexus());
|
||||
TC_TAINT.registerGenomeTemplate(BeeGenomeManager.getTemplateTCTaint());
|
||||
TC_PURE.registerGenomeTemplate(BeeGenomeManager.getTemplateTCPure());
|
||||
TC_HUNGRY.registerGenomeTemplate(BeeGenomeManager.getTemplateTCHungry());
|
||||
BRAINY.registerGenomeTemplate(BeeGenomeManager.getTemplateBrainy());
|
||||
TC_WISPY.registerGenomeTemplate(BeeGenomeManager.getTemplateTCWispy());
|
||||
BATTY.registerGenomeTemplate(BeeGenomeManager.getTemplateBatty());
|
||||
TC_VOID.registerGenomeTemplate(BeeGenomeManager.getTemplaceTCVoid());
|
||||
EE_MINIUM.registerGenomeTemplate(BeeGenomeManager.getTemplateEEMinium());
|
||||
AM_ESSENCE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMEssence());
|
||||
AM_QUINTESSENCE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMQuintessence());
|
||||
AM_EARTH.registerGenomeTemplate(BeeGenomeManager.getTemplateAMEarth());
|
||||
AM_AIR.registerGenomeTemplate(BeeGenomeManager.getTemplateAMAir());
|
||||
AM_FIRE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMFire());
|
||||
AM_WATER.registerGenomeTemplate(BeeGenomeManager.getTemplateAMWater());
|
||||
AM_LIGHTNING.registerGenomeTemplate(BeeGenomeManager.getTemplateAMLightning());
|
||||
AM_PLANT.registerGenomeTemplate(BeeGenomeManager.getTemplateAMPlant());
|
||||
AM_ICE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMIce());
|
||||
AM_ARCANE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMArcane());
|
||||
AM_VORTEX.registerGenomeTemplate(BeeGenomeManager.getTemplateAMVortex());
|
||||
AM_WIGHT.registerGenomeTemplate(BeeGenomeManager.getTemplateAMWight());
|
||||
TE_BLIZZY.registerGenomeTemplate(BeeGenomeManager.getTemplateTEBlizzy());
|
||||
TE_GELID.registerGenomeTemplate(BeeGenomeManager.getTemplateTEGelid());
|
||||
TE_DANTE.registerGenomeTemplate(BeeGenomeManager.getTemplateTEDante());
|
||||
TE_PYRO.registerGenomeTemplate(BeeGenomeManager.getTemplateTEPyro());
|
||||
TE_SHOCKING.registerGenomeTemplate(BeeGenomeManager.getTemplateTEShocking());
|
||||
TE_AMPED.registerGenomeTemplate(BeeGenomeManager.getTemplateTEAmped());
|
||||
TE_GROUNDED.registerGenomeTemplate(BeeGenomeManager.getTemplateTEGrounded());
|
||||
TE_ROCKING.registerGenomeTemplate(BeeGenomeManager.getTemplateTERocking());
|
||||
TE_ELECTRUM.registerGenomeTemplate(BeeGenomeManager.getTemplateTEElectrum());
|
||||
TE_PLATINUM.registerGenomeTemplate(BeeGenomeManager.getTemplateTEPlatinum());
|
||||
TE_NICKEL.registerGenomeTemplate(BeeGenomeManager.getTemplateTENickel());
|
||||
TE_INVAR.registerGenomeTemplate(BeeGenomeManager.getTemplateTEInvar());
|
||||
TE_BRONZE.registerGenomeTemplate(BeeGenomeManager.getTemplateTEBronze());
|
||||
TE_COAL.registerGenomeTemplate(BeeGenomeManager.getTemplateTECoal());
|
||||
TE_DESTABILIZED.registerGenomeTemplate(BeeGenomeManager.getTemplateTEDestabilized());
|
||||
TE_LUX.registerGenomeTemplate(BeeGenomeManager.getTemplateTELux());
|
||||
TE_WINSOME.registerGenomeTemplate(BeeGenomeManager.getTemplateTEWinsome());
|
||||
TE_ENDEARING.registerGenomeTemplate(BeeGenomeManager.getTemplateTEEndearing());
|
||||
TE_SIGNALUS.registerGenomeTemplate(BeeGenomeManager.getTemplateTESignalus());
|
||||
TE_LUMIUS.registerGenomeTemplate(BeeGenomeManager.getTemplateTELumius());
|
||||
RSA_FLUXED.registerGenomeTemplate(BeeGenomeManager.getTemplateRSAFluxed());
|
||||
BOT_ROOTED.registerGenomeTemplate(BeeGenomeManager.getTemplateBotRooted());
|
||||
BOT_BOTANIC.registerGenomeTemplate(BeeGenomeManager.getTemplateBotBotanic());
|
||||
BOT_BLOSSOM.registerGenomeTemplate(BeeGenomeManager.getTemplateBotBlossom());
|
||||
BOT_FLORAL.registerGenomeTemplate(BeeGenomeManager.getTemplateBotFloral());
|
||||
BOT_VAZBEE.registerGenomeTemplate(BeeGenomeManager.getTemplateBotVazbee());
|
||||
BOT_SOMNOLENT.registerGenomeTemplate(BeeGenomeManager.getTemplateBotSomnolent());
|
||||
BOT_DREAMING.registerGenomeTemplate(BeeGenomeManager.getTemplateBotDreaming());
|
||||
BOT_ALFHEIM.registerGenomeTemplate(BeeGenomeManager.getTemplateBotAelfheim());
|
||||
AE_SKYSTONE.registerGenomeTemplate(BeeGenomeManager.getTemplateAESkystone());
|
||||
|
||||
BeeProductHelper.initThaumcraftProducts();
|
||||
if (!ThaumcraftHelper.isActive()) {
|
||||
TC_CHAOS.setInactive();
|
||||
TC_AIR.setInactive();
|
||||
TC_FIRE.setInactive();
|
||||
TC_WATER.setInactive();
|
||||
TC_EARTH.setInactive();
|
||||
TC_ORDER.setInactive();
|
||||
TC_ESSENTIA.setInactive();
|
||||
|
||||
TC_VIS.setInactive();
|
||||
TC_REJUVENATING.setInactive();
|
||||
TC_EMPOWERING.setInactive();
|
||||
TC_NEXUS.setInactive();
|
||||
TC_TAINT.setInactive();
|
||||
TC_PURE.setInactive();
|
||||
TC_HUNGRY.setInactive();
|
||||
|
||||
BRAINY.setInactive();
|
||||
|
||||
TC_WISPY.setInactive();
|
||||
TC_VOID.setInactive();
|
||||
}
|
||||
|
||||
BeeProductHelper.initEquivalentExchange3Species();
|
||||
if (!EquivalentExchangeHelper.isActive()) {
|
||||
EE_MINIUM.setInactive();
|
||||
}
|
||||
|
||||
BeeProductHelper.initArsMagicaSpecies();
|
||||
if (!ArsMagicaHelper.isActive()) {
|
||||
AM_ESSENCE.setInactive();
|
||||
AM_QUINTESSENCE.setInactive();
|
||||
AM_EARTH.setInactive();
|
||||
AM_AIR.setInactive();
|
||||
AM_FIRE.setInactive();
|
||||
AM_WATER.setInactive();
|
||||
AM_LIGHTNING.setInactive();
|
||||
AM_PLANT.setInactive();
|
||||
AM_ICE.setInactive();
|
||||
AM_ARCANE.setInactive();
|
||||
AM_VORTEX.setInactive();
|
||||
AM_WIGHT.setInactive();
|
||||
}
|
||||
|
||||
BeeProductHelper.initThermalExpansionProducts();
|
||||
if (!ThermalModsHelper.isActive()) {
|
||||
TE_BLIZZY.setInactive();
|
||||
TE_GELID.setInactive();
|
||||
TE_DANTE.setInactive();
|
||||
TE_PYRO.setInactive();
|
||||
TE_SHOCKING.setInactive();
|
||||
TE_AMPED.setInactive();
|
||||
TE_GROUNDED.setInactive();
|
||||
TE_ROCKING.setInactive();
|
||||
TE_DESTABILIZED.setInactive();
|
||||
TE_COAL.setInactive();
|
||||
TE_LUX.setInactive();
|
||||
TE_WINSOME.setInactive();
|
||||
TE_ENDEARING.setInactive();
|
||||
TE_SIGNALUS.setInactive();
|
||||
TE_LUMIUS.setInactive();
|
||||
}
|
||||
|
||||
BeeProductHelper.initRedstoneArsenelProducts();
|
||||
if (!RedstoneArsenalHelper.isActive()) {
|
||||
RSA_FLUXED.setInactive();
|
||||
}
|
||||
|
||||
BeeProductHelper.initBotaniaProducts();
|
||||
if (!BotaniaHelper.isActive()) {
|
||||
BOT_ROOTED.setInactive();
|
||||
BOT_BLOSSOM.setInactive();
|
||||
BOT_BOTANIC.setInactive();
|
||||
BOT_FLORAL.setInactive();
|
||||
BOT_VAZBEE.setInactive();
|
||||
BOT_SOMNOLENT.setInactive();
|
||||
BOT_DREAMING.setInactive();
|
||||
BOT_ALFHEIM.setInactive();
|
||||
}
|
||||
|
||||
BeeProductHelper.initAppEngProducts();
|
||||
if (!AppliedEnergisticsHelper.isActive()) {
|
||||
AE_SKYSTONE.setInactive();
|
||||
}
|
||||
|
||||
for (BeeSpecies beeSpecies : BeeSpecies.values()) {
|
||||
if (beeSpecies.isActive()) {
|
||||
beeSpecies.setupCustomIconProvider();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static final String authority = "MysteriousAges";
|
||||
|
||||
private final IAlleleBeeSpeciesCustom species;
|
||||
private final EnumTemperature temperature;
|
||||
private final EnumHumidity humidity;
|
||||
|
||||
private boolean active = true;
|
||||
|
||||
private IAllele genomeTemplate[];
|
||||
|
||||
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour,
|
||||
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect,
|
||||
boolean isSpeciesDominant) {
|
||||
this(
|
||||
speciesName,
|
||||
genusName,
|
||||
classification,
|
||||
firstColour,
|
||||
BodyColours.DEFAULT,
|
||||
preferredTemp,
|
||||
preferredHumidity,
|
||||
hasGlowEffect,
|
||||
true,
|
||||
true,
|
||||
isSpeciesDominant,
|
||||
false);
|
||||
}
|
||||
|
||||
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour,
|
||||
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect,
|
||||
boolean isSpeciesDominant) {
|
||||
this(
|
||||
speciesName,
|
||||
genusName,
|
||||
classification,
|
||||
firstColour,
|
||||
secondColour,
|
||||
preferredTemp,
|
||||
preferredHumidity,
|
||||
hasGlowEffect,
|
||||
true,
|
||||
true,
|
||||
isSpeciesDominant,
|
||||
false);
|
||||
}
|
||||
|
||||
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour,
|
||||
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean isSecret, boolean hasGlowEffect,
|
||||
boolean isSpeciesDominant) {
|
||||
this(
|
||||
speciesName,
|
||||
genusName,
|
||||
classification,
|
||||
firstColour,
|
||||
secondColour,
|
||||
preferredTemp,
|
||||
preferredHumidity,
|
||||
hasGlowEffect,
|
||||
isSecret,
|
||||
true,
|
||||
isSpeciesDominant,
|
||||
false);
|
||||
}
|
||||
|
||||
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour,
|
||||
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean isSecret, boolean hasGlowEffect,
|
||||
boolean isSpeciesDominant) {
|
||||
this(
|
||||
speciesName,
|
||||
genusName,
|
||||
classification,
|
||||
firstColour,
|
||||
BodyColours.DEFAULT,
|
||||
preferredTemp,
|
||||
preferredHumidity,
|
||||
hasGlowEffect,
|
||||
isSecret,
|
||||
true,
|
||||
isSpeciesDominant,
|
||||
false);
|
||||
}
|
||||
|
||||
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour,
|
||||
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect,
|
||||
boolean isSpeciesSecret, boolean isSpeciesCounted, boolean isSpeciesDominant, boolean isSpeciesNocturnal) {
|
||||
|
||||
String uid = "magicbees.species" + speciesName;
|
||||
|
||||
this.temperature = preferredTemp;
|
||||
this.humidity = preferredHumidity;
|
||||
|
||||
IBeeFactory beeFactory = forestry.api.apiculture.BeeManager.beeFactory;
|
||||
this.species = beeFactory.createSpecies(
|
||||
uid,
|
||||
isSpeciesDominant,
|
||||
authority,
|
||||
uid,
|
||||
uid + ".description",
|
||||
classification,
|
||||
genusName,
|
||||
firstColour,
|
||||
secondColour);
|
||||
|
||||
this.species.setTemperature(preferredTemp);
|
||||
this.species.setHumidity(preferredHumidity);
|
||||
|
||||
if (isSpeciesNocturnal) {
|
||||
this.species.setNocturnal();
|
||||
}
|
||||
if (hasGlowEffect) {
|
||||
this.species.setHasEffect();
|
||||
}
|
||||
if (isSpeciesSecret) {
|
||||
this.species.setIsSecret();
|
||||
}
|
||||
if (!isSpeciesCounted) {
|
||||
this.species.setIsNotCounted();
|
||||
}
|
||||
|
||||
classification.addMemberSpecies(species);
|
||||
}
|
||||
|
||||
public IAllele[] getGenome() {
|
||||
return genomeTemplate;
|
||||
}
|
||||
|
||||
public IAlleleBeeSpecies getSpecies() {
|
||||
return species;
|
||||
}
|
||||
|
||||
public BeeSpecies addProduct(ItemStack produce, float chance) {
|
||||
species.addProduct(produce, chance);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BeeSpecies addSpecialty(ItemStack produce, float chance) {
|
||||
species.addSpecialty(produce, chance);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemStack getBeeItem(EnumBeeType beeType) {
|
||||
return BeeManager.beeRoot.getMemberStack(
|
||||
BeeManager.beeRoot.getBee(null, BeeManager.beeRoot.templateAsGenome(genomeTemplate)),
|
||||
beeType.ordinal());
|
||||
}
|
||||
|
||||
public BeeSpecies setInactive() {
|
||||
this.active = false;
|
||||
AlleleManager.alleleRegistry.blacklistAllele(species.getUID());
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return active;
|
||||
}
|
||||
|
||||
public void registerGenomeTemplate(IAllele[] genome) {
|
||||
genomeTemplate = genome;
|
||||
BeeManager.beeRoot.registerTemplate(species.getUID(), genome);
|
||||
}
|
||||
|
||||
private void setupCustomIconProvider() {
|
||||
IBeeIconProvider iconProvider = getCustomIconProvider();
|
||||
if (iconProvider != null) {
|
||||
this.species.setCustomBeeIconProvider(iconProvider);
|
||||
}
|
||||
|
||||
IBeeIconColourProvider iconColourProvider = getCustomIconColourProvider();
|
||||
if (iconColourProvider != null) {
|
||||
this.species.setCustomBeeIconColourProvider(iconColourProvider);
|
||||
}
|
||||
}
|
||||
|
||||
private IBeeIconProvider getCustomIconProvider() {
|
||||
switch (this) {
|
||||
case SKULKING:
|
||||
case GHASTLY:
|
||||
case SPIDERY:
|
||||
case SMOULDERING:
|
||||
case BIGBAD:
|
||||
case BATTY:
|
||||
case SHEEPISH:
|
||||
case HORSE:
|
||||
case CATTY:
|
||||
case BRAINY:
|
||||
case TC_WISPY:
|
||||
case AM_VORTEX:
|
||||
case AM_WIGHT:
|
||||
case TE_BLIZZY:
|
||||
case TE_GELID:
|
||||
case TE_DANTE:
|
||||
case TE_PYRO:
|
||||
case TE_SHOCKING:
|
||||
case TE_AMPED:
|
||||
case TE_GROUNDED:
|
||||
case TE_ROCKING:
|
||||
return BeeIconProvider.SKULKING;
|
||||
|
||||
case DOCTORAL:
|
||||
return BeeIconProvider.DOCTORAL;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private IBeeIconColourProvider getCustomIconColourProvider() {
|
||||
switch (this) {
|
||||
case BOT_ALFHEIM:
|
||||
return BeeIconColourProvider.RAINBOW;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean canWorkInTemperature(EnumTemperature temp) {
|
||||
IAlleleTolerance tolerance = (IAlleleTolerance) genomeTemplate[EnumBeeChromosome.TEMPERATURE_TOLERANCE
|
||||
.ordinal()];
|
||||
return AlleleManager.climateHelper.isWithinLimits(
|
||||
temp,
|
||||
EnumHumidity.NORMAL,
|
||||
temperature,
|
||||
tolerance.getValue(),
|
||||
EnumHumidity.NORMAL,
|
||||
EnumTolerance.NONE);
|
||||
}
|
||||
|
||||
public boolean canWorkInHumidity(EnumHumidity humid) {
|
||||
IAlleleTolerance tolerance = (IAlleleTolerance) genomeTemplate[EnumBeeChromosome.HUMIDITY_TOLERANCE.ordinal()];
|
||||
return AlleleManager.climateHelper.isWithinLimits(
|
||||
EnumTemperature.NORMAL,
|
||||
humid,
|
||||
EnumTemperature.NORMAL,
|
||||
EnumTolerance.NONE,
|
||||
humidity,
|
||||
tolerance.getValue());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraftforge.common.BiomeDictionary;
|
||||
|
||||
import forestry.api.apiculture.hives.HiveManager;
|
||||
import forestry.api.apiculture.hives.IHiveDescription;
|
||||
import forestry.api.apiculture.hives.IHiveGen;
|
||||
import forestry.api.core.EnumHumidity;
|
||||
import forestry.api.core.EnumTemperature;
|
||||
import magicbees.block.types.HiveType;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.BlockUtil;
|
||||
import magicbees.main.utils.LogHelper;
|
||||
import magicbees.world.feature.FeatureOreVein;
|
||||
import magicbees.world.feature.HiveGenNether;
|
||||
import magicbees.world.feature.HiveGenOblivion;
|
||||
import magicbees.world.feature.HiveGenUnderground;
|
||||
|
||||
public enum HiveDescription implements IHiveDescription {
|
||||
|
||||
CURIOUS(HiveType.CURIOUS, 3.0f, HiveManager.genHelper.tree(), false, BiomeDictionary.Type.FOREST,
|
||||
BiomeDictionary.Type.PLAINS, BiomeDictionary.Type.HILLS),
|
||||
UNUSUAL(HiveType.UNUSUAL, 1.0f, HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass), false,
|
||||
BiomeDictionary.Type.PLAINS, BiomeDictionary.Type.MOUNTAIN, BiomeDictionary.Type.HILLS,
|
||||
BiomeDictionary.Type.RIVER),
|
||||
RESONANT(HiveType.RESONANT, 0.9f, HiveManager.genHelper.ground(Blocks.sand, Blocks.sandstone), false,
|
||||
BiomeDictionary.Type.SANDY, BiomeDictionary.Type.MESA, BiomeDictionary.Type.HOT,
|
||||
BiomeDictionary.Type.MAGICAL),
|
||||
DEEP(HiveType.DEEP, 5.0f, new HiveGenUnderground(10, 15, 5), true, BiomeDictionary.Type.HILLS,
|
||||
BiomeDictionary.Type.MOUNTAIN, BiomeDictionary.Type.MAGICAL) {
|
||||
|
||||
@Override
|
||||
public void postGen(World world, int x, int y, int z) {
|
||||
super.postGen(world, x, y, z);
|
||||
Random random = world.rand;
|
||||
FeatureOreVein.redstoneGen.generateVein(world, random, x + 1, y, z, 5);
|
||||
FeatureOreVein.redstoneGen.generateVein(world, random, x - 1, y, z, 5);
|
||||
FeatureOreVein.redstoneGen.generateVein(world, random, x, y + 1, z, 5);
|
||||
FeatureOreVein.redstoneGen.generateVein(world, random, x, y - 1, z, 5);
|
||||
FeatureOreVein.redstoneGen.generateVein(world, random, x, y, z + 1, 5);
|
||||
FeatureOreVein.redstoneGen.generateVein(world, random, x, y, z - 1, 5);
|
||||
}
|
||||
},
|
||||
INFERNAL(HiveType.INFERNAL, 50.0f, new HiveGenNether(0, 175, 6), true, BiomeDictionary.Type.NETHER) {
|
||||
|
||||
@Override
|
||||
public void postGen(World world, int x, int y, int z) {
|
||||
super.postGen(world, x, y, z);
|
||||
Random random = world.rand;
|
||||
FeatureOreVein.netherQuartzGen.generateVein(world, random, x + 1, y, z, 4);
|
||||
FeatureOreVein.netherQuartzGen.generateVein(world, random, x - 1, y, z, 4);
|
||||
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y + 1, z, 4);
|
||||
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y - 1, z, 4);
|
||||
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y, z + 1, 4);
|
||||
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y, z - 1, 4);
|
||||
}
|
||||
},
|
||||
INFERNAL_OVERWORLD(HiveType.INFERNAL, 0.95f, new HiveGenUnderground(5, 13, 6), true, BiomeDictionary.Type.MAGICAL,
|
||||
BiomeDictionary.Type.HOT) {
|
||||
|
||||
@Override
|
||||
public void postGen(World world, int x, int y, int z) {
|
||||
super.postGen(world, x, y, z);
|
||||
Random random = world.rand;
|
||||
FeatureOreVein.glowstoneGen.generateVein(world, random, x + 1, y, z, world.rand.nextInt(4) + 1);
|
||||
FeatureOreVein.glowstoneGen.generateVein(world, random, x - 1, y, z, world.rand.nextInt(4) + 1);
|
||||
|
||||
if (BlockUtil.canBlockReplaceAt(world, x, y + 1, z, Blocks.stone)) {
|
||||
world.setBlock(x, y + 1, z, Blocks.glowstone, 0, 3);
|
||||
}
|
||||
|
||||
if (BlockUtil.canBlockReplaceAt(world, x, y - 1, z, Blocks.stone)) {
|
||||
world.setBlock(x, y - 1, z, Blocks.glowstone, 0, 3);
|
||||
}
|
||||
|
||||
FeatureOreVein.glowstoneGen.generateVein(world, random, x, y, z + 1, world.rand.nextInt(4) + 1);
|
||||
FeatureOreVein.glowstoneGen.generateVein(world, random, x, y, z - 1, world.rand.nextInt(4) + 1);
|
||||
}
|
||||
},
|
||||
OBLIVION(HiveType.OBLIVION, 20.0f, new HiveGenOblivion(), true, BiomeDictionary.Type.END) {
|
||||
|
||||
@Override
|
||||
public void postGen(World world, int x, int y, int z) {
|
||||
super.postGen(world, x, y, z);
|
||||
int obsidianSpikeHeight = world.rand.nextInt(8) + 3;
|
||||
|
||||
for (int i = 1; i < obsidianSpikeHeight && y - i > 0; ++i) {
|
||||
world.setBlock(x, y - i, z, Blocks.obsidian, 0, 2);
|
||||
}
|
||||
}
|
||||
},
|
||||
OBLIVION_OVERWORLD(HiveType.OBLIVION, 0.87f, new HiveGenUnderground(5, 5, 5), true, BiomeDictionary.Type.MAGICAL,
|
||||
BiomeDictionary.Type.COLD) {
|
||||
|
||||
@Override
|
||||
public void postGen(World world, int x, int y, int z) {
|
||||
super.postGen(world, x, y, z);
|
||||
Random random = world.rand;
|
||||
|
||||
FeatureOreVein.endStoneGen.generateVein(world, random, x + 1, y, z, world.rand.nextInt(6) + 1);
|
||||
FeatureOreVein.endStoneGen.generateVein(world, random, x - 1, y, z, world.rand.nextInt(6) + 1);
|
||||
FeatureOreVein.endStoneGen.generateVein(world, random, x, y + 1, z, world.rand.nextInt(3) + 1);
|
||||
FeatureOreVein.endStoneGen.generateVein(world, random, x, y - 1, z, world.rand.nextInt(3) + 1);
|
||||
FeatureOreVein.endStoneGen.generateVein(world, random, x, y, z + 1, world.rand.nextInt(6) + 1);
|
||||
FeatureOreVein.endStoneGen.generateVein(world, random, x, y, z - 1, world.rand.nextInt(6) + 1);
|
||||
}
|
||||
};
|
||||
|
||||
private static boolean logSpawns = Config.logHiveSpawns;
|
||||
|
||||
private final HiveType hiveType;
|
||||
private final float genChance;
|
||||
private final List<BiomeDictionary.Type> biomes = new ArrayList<BiomeDictionary.Type>();
|
||||
private final IHiveGen hiveGen;
|
||||
private final boolean spawnsIgnoreClimate;
|
||||
|
||||
private HiveDescription(HiveType type, float chance, IHiveGen genType, boolean ignoreClimate,
|
||||
BiomeDictionary.Type... goodBiomeTypes) {
|
||||
hiveType = type;
|
||||
genChance = chance;
|
||||
hiveGen = genType;
|
||||
spawnsIgnoreClimate = ignoreClimate;
|
||||
for (BiomeDictionary.Type biomeType : goodBiomeTypes) {
|
||||
biomes.add(biomeType);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IHiveGen getHiveGen() {
|
||||
return hiveGen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block getBlock() {
|
||||
return Config.hive;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMeta() {
|
||||
return hiveType.ordinal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGoodBiome(BiomeGenBase biome) {
|
||||
BiomeDictionary.Type[] types = BiomeDictionary.getTypesForBiome(biome);
|
||||
for (BiomeDictionary.Type type : types) {
|
||||
if (biomes.contains(type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGoodHumidity(EnumHumidity humidity) {
|
||||
return spawnsIgnoreClimate || hiveType.getOccupant().canWorkInHumidity(humidity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGoodTemperature(EnumTemperature temperature) {
|
||||
return spawnsIgnoreClimate || hiveType.getOccupant().canWorkInTemperature(temperature);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getGenChance() {
|
||||
return genChance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postGen(World world, int x, int y, int z) {
|
||||
if (logSpawns) {
|
||||
LogHelper.info(
|
||||
"Spawned " + this.toString()
|
||||
.toLowerCase(Locale.ENGLISH) + " hive at: X " + x + ", Y: " + y + ", Z: " + z);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.apiculture.EnumBeeType;
|
||||
import forestry.api.apiculture.IBee;
|
||||
import forestry.api.apiculture.IHiveDrop;
|
||||
import forestry.api.genetics.IAllele;
|
||||
|
||||
public class HiveDrop implements IHiveDrop {
|
||||
|
||||
private IAllele[] template;
|
||||
private int chance;
|
||||
private ItemStack[] bonus;
|
||||
private float ignoblePercent = 0f;
|
||||
|
||||
public HiveDrop(IAllele[] beeTemplate, ItemStack[] bonusDrops, int dropChance) {
|
||||
this.template = beeTemplate;
|
||||
this.bonus = bonusDrops;
|
||||
this.chance = dropChance;
|
||||
}
|
||||
|
||||
public HiveDrop setIgnoblePercentage(float f) {
|
||||
this.ignoblePercent = f;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
private IBee getBee(World w) {
|
||||
IBee bee = BeeManager.beeRoot.getBee(w, BeeManager.beeRoot.templateAsGenome(this.template));
|
||||
if (w.rand.nextFloat() < this.ignoblePercent) {
|
||||
bee.setIsNatural(false);
|
||||
}
|
||||
|
||||
return bee;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPrincess(World world, int x, int y, int z, int fortune) {
|
||||
return BeeManager.beeRoot.getMemberStack(getBee(world), EnumBeeType.PRINCESS.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> getDrones(World world, int x, int y, int z, int fortune) {
|
||||
ArrayList<ItemStack> value = new ArrayList<ItemStack>(1);
|
||||
value.add(BeeManager.beeRoot.getMemberStack(getBee(world), EnumBeeType.DRONE.ordinal()));
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<ItemStack> getAdditional(World world, int x, int y, int z, int fortune) {
|
||||
ArrayList<ItemStack> value = new ArrayList<ItemStack>(bonus.length);
|
||||
|
||||
for (int i = 0; i < bonus.length; ++i) {
|
||||
value.add(bonus[i].copy());
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getChance(World world, int x, int y, int z) {
|
||||
return this.chance;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
|
||||
import forestry.api.apiculture.IBee;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeekeepingMode;
|
||||
import forestry.api.apiculture.IHiveFrame;
|
||||
import forestry.apiculture.inventory.IApiaryInventory;
|
||||
import magicbees.main.utils.ItemStackUtils;
|
||||
import magicbees.tileentity.TileEntityMagicApiary;
|
||||
|
||||
public class MagicApiaryInventory implements IApiaryInventory {
|
||||
|
||||
public static final int SLOT_QUEEN = 0;
|
||||
public static final int SLOT_DRONE = 1;
|
||||
public static final int SLOT_FRAME_START = 2;
|
||||
public static final int SLOT_FRAME_COUNT = 3;
|
||||
public static final int SLOT_PRODUCTS_START = 5;
|
||||
public static final int SLOT_PRODUCTS_COUNT = 7;
|
||||
|
||||
private final TileEntityMagicApiary magicApiary;
|
||||
private final ItemStack[] items;
|
||||
|
||||
public MagicApiaryInventory(TileEntityMagicApiary magicApiary) {
|
||||
this.magicApiary = magicApiary;
|
||||
this.items = new ItemStack[12];
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getQueen() {
|
||||
return magicApiary.getStackInSlot(SLOT_QUEEN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getDrone() {
|
||||
return magicApiary.getStackInSlot(SLOT_DRONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setQueen(ItemStack itemstack) {
|
||||
magicApiary.setInventorySlotContents(SLOT_QUEEN, itemstack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDrone(ItemStack itemstack) {
|
||||
magicApiary.setInventorySlotContents(SLOT_DRONE, itemstack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addProduct(ItemStack product, boolean all) {
|
||||
int countAdded = ItemStackUtils
|
||||
.addItemToInventory(magicApiary, product, SLOT_PRODUCTS_START, SLOT_PRODUCTS_COUNT);
|
||||
|
||||
if (all) {
|
||||
return countAdded == product.stackSize;
|
||||
}
|
||||
return countAdded > 0;
|
||||
}
|
||||
|
||||
public int getSizeInventory() {
|
||||
return items.length;
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlot(int i) {
|
||||
return items[i];
|
||||
}
|
||||
|
||||
public void setInventorySlotContents(int i, ItemStack itemStack) {
|
||||
items[i] = itemStack;
|
||||
if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) {
|
||||
itemStack.stackSize = getInventoryStackLimit();
|
||||
}
|
||||
}
|
||||
|
||||
public int[] getAccessibleSlotsFromSide(int side) {
|
||||
int[] slots = new int[SLOT_PRODUCTS_COUNT + 2];
|
||||
slots[0] = SLOT_QUEEN;
|
||||
slots[1] = SLOT_DRONE;
|
||||
for (int i = 0, slot = SLOT_PRODUCTS_START; i < SLOT_PRODUCTS_COUNT; ++i, ++slot) {
|
||||
slots[i + 2] = slot;
|
||||
}
|
||||
return slots;
|
||||
}
|
||||
|
||||
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
|
||||
if (slot == SLOT_QUEEN && BeeManager.beeRoot.isMember(itemStack) && !BeeManager.beeRoot.isDrone(itemStack)) {
|
||||
return true;
|
||||
} else if (slot == SLOT_DRONE && BeeManager.beeRoot.isDrone(itemStack)) {
|
||||
return true;
|
||||
}
|
||||
return slot == SLOT_DRONE && BeeManager.beeRoot.isDrone(itemStack);
|
||||
}
|
||||
|
||||
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
|
||||
return slot >= SLOT_PRODUCTS_START && slot <= SLOT_PRODUCTS_START + SLOT_PRODUCTS_COUNT;
|
||||
}
|
||||
|
||||
public int getInventoryStackLimit() {
|
||||
return 64;
|
||||
}
|
||||
|
||||
public Collection<IHiveFrame> getFrames() {
|
||||
Collection<IHiveFrame> hiveFrames = new ArrayList<IHiveFrame>(SLOT_FRAME_COUNT);
|
||||
for (int i = SLOT_FRAME_START; i < SLOT_FRAME_START + SLOT_FRAME_COUNT; i++) {
|
||||
ItemStack stackInSlot = magicApiary.getStackInSlot(i);
|
||||
if (stackInSlot == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Item itemInSlot = stackInSlot.getItem();
|
||||
if (itemInSlot instanceof IHiveFrame) {
|
||||
hiveFrames.add((IHiveFrame) itemInSlot);
|
||||
}
|
||||
}
|
||||
return hiveFrames;
|
||||
}
|
||||
|
||||
public void wearOutFrames(IBeeHousing beeHousing, int amount) {
|
||||
IBeekeepingMode beekeepingMode = BeeManager.beeRoot.getBeekeepingMode(magicApiary.getWorldObj());
|
||||
int wear = Math.round(amount * beekeepingMode.getWearModifier());
|
||||
for (int i = MagicApiaryInventory.SLOT_FRAME_START; i
|
||||
< MagicApiaryInventory.SLOT_FRAME_START + MagicApiaryInventory.SLOT_FRAME_COUNT; i++) {
|
||||
ItemStack hiveFrameStack = magicApiary.getStackInSlot(i);
|
||||
if (hiveFrameStack == null) {
|
||||
continue;
|
||||
}
|
||||
Item hiveFrameItem = hiveFrameStack.getItem();
|
||||
if (!(hiveFrameItem instanceof IHiveFrame)) {
|
||||
continue;
|
||||
}
|
||||
IHiveFrame hiveFrame = (IHiveFrame) hiveFrameItem;
|
||||
ItemStack queenStack = magicApiary.getBeeInventory().getQueen();
|
||||
IBee queen = BeeManager.beeRoot.getMember(queenStack);
|
||||
ItemStack usedFrame = hiveFrame.frameUsed(magicApiary, hiveFrameStack, queen, wear);
|
||||
magicApiary.setInventorySlotContents(i, usedFrame);
|
||||
}
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound compound) {
|
||||
NBTTagList itemsNBT = new NBTTagList();
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
ItemStack itemStack = items[i];
|
||||
if (itemStack != null) {
|
||||
NBTTagCompound item = new NBTTagCompound();
|
||||
item.setByte("Slot", (byte) i);
|
||||
itemStack.writeToNBT(item);
|
||||
itemsNBT.appendTag(item);
|
||||
}
|
||||
}
|
||||
compound.setTag("Items", itemsNBT);
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound compound) {
|
||||
NBTTagList items = compound.getTagList("Items", Constants.NBT.TAG_COMPOUND);
|
||||
for (int i = 0; i < items.tagCount(); i++) {
|
||||
NBTTagCompound item = items.getCompoundTagAt(i);
|
||||
int slot = item.getByte("Slot");
|
||||
if (slot >= 0 && slot < getSizeInventory()) {
|
||||
setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.core.IClimateProvider;
|
||||
import forestry.api.genetics.IAllele;
|
||||
import forestry.api.genetics.IGenome;
|
||||
import forestry.api.genetics.IMutationCondition;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.MoonPhase;
|
||||
|
||||
// There is a bonus to this mutation during moon phases...
|
||||
public class MoonPhaseMutationBonus implements IMutationCondition {
|
||||
|
||||
private final MoonPhase moonPhaseStart;
|
||||
private final MoonPhase moonPhaseEnd;
|
||||
private final float mutationBonus;
|
||||
|
||||
public MoonPhaseMutationBonus(MoonPhase phase, float bonus) {
|
||||
this.moonPhaseStart = phase;
|
||||
this.moonPhaseEnd = phase;
|
||||
this.mutationBonus = bonus;
|
||||
}
|
||||
|
||||
public MoonPhaseMutationBonus(MoonPhase start, MoonPhase end, float bonus) {
|
||||
this.moonPhaseStart = start;
|
||||
this.moonPhaseEnd = end;
|
||||
this.mutationBonus = bonus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
|
||||
IGenome genome1, IClimateProvider climate) {
|
||||
if (MoonPhase.getMoonPhase(world).isBetween(this.moonPhaseStart, this.moonPhaseEnd)) {
|
||||
return this.mutationBonus;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
if (this.moonPhaseStart != this.moonPhaseEnd) {
|
||||
return String.format(
|
||||
LocalizationManager.getLocalizedString("research.bonusPhase"),
|
||||
moonPhaseStart.getLocalizedNameAlt(),
|
||||
moonPhaseEnd.getLocalizedNameAlt());
|
||||
} else {
|
||||
return String.format(
|
||||
LocalizationManager.getLocalizedString("research.bonusPhaseSingle"),
|
||||
moonPhaseStart.getLocalizedName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package magicbees.bees;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.core.IClimateProvider;
|
||||
import forestry.api.genetics.IAllele;
|
||||
import forestry.api.genetics.IGenome;
|
||||
import forestry.api.genetics.IMutationCondition;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.MoonPhase;
|
||||
|
||||
public class MoonPhaseMutationRestriction implements IMutationCondition {
|
||||
|
||||
private final MoonPhase moonPhaseStart;
|
||||
private final MoonPhase moonPhaseEnd;
|
||||
|
||||
public MoonPhaseMutationRestriction(MoonPhase phase) {
|
||||
this.moonPhaseStart = phase;
|
||||
this.moonPhaseEnd = phase;
|
||||
}
|
||||
|
||||
public MoonPhaseMutationRestriction(MoonPhase start, MoonPhase end) {
|
||||
this.moonPhaseStart = start;
|
||||
this.moonPhaseEnd = end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
|
||||
IGenome genome1, IClimateProvider climate) {
|
||||
if (MoonPhase.getMoonPhase(world).isBetween(this.moonPhaseStart, this.moonPhaseEnd)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
if (moonPhaseStart != moonPhaseEnd) {
|
||||
return String.format(
|
||||
LocalizationManager.getLocalizedString("research.requiresPhase"),
|
||||
moonPhaseStart.getLocalizedNameAlt(),
|
||||
moonPhaseEnd.getLocalizedNameAlt());
|
||||
} else {
|
||||
return String.format(
|
||||
LocalizationManager.getLocalizedString("research.requiresPhaseSingle"),
|
||||
moonPhaseStart.getLocalizedName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
|
||||
public class AlleleEffectCrumbling extends AlleleEffect {
|
||||
|
||||
private static HashMap<ItemStack, ItemStack> crumbleMap = new HashMap<ItemStack, ItemStack>();
|
||||
|
||||
public static void addPairToMap(ItemStack source, ItemStack target) {
|
||||
boolean add = true;
|
||||
for (ItemStack i : crumbleMap.keySet()) {
|
||||
if (OreDictionary.itemMatches(i, source, false)) {
|
||||
add = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (add) {
|
||||
crumbleMap.put(source, target);
|
||||
}
|
||||
}
|
||||
|
||||
public AlleleEffectCrumbling(String id, boolean isDominant) {
|
||||
super(id, isDominant, 600);
|
||||
|
||||
addPairToMap(new ItemStack(Blocks.stone), new ItemStack(Blocks.cobblestone));
|
||||
addPairToMap(new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.mossy_cobblestone));
|
||||
addPairToMap(new ItemStack(Blocks.stonebrick, 1, 0), new ItemStack(Blocks.stonebrick, 1, 2));
|
||||
addPairToMap(new ItemStack(Blocks.stonebrick, 1, 2), new ItemStack(Blocks.stonebrick, 1, 1));
|
||||
addPairToMap(new ItemStack(Blocks.cobblestone_wall), new ItemStack(Blocks.cobblestone_wall, 1, 1));
|
||||
addPairToMap(new ItemStack(Blocks.gravel), new ItemStack(Blocks.sand));
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
|
||||
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
|
||||
// Get random coords within territory
|
||||
int[] randomCoords = new int[3];
|
||||
for (int i = 0; i < 3; i++) {
|
||||
int range = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[i]);
|
||||
if (range > 0) {
|
||||
randomCoords[i] = world.rand.nextInt(range) - range / 2;
|
||||
}
|
||||
}
|
||||
|
||||
int xCoord = coords.posX + randomCoords[0];
|
||||
int yCoord = coords.posY + randomCoords[1];
|
||||
int zCoord = coords.posZ + randomCoords[2];
|
||||
|
||||
Block block = world.getBlock(xCoord, yCoord, zCoord);
|
||||
if (block != null) {
|
||||
ItemStack source = new ItemStack(block, 1, world.getBlockMetadata(xCoord, yCoord, zCoord));
|
||||
for (ItemStack key : crumbleMap.keySet()) {
|
||||
if (OreDictionary.itemMatches(source, key, false)) {
|
||||
ItemStack target = crumbleMap.get(key);
|
||||
world.setBlock(
|
||||
xCoord,
|
||||
yCoord,
|
||||
zCoord,
|
||||
Block.getBlockFromItem(target.getItem()),
|
||||
target.getItemDamage(),
|
||||
2);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
storedData.setInteger(0, 0);
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
|
||||
public class AlleleEffectCure extends AlleleEffect {
|
||||
|
||||
public AlleleEffectCure(String id, boolean isDominant) {
|
||||
super(id, isDominant, 200);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null) {
|
||||
storedData = new EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
List<EntityPlayer> entityList = this.getEntitiesWithinRange(genome, housing, EntityPlayer.class);
|
||||
|
||||
for (EntityPlayer player : entityList) {
|
||||
player.curePotionEffects(new ItemStack(Items.milk_bucket));
|
||||
}
|
||||
storedData.setInteger(0, 0);
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import static magicbees.main.utils.compat.thaumcraft.NodeHelper.getWeightedRandomAspect;
|
||||
import static magicbees.main.utils.compat.thaumcraft.NodeHelper.updateNode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
|
||||
import forestry.api.apiculture.IAlleleBeeAcceleratableEffect;
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.BlockUtil;
|
||||
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
|
||||
import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.nodes.INode;
|
||||
|
||||
public class AlleleEffectEmpowering extends AlleleEffect implements IAlleleBeeAcceleratableEffect {
|
||||
|
||||
public AlleleEffectEmpowering(String id, boolean isDominant) {
|
||||
super(id, isDominant, 200);
|
||||
combinable = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (!(storedData instanceof EffectData)) {
|
||||
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
int range = Math
|
||||
.max((int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f)), 1);
|
||||
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
|
||||
|
||||
if (NodeHelper.growNodeInRange(chunks, world, coords.posX, coords.posY, coords.posZ, range)) {
|
||||
storedData.setInteger(0, storedData.getInteger(0) - throttle);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData doEffectAccelerated(IBeeGenome genome, IEffectData storedData, IBeeHousing housing, float did) {
|
||||
storedData.setInteger(0, 0);
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
int range = Math
|
||||
.max((int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f)), 1);
|
||||
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
|
||||
|
||||
int idid = (int) did;
|
||||
|
||||
List<INode> nodes = new ArrayList<>(idid);
|
||||
Collections.shuffle(chunks);
|
||||
for (Chunk chunk : chunks) {
|
||||
List<INode> l = NodeHelper.findNodesInChunkWithinRange(chunk, coords.posX, coords.posY, coords.posZ, range);
|
||||
nodes.addAll(l);
|
||||
idid -= l.size();
|
||||
if (idid <= 0) {
|
||||
while (idid < 0) {
|
||||
nodes.remove(0);
|
||||
idid++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (nodes.isEmpty()) return storedData;
|
||||
|
||||
did /= (float) nodes.size();
|
||||
if (did < 1f) did = 1f;
|
||||
|
||||
for (INode node : nodes) {
|
||||
AspectList aspectsBase = node.getAspectsBase();
|
||||
int randBase = Math.max(aspectsBase.visSize(), 1);
|
||||
if (world.rand.nextInt(randBase) < 120) {
|
||||
Aspect aspectToAdd;
|
||||
int rollAttempts = 0;
|
||||
short amount = (short) Math
|
||||
.min((int) did + world.rand.nextInt((int) (2f * did)), Config.thaumcraftNodeMaxSize);
|
||||
do {
|
||||
aspectToAdd = getWeightedRandomAspect(world.rand);
|
||||
++rollAttempts;
|
||||
} while (aspectsBase.getAmount(aspectToAdd) > (Config.thaumcraftNodeMaxSize - 1) && rollAttempts < 20);
|
||||
|
||||
if (20 <= rollAttempts) {
|
||||
continue;
|
||||
}
|
||||
|
||||
amount = (short) Math.min(Config.thaumcraftNodeMaxSize - aspectsBase.getAmount(aspectToAdd), amount);
|
||||
|
||||
aspectsBase.add(aspectToAdd, amount);
|
||||
node.getAspects().add(aspectToAdd, amount);
|
||||
updateNode(node, world);
|
||||
}
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
import magicbees.main.utils.BlockUtil;
|
||||
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
|
||||
import thaumcraft.api.nodes.NodeType;
|
||||
|
||||
public class AlleleEffectNodeConversion extends AlleleEffect {
|
||||
|
||||
private NodeType targetType;
|
||||
|
||||
public AlleleEffectNodeConversion(String id, NodeType targetNodeType, boolean isDominant, int timeout) {
|
||||
super(id, isDominant, timeout);
|
||||
targetType = targetNodeType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
|
||||
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
int range = (int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f));
|
||||
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
|
||||
|
||||
if (NodeHelper
|
||||
.convertNodeInRangeToType(chunks, world, coords.posX, coords.posY, coords.posZ, range, targetType)) {
|
||||
storedData.setInteger(0, storedData.getInteger(0) - throttle);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
import magicbees.main.utils.BlockUtil;
|
||||
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
|
||||
|
||||
public class AlleleEffectNodeRepair extends AlleleEffect {
|
||||
|
||||
public AlleleEffectNodeRepair(String id, boolean isDominant) {
|
||||
super(id, isDominant, 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
|
||||
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
int range = (int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f));
|
||||
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
|
||||
|
||||
if (NodeHelper.repairNodeInRange(chunks, world, coords.posX, coords.posY, coords.posZ, range)) {
|
||||
storedData.setInteger(0, storedData.getInteger(0) - throttle);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
|
||||
public class AlleleEffectPlaceholder extends AlleleEffect {
|
||||
|
||||
public AlleleEffectPlaceholder(String id, boolean isDominant) {
|
||||
super(id, isDominant, 100000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
|
||||
import forestry.api.apiculture.BeeManager;
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
|
||||
public class AlleleEffectPotion extends AlleleEffect {
|
||||
|
||||
private int potionId;
|
||||
private int duration;
|
||||
private boolean isMalicious;
|
||||
|
||||
public AlleleEffectPotion(String name, Potion potionApplied, int effectDuration, boolean isDominant) {
|
||||
super(name, isDominant, 200);
|
||||
this.potionId = potionApplied.id;
|
||||
this.duration = 20 * effectDuration;
|
||||
this.isMalicious = false;
|
||||
}
|
||||
|
||||
public AlleleEffectPotion setMalicious() {
|
||||
this.isMalicious = true;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null) {
|
||||
storedData = new EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
List<EntityLivingBase> entityList = this.getEntitiesWithinRange(genome, housing, EntityLivingBase.class);
|
||||
|
||||
for (EntityLivingBase e : entityList) {
|
||||
if (this.isMalicious) {
|
||||
int armorPieces = BeeManager.armorApiaristHelper.wearsItems(e, getUID(), true);
|
||||
int finalDuration = this.duration / 4 * (4 - armorPieces);
|
||||
if (finalDuration > 0) {
|
||||
e.addPotionEffect(new PotionEffect(this.potionId, finalDuration, 0));
|
||||
}
|
||||
} else {
|
||||
if (e instanceof EntityPlayer) {
|
||||
e.addPotionEffect(new PotionEffect(this.potionId, this.duration, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
storedData.setInteger(0, 0);
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import static magicbees.main.utils.compat.thaumcraft.NodeHelper.updateNode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
|
||||
import forestry.api.apiculture.IAlleleBeeAcceleratableEffect;
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
import magicbees.main.utils.BlockUtil;
|
||||
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
|
||||
import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.nodes.INode;
|
||||
|
||||
public class AlleleEffectRecharge extends AlleleEffect implements IAlleleBeeAcceleratableEffect {
|
||||
|
||||
public AlleleEffectRecharge(String id, boolean isDominant) {
|
||||
super(id, isDominant, 20);
|
||||
combinable = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (!(storedData instanceof EffectData)) {
|
||||
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
int range = (int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f));
|
||||
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
|
||||
|
||||
if (NodeHelper.rechargeNodeInRange(chunks, world, coords.posX, coords.posY, coords.posZ, range)) {
|
||||
storedData.setInteger(0, storedData.getInteger(0) - throttle);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData doEffectAccelerated(IBeeGenome genome, IEffectData storedData, IBeeHousing housing, float did) {
|
||||
storedData.setInteger(0, 0);
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
int range = Math
|
||||
.max((int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f)), 1);
|
||||
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
|
||||
|
||||
int idid = (int) did;
|
||||
|
||||
List<INode> nodes = new ArrayList<>(idid);
|
||||
Collections.shuffle(chunks);
|
||||
for (Chunk chunk : chunks) {
|
||||
List<INode> l = NodeHelper.findNodesInChunkWithinRange(chunk, coords.posX, coords.posY, coords.posZ, range);
|
||||
nodes.addAll(l);
|
||||
idid -= l.size();
|
||||
if (idid <= 0) {
|
||||
while (idid < 0) {
|
||||
nodes.remove(0);
|
||||
idid++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (nodes.isEmpty()) return storedData;
|
||||
|
||||
did /= (float) nodes.size();
|
||||
if (did < 1f) did = 1f;
|
||||
|
||||
for (INode node : nodes) {
|
||||
AspectList baseAspects = node.getAspectsBase();
|
||||
AspectList currentAspects = node.getAspects();
|
||||
|
||||
HashMap<Aspect, Integer> toAdd = new HashMap<>();
|
||||
int total = 0;
|
||||
|
||||
for (Map.Entry<Aspect, Integer> aspect : baseAspects.aspects.entrySet()) {
|
||||
int diff = aspect.getValue() - currentAspects.getAmount(aspect.getKey());
|
||||
if (diff <= 0) continue;
|
||||
toAdd.put(aspect.getKey(), diff);
|
||||
total += diff;
|
||||
}
|
||||
|
||||
if (total == 0) continue;
|
||||
|
||||
int amount = Math.min(total + world.rand.nextInt(total), (int) did);
|
||||
if (amount <= 0) amount = 1;
|
||||
|
||||
for (Map.Entry<Aspect, Integer> aspect : toAdd.entrySet()) {
|
||||
currentAspects.add(aspect.getKey(), Math.min(aspect.getValue(), amount));
|
||||
}
|
||||
|
||||
updateNode(node, world);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
|
||||
public class AlleleEffectSpawnMob extends AlleleEffect {
|
||||
|
||||
protected boolean aggosOnPlayer;
|
||||
protected boolean spawnsWhilePlayerNear;
|
||||
protected String alternateMob;
|
||||
protected String mobName;
|
||||
protected String mobSound;
|
||||
protected int chanceToSpawn;
|
||||
protected int maxMobsInArea;
|
||||
|
||||
public AlleleEffectSpawnMob(String id, boolean isDominant, String mobToSpawn) {
|
||||
this(id, isDominant, mobToSpawn, null);
|
||||
}
|
||||
|
||||
public AlleleEffectSpawnMob(String id, boolean isDominant, String mobToSpawn, String mobSoundFx) {
|
||||
super(id, isDominant, 200);
|
||||
this.aggosOnPlayer = false;
|
||||
this.mobName = mobToSpawn;
|
||||
this.chanceToSpawn = 100;
|
||||
this.maxMobsInArea = 6;
|
||||
this.mobSound = mobSoundFx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
|
||||
// Throttle; Ready to spawn
|
||||
storedData = new EffectData(1, 1, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
// Check if we're ready to spawn the mob.
|
||||
boolean didSpawn = false;
|
||||
if (storedData.getBoolean(0)) {
|
||||
World w = housing.getWorld();
|
||||
|
||||
int roll = w.rand.nextInt(100);
|
||||
|
||||
if (roll <= chanceToSpawn) {
|
||||
if (spawnsWhilePlayerNear) {
|
||||
EntityPlayer target = findPlayerTarget(genome, housing);
|
||||
|
||||
// Let's spawn a mob. =D
|
||||
if (target != null) {
|
||||
didSpawn = spawnMob(genome, target, w, housing, false);
|
||||
} else if (alternateMob != null) {
|
||||
didSpawn = spawnMob(genome, null, w, housing, true);
|
||||
}
|
||||
} else {
|
||||
storedData.setBoolean(0, !this.spawnMob(genome, null, w, housing, true));
|
||||
}
|
||||
} else {
|
||||
playMobLiveSound(genome, housing, w);
|
||||
didSpawn = true;
|
||||
}
|
||||
|
||||
if (didSpawn) {
|
||||
storedData.setBoolean(0, !didSpawn);
|
||||
storedData.setInteger(0, storedData.getInteger(0) - throttle);
|
||||
}
|
||||
} else {
|
||||
storedData.setBoolean(0, true);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
|
||||
private void playMobLiveSound(IBeeGenome genome, IBeeHousing housing, World w) {
|
||||
if (mobSound != null && w.rand.nextInt(100) < 35) {
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
|
||||
int range = genome.getTerritory()[0];
|
||||
double x = coords.posX + w.rand.nextDouble() * (range * 2) - range;
|
||||
range = genome.getTerritory()[1];
|
||||
double y = coords.posY + w.rand.nextDouble() * (range * 2) - range;
|
||||
range = genome.getTerritory()[2];
|
||||
double z = coords.posZ + w.rand.nextDouble() * (range * 2) - range;
|
||||
w.playSoundEffect(x, y, z, this.mobSound, 0.5f, (w.rand.nextFloat() - w.rand.nextFloat()) * 0.2f + 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
private EntityPlayer findPlayerTarget(IBeeGenome genome, IBeeHousing housing) {
|
||||
List<EntityPlayer> entities = getEntitiesWithinRange(genome, housing, EntityPlayer.class);
|
||||
for (EntityPlayer e : entities) {
|
||||
// Check for wearing armor & cancel
|
||||
// Full armor suit is treated as "invisible."
|
||||
if (forestry.api.apiculture.BeeManager.armorApiaristHelper.wearsItems((EntityLivingBase) e, getUID(), true)
|
||||
< 4) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected boolean spawnMob(IBeeGenome bee, EntityPlayer player, World world, IBeeHousing housing,
|
||||
boolean spawnAlternate) {
|
||||
boolean spawnedFlag = false;
|
||||
|
||||
EntityLiving mob;
|
||||
if (spawnAlternate && alternateMob != null) {
|
||||
mob = (EntityLiving) EntityList.createEntityByName(alternateMob, world);
|
||||
} else {
|
||||
mob = (EntityLiving) EntityList.createEntityByName(mobName, world);
|
||||
}
|
||||
|
||||
if (mob != null) {
|
||||
double pos[] = this.randomMobSpawnCoords(world, bee, housing);
|
||||
|
||||
int entitiesCount = world.getEntitiesWithinAABB(
|
||||
mob.getClass(),
|
||||
AxisAlignedBB.getBoundingBox(
|
||||
(int) pos[0],
|
||||
(int) pos[1],
|
||||
(int) pos[2],
|
||||
(int) pos[0] + 1,
|
||||
(int) pos[1] + 1,
|
||||
(int) pos[2] + 1).expand(8.0D, 4.0D, 8.0D))
|
||||
.size();
|
||||
|
||||
mob.setPositionAndRotation(pos[0], pos[1], pos[2], world.rand.nextFloat() * 360f, 0f);
|
||||
|
||||
if (entitiesCount < maxMobsInArea && mob.getCanSpawnHere()) {
|
||||
spawnedFlag = world.spawnEntityInWorld(mob);
|
||||
if (aggosOnPlayer && player != null) {
|
||||
if (forestry.api.apiculture.BeeManager.armorApiaristHelper
|
||||
.wearsItems((EntityLivingBase) player, getUID(), true) < 4) {
|
||||
// Protect fully suited player from initial murder intent.
|
||||
mob.setAttackTarget(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return spawnedFlag;
|
||||
}
|
||||
|
||||
public AlleleEffectSpawnMob setSpawnsOnPlayerNear(String alternateMobToSpawn) {
|
||||
spawnsWhilePlayerNear = true;
|
||||
alternateMob = alternateMobToSpawn;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AlleleEffectSpawnMob setAggrosPlayerOnSpawn() {
|
||||
aggosOnPlayer = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AlleleEffectSpawnMob setThrottle(int val) {
|
||||
throttle = val;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AlleleEffectSpawnMob setChanceToSpawn(int value) {
|
||||
chanceToSpawn = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AlleleEffectSpawnMob setMaxMobsInSpawnZone(int value) {
|
||||
maxMobsInArea = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
protected double[] randomMobSpawnCoords(World world, IBeeGenome bee, IBeeHousing housing) {
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
|
||||
double pos[] = new double[3];
|
||||
pos[0] = coords.posX
|
||||
+ (world.rand.nextDouble() * (bee.getTerritory()[0] * beeModifier.getTerritoryModifier(bee, 1f))
|
||||
- bee.getTerritory()[0] / 2);
|
||||
pos[1] = coords.posY + world.rand.nextInt(3) - 1;
|
||||
pos[2] = coords.posZ
|
||||
+ (world.rand.nextDouble() * (bee.getTerritory()[2] * beeModifier.getTerritoryModifier(bee, 1f))
|
||||
- bee.getTerritory()[2] / 2);
|
||||
return pos;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
|
||||
public class AlleleEffectSpawnMobWeighted extends AlleleEffect {
|
||||
|
||||
private String[] entityNames;
|
||||
private int[] spawnChance;
|
||||
|
||||
public AlleleEffectSpawnMobWeighted(String id, boolean isDominant, int throttle, String[] mobs, int[] chance) {
|
||||
super(id, isDominant, throttle);
|
||||
if (mobs.length != chance.length) {
|
||||
throw new IllegalArgumentException("Array lengths must be equal!");
|
||||
}
|
||||
this.entityNames = mobs;
|
||||
this.spawnChance = chance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
|
||||
storedData = new EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
if (this.spawnMob(genome, housing)) {
|
||||
storedData.setInteger(0, 0);
|
||||
}
|
||||
|
||||
return storedData;
|
||||
}
|
||||
|
||||
protected boolean spawnMob(IBeeGenome genome, IBeeHousing housing) {
|
||||
boolean flag = false;
|
||||
|
||||
World w = housing.getWorld();
|
||||
int roll = 0;
|
||||
|
||||
for (int i = 0; i < this.spawnChance.length && !flag; ++i) {
|
||||
roll = 100 - w.rand.nextInt(100) + 1;
|
||||
if (roll < this.spawnChance[i]) {
|
||||
Entity mob = EntityList.createEntityByName(this.entityNames[i], w);
|
||||
if (mob != null) {
|
||||
flag = true;
|
||||
double[] coords = this.randomMobSpawnCoords(w, genome, housing);
|
||||
|
||||
mob.setPositionAndRotation(coords[0], coords[1], coords[2], w.rand.nextFloat() * 360f, 0f);
|
||||
if (mob instanceof EntityLiving) {
|
||||
if (((EntityLiving) mob).getCanSpawnHere()) {
|
||||
w.spawnEntityInWorld(mob);
|
||||
}
|
||||
} else {
|
||||
w.spawnEntityInWorld(mob);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
protected double[] randomMobSpawnCoords(World world, IBeeGenome bee, IBeeHousing housing) {
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
|
||||
double pos[] = new double[3];
|
||||
pos[0] = coords.posX
|
||||
+ world.rand.nextDouble() * (bee.getTerritory()[0] * beeModifier.getTerritoryModifier(bee, 1f))
|
||||
- bee.getTerritory()[0] / 2;
|
||||
pos[1] = coords.posY
|
||||
+ world.rand.nextDouble() * (bee.getTerritory()[1] * beeModifier.getTerritoryModifier(bee, 1f))
|
||||
- bee.getTerritory()[1] / 2;
|
||||
pos[2] = coords.posZ
|
||||
+ world.rand.nextDouble() * (bee.getTerritory()[2] * beeModifier.getTerritoryModifier(bee, 1f))
|
||||
- bee.getTerritory()[2] / 2;
|
||||
return pos;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.apiculture.BeeManager;
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
|
||||
public class AlleleEffectSpawnWisp extends AlleleEffectSpawnMob {
|
||||
|
||||
private byte[] wispTypes = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25,
|
||||
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 };
|
||||
|
||||
public AlleleEffectSpawnWisp(String id, boolean isDominant, String mobToSpawn, String soundToPlay) {
|
||||
super(id, isDominant, mobToSpawn, soundToPlay);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean spawnMob(IBeeGenome bee, EntityPlayer player, World world, IBeeHousing housing,
|
||||
boolean spawnAlternate) {
|
||||
boolean spawnedFlag = false;
|
||||
|
||||
EntityLiving mob;
|
||||
if (spawnAlternate && this.alternateMob != null) {
|
||||
mob = (EntityLiving) EntityList.createEntityByName(this.alternateMob, world);
|
||||
} else {
|
||||
mob = (EntityLiving) EntityList.createEntityByName(this.mobName, world);
|
||||
}
|
||||
|
||||
if (mob != null) {
|
||||
double pos[] = this.randomMobSpawnCoords(world, bee, housing);
|
||||
|
||||
int entitiesCount = world.getEntitiesWithinAABB(
|
||||
mob.getClass(),
|
||||
AxisAlignedBB.getBoundingBox(
|
||||
(int) pos[0],
|
||||
(int) pos[1],
|
||||
(int) pos[2],
|
||||
(int) pos[0] + 1,
|
||||
(int) pos[1] + 1,
|
||||
(int) pos[2] + 1).expand(8.0D, 4.0D, 8.0D))
|
||||
.size();
|
||||
|
||||
mob.setPositionAndRotation(pos[0], pos[1], pos[2], world.rand.nextFloat() * 360f, 0f);
|
||||
|
||||
if (entitiesCount < this.maxMobsInArea && mob.getCanSpawnHere()) {
|
||||
// Try some Reflection on TC code. This could be dangerous.
|
||||
try {
|
||||
Class<?> wispEntity = Class.forName(ThaumcraftHelper.Entity.WISP.getClassName());
|
||||
Field type = wispEntity.getDeclaredField("type");
|
||||
type.setByte(mob, wispTypes[world.rand.nextInt(wispTypes.length)]);
|
||||
} catch (Exception e) {
|
||||
/*
|
||||
* Last time I had a request to post error messages, I regretted it.
|
||||
*/
|
||||
}
|
||||
|
||||
spawnedFlag = world.spawnEntityInWorld(mob);
|
||||
if (this.aggosOnPlayer && player != null) {
|
||||
if (BeeManager.armorApiaristHelper.wearsItems((EntityLivingBase) player, getUID(), true) < 4) {
|
||||
// Protect fully suited player from initial murder
|
||||
// intent.
|
||||
mob.setAttackTarget(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return spawnedFlag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ChunkCoordinates;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.apiculture.IBeeModifier;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import magicbees.bees.AlleleEffect;
|
||||
import magicbees.bees.BeeManager;
|
||||
|
||||
public class AlleleEffectTransmuting extends AlleleEffect {
|
||||
|
||||
private TransmutationEffectController transmutationController;
|
||||
|
||||
public AlleleEffectTransmuting(String id, boolean isDominant, TransmutationEffectController effectController,
|
||||
int timeoutBeeTicks) {
|
||||
super(id, isDominant, timeoutBeeTicks);
|
||||
this.transmutationController = effectController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IEffectData validateStorage(IEffectData storedData) {
|
||||
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
|
||||
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
|
||||
}
|
||||
return storedData;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
|
||||
World world = housing.getWorld();
|
||||
ChunkCoordinates coords = housing.getCoordinates();
|
||||
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
|
||||
|
||||
// Get random coords within territory
|
||||
int[] randomCoords = new int[3];
|
||||
for (int i = 0; i < 3; i++) {
|
||||
int range = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[i]);
|
||||
if (range > 0) {
|
||||
randomCoords[i] = world.rand.nextInt(range) - range / 2;
|
||||
}
|
||||
}
|
||||
|
||||
int xCoord = coords.posX + randomCoords[0];
|
||||
int yCoord = coords.posY + randomCoords[1];
|
||||
int zCoord = coords.posZ + randomCoords[2];
|
||||
|
||||
BiomeGenBase biome = world.getBiomeGenForCoords(xCoord, zCoord);
|
||||
transmutationController.attemptTransmutations(
|
||||
world,
|
||||
biome,
|
||||
new ItemStack(
|
||||
world.getBlock(xCoord, yCoord, zCoord),
|
||||
1,
|
||||
world.getBlockMetadata(xCoord, yCoord, zCoord)),
|
||||
xCoord,
|
||||
yCoord,
|
||||
zCoord);
|
||||
|
||||
storedData.setInteger(0, 0);
|
||||
|
||||
return storedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import forestry.api.genetics.IEffectData;
|
||||
|
||||
public class EffectData implements IEffectData {
|
||||
|
||||
private int[] intData;
|
||||
private boolean[] boolData;
|
||||
private float[] floatData;
|
||||
|
||||
public EffectData(int intCount, int boolCount, int floatCount) {
|
||||
this.intData = new int[intCount];
|
||||
this.boolData = new boolean[boolCount];
|
||||
this.floatData = new float[floatCount];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbttagcompound) {}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbttagcompound) {}
|
||||
|
||||
@Override
|
||||
public void setInteger(int index, int val) {
|
||||
if (index >= 0 && index < this.intData.length) {
|
||||
this.intData[index] = val;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFloat(int index, float val) {
|
||||
if (index >= 0 && index < this.floatData.length) {
|
||||
this.floatData[index] = val;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBoolean(int index, boolean val) {
|
||||
if (index >= 0 && index < this.boolData.length) {
|
||||
this.boolData[index] = val;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInteger(int index) {
|
||||
int val = 0;
|
||||
if (index >= 0 && index < this.intData.length) {
|
||||
val = this.intData[index];
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getFloat(int index) {
|
||||
float val = 0f;
|
||||
if (index >= 0 && index < this.floatData.length) {
|
||||
val = this.floatData[index];
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getBoolean(int index) {
|
||||
boolean val = false;
|
||||
if (index >= 0 && index < this.boolData.length) {
|
||||
val = this.boolData[index];
|
||||
}
|
||||
return val;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
|
||||
import magicbees.api.bees.ITransmutationEffectController;
|
||||
import magicbees.api.bees.ITransmutationEffectLogic;
|
||||
import magicbees.main.utils.LogHelper;
|
||||
|
||||
public class TransmutationEffectController implements ITransmutationEffectController {
|
||||
|
||||
private List<ITransmutationEffectLogic> logicObjects;
|
||||
|
||||
public TransmutationEffectController(ITransmutationEffectLogic... effectLogic) {
|
||||
logicObjects = new ArrayList<ITransmutationEffectLogic>();
|
||||
for (ITransmutationEffectLogic logic : effectLogic) {
|
||||
logicObjects.add(logic);
|
||||
}
|
||||
}
|
||||
|
||||
public void attemptTransmutations(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
Collections.shuffle(logicObjects);
|
||||
for (ITransmutationEffectLogic logic : logicObjects) {
|
||||
try {
|
||||
if (logic.tryTransmutation(world, biome, sourceBlock, x, y, z)) {
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogHelper.warn(
|
||||
String.format(
|
||||
"Magic Bees encountered an issue with an ITransmutationEffectLogic provider %s. Debug information follows.",
|
||||
logic.getClass().getName()));
|
||||
LogHelper.info(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addEffectLogic(ITransmutationEffectLogic logic) {
|
||||
if (logic != null && !logicObjects.contains(logic)) {
|
||||
logicObjects.add(logic);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import magicbees.api.bees.ITransmutationEffectLogic;
|
||||
import magicbees.main.utils.compat.BotaniaHelper;
|
||||
|
||||
public class TransmutationEffectLBotaniaLiving implements ITransmutationEffectLogic {
|
||||
|
||||
@Override
|
||||
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
int[] oreIDs = OreDictionary.getOreIDs(sourceBlock);
|
||||
for (int oreId : oreIDs) {
|
||||
if (oreId == OreDictionary.getOreID("logWood")) {
|
||||
world.setBlock(x, y, z, BotaniaHelper.blockLivingWood);
|
||||
return true;
|
||||
} else if (oreId == OreDictionary.getOreID("stone")) {
|
||||
world.setBlock(x, y, z, BotaniaHelper.blockLivingRock);
|
||||
return true;
|
||||
} else if (oreId == OreDictionary.getOreID("livingwood")) {
|
||||
world.setBlock(x, y, z, BotaniaHelper.blockDreamWood);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraftforge.common.BiomeDictionary;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import magicbees.api.bees.ITransmutationEffectLogic;
|
||||
|
||||
public class TransmutationEffectRailcraft implements ITransmutationEffectLogic {
|
||||
|
||||
@Override
|
||||
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
boolean flag = false;
|
||||
if (OreDictionary.itemMatches(new ItemStack(Blocks.stone), sourceBlock, false)
|
||||
|| OreDictionary.itemMatches(new ItemStack(Blocks.cobblestone), sourceBlock, false)) {
|
||||
flag = trySpawnQuarriedStone(world, biome, sourceBlock, x, y, z)
|
||||
|| trySpawnAbyssalStone(world, biome, sourceBlock, x, y, z);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private boolean trySpawnQuarriedStone(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
boolean flag = false;
|
||||
if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.FOREST)
|
||||
&& !BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SNOWY)) {
|
||||
ItemStack item = GameRegistry.findItemStack("Railcraft", "cube.stone.quarried", 1);
|
||||
if (item != null) {
|
||||
world.setBlock(x, y, z, Block.getBlockFromItem(item.getItem()), item.getItemDamage(), 2);
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
private boolean trySpawnAbyssalStone(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
boolean flag = false;
|
||||
if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.WATER)
|
||||
&& !biome.biomeName.toLowerCase(Locale.ENGLISH).contains("river")) {
|
||||
ItemStack item = GameRegistry.findItemStack("Railcraft", "cube.stone.abyssal", 1);
|
||||
if (item != null) {
|
||||
world.setBlock(x, y, z, Block.getBlockFromItem(item.getItem()), item.getItemDamage(), 2);
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package magicbees.bees.allele.effect;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraftforge.common.BiomeDictionary;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import magicbees.api.bees.ITransmutationEffectLogic;
|
||||
|
||||
public class TransmutationEffectVanilla implements ITransmutationEffectLogic {
|
||||
|
||||
@Override
|
||||
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
return trySpawnSandstone(world, biome, sourceBlock, x, y, z);
|
||||
}
|
||||
|
||||
private boolean trySpawnSandstone(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
|
||||
boolean flag = false;
|
||||
if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SANDY)
|
||||
&& OreDictionary.itemMatches(new ItemStack(Blocks.sand), sourceBlock, false)) {
|
||||
world.setBlock(x, y, z, Blocks.sandstone);
|
||||
flag = true;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package magicbees.bees.allele.flowerProvider;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
import forestry.api.apiculture.FlowerManager;
|
||||
import forestry.api.genetics.IFlower;
|
||||
import forestry.api.genetics.IFlowerGrowthRule;
|
||||
import forestry.api.genetics.IFlowerProvider;
|
||||
|
||||
public abstract class FlowerProvider implements IFlowerProvider {
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public Set<IFlower> getFlowers() {
|
||||
return FlowerManager.flowerRegistry.getAcceptableFlowers(getFlowerType());
|
||||
}
|
||||
|
||||
protected void registerPlantableFlower(Block block, int meta, int weight) {
|
||||
FlowerManager.flowerRegistry.registerPlantableFlower(block, meta, weight, getFlowerType());
|
||||
}
|
||||
|
||||
protected void registerAcceptableFlower(Block block, int meta) {
|
||||
FlowerManager.flowerRegistry.registerAcceptableFlower(block, meta, getFlowerType());
|
||||
}
|
||||
|
||||
protected void registerGrowthRule(IFlowerGrowthRule growthRule) {
|
||||
FlowerManager.flowerRegistry.registerGrowthRule(growthRule, getFlowerType());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package magicbees.bees.allele.flowerProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.genetics.IFlowerGrowthHelper;
|
||||
import forestry.api.genetics.IFlowerGrowthRule;
|
||||
import forestry.api.genetics.IFlowerRegistry;
|
||||
import forestry.api.genetics.IIndividual;
|
||||
import forestry.api.genetics.IPollinatable;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.compat.ArsMagicaHelper;
|
||||
|
||||
public class FlowerProviderArsMagicaFlower extends FlowerProvider implements IFlowerGrowthRule {
|
||||
|
||||
public FlowerProviderArsMagicaFlower() {
|
||||
registerPlantableFlower(ArsMagicaHelper.blackOrchid, 0, 1);
|
||||
registerPlantableFlower(ArsMagicaHelper.desertNova, 0, 1);
|
||||
registerPlantableFlower(ArsMagicaHelper.aum, 0, 1);
|
||||
registerPlantableFlower(ArsMagicaHelper.wakebloom, 0, 1);
|
||||
registerPlantableFlower(ArsMagicaHelper.tarmaRoot, 0, 1);
|
||||
registerGrowthRule(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlowerType() {
|
||||
return "flowersArsMagica";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return LocalizationManager.getLocalizedString("flowerProvider.arsmagica");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int y, int z, ItemStack[] products) {
|
||||
return products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
|
||||
return pollinatable.getPlantType().size() > 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(World world, IIndividual genome, int x, int y, int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean growFlower(IFlowerGrowthHelper helper, String flowerType, World world, int x, int y, int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(IFlowerRegistry fr, String flowerType, World world, IIndividual individual, int x, int y,
|
||||
int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
private boolean growFlower(World world, int x, int y, int z) {
|
||||
boolean flag = false;
|
||||
Block blockDown = world.getBlock(x, y - 1, z);
|
||||
if (world.getBlock(x, y, z).isAir(world, x, y, z)) {
|
||||
if (blockDown == Blocks.dirt || blockDown == Blocks.grass) {
|
||||
int dart = world.rand.nextInt(100);
|
||||
Block block;
|
||||
if (dart > 60) {
|
||||
block = ArsMagicaHelper.blackOrchid;
|
||||
} else if (dart > 30) {
|
||||
block = ArsMagicaHelper.aum;
|
||||
} else {
|
||||
block = ArsMagicaHelper.tarmaRoot;
|
||||
}
|
||||
world.setBlock(x, y, z, block);
|
||||
flag = true;
|
||||
} else if (blockDown == Blocks.sand) {
|
||||
world.setBlock(x, y, z, ArsMagicaHelper.desertNova);
|
||||
flag = true;
|
||||
} else if (blockDown == Blocks.stone) {
|
||||
world.setBlock(x, y, z, ArsMagicaHelper.tarmaRoot);
|
||||
flag = true;
|
||||
} else if (blockDown == Blocks.water || blockDown == Blocks.water) {
|
||||
world.setBlock(x, y, z, ArsMagicaHelper.wakebloom);
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package magicbees.bees.allele.flowerProvider;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.genetics.IIndividual;
|
||||
import forestry.api.genetics.IPollinatable;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
|
||||
public class FlowerProviderAuraNode extends FlowerProvider {
|
||||
|
||||
public FlowerProviderAuraNode() {
|
||||
registerAcceptableFlower(ThaumcraftHelper.airy, ThaumcraftHelper.AiryBlockType.NODE.ordinal());
|
||||
registerAcceptableFlower(ThaumcraftHelper.airy, ThaumcraftHelper.AiryBlockType.ENERGIZED_NODE.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
|
||||
return pollinatable.getPlantType().size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(World world, IIndividual genome, int x, int y, int z) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlowerType() {
|
||||
return "flowersThaumcraftAuraNode";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return LocalizationManager.getLocalizedString("flowerProvider.node");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int y, int z, ItemStack[] products) {
|
||||
return products;
|
||||
}
|
||||
|
||||
protected ItemStack[] addItemToProducts(ItemStack[] products, ItemStack itemStack) {
|
||||
for (ItemStack stack : products) {
|
||||
if (stack.getItem() == itemStack.getItem() && stack.getItemDamage() == itemStack.getItemDamage()) {
|
||||
if (stack.stackSize < stack.getItem().getItemStackLimit(stack)) {
|
||||
stack.stackSize += itemStack.stackSize;
|
||||
itemStack.stackSize = Math.max(stack.stackSize - stack.getItem().getItemStackLimit(stack), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (itemStack.stackSize > 0) {
|
||||
ItemStack[] newProducts = new ItemStack[products.length + 1];
|
||||
for (int i = 0; i < products.length; ++i) {
|
||||
newProducts[i] = products[i];
|
||||
}
|
||||
newProducts[products.length] = itemStack;
|
||||
products = newProducts;
|
||||
}
|
||||
|
||||
return products;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package magicbees.bees.allele.flowerProvider;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.EnumPlantType;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import forestry.api.genetics.IIndividual;
|
||||
import forestry.api.genetics.IPollinatable;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
|
||||
public class FlowerProviderBookshelf extends FlowerProvider {
|
||||
|
||||
public FlowerProviderBookshelf() {
|
||||
registerAcceptableFlower(Blocks.bookshelf, OreDictionary.WILDCARD_VALUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(World world, IIndividual genome, int x, int i, int j) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlowerType() {
|
||||
return "flowersBookshelf";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int i, int j, ItemStack products[]) {
|
||||
return products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
|
||||
EnumSet<EnumPlantType> types = pollinatable.getPlantType();
|
||||
return types.size() > 0 && !types.contains(EnumPlantType.Nether) && !types.contains(EnumPlantType.Water);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return LocalizationManager.getLocalizedString("flowerProvider.book");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package magicbees.bees.allele.flowerProvider;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
import forestry.api.genetics.IFlowerGrowthHelper;
|
||||
import forestry.api.genetics.IFlowerGrowthRule;
|
||||
import forestry.api.genetics.IFlowerRegistry;
|
||||
import forestry.api.genetics.IIndividual;
|
||||
import forestry.api.genetics.IPollinatable;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.compat.BotaniaHelper;
|
||||
|
||||
public class FlowerProviderBotania extends FlowerProvider implements IFlowerGrowthRule {
|
||||
|
||||
public FlowerProviderBotania() {
|
||||
registerPlantableFlower(BotaniaHelper.blockMysticalFlower, OreDictionary.WILDCARD_VALUE, 1);
|
||||
registerGrowthRule(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(World world, IIndividual individual, int x, int y, int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean growFlower(IFlowerGrowthHelper helper, String flowerType, World world, int x, int y, int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(IFlowerRegistry fr, String flowerType, World world, IIndividual individual, int x, int y,
|
||||
int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
private boolean growFlower(World world, int x, int y, int z) {
|
||||
if (world.isAirBlock(x, y, z) && BotaniaHelper.blockMysticalFlower.canPlaceBlockAt(world, x, y, z)) {
|
||||
world.setBlock(x, y, z, BotaniaHelper.blockMysticalFlower);
|
||||
world.setBlockMetadataWithNotify(x, y, z, world.rand.nextInt(16), 2);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] affectProducts(World world, IIndividual individual, int x, int y, int z, ItemStack[] products) {
|
||||
return products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return LocalizationManager.getLocalizedString("flowerProvider.botania");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlowerType() {
|
||||
return "flowersBotania";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
|
||||
return pollinatable.getPlantType().size() > 0;
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
package magicbees.bees.allele.flowerProvider;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.genetics.IFlowerGrowthHelper;
|
||||
import forestry.api.genetics.IFlowerGrowthRule;
|
||||
import forestry.api.genetics.IFlowerRegistry;
|
||||
import forestry.api.genetics.IIndividual;
|
||||
import forestry.api.genetics.IPollinatable;
|
||||
import magicbees.main.utils.LocalizationManager;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
|
||||
public class FlowerProviderThaumcraftFlower extends FlowerProvider implements IFlowerGrowthRule {
|
||||
|
||||
public FlowerProviderThaumcraftFlower() {
|
||||
registerPlantableFlower(ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.SHIMMERLEAF.ordinal(), 1);
|
||||
registerPlantableFlower(ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.CINDERPEARL.ordinal(), 1);
|
||||
registerGrowthRule(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFlowerType() {
|
||||
return "flowersThaumcraft";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return LocalizationManager.getLocalizedString("flowerProvider.magic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int y, int z, ItemStack[] products) {
|
||||
return products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
|
||||
return 0 < pollinatable.getPlantType().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(World world, IIndividual genome, int x, int y, int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean growFlower(IFlowerGrowthHelper helper, String flowerType, World world, int x, int y, int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public boolean growFlower(IFlowerRegistry fr, String flowerType, World world, IIndividual individual, int x, int y,
|
||||
int z) {
|
||||
return growFlower(world, x, y, z);
|
||||
}
|
||||
|
||||
private boolean growFlower(World world, int x, int y, int z) {
|
||||
boolean flag = false;
|
||||
Block blockDown = world.getBlock(x, y - 1, z);
|
||||
if (world.getBlock(x, y, z).isAir(world, x, y, z)) {
|
||||
if (blockDown == Blocks.dirt || blockDown == Blocks.grass) {
|
||||
world.setBlock(x, y, z, ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.SHIMMERLEAF.ordinal(), 2);
|
||||
flag = true;
|
||||
} else if (blockDown == Blocks.sand) {
|
||||
world.setBlock(x, y, z, ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.CINDERPEARL.ordinal(), 2);
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package magicbees.block;
|
||||
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
import magicbees.tileentity.TileEntityApimancersDrainerCommon;
|
||||
import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.IEssentiaContainerItem;
|
||||
|
||||
public class BlockApimancersDrainer extends BlockContainer {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon[] icons;
|
||||
|
||||
public static Class<? extends TileEntity> drainer = TileEntityApimancersDrainerCommon.class;
|
||||
|
||||
public BlockApimancersDrainer() {
|
||||
super(Material.rock);
|
||||
this.setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
this.setBlockName("apimancersDrainer");
|
||||
this.setHardness(1f);
|
||||
this.setResistance(1.5f);
|
||||
this.setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int metadata) {
|
||||
try {
|
||||
return drainer.newInstance();
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float par7,
|
||||
float par8, float par9) {
|
||||
if (world.isRemote) {
|
||||
return false;
|
||||
} else {
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if (tile instanceof TileEntityApimancersDrainerCommon && side != 1) {
|
||||
ItemStack tItemStack = player.getHeldItem();
|
||||
if (tItemStack != null) {
|
||||
Item tItem = tItemStack.getItem();
|
||||
if (tItem instanceof IEssentiaContainerItem
|
||||
&& ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) != null
|
||||
&& ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()).size() > 0) {
|
||||
Aspect tLocked = ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem())
|
||||
.getAspects()[0];
|
||||
((TileEntityApimancersDrainerCommon) tile).setAspect(tLocked);
|
||||
|
||||
player.addChatMessage(
|
||||
new ChatComponentTranslation("Producing " + tLocked.getLocalizedDescription()));
|
||||
}
|
||||
} else {
|
||||
((TileEntityApimancersDrainerCommon) tile).setAspect(null);
|
||||
player.addChatMessage(new ChatComponentTranslation("Cleared production specifier"));
|
||||
}
|
||||
world.markBlockForUpdate(x, y, z);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
return icons[side <= 1 ? side : 2];
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister register) {
|
||||
icons = new IIcon[4];
|
||||
for (int i = 0; i < icons.length; i++) {
|
||||
icons[i] = register.registerIcon(CommonProxy.DOMAIN + ":apimancersdrainer." + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package magicbees.block;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.client.gui.UIScreens;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.MagicBees;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
import magicbees.tileentity.TileEntityEffectJar;
|
||||
|
||||
public class BlockEffectJar extends BlockContainer {
|
||||
|
||||
public BlockEffectJar() {
|
||||
super(Material.glass);
|
||||
this.setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
this.setBlockName("effectJar");
|
||||
this.setBlockBounds(0.25f, 0f, 0.25f, 0.75f, 0.81f, 0.74f);
|
||||
this.setHardness(0.1f);
|
||||
this.setResistance(1.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7,
|
||||
float par8, float par9) {
|
||||
boolean activate = false;
|
||||
|
||||
if (!player.isSneaking()) {
|
||||
if (!world.isRemote) {
|
||||
player.openGui(MagicBees.object, UIScreens.EFFECT_JAR.ordinal(), world, x, y, z);
|
||||
}
|
||||
activate = true;
|
||||
}
|
||||
|
||||
return activate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World w, int metadata) {
|
||||
return new TileEntityEffectJar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType() {
|
||||
return CommonProxy.RenderIdEffectJar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
|
||||
this.dropInventory(world, x, y, z);
|
||||
super.breakBlock(world, x, y, z, block, meta);
|
||||
}
|
||||
|
||||
private void dropInventory(World world, int x, int y, int z) {
|
||||
TileEntity e = world.getTileEntity(x, y, z);
|
||||
|
||||
if (e != null && e instanceof TileEntityEffectJar) {
|
||||
TileEntityEffectJar jar = (TileEntityEffectJar) e;
|
||||
|
||||
// 0 is the only droppable stack.
|
||||
ItemStack stack = jar.getStackInSlot(0);
|
||||
|
||||
if (stack != null && stack.stackSize > 0) {
|
||||
float pX = world.rand.nextFloat() * 0.8f + 0.1f;
|
||||
float pY = world.rand.nextFloat() * 0.8f + 0.1f;
|
||||
float pZ = world.rand.nextFloat() * 0.8f + 0.1f;
|
||||
|
||||
EntityItem entityItem = new EntityItem(world, x + pX, y + pY, z + pZ, stack.copy());
|
||||
|
||||
entityItem.motionX = world.rand.nextGaussian() * 0.05f;
|
||||
entityItem.motionY = world.rand.nextGaussian() * 0.05f + 0.2f;
|
||||
entityItem.motionZ = world.rand.nextGaussian() * 0.05f;
|
||||
|
||||
world.spawnEntityInWorld(entityItem);
|
||||
stack.stackSize = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister par1IconRegister) {
|
||||
this.blockIcon = Blocks.glass.getIcon(0, 0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package magicbees.block;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.IPlantable;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
|
||||
public class BlockEnchantedEarth extends Block {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon top;
|
||||
|
||||
public BlockEnchantedEarth() {
|
||||
super(Material.ground);
|
||||
setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
setBlockName("enchantedEarth");
|
||||
setBlockTextureName(CommonProxy.DOMAIN + ":enchantedEarth");
|
||||
setTickRandomly(true);
|
||||
setStepSound(soundTypeGravel);
|
||||
setHardness(0.1F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int x, int y, int z, Random random) {
|
||||
for (int height = y + 1; height <= 256; ++height) {
|
||||
Block b = world.getBlock(x, height, z);
|
||||
if (b == this) {
|
||||
continue;
|
||||
} else {
|
||||
if (b.getTickRandomly()) {
|
||||
world.scheduleBlockUpdate(x, height, z, b, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (y < 256 && random.nextInt(2) == 0) {
|
||||
int newX = x + (random.nextInt(3) - 1);
|
||||
int newZ = z + (random.nextInt(3) - 1);
|
||||
int newY = y + 1;
|
||||
Block b = world.getBlock(newX, newY, newZ);
|
||||
if (b.getTickRandomly()) {
|
||||
world.scheduleBlockUpdate(newX, newY, newZ, b, random.nextInt(5) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction,
|
||||
IPlantable plantable) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
if (side == 1) {
|
||||
return top;
|
||||
}
|
||||
return super.getIcon(side, meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister iconRegister) {
|
||||
top = iconRegister.registerIcon(textureName + "_top");
|
||||
super.registerBlockIcons(iconRegister);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package magicbees.block;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import forestry.api.core.Tabs;
|
||||
import magicbees.block.types.HiveType;
|
||||
import magicbees.main.Config;
|
||||
|
||||
public class BlockHive extends Block {
|
||||
|
||||
public BlockHive() {
|
||||
super(new MaterialHive());
|
||||
this.setLightLevel(0.8f);
|
||||
setHardness(1f);
|
||||
setCreativeTab(Tabs.tabApiculture);
|
||||
setBlockName("hive");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta) {
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLightValue(IBlockAccess world, int x, int y, int z) {
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
if (meta < 0 || meta > HiveType.VALUES.length) {
|
||||
meta = 0;
|
||||
}
|
||||
return HiveType.getHiveFromMeta(meta).getLightValue();
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tab, List itemsList) {
|
||||
// Java bitches about raw types & types not being checked. Sorry, but the API sucks.
|
||||
for (HiveType type : HiveType.VALUES) {
|
||||
if (type.show || Config.forestryDebugEnabled) {
|
||||
itemsList.add(new ItemStack(this, 1, type.ordinal()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
|
||||
return HiveType.getHiveFromMeta(metadata).getDrops(world, x, y, z, fortune);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister register) {
|
||||
HiveType.registerIcons(register);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
if (meta < 0 || meta > HiveType.VALUES.length) {
|
||||
meta = 0;
|
||||
}
|
||||
return HiveType.getHiveFromMeta(meta).getIconForSide(side);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
|
||||
Block block = world.getBlock(x, y, z);
|
||||
|
||||
if (block.isAir(world, x, y, z)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Item item = Item.getItemFromBlock(block);
|
||||
if (item == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new ItemStack(item, 1, getDamageValue(world, x, y, z) & 7);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
package magicbees.block;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.client.gui.UIScreens;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.MagicBees;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
import magicbees.tileentity.TileEntityMagicApiary;
|
||||
|
||||
public class BlockMagicApiary extends BlockContainer {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon[] icons;
|
||||
|
||||
public BlockMagicApiary() {
|
||||
super(Material.wood);
|
||||
this.setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
this.setBlockName("magicApiary");
|
||||
this.setHardness(1f);
|
||||
this.setResistance(1.5f);
|
||||
this.setHarvestLevel("axe", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7,
|
||||
float par8, float par9) {
|
||||
boolean activate = false;
|
||||
|
||||
if (!player.isSneaking()) {
|
||||
if (!world.isRemote) {
|
||||
player.openGui(MagicBees.object, UIScreens.THAUMIC_APIARY.ordinal(), world, x, y, z);
|
||||
}
|
||||
activate = true;
|
||||
}
|
||||
|
||||
return activate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
|
||||
if (side == 0) {
|
||||
return icons[0];
|
||||
} else if (side == 1) {
|
||||
return icons[1];
|
||||
} else if (side == 2 || side == 3) {
|
||||
return icons[2];
|
||||
} else {
|
||||
return icons[3];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister register) {
|
||||
icons = new IIcon[4];
|
||||
|
||||
icons[0] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.0");
|
||||
icons[1] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.1");
|
||||
icons[2] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.2");
|
||||
icons[3] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.4");
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int metadata) {
|
||||
return new TileEntityMagicApiary();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
|
||||
TileEntity te = world.getTileEntity(x, y, z);
|
||||
if (te != null && te instanceof IInventory) {
|
||||
IInventory inventory = (IInventory) te;
|
||||
|
||||
for (int i = 0; i < inventory.getSizeInventory(); i++) {
|
||||
ItemStack itemStack = inventory.getStackInSlotOnClosing(i);
|
||||
|
||||
if (itemStack != null) {
|
||||
float spawnX = x + world.rand.nextFloat();
|
||||
float spawnY = y + world.rand.nextFloat();
|
||||
float spawnZ = z + world.rand.nextFloat();
|
||||
|
||||
EntityItem droppedItem = new EntityItem(world, spawnX, spawnY, spawnZ, itemStack);
|
||||
|
||||
float mult = 0.05F;
|
||||
|
||||
droppedItem.motionX = (-0.5F + world.rand.nextFloat()) * mult;
|
||||
droppedItem.motionY = (4 + world.rand.nextFloat()) * mult;
|
||||
droppedItem.motionZ = (-0.5F + world.rand.nextFloat()) * mult;
|
||||
|
||||
world.spawnEntityInWorld(droppedItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.breakBlock(world, x, y, z, block, meta);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package magicbees.block;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
import magicbees.tileentity.TileEntityManaAuraProvider;
|
||||
|
||||
public class BlockManaAuraProvider extends Block implements ITileEntityProvider {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon topIcon;
|
||||
|
||||
public BlockManaAuraProvider() {
|
||||
super(Material.rock);
|
||||
this.setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
this.setBlockName("manaAuraProvider");
|
||||
this.setHardness(2f);
|
||||
this.setResistance(3f);
|
||||
this.setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int meta) {
|
||||
return new TileEntityManaAuraProvider();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconRegister) {
|
||||
this.blockIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":manaApiaryBooster0");
|
||||
this.topIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":manaApiaryBooster1");
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
return (side == 0 || side == 1) ? this.topIcon : this.blockIcon;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package magicbees.block;
|
||||
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
import magicbees.tileentity.TileEntityVisAuraProvider;
|
||||
|
||||
public class BlockVisAuraProvider extends BlockContainer {
|
||||
|
||||
public BlockVisAuraProvider() {
|
||||
super(Material.glass);
|
||||
this.setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
this.setBlockName("visAuraProvider");
|
||||
this.setHardness(0.5f);
|
||||
this.setResistance(1.5f);
|
||||
this.setLightLevel(8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int metadata) {
|
||||
return new TileEntityVisAuraProvider();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType() {
|
||||
return CommonProxy.RenderIdVisAuraProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconRegister) {
|
||||
this.blockIcon = Blocks.planks.getIcon(0, 5);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package magicbees.block;
|
||||
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.material.Material;
|
||||
|
||||
public class MaterialHive extends Material {
|
||||
|
||||
public MaterialHive() {
|
||||
super(MapColor.stoneColor);
|
||||
this.setImmovableMobility();
|
||||
this.setRequiresTool();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
package magicbees.block.types;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import forestry.api.apiculture.IHiveDrop;
|
||||
import magicbees.bees.BeeGenomeManager;
|
||||
import magicbees.bees.BeeSpecies;
|
||||
import magicbees.bees.HiveDrop;
|
||||
import magicbees.item.types.CombType;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.compat.ForestryHelper;
|
||||
|
||||
public enum HiveType {
|
||||
|
||||
CURIOUS("curious", BeeSpecies.MYSTICAL, 12, true),
|
||||
UNUSUAL("unusual", BeeSpecies.UNUSUAL, 12, true),
|
||||
RESONANT("resonant", BeeSpecies.SORCEROUS, 12, true),
|
||||
DEEP("deep", BeeSpecies.ATTUNED, 4, true),
|
||||
INFERNAL("infernal", BeeSpecies.INFERNAL, 15, true),
|
||||
OBLIVION("oblivion", BeeSpecies.OBLIVION, 7, true),;
|
||||
|
||||
public static final HiveType[] VALUES = values();
|
||||
|
||||
private static String[] nameList;
|
||||
|
||||
private String name;
|
||||
private BeeSpecies occupant;
|
||||
public boolean show;
|
||||
private int lightLevel;
|
||||
private ArrayList<IHiveDrop> drops;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon[] icons;
|
||||
|
||||
public static HiveType getHiveFromMeta(int meta) {
|
||||
HiveType type = CURIOUS;
|
||||
|
||||
if (meta > 0 && meta < HiveType.VALUES.length) {
|
||||
type = HiveType.VALUES[meta];
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
public static void initHiveData() {
|
||||
ItemStack[] combs = new ItemStack[] { Config.combs.getStackForType(CombType.MUNDANE) };
|
||||
HiveDrop valiantDrop = new HiveDrop(
|
||||
BeeGenomeManager.addRainResist(ForestryHelper.getTemplateForestryForSpecies("Valiant")),
|
||||
combs,
|
||||
5);
|
||||
|
||||
CURIOUS.drops.add(new HiveDrop(BeeSpecies.MYSTICAL.getGenome(), combs, 80).setIgnoblePercentage(0.7f));
|
||||
CURIOUS.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.MYSTICAL.getGenome()), combs, 15));
|
||||
CURIOUS.drops.add(valiantDrop);
|
||||
|
||||
UNUSUAL.drops.add(new HiveDrop(BeeSpecies.UNUSUAL.getGenome(), combs, 80).setIgnoblePercentage(0.7f));
|
||||
UNUSUAL.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.UNUSUAL.getGenome()), combs, 15));
|
||||
UNUSUAL.drops.add(valiantDrop);
|
||||
|
||||
RESONANT.drops.add(new HiveDrop(BeeSpecies.SORCEROUS.getGenome(), combs, 80).setIgnoblePercentage(0.7f));
|
||||
RESONANT.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.SORCEROUS.getGenome()), combs, 20));
|
||||
RESONANT.drops.add(valiantDrop);
|
||||
|
||||
DEEP.drops.add(new HiveDrop(BeeSpecies.ATTUNED.getGenome(), combs, 80).setIgnoblePercentage(0.65f));
|
||||
DEEP.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.ATTUNED.getGenome()), combs, 20));
|
||||
DEEP.drops.add(valiantDrop);
|
||||
|
||||
combs = new ItemStack[] { Config.combs.getStackForType(CombType.MOLTEN),
|
||||
new ItemStack(Items.glowstone_dust, 6) };
|
||||
|
||||
INFERNAL.drops.add(new HiveDrop(BeeSpecies.INFERNAL.getGenome(), combs, 80).setIgnoblePercentage(0.5f));
|
||||
INFERNAL.drops.add(new HiveDrop(ForestryHelper.getTemplateForestryForSpecies("Steadfast"), combs, 3));
|
||||
|
||||
combs = new ItemStack[] { Config.combs.getStackForType(CombType.FORGOTTEN),
|
||||
new ItemStack(Items.ender_pearl, 1) };
|
||||
|
||||
OBLIVION.drops.add(new HiveDrop(BeeSpecies.OBLIVION.getGenome(), combs, 80));
|
||||
OBLIVION.drops.add(new HiveDrop(ForestryHelper.getTemplateForestryForSpecies("Steadfast"), combs, 9));
|
||||
}
|
||||
|
||||
private HiveType(String hiveName, BeeSpecies occupant, int light, boolean visible) {
|
||||
this.name = hiveName;
|
||||
this.occupant = occupant;
|
||||
this.lightLevel = light;
|
||||
this.show = visible;
|
||||
this.drops = new ArrayList<IHiveDrop>();
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static void registerIcons(IIconRegister register) {
|
||||
for (HiveType type : HiveType.VALUES) {
|
||||
type.icons = new IIcon[2];
|
||||
|
||||
type.icons[0] = register.registerIcon(CommonProxy.DOMAIN + ":beehive." + type.ordinal() + ".top");
|
||||
type.icons[1] = register.registerIcon(CommonProxy.DOMAIN + ":beehive." + type.ordinal() + ".side");
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIconForSide(int side) {
|
||||
IIcon i = this.icons[0];
|
||||
|
||||
if (side != 0 && side != 1) {
|
||||
i = this.icons[1];
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
public int getLightValue() {
|
||||
return this.lightLevel;
|
||||
}
|
||||
|
||||
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int fortune) {
|
||||
ArrayList<ItemStack> hiveDrops = new ArrayList<ItemStack>();
|
||||
int dart;
|
||||
|
||||
Collections.shuffle(this.drops);
|
||||
|
||||
// Get a princess.
|
||||
int throttle = 0;
|
||||
while (hiveDrops.size() <= 0 && throttle < 10) {
|
||||
++throttle;
|
||||
for (IHiveDrop drop : drops) {
|
||||
dart = world.rand.nextInt(100);
|
||||
if (dart <= drop.getChance(world, x, y, z)) {
|
||||
hiveDrops.add(drop.getPrincess(world, x, y, z, fortune));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get a drone, maybe.
|
||||
for (IHiveDrop drop : drops) {
|
||||
dart = world.rand.nextInt(100);
|
||||
if (dart <= drop.getChance(world, x, y, z)) {
|
||||
hiveDrops.addAll(drop.getDrones(world, x, y, z, fortune));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Get additional drops.
|
||||
for (IHiveDrop drop : drops) {
|
||||
dart = world.rand.nextInt(100);
|
||||
if (dart <= drop.getChance(world, x, y, z)) {
|
||||
hiveDrops.addAll(drop.getAdditional(world, x, y, z, fortune));
|
||||
}
|
||||
}
|
||||
|
||||
return hiveDrops;
|
||||
}
|
||||
|
||||
public static String[] getAllNames() {
|
||||
return (nameList == null) ? nameList = generateNames() : nameList;
|
||||
}
|
||||
|
||||
public BeeSpecies getOccupant() {
|
||||
return this.occupant;
|
||||
}
|
||||
|
||||
private static String[] generateNames() {
|
||||
String[] names = new String[VALUES.length];
|
||||
for (int i = 0; i < names.length; ++i) {
|
||||
names[i] = VALUES[i].name;
|
||||
}
|
||||
return names;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package magicbees.block.types;
|
||||
|
||||
public enum PlankType {
|
||||
|
||||
GREATWOOD("greatwood", 48),
|
||||
SILVERWOOD("silverwood", 49),;
|
||||
|
||||
public String name;
|
||||
public int textureIdx;
|
||||
private static String[] nameList;
|
||||
|
||||
private PlankType(String n, int idx) {
|
||||
this.name = n;
|
||||
this.textureIdx = idx;
|
||||
}
|
||||
|
||||
public static PlankType getType(int meta) {
|
||||
PlankType type = null;
|
||||
|
||||
if (meta >= 0 && meta <= values().length) {
|
||||
type = values()[meta];
|
||||
}
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
public static String[] getAllNames() {
|
||||
return (nameList == null) ? nameList = generateNames() : nameList;
|
||||
}
|
||||
|
||||
private static String[] generateNames() {
|
||||
String[] names = new String[values().length];
|
||||
for (int i = 0; i < names.length; ++i) {
|
||||
names[i] = values()[i].name;
|
||||
}
|
||||
return names;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.tileentity.TileEntityEffectJar;
|
||||
|
||||
public class ContainerEffectJar extends Container {
|
||||
|
||||
public TileEntityEffectJar jar;
|
||||
|
||||
public int lastBeeHealth = 0;
|
||||
public int speciesColour = 0xffffff;
|
||||
|
||||
public ContainerEffectJar(TileEntityEffectJar tileEntityEffectJar, EntityPlayer player) {
|
||||
this.jar = tileEntityEffectJar;
|
||||
this.addSlotToContainer(
|
||||
new SlotCustomItems(this.jar, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1)));
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
for (int j = 0; j < 9; ++j) {
|
||||
this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 74 + i * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 132));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCraftingToCrafters(ICrafting crafting) {
|
||||
super.addCraftingToCrafters(crafting);
|
||||
|
||||
crafting.sendProgressBarUpdate(this, 0, this.jar.currentBeeHealth);
|
||||
crafting.sendProgressBarUpdate(this, 1, this.jar.currentBeeColour);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
for (int i = 0; i < this.crafters.size(); ++i) {
|
||||
ICrafting crafting = (ICrafting) this.crafters.get(i);
|
||||
|
||||
if (this.lastBeeHealth != this.jar.currentBeeHealth) {
|
||||
crafting.sendProgressBarUpdate(this, 0, this.jar.currentBeeHealth);
|
||||
this.lastBeeHealth = this.jar.currentBeeHealth;
|
||||
}
|
||||
if (this.speciesColour != this.jar.currentBeeColour) {
|
||||
crafting.sendProgressBarUpdate(this, 1, this.jar.currentBeeColour);
|
||||
this.speciesColour = this.jar.currentBeeColour;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void updateProgressBar(int craftingId, int value) {
|
||||
if (craftingId == 0) {
|
||||
this.jar.currentBeeHealth = value;
|
||||
} else if (craftingId == 1) {
|
||||
this.jar.currentBeeColour = value;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer entityplayer) {
|
||||
return this.jar.isUseableByPlayer(entityplayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
|
||||
Slot itemSlot = this.getSlot(slot);
|
||||
boolean clearSlot = false;
|
||||
|
||||
if (itemSlot != null && itemSlot.getHasStack()) {
|
||||
ItemStack srcStack = itemSlot.getStack();
|
||||
if (slot == 0 && srcStack != null) {
|
||||
clearSlot = this.mergeItemStack(srcStack, 1, 36 + 1, false);
|
||||
} else {
|
||||
if (this.getSlot(0).isItemValid(srcStack)) {
|
||||
clearSlot = this.mergeItemStack(srcStack, 0, 1, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (clearSlot) {
|
||||
itemSlot.putStack(null);
|
||||
}
|
||||
itemSlot.onSlotChanged();
|
||||
player.inventory.markDirty();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import forestry.core.gui.ContainerItemInventory;
|
||||
import magicbees.main.utils.compat.baubles.InventoryBeeRing;
|
||||
|
||||
public class ContainerEffectRing extends ContainerItemInventory<InventoryBeeRing> {
|
||||
|
||||
public ContainerEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) {
|
||||
super(inventory, playerInventory, 8, 74);
|
||||
addSlotToContainer(
|
||||
new SlotCustomItems(inventory, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1)));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
|
||||
public class ContainerMB extends Container {
|
||||
|
||||
protected final int PLAYER_INVENTORY_ROWS = 3;
|
||||
protected final int PLAYER_INVENTORY_COLUMNS = 9;
|
||||
|
||||
public void addPlayerInventory(InventoryPlayer inventoryPlayer, int xStart, int yStart) {
|
||||
for (int x = 0; x < PLAYER_INVENTORY_COLUMNS; x++) {
|
||||
addSlotToContainer(
|
||||
new Slot(inventoryPlayer, x, xStart + 8 + 18 * x, yStart + 4 + PLAYER_INVENTORY_ROWS * 18));
|
||||
}
|
||||
|
||||
for (int y = 0; y < PLAYER_INVENTORY_ROWS; y++) {
|
||||
for (int x = 0; x < PLAYER_INVENTORY_COLUMNS; x++) {
|
||||
addSlotToContainer(new Slot(inventoryPlayer, x + y * 9 + 9, xStart + 8 + 18 * x, yStart + y * 18));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer entityPlayer) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.apiculture.IHiveFrame;
|
||||
import magicbees.bees.BeeManager;
|
||||
import magicbees.main.utils.ItemInterface;
|
||||
import magicbees.tileentity.TileEntityMagicApiary;
|
||||
|
||||
public class ContainerMagicApiary extends ContainerMB {
|
||||
|
||||
public TileEntityMagicApiary apiary;
|
||||
public int maxSlot = 0;
|
||||
|
||||
// Constants
|
||||
private static final int SLOT_QUEEN = 0;
|
||||
private static final int SLOT_DRONE = 1;
|
||||
private static final int SLOT_FRAME_START = 2;
|
||||
private static final int SLOT_INVENTORY_START = 5;
|
||||
private static final int SLOT_FRAME_COUNT = 3;
|
||||
private static final int SLOT_INVENTORY_COUNT = 7;
|
||||
|
||||
public ContainerMagicApiary(InventoryPlayer inventoryPlayer, TileEntityMagicApiary thaumicApiary) {
|
||||
this.apiary = thaumicApiary;
|
||||
|
||||
// Queen/Princess slot
|
||||
addSlotToContainer(
|
||||
new SlotCustomItems(
|
||||
this.apiary,
|
||||
0,
|
||||
29,
|
||||
39,
|
||||
ItemInterface.getItemStack("Forestry", "beeQueenGE", 1),
|
||||
ItemInterface.getItemStack("Forestry", "beePrincessGE", 1)));
|
||||
// Drone slot
|
||||
addSlotToContainer(
|
||||
new SlotCustomItems(this.apiary, 1, 29, 65, ItemInterface.getItemStack("Forestry", "beeDroneGE", 64)));
|
||||
|
||||
int currentSlot = 1;
|
||||
|
||||
// Frame slots
|
||||
for (int x = 0; x < 3; x++) {
|
||||
currentSlot++;
|
||||
addSlotToContainer(new SlotFrame(thaumicApiary, currentSlot, 66, 23 + x * 29));
|
||||
// LogHelper.info("[1] CURRENTSLOT: " + currentSlot);
|
||||
}
|
||||
|
||||
for (int x = 0; x < 3; x++) {
|
||||
currentSlot++;
|
||||
addSlotToContainer(new Slot(thaumicApiary, currentSlot, 116, 26 + x * 26));
|
||||
// LogHelper.info("[2] CURRENTSLOT: " + currentSlot);
|
||||
}
|
||||
|
||||
int j = 0;
|
||||
for (int y = 0; y < 2; y++) {
|
||||
for (int x = 0; x < 2; x++) {
|
||||
currentSlot++;
|
||||
addSlotToContainer(new Slot(thaumicApiary, currentSlot, 95 + x * 42, 39 + j * 26));
|
||||
// LogHelper.info("[3] CURRENTSLOT: " + currentSlot);
|
||||
}
|
||||
j++;
|
||||
}
|
||||
|
||||
addPlayerInventory(inventoryPlayer, 0, 110);
|
||||
|
||||
maxSlot = currentSlot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
|
||||
Slot itemSlot = this.getSlot(slotIndex);
|
||||
boolean clearSlot = false;
|
||||
|
||||
if (itemSlot != null && itemSlot.getHasStack()) {
|
||||
ItemStack srcStack = itemSlot.getStack();
|
||||
|
||||
if (slotIndex <= maxSlot && srcStack != null) {
|
||||
clearSlot = this.mergeItemStack(srcStack, maxSlot + 1, maxSlot + 36, false);
|
||||
} else {
|
||||
if (slotIndex > maxSlot && srcStack != null) {
|
||||
if (BeeManager.beeRoot.isMember(srcStack)) {
|
||||
if (!BeeManager.beeRoot.isDrone(srcStack)) {
|
||||
if (this.getSlot(SLOT_QUEEN).getHasStack() == false) {
|
||||
clearSlot = this.mergeItemStack(srcStack, SLOT_QUEEN, SLOT_QUEEN + 1, false);
|
||||
}
|
||||
} else {
|
||||
if (this.getSlot(SLOT_DRONE).isItemValid(srcStack)) {
|
||||
clearSlot = this.mergeItemStack(srcStack, SLOT_DRONE, SLOT_DRONE + 1, false);
|
||||
}
|
||||
}
|
||||
} else if (srcStack.getItem() instanceof IHiveFrame) {
|
||||
clearSlot = this
|
||||
.mergeItemStack(srcStack, SLOT_FRAME_START, SLOT_FRAME_START + SLOT_FRAME_COUNT, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (clearSlot) {
|
||||
itemSlot.putStack(null);
|
||||
}
|
||||
|
||||
itemSlot.onSlotChanged();
|
||||
player.inventory.markDirty();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInteractWith(EntityPlayer entityPlayer) {
|
||||
return apiary.isUseableByPlayer(entityPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProgressBar(int i, int j) {
|
||||
apiary.getGUINetworkData(i, j);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
for (Object crafter : crafters) {
|
||||
apiary.sendGUINetworkData(this, (ICrafting) crafter);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.tileentity.TileEntityEffectJar;
|
||||
|
||||
public class GUIEffectJar extends GuiContainer {
|
||||
|
||||
public static final String BACKGROUND_FILE = "jarScreen.png";
|
||||
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.GUI_TEXTURE + "jarScreen.png");
|
||||
|
||||
private static final int WIDTH = 176;
|
||||
private static final int HEIGHT = 156;
|
||||
|
||||
private static final int BAR_DEST_X = 117;
|
||||
private static final int BAR_DEST_Y = 10;
|
||||
|
||||
private static final int BAR_SRC_X = 176;
|
||||
private static final int BAR_SRC_Y = 0;
|
||||
|
||||
private static final int BAR_WIDTH = 10;
|
||||
private static final int BAR_HEIGHT = 40;
|
||||
|
||||
public GUIEffectJar(TileEntityEffectJar jar, EntityPlayer player) {
|
||||
super(new ContainerEffectJar(jar, player));
|
||||
this.xSize = WIDTH;
|
||||
this.ySize = HEIGHT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
|
||||
fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 9, 63, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
|
||||
GL11.glColor4f(1f, 1f, 1f, 1f);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_SRC_ALPHA);
|
||||
this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION);
|
||||
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize);
|
||||
|
||||
TileEntityEffectJar jar = ((ContainerEffectJar) this.inventorySlots).jar;
|
||||
float r = ((jar.currentBeeColour >> 16) & 255) / 255f;
|
||||
float g = ((jar.currentBeeColour >> 8) & 255) / 255f;
|
||||
float b = (jar.currentBeeColour & 255) / 255f;
|
||||
|
||||
GL11.glColor3f(r, g, b);
|
||||
|
||||
int value = BAR_HEIGHT - (jar.currentBeeHealth * BAR_HEIGHT) / 100;
|
||||
this.drawTexturedModalRect(
|
||||
this.guiLeft + BAR_DEST_X,
|
||||
this.guiTop + value + BAR_DEST_Y,
|
||||
BAR_SRC_X,
|
||||
BAR_SRC_Y,
|
||||
BAR_WIDTH,
|
||||
BAR_HEIGHT - value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import forestry.core.gui.GuiForestry;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.utils.compat.baubles.InventoryBeeRing;
|
||||
|
||||
public class GUIEffectRing extends GuiForestry<ContainerEffectRing, IInventory> {
|
||||
|
||||
public static final String BACKGROUND_FILE = "ringScreen.png";
|
||||
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.GUI_TEXTURE + BACKGROUND_FILE);
|
||||
|
||||
private static final int BAR_DEST_X = 117;
|
||||
private static final int BAR_DEST_Y = 10;
|
||||
|
||||
private static final int BAR_SRC_X = 176;
|
||||
private static final int BAR_SRC_Y = 0;
|
||||
|
||||
private static final int BAR_WIDTH = 10;
|
||||
private static final int BAR_HEIGHT = 40;
|
||||
|
||||
private final InventoryBeeRing inventoryBeeRing;
|
||||
|
||||
protected GUIEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) {
|
||||
super(BACKGROUND_LOCATION, new ContainerEffectRing(inventory, playerInventory), inventory);
|
||||
this.inventoryBeeRing = inventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
|
||||
super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
|
||||
|
||||
GL11.glColor4f(1f, 1f, 1f, 1f);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_SRC_ALPHA);
|
||||
this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION);
|
||||
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize);
|
||||
|
||||
int currentBeeColour = this.inventoryBeeRing.getCurrentBeeColour();
|
||||
float r = ((currentBeeColour >> 16) & 255) / 255f;
|
||||
float g = ((currentBeeColour >> 8) & 255) / 255f;
|
||||
float b = (currentBeeColour & 255) / 255f;
|
||||
|
||||
GL11.glColor3f(r, g, b);
|
||||
|
||||
int value = BAR_HEIGHT - (this.inventoryBeeRing.getCurrentBeeHealth() * BAR_HEIGHT) / 100;
|
||||
this.drawTexturedModalRect(
|
||||
this.guiLeft + BAR_DEST_X,
|
||||
this.guiTop + value + BAR_DEST_Y,
|
||||
BAR_SRC_X,
|
||||
BAR_SRC_Y,
|
||||
BAR_WIDTH,
|
||||
BAR_HEIGHT - value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cpw.mods.fml.common.network.IGuiHandler;
|
||||
import magicbees.main.utils.compat.baubles.InventoryBeeRing;
|
||||
import magicbees.tileentity.TileEntityEffectJar;
|
||||
import magicbees.tileentity.TileEntityMagicApiary;
|
||||
|
||||
public class GUIHandler implements IGuiHandler {
|
||||
|
||||
@Override
|
||||
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
Object value = null;
|
||||
|
||||
if (ID == UIScreens.EFFECT_JAR.ordinal()) {
|
||||
value = new ContainerEffectJar((TileEntityEffectJar) world.getTileEntity(x, y, z), player);
|
||||
} else if (ID == UIScreens.THAUMIC_APIARY.ordinal()) {
|
||||
TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z);
|
||||
value = new ContainerMagicApiary(player.inventory, tileEntityThaumicApiary);
|
||||
} else if (ID == UIScreens.EFFECT_RING.ordinal()) {
|
||||
value = new ContainerEffectRing(new InventoryBeeRing(player.getHeldItem(), player), player.inventory);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||
if (ID == UIScreens.EFFECT_JAR.ordinal()) {
|
||||
return new GUIEffectJar((TileEntityEffectJar) world.getTileEntity(x, y, z), player);
|
||||
} else if (ID == UIScreens.THAUMIC_APIARY.ordinal()) {
|
||||
TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z);
|
||||
return new GuiMagicApiary(player.inventory, tileEntityThaumicApiary);
|
||||
} else if (ID == UIScreens.EFFECT_RING.ordinal()) {
|
||||
return new GUIEffectRing(new InventoryBeeRing(player.getHeldItem(), player), player.inventory);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
|
||||
import cpw.mods.fml.client.IModGuiFactory;
|
||||
|
||||
public class GuiFactory implements IModGuiFactory {
|
||||
|
||||
@Override
|
||||
public void initialize(Minecraft minecraftInstance) {}
|
||||
|
||||
@Override
|
||||
public Class<? extends GuiScreen> mainConfigGuiClass() {
|
||||
return ModGuiConfig.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.tileentity.TileEntityMagicApiary;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiMagicApiary extends GuiContainer {
|
||||
|
||||
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.GUI_TEXTURE + "apiary.png");
|
||||
|
||||
private static final int WIDTH = 176;
|
||||
private static final int HEIGHT = 192;
|
||||
|
||||
private static final int LIFEBAR_WIDTH = 2;
|
||||
private static final int LIFEBAR_HEIGHT = 46;
|
||||
|
||||
private static final int LIFEBAR_DEST_X = 21;
|
||||
private static final int LIFEBAR_DEST_Y = 37;
|
||||
|
||||
private static final int LIFEBAR_SRC_Y = 0;
|
||||
private static final int LIFEBAR_SRC_STAGE1_X = 184;
|
||||
private static final int LIFEBAR_SRC_STAGE2_X = 182;
|
||||
private static final int LIFEBAR_SRC_STAGE3_X = 180;
|
||||
private static final int LIFEBAR_SRC_STAGE4_X = 178;
|
||||
private static final int LIFEBAR_SRC_STAGE5_X = 176;
|
||||
|
||||
private static final int WORKBOOST_WIDTH = 16;
|
||||
private static final int WORKBOOST_HEIGHT = 12;
|
||||
private static final int WORKBOOST_DEST_X = 37;
|
||||
private static final int WORKBOOST_DEST_Y = 18;
|
||||
private static final int WORKBOOST_SRC_X = 176;
|
||||
private static final int WORKBOOST_SRC_Y = 46;
|
||||
|
||||
private static final int DEATHBOOST_WIDTH = 11;
|
||||
private static final int DEATHBOOST_HEIGHT = 13;
|
||||
private static final int DEATHBOOST_DEST_X = 25;
|
||||
private static final int DEATHBOOST_DEST_Y = 17;
|
||||
private static final int DEATHBOOST_SRC_X = 176;
|
||||
private static final int DEATHBOOST_SRC_Y = 58;
|
||||
|
||||
private static final int MUTATIONBOOST_WIDTH = 9;
|
||||
private static final int MUTATIONBOOST_HEIGHT = 13;
|
||||
private static final int MUTATIONBOOST_DEST_X = 15;
|
||||
private static final int MUTATIONBOOST_DEST_Y = 17;
|
||||
private static final int MUTATIONBOOST_SRC_X = 176;
|
||||
private static final int MUTATIONBOOST_SRC_Y = 71;
|
||||
|
||||
private GuiButton mutationButton;
|
||||
|
||||
public GuiMagicApiary(InventoryPlayer inventoryPlayer, TileEntityMagicApiary thaumicApiary) {
|
||||
super(new ContainerMagicApiary(inventoryPlayer, thaumicApiary));
|
||||
|
||||
this.xSize = WIDTH;
|
||||
this.ySize = HEIGHT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
|
||||
fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 9, 99, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float opacity, int x, int y) {
|
||||
GL11.glColor4f(1, 1, 1, 1);
|
||||
this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION);
|
||||
|
||||
this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
|
||||
|
||||
TileEntityMagicApiary apiary = ((ContainerMagicApiary) this.inventorySlots).apiary;
|
||||
|
||||
drawLifebar(apiary);
|
||||
|
||||
drawWorkBoostIcon(apiary);
|
||||
drawDeathRateIcon(apiary);
|
||||
drawMutationIcon(apiary);
|
||||
}
|
||||
|
||||
private void drawMutationIcon(TileEntityMagicApiary apiary) {
|
||||
if (apiary.isMutationBoosted()) {
|
||||
this.drawTexturedModalRect(
|
||||
this.guiLeft + MUTATIONBOOST_DEST_X,
|
||||
this.guiTop + MUTATIONBOOST_DEST_Y,
|
||||
MUTATIONBOOST_SRC_X,
|
||||
MUTATIONBOOST_SRC_Y,
|
||||
MUTATIONBOOST_WIDTH,
|
||||
MUTATIONBOOST_HEIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawDeathRateIcon(TileEntityMagicApiary apiary) {
|
||||
if (apiary.isDeathRateBoosted()) {
|
||||
this.drawTexturedModalRect(
|
||||
this.guiLeft + DEATHBOOST_DEST_X,
|
||||
this.guiTop + DEATHBOOST_DEST_Y,
|
||||
DEATHBOOST_SRC_X,
|
||||
DEATHBOOST_SRC_Y,
|
||||
DEATHBOOST_WIDTH,
|
||||
DEATHBOOST_HEIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawWorkBoostIcon(TileEntityMagicApiary apiary) {
|
||||
if (apiary.isProductionBoosted()) {
|
||||
this.drawTexturedModalRect(
|
||||
this.guiLeft + WORKBOOST_DEST_X,
|
||||
this.guiTop + WORKBOOST_DEST_Y,
|
||||
WORKBOOST_SRC_X,
|
||||
WORKBOOST_SRC_Y,
|
||||
WORKBOOST_WIDTH,
|
||||
WORKBOOST_HEIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawLifebar(TileEntityMagicApiary apiary) {
|
||||
int value = LIFEBAR_HEIGHT - apiary.getHealthScaled(LIFEBAR_HEIGHT);
|
||||
int lifebarSrc = getLifebarSrc(apiary);
|
||||
this.drawTexturedModalRect(
|
||||
this.guiLeft + LIFEBAR_DEST_X,
|
||||
this.guiTop + value + LIFEBAR_DEST_Y,
|
||||
lifebarSrc,
|
||||
LIFEBAR_SRC_Y,
|
||||
LIFEBAR_WIDTH,
|
||||
LIFEBAR_HEIGHT - value);
|
||||
}
|
||||
|
||||
private int getLifebarSrc(TileEntityMagicApiary apiary) {
|
||||
int value = apiary.getHealthScaled(5);
|
||||
if (value >= 5) {
|
||||
return LIFEBAR_SRC_STAGE1_X;
|
||||
} else if (value >= 4) {
|
||||
return LIFEBAR_SRC_STAGE2_X;
|
||||
} else if (value >= 3) {
|
||||
return LIFEBAR_SRC_STAGE3_X;
|
||||
} else if (value >= 2) {
|
||||
return LIFEBAR_SRC_STAGE4_X;
|
||||
} else {
|
||||
return LIFEBAR_SRC_STAGE5_X;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int p_73864_1_, int p_73864_2_, int p_73864_3_) {
|
||||
// TODO Auto-generated method stub
|
||||
super.mouseClicked(p_73864_1_, p_73864_2_, p_73864_3_);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraftforge.common.config.ConfigElement;
|
||||
|
||||
import cpw.mods.fml.client.config.DummyConfigElement;
|
||||
import cpw.mods.fml.client.config.GuiConfig;
|
||||
import cpw.mods.fml.client.config.IConfigElement;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.VersionInfo;
|
||||
|
||||
public class ModGuiConfig extends GuiConfig {
|
||||
|
||||
public ModGuiConfig(GuiScreen guiScreen) {
|
||||
super(
|
||||
guiScreen,
|
||||
configElements(),
|
||||
VersionInfo.ModName,
|
||||
false,
|
||||
false,
|
||||
GuiConfig.getAbridgedConfigPath(Config.configuration.toString()));
|
||||
}
|
||||
|
||||
private static List<IConfigElement> configElements() {
|
||||
List<IConfigElement> list = new ArrayList<IConfigElement>();
|
||||
|
||||
list.add(categoryElement(Config.CATEGORY_GENERAL, "General", "magicbees.config.category.general"));
|
||||
list.add(categoryElement(Config.CATEGORY_DEBUG, "Debug", "magicbees.config.category.debug"));
|
||||
list.add(categoryElement(Config.CATEGORY_MODULES, "Modules", "magicbees.config.category.modules"));
|
||||
list.add(categoryElement(Config.CATEGORY_BOTANIA, "Botania Plugin", "magicbees.config.category.botania"));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private static IConfigElement categoryElement(String category, String name, String tooltip_key) {
|
||||
return new DummyConfigElement.DummyCategoryElement(
|
||||
name,
|
||||
tooltip_key,
|
||||
new ConfigElement(Config.configuration.getCategory(category)).getChildElements());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
/**
|
||||
* @author MysteriousAges
|
||||
*/
|
||||
public class SlotCustomItems extends Slot {
|
||||
|
||||
private List<ItemStack> items;
|
||||
|
||||
public SlotCustomItems(IInventory inventory, int slotIndex, int xPos, int yPos, ItemStack... items) {
|
||||
super(inventory, slotIndex, xPos, yPos);
|
||||
this.items = new ArrayList<ItemStack>(items.length);
|
||||
|
||||
Collections.addAll(this.items, items);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return List of valid ItemStacks
|
||||
*/
|
||||
public List<ItemStack> getValidItems() {
|
||||
return this.items;
|
||||
}
|
||||
|
||||
public void addValidItem(ItemStack newItem) {
|
||||
boolean contains = false;
|
||||
for (int i = 0; i < this.items.size(); ++i) {
|
||||
ItemStack s = this.items.get(i);
|
||||
if (s.getItem() == newItem.getItem()) {
|
||||
if (s.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
|
||||
contains = true;
|
||||
break;
|
||||
} else if (s.getItemDamage() == newItem.getItemDamage()) {
|
||||
contains = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!contains) {
|
||||
this.items.add(newItem);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param removeItem ItemStack to remove.
|
||||
*/
|
||||
public void removeValidItem(ItemStack removeItem) {
|
||||
for (int i = 0; i < this.items.size(); ++i) {
|
||||
ItemStack s = this.items.get(i);
|
||||
if (s.getItem() == removeItem.getItem()) {
|
||||
if (s.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
|
||||
this.items.remove(i);
|
||||
break;
|
||||
} else if (s.getItemDamage() == removeItem.getItemDamage()) {
|
||||
this.items.remove(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack itemStack) {
|
||||
for (ItemStack item : this.items) {
|
||||
if (item != null && item.getItem() == itemStack.getItem()) {
|
||||
if (item.getItemDamage() == itemStack.getItemDamage()
|
||||
|| item.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.apiculture.IHiveFrame;
|
||||
|
||||
public class SlotFrame extends SlotCustomItems {
|
||||
|
||||
public SlotFrame(IInventory inventory, int slotIndex, int xPos, int yPos) {
|
||||
super(inventory, slotIndex, xPos, yPos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack itemStack) {
|
||||
if (itemStack == null) {
|
||||
return false;
|
||||
}
|
||||
if (!inventory.isItemValidForSlot(getSlotIndex(), itemStack)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean flag = false;
|
||||
|
||||
if (itemStack.getItem() instanceof IHiveFrame) {
|
||||
flag = true;
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package magicbees.client.gui;
|
||||
|
||||
public enum UIScreens {
|
||||
EFFECT_JAR,
|
||||
THAUMIC_APIARY,
|
||||
EFFECT_RING
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package magicbees.client.model;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.AdvancedModelLoader;
|
||||
import net.minecraftforge.client.model.IModelCustom;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ModelEffectJar {
|
||||
|
||||
public static final ResourceLocation objFile = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.MODEL + "effectJar.obj");
|
||||
public static final ResourceLocation textureLocation = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.MODEL + "jarTexture.png");
|
||||
|
||||
public static final ModelEffectJar model = new ModelEffectJar();
|
||||
|
||||
private IModelCustom effectJarObj;
|
||||
|
||||
public ModelEffectJar() {
|
||||
this.effectJarObj = AdvancedModelLoader.loadModel(objFile);
|
||||
}
|
||||
|
||||
public void render() {
|
||||
this.effectJarObj.renderPart("jarLid");
|
||||
|
||||
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
this.effectJarObj.renderPart("jarBase");
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package magicbees.client.model;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.client.model.AdvancedModelLoader;
|
||||
import net.minecraftforge.client.model.IModelCustom;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.main.CommonProxy;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ModelVisAuraProvider {
|
||||
|
||||
public static final ResourceLocation objFile = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.MODEL + "visAuraConverter.obj");
|
||||
public static final ResourceLocation textureLocation = new ResourceLocation(
|
||||
CommonProxy.DOMAIN,
|
||||
CommonProxy.MODEL + "visAuraProvider.png");
|
||||
|
||||
public static final ModelVisAuraProvider model = new ModelVisAuraProvider();
|
||||
|
||||
private IModelCustom visAuraProviderObj;
|
||||
|
||||
public ModelVisAuraProvider() {
|
||||
this.visAuraProviderObj = AdvancedModelLoader.loadModel(objFile);
|
||||
}
|
||||
|
||||
public void render(long tick) {
|
||||
GL11.glPushMatrix();
|
||||
GL11.glRotated(Math.sin(tick * Math.PI * 2 / 80) * 0.7, 0, 1, 0);
|
||||
GL11.glRotated(Math.sin((tick + 25) * Math.PI * 2 / 150) * 0.75, 0.5, 0, 0.5);
|
||||
GL11.glTranslated(
|
||||
Math.sin(tick * Math.PI * 2 / 1000) * 0.025,
|
||||
0,
|
||||
Math.sin((tick + 30) * Math.PI * 2 / 650) * 0.03);
|
||||
float red = (float) (Math.sin(tick * Math.PI * 2 / 130) * 0.2 + 0.8);
|
||||
float green = (float) (Math.cos((tick + 2) * Math.PI * 2 / 140) * 0.2 + 0.8);
|
||||
float blue = (float) (Math.sin((tick + 5) * Math.PI * 2 / 99) * 0.2 + 0.8);
|
||||
GL11.glColor3f(red, green, blue);
|
||||
this.visAuraProviderObj.renderPart("centre");
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glColor3f(1f, 1f, 1f);
|
||||
this.visAuraProviderObj.renderPart("frame");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package magicbees.client.render;
|
||||
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.FMLClientHandler;
|
||||
import magicbees.client.model.ModelEffectJar;
|
||||
import magicbees.tileentity.TileEntityEffectJar;
|
||||
|
||||
public class RendererEffectJar extends TileEntitySpecialRenderer implements IItemRenderer {
|
||||
|
||||
public static RendererEffectJar instance = new RendererEffectJar();
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float tick) {
|
||||
if (tileEntity instanceof TileEntityEffectJar) {
|
||||
this.doRender(x, y, z, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||
switch (type) {
|
||||
default:
|
||||
case ENTITY:
|
||||
doRender(0, 0, 0, 1.8f);
|
||||
break;
|
||||
|
||||
case EQUIPPED:
|
||||
doRender(0, 0, 0, 1.5f);
|
||||
break;
|
||||
|
||||
case EQUIPPED_FIRST_PERSON:
|
||||
doRender(-.5, .5, 0.25, 1f);
|
||||
break;
|
||||
|
||||
case INVENTORY:
|
||||
doRender(0.3, 0.25, 0.3, 1.5f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void doRender(double x, double y, double z, float scale) {
|
||||
GL11.glPushMatrix();
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
|
||||
GL11.glScaled(scale, scale, scale);
|
||||
GL11.glTranslated(x, y, z);
|
||||
|
||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelEffectJar.textureLocation);
|
||||
|
||||
ModelEffectJar.model.render();
|
||||
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package magicbees.client.render;
|
||||
|
||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.FMLClientHandler;
|
||||
import magicbees.client.model.ModelVisAuraProvider;
|
||||
import magicbees.tileentity.TileEntityVisAuraProvider;
|
||||
|
||||
public class RendererVisAuraProvider extends TileEntitySpecialRenderer implements IItemRenderer {
|
||||
|
||||
public static RendererVisAuraProvider instance = new RendererVisAuraProvider();
|
||||
|
||||
@Override
|
||||
public void renderTileEntityAt(TileEntity entity, double x, double y, double z, float tick) {
|
||||
if (entity instanceof TileEntityVisAuraProvider) {
|
||||
this.doRender(x, y, z, 1f, entity.getWorldObj().getTotalWorldTime());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
|
||||
doRender(0, 0, 0, 1f, 0);
|
||||
}
|
||||
|
||||
private void doRender(double x, double y, double z, float scale, long tick) {
|
||||
GL11.glPushMatrix();
|
||||
GL11.glScaled(scale, scale, scale);
|
||||
GL11.glTranslated(x, y, z);
|
||||
|
||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelVisAuraProvider.textureLocation);
|
||||
ModelVisAuraProvider.model.render(tick);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package magicbees.item;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import magicbees.item.types.CapsuleType;
|
||||
import magicbees.item.types.FluidType;
|
||||
import magicbees.main.CommonProxy;
|
||||
import magicbees.main.utils.TabMagicBees;
|
||||
|
||||
public class ItemCapsule extends Item {
|
||||
|
||||
private CapsuleType capsuleType;
|
||||
|
||||
public ItemCapsule(CapsuleType type, int maxStackSize) {
|
||||
super();
|
||||
this.capsuleType = type;
|
||||
this.setCreativeTab(TabMagicBees.tabMagicBees);
|
||||
this.setHasSubtypes(true);
|
||||
this.setMaxStackSize(maxStackSize);
|
||||
this.setUnlocalizedName("capsule." + type.toString().toLowerCase());
|
||||
GameRegistry.registerItem(this, "capsule." + type.toString().toLowerCase());
|
||||
}
|
||||
|
||||
public CapsuleType getType() {
|
||||
return this.capsuleType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemStackDisplayName(ItemStack itemStack) {
|
||||
return String.format(
|
||||
this.capsuleType.getLocalizedName(),
|
||||
FluidType.VALUES[itemStack.getItemDamage()].getDisplayName());
|
||||
}
|
||||
|
||||
public ItemStack getCapsuleForLiquid(FluidType l) {
|
||||
return new ItemStack(this, 1, l.ordinal());
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubItems(Item item, CreativeTabs tab, List itemList) {
|
||||
for (FluidType l : FluidType.VALUES) {
|
||||
if (l.available) {
|
||||
itemList.add(new ItemStack(this, 1, l.ordinal()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean requiresMultipleRenderPasses() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister iconRegister) {
|
||||
this.itemIcon = iconRegister.registerIcon(
|
||||
CommonProxy.DOMAIN + ":capsule"
|
||||
+ this.capsuleType.getName().substring(0, 1).toUpperCase()
|
||||
+ this.capsuleType.getName().substring(1));
|
||||
for (FluidType t : FluidType.VALUES) {
|
||||
if (t != FluidType.EMPTY) {
|
||||
t.liquidIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":liquids/" + t.liquidID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIconFromDamageForRenderPass(int metadata, int pass) {
|
||||
IIcon i = this.itemIcon;
|
||||
if (metadata != 0 && pass == 0) {
|
||||
i = FluidType.VALUES[metadata % FluidType.VALUES.length].liquidIcon;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderPasses(int metadata) {
|
||||
return (metadata == 0) ? 1 : 2;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package magicbees.item;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import forestry.api.core.Tabs;
|
||||
import magicbees.item.types.CombType;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.compat.ForestryHelper;
|
||||
|
||||
public class ItemComb extends Item {
|
||||
|
||||
public ItemComb() {
|
||||
super();
|
||||
this.setCreativeTab(Tabs.tabApiculture);
|
||||
this.setHasSubtypes(true);
|
||||
this.setUnlocalizedName("comb");
|
||||
GameRegistry.registerItem(this, "comb");
|
||||
}
|
||||
|
||||
public ItemStack getStackForType(CombType type) {
|
||||
return new ItemStack(this, 1, type.ordinal());
|
||||
}
|
||||
|
||||
public ItemStack getStackForType(CombType type, int count) {
|
||||
return new ItemStack(this, count, type.ordinal());
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubItems(Item item, CreativeTabs tabs, List list) {
|
||||
for (CombType type : CombType.VALUES) {
|
||||
if (type.showInList || Config.forestryDebugEnabled) {
|
||||
list.add(this.getStackForType(type));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean requiresMultipleRenderPasses() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderPasses(int meta) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon secondIcon;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
this.itemIcon = par1IconRegister.registerIcon(ForestryHelper.Name.toLowerCase() + ":beeCombs.0");
|
||||
this.secondIcon = par1IconRegister.registerIcon(ForestryHelper.Name.toLowerCase() + ":beeCombs.1");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(ItemStack stack, int pass) {
|
||||
return (pass == 0) ? itemIcon : secondIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getColorFromItemStack(ItemStack stack, int pass) {
|
||||
int meta = Math.max(0, Math.min(CombType.VALUES.length - 1, stack.getItemDamage()));
|
||||
int colour = CombType.VALUES[meta].getColours()[0];
|
||||
|
||||
if (pass >= 1) {
|
||||
colour = CombType.VALUES[meta].getColours()[1];
|
||||
}
|
||||
|
||||
return colour;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemStackDisplayName(ItemStack stack) {
|
||||
return CombType.VALUES[stack.getItemDamage()].getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDamage(ItemStack stack) {
|
||||
if (CombType.VALUES.length < super.getDamage(stack)) {
|
||||
stack.setItemDamage(0);
|
||||
}
|
||||
return super.getDamage(stack);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package magicbees.item;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import forestry.api.core.Tabs;
|
||||
import magicbees.item.types.DropType;
|
||||
import magicbees.main.utils.compat.ForestryHelper;
|
||||
|
||||
public class ItemDrop extends Item {
|
||||
|
||||
public ItemDrop() {
|
||||
super();
|
||||
this.setCreativeTab(Tabs.tabApiculture);
|
||||
this.setHasSubtypes(true);
|
||||
this.setUnlocalizedName("drop");
|
||||
GameRegistry.registerItem(this, "drop");
|
||||
}
|
||||
|
||||
public ItemStack getStackForType(DropType type) {
|
||||
return new ItemStack(this, 1, type.ordinal());
|
||||
}
|
||||
|
||||
public ItemStack getStackForType(DropType type, int count) {
|
||||
return new ItemStack(this, count, type.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public void getSubItems(Item item, CreativeTabs tabs, List list) {
|
||||
for (DropType type : DropType.VALUES) {
|
||||
list.add(this.getStackForType(type));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean requiresMultipleRenderPasses() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderPasses(int metadata) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon secondIcon;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
this.itemIcon = par1IconRegister.registerIcon(ForestryHelper.Name.toLowerCase() + ":honeyDrop.0");
|
||||
this.secondIcon = par1IconRegister.registerIcon(ForestryHelper.Name.toLowerCase() + ":honeyDrop.1");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(ItemStack stack, int pass) {
|
||||
return (pass == 0) ? this.itemIcon : this.secondIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getColorFromItemStack(ItemStack stack, int pass) {
|
||||
int meta = Math.max(0, Math.min(DropType.VALUES.length - 1, stack.getItemDamage()));
|
||||
int colour = DropType.VALUES[meta].combColour[0];
|
||||
|
||||
if (pass >= 1) {
|
||||
colour = DropType.VALUES[meta].combColour[1];
|
||||
}
|
||||
|
||||
return colour;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemStackDisplayName(ItemStack stack) {
|
||||
return DropType.VALUES[stack.getItemDamage()].getName();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package magicbees.item;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import forestry.api.arboriculture.IToolGrafter;
|
||||
import magicbees.main.Config;
|
||||
import magicbees.main.utils.compat.ThaumcraftHelper;
|
||||
|
||||
public class ItemGrafter extends Item implements IToolGrafter {
|
||||
|
||||
public ItemGrafter() {
|
||||
super();
|
||||
this.setMaxStackSize(1);
|
||||
this.setCreativeTab(forestry.api.core.Tabs.tabArboriculture);
|
||||
this.setHarvestLevel("grafter", 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getSaplingModifier(ItemStack stack, World world, EntityPlayer player, int x, int y, int z) {
|
||||
return 100f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockDestroyed(ItemStack itemstack, World world, Block block, int x, int y, int z,
|
||||
EntityLivingBase entityLiving) {
|
||||
int damage = 1;
|
||||
if (ThaumcraftHelper.isActive()) {
|
||||
if (block == ThaumcraftHelper.leaf) {
|
||||
int meta = world.getBlockMetadata(x, y, z) & 1;
|
||||
if (meta == 0 || meta == 1) {
|
||||
double chance = Math.random();
|
||||
if (chance <= Config.thaumcraftSaplingDroprate) {
|
||||
this.dropItem(world, x, y, z, new ItemStack(ThaumcraftHelper.plant, 1, meta));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
itemstack.damageItem(damage, entityLiving);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void dropItem(World world, int x, int y, int z, ItemStack item) {
|
||||
if (!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops")) {
|
||||
float f = 0.7F;
|
||||
double d0 = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
|
||||
double d1 = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
|
||||
double d2 = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
|
||||
EntityItem entityitem = new EntityItem(world, (double) x + d0, (double) y + d1, (double) z + d2, item);
|
||||
entityitem.delayBeforeCanPickup = 10;
|
||||
world.spawnEntityInWorld(entityitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loaded 100 of 400 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user