Compare commits

..
248 Commits
Author SHA1 Message Date
Dream-MasterXXL 9c820bd038 bump version
update git ignore
2020-01-02 17:28:43 +01:00
repo-alt f12a75a356 Merge pull request #1 from repo-alt/feature/MasterRegistryFix
Binnie Master Registry search window not working
2019-12-29 22:26:04 +03:00
repo_alt 74d8810684 Binnie Master Registry search window not working
https://github.com/GTNewHorizons/NewHorizons/issues/4685
2019-12-29 22:19:52 +03:00
temp1011 87ccfb36c4 Protect against other mods providing bad meta values for logs (#523) 2018-05-12 13:50:45 -07:00
LOKKO12 765dade9bd Add more fruits to the OreDictionary (#385) 2018-01-15 21:47:18 -08:00
Sirse b535a7ca46 Validate ItemFieldKit to avoid metadata manipulations with items. (#375) 2017-12-26 20:53:20 -08:00
mezz 0ff171ba5e Bump version to 2.0.22 2017-08-20 12:33:06 -07:00
mezz 7946203545 Fix #272 Fruit family names are not translated in the treealyzer 2017-08-20 12:31:41 -07:00
mezz a2366fee20 Add cursegradle integration 2017-08-20 12:29:17 -07:00
Alexander Kornilov aeb03873d8 Merge pull request #250 from KorDum/feature/lang
Added some lang zh_CN
2017-08-05 19:34:47 +03:00
kordum 25241cb7e9 Added some lang zh_CN 2017-08-05 19:31:51 +03:00
Alexander Kornilov 97e808394f Merge pull request #249 from KorDum/bugfix/issue-247
#247
2017-08-05 11:32:42 +03:00
kordum 3de24b0647 #247
Fix database doesn't show species name
Fix layout of breeder page
2017-08-05 11:28:21 +03:00
Alexander Kornilov cf518d19fb Merge pull request #242 from SeraphJACK/master-MC1.7.10
Fix #238
2017-08-04 11:02:05 +03:00
Seraph_JACK 7a3ef5ecb2 Update ItemSerum.java 2017-08-04 15:27:42 +08:00
Seraph_JACK 14459ad991 Update ItemSerumArray.java 2017-08-04 15:21:18 +08:00
Seraph_JACK 2c6273c2d9 Update ItemSerum.java 2017-08-04 15:20:36 +08:00
Seraph_JACK 186a136d9d Update en_US.lang 2017-08-04 15:16:42 +08:00
Seraph_JACK 05b0532c05 Update ItemSerumArray.java 2017-08-04 15:11:20 +08:00
Seraph_JACK 045b228020 Update en_US.lang 2017-08-04 15:10:52 +08:00
Seraph_JACK 0a08927302 Update ItemSerum.java 2017-08-04 15:10:48 +08:00
Alexander Kornilov ab0122dda2 Merge pull request #241 from KorDum/feature/readme
Feature/readme
2017-08-04 10:02:02 +03:00
SeraphJACK c0bba17d08 Fix #238 2017-08-04 14:58:05 +08:00
kordum 28869a08df Fix mine version in README 2017-08-04 09:57:09 +03:00
kordum ec2bb33ea0 Improve README.md 2017-08-04 09:56:07 +03:00
mezz 008d290136 Make gradlew executable 2017-07-28 21:19:01 -07:00
Alexander Kornilov 08404a3dd2 Merge pull request #195 from dwarfmiguo/patch-1
Update zh_CN.lang
2017-07-18 09:49:57 +03:00
Alexander Kornilov 5378ff34bf Merge pull request #219 from KorDum/bugfix/issue-218
Fix #218
2017-07-15 20:38:02 +03:00
kordum 33573ba463 Fix #218
Fix translation key
2017-07-15 20:29:11 +03:00
Alexander Kornilov 84b120e89d Merge pull request #217 from SihenZhang/master-MC1.7.10
Update zh_CN.lang, add missed l10n, and fix a typo
2017-07-15 19:44:39 +03:00
SihenZhang add9f4685d Update zh_CN.lang 2017-07-16 00:40:42 +08:00
SihenZhang 75d745b7a0 Added missing l10n & Fixed a typo 2017-07-16 00:38:47 +08:00
Alexander Kornilov e5bf29dd95 Merge pull request #215 from KorDum/bugfix/issue-212
Fix #212
2017-07-15 16:58:59 +03:00
Alexander Kornilov de5d902139 Merge pull request #214 from SihenZhang/master-MC1.7.10
Added missed l10n
2017-07-15 16:52:22 +03:00
SihenZhang f3c4551f8a Added missed l10n 2017-07-15 21:29:49 +08:00
SihenZhang 00dfeac8cb Add missing l10n 2017-07-15 21:29:06 +08:00
kordum e443efcc5a Fix #212
Fix wrong localization for Registry and Analyst
2017-07-15 16:14:40 +03:00
Alexander Kornilov f3c067f503 Merge pull request #213 from AnrDaemon/fix-bukkets
Fix misspelled buckets.
2017-07-15 15:49:13 +03:00
AnrDaemon 46567817e8 Fix misspelled buckets. 2017-07-15 15:43:03 +03:00
Alexander Kornilov 23742eab03 Merge pull request #209 from SihenZhang/master-MC1.7.10
Update zh_CN.lang
2017-07-15 09:22:27 +03:00
SihenZhang 958a76247d Update zh_CN.lang 2017-07-15 13:17:49 +08:00
SihenZhang 31803aa092 Update zh_CN.lang 2017-07-15 12:38:16 +08:00
Alexander Kornilov 766c0d5fd3 Merge pull request #206 from KorDum/feature/cleanup
[1.7.10] Code analyze and cleanup
2017-07-14 10:08:02 +03:00
kordum 6a411bb607 Code analyze and cleanup 2017-07-14 10:03:32 +03:00
Alexander Kornilov 0aa95b495a Merge pull request #205 from KorDum/bugfix/issue-204
Fix #204
2017-07-14 10:00:21 +03:00
kordum 86274906eb Fix #204
Fixed endless use of a mutagen
2017-07-14 09:55:31 +03:00
Alexander Kornilov fc7dc2c14d Merge pull request #202 from KorDum/feature/issue-78
Feature #78
2017-07-13 11:14:48 +03:00
kordum 807a8e24ed #78
Added Vanilla wood fences
2017-07-13 11:11:26 +03:00
CombatZAK 2e74ed4645 Rolled [More Binnie Fixes] changes into official mod. Crash protection against running with Butterflies disabled. Refactored Registry and Analyst recipes for performance. (#201) 2017-07-12 21:44:48 -07:00
Alexander Kornilov ebdb282c6b Merge pull request #199 from KorDum/feature/icons
[1.7.10] Redraw gears textures (thx Faerdan)
2017-07-12 12:53:18 +03:00
kordum d60f070e75 Redraw gears textures (thx Faerdan) 2017-07-12 12:50:13 +03:00
Alexander Kornilov 0b2e47d88d Merge pull request #196 from KorDum/bugfix/issue-167-2
Fix #167 (2)
2017-07-12 12:40:16 +03:00
Alexander Kornilov 6be0719a9f Merge pull request #198 from KorDum/bugfix/issue-197
Fix #197
2017-07-12 12:35:59 +03:00
kordum e9ad1bda8e Fix #197
Fix wrong name for flowers
2017-07-12 12:30:19 +03:00
kordum a15d297f8a Fix #167
Fix Binnie's machines is not animated
2017-07-12 09:56:33 +03:00
dwarfmiguo 2883900b1e Update zh_CN.lang
All lines had transl to chinese
2017-07-12 13:52:14 +08:00
Alexander Kornilov 0444201f7a Automatically remove unnecessary ground blocks from farm (#191) 2017-07-11 20:42:52 -07:00
marcin212 3e9965b750 Fixed GenepoolComponentFX 2017-07-11 12:26:27 +02:00
Alexander Kornilov e8d843eb89 Merge pull request #190 from KorDum/feature/refactoring
[1.7.10] Code impovement
2017-07-11 10:52:52 +03:00
kordum 555f44889d Fix not commited changes 2017-07-11 10:50:02 +03:00
kordum 4bca0f042d GardenLogic code impovement 2017-07-11 10:46:12 +03:00
Alexander Kornilov dc288141ac Merge pull request #189 from KorDum/bugfix/issue-188
Fix #188
2017-07-11 10:04:47 +03:00
kordum d26f4816e1 Fix #188
Removed block shrub leaves game register
2017-07-11 10:01:22 +03:00
Alexander Kornilov 79b8e3e6a4 Merge pull request #187 from KorDum/bugfix/issue-186
Fix #186
2017-07-10 19:07:16 +03:00
kordum 5e21a29d3f Fix #186
Fix crash when analyze flower in FieldKit
2017-07-10 19:03:17 +03:00
Alexander Kornilov f6e2eec09c Merge pull request #183 from KorDum/bugfix/locaization
[1.7.10] Added missing localization
2017-07-09 18:55:40 +03:00
kordum 031b077a4b Fix ru_RU lang 2017-07-09 18:52:30 +03:00
kordum 49f4c84b5d Added missing localization 2017-07-09 18:49:31 +03:00
Alexander Kornilov 09b4d5a207 Merge pull request #182 from KorDum/bugfix/weed-sound
[1.7.10] Fix weed sound on growth and break
2017-07-07 22:40:59 +03:00
kordum 68f226e07e Fix weed sound on growth and break 2017-07-07 22:36:55 +03:00
Alexander Kornilov da6ea7048a Merge pull request #179 from KorDum/bugfix/opengl
Fix 178
2017-07-06 15:36:34 +03:00
kordum d721a7e98f Fix wrong OpenGL in renderItem 2017-07-06 15:27:55 +03:00
Alexander Kornilov ce050eaa63 Merge pull request #177 from KorDum/feature/refactoring
Some small refactoring
2017-07-06 14:55:46 +03:00
kordum 0133d143f8 Some small refactoring 2017-07-06 14:35:41 +03:00
Alexander Kornilov 7cc917ae76 Merge pull request #176 from KorDum/bugfix/design-block-localization
Fix wrong wood design block localization
2017-07-06 14:33:34 +03:00
kordum 6f1d00e4f5 Fix wrong wood design block localization 2017-07-06 14:29:37 +03:00
Alexander Kornilov 2aa0b9bb8c Merge pull request #175 from KorDum/bugfix/issue-173
Fix #173
2017-07-06 13:43:59 +03:00
kordum d5d8885850 Fix #173
Fix Insulated Tube craft with shift+click stacks different tubes in one slot
2017-07-06 13:38:52 +03:00
Alexander Kornilov cb6cb3a01f Merge pull request #174 from KorDum/feature/soil-recipes
[1.7.10] Added shapeless recipe for dirt with loam, flowerbed, soil
2017-07-06 13:32:23 +03:00
kordum cd5c2b3406 Added shapeless recipe for dirt with loam, flowerbed, soil 2017-07-06 13:28:25 +03:00
Alexander Kornilov b1b06753ad Fix flower sound (#172) 2017-07-05 22:17:04 -07:00
Alexander Kornilov 5846f59d64 Fix decaying shrub leaves Fix #165 (#171) 2017-07-05 22:16:46 -07:00
Alexander Kornilov ec790c9333 Merge pull request #169 from KorDum/feature/refactoring
[1.7.10] Some code improvement
2017-07-04 19:21:42 +03:00
kordum 784fa0ad30 Some code improvement 2017-07-04 19:11:23 +03:00
Alexander Kornilov 3bd8c53273 Merge pull request #168 from KorDum/bugfix/issue-166
Fix #166
2017-07-04 11:57:57 +03:00
kordum bc10e65feb Fix wrong tree generators
Refactoring and code improvement of tree generators
2017-07-04 11:47:52 +03:00
Alexander Kornilov 3eaf99a4d1 Merge pull request #164 from 3TUSK/zh_cn_update_2nd
Update zh_CN.lang for extrabees, extratrees and genetics
2017-07-03 10:15:27 +03:00
3TUSK 7910cff956 Update zh_CN.lang for extrabees, extratrees and genetics 2017-07-03 13:20:59 +08:00
Alexander Kornilov 4ef9cd6a28 Merge pull request #161 from KorDum/bugfix/issue-25
Fix #25
2017-07-02 10:17:02 +03:00
kordum 60b881810d Merge remote-tracking branch 'binnie/master-MC1.7.10' into bugfix/issue-25 2017-07-01 10:20:00 +03:00
Alexander Kornilov c854f9b489 Merge pull request #163 from KorDum/feature/refactoring
[1.7.10] Feature/refactoring
2017-07-01 10:19:25 +03:00
kordum 4e9624daab Some refactoring and code improvement 2017-07-01 10:16:08 +03:00
kordum fac2008f14 Fix wrong OpenGL in item draw method 2017-06-29 13:40:36 +03:00
kordum 2475710a6a Refactoring custom GUI components 2017-06-29 11:25:44 +03:00
mezz e83d0e3fa6 Merge pull request #159 from KorDum/bugfix/issue-154
Fix #154
2017-06-28 00:12:03 -07:00
kordum 052997cb09 Fix #154
Fix door disappears if breaks block below
2017-06-27 12:56:37 +03:00
Alexander Kornilov ef372d4f84 Merge pull request #158 from KorDum/bugfix/localization
[1.7.10 Fix missed localization
2017-06-27 11:43:49 +03:00
kordum f215990d8a Fix wrong produce time in analyst 2017-06-27 11:40:07 +03:00
kordum f5a83016f5 Fix time format 2017-06-27 11:34:17 +03:00
kordum eab09635e9 Added missed localization 2017-06-27 11:34:07 +03:00
kordum 767ec08795 Added missed localization 2017-06-26 18:26:16 +03:00
kordum 5928473316 Added missed localization 2017-06-26 18:15:35 +03:00
kordum b5989356ce Added missed localization 2017-06-26 18:02:14 +03:00
kordum 4d1d3d1cca Added missed localization 2017-06-26 17:43:39 +03:00
kordum 0b9b0c0068 Added missed localization 2017-06-26 17:21:44 +03:00
Alexander Kornilov dccaf6d7d4 Merge pull request #156 from KorDum/bugfix/issue-155
Fix #155
2017-06-26 12:31:30 +03:00
kordum 73edb413f5 Bump version 2017-06-26 12:25:43 +03:00
kordum 303c98e443 Fix #155
Fix large lags in ContainerCraftGUI
2017-06-26 12:25:36 +03:00
mezz 868ef735b0 Fix changelog text 2017-06-24 01:23:10 -07:00
Alexander Kornilov 1d4b5f791d Merge pull request #142 from KorDum/feature/refactoring
[1.7.10] Some refactoring
2017-06-24 11:18:13 +03:00
kordum 46140e2e66 Move FieldKit from botany to genetics module 2017-06-24 10:59:51 +03:00
Alexander Kornilov c2481365b9 Merge pull request #141 from KorDum/bugfix/issue-140
Fix #140
2017-06-24 10:57:07 +03:00
kordum cc76acbf3d #140
Fix invalid allele color
2017-06-24 10:47:29 +03:00
Alexander Kornilov 8fabf206d9 Merge pull request #138 from KorDum/bugfix/issue-135
Fix #135
2017-06-22 14:58:56 +03:00
kordum dcd08c4d37 #135
Fix NPE if root is null
2017-06-22 14:53:53 +03:00
Alexander Kornilov 7d269684da Merge pull request #134 from 3TUSK/zh_cn-update
Update zh_CN.lang(s)
2017-06-21 12:38:17 +03:00
3TUSK 81210e67df Update zh_CN.lang for extrabees and genetics 2017-06-21 14:20:46 +08:00
3TUSK a66ca598af Update zh_CN.lang for binniecore and genetics 2017-06-20 21:31:38 +08:00
3TUSK a6faf817f9 Update zh_CN.lang for extrabees and genetics 2017-06-20 21:17:44 +08:00
3TUSK 1992d6e333 Update zh_CN.lang for binniecore, botany, extrabees, extratrees and genetics 2017-06-20 21:01:28 +08:00
mezz f4c6c5612a Add changelog gradle task 2017-06-18 21:16:26 -07:00
mezz 8edd40ec8f Add dependency information for Forestry 2017-06-18 20:48:21 -07:00
Alexander Kornilov fe56638f16 [1.7.10] Removed unfinished features (#118)
* Removed unused Honey Crystal

* Removed unfinished kitchen machines
Removed Alcohol

* Removed unused items

* Removed unused PNGs

* Fix README.md
2017-06-18 20:24:45 -07:00
Nedelosk 31caf3c4c3 Merge pull request #132 from KorDum/bugfix/issue-18
Fix #18
2017-06-18 13:56:23 +02:00
Alexander Kornilov bd1e357e40 Merge pull request #133 from KorDum/feature/localization
[1.7.10] Fixed missed fluid localization
2017-06-18 13:32:23 +03:00
kordum bdd1bbd530 Fixed missed fluid localization 2017-06-18 13:31:40 +03:00
kordum 51701fd4c3 #18
Fix GUI of machines is not synchronized with server
2017-06-18 09:33:55 +03:00
Alexander Kornilov ee467ae88b Merge pull request #130 from KorDum/feature/localization
[1.7.10] Added missed localization
2017-06-17 11:30:32 +03:00
kordum 5b12eecc88 Added missed localization 2017-06-17 11:29:22 +03:00
Alexander Kornilov eaeb6a4db1 Merge pull request #129 from KorDum/feature/localization
[1.7.10] Added missed localization
2017-06-17 11:08:35 +03:00
kordum a7fe4d9579 Added missed localization 2017-06-17 11:05:15 +03:00
Alexander Kornilov 3e19efda01 Merge pull request #128 from KorDum/bugfix/issue-26
Fix #26
2017-06-17 09:59:56 +03:00
kordum 9d84da49fd #26
Fix Compartment (custom craft gui) dupe bug
2017-06-17 09:54:37 +03:00
Alexander Kornilov dff9c2f81c Merge pull request #125 from KorDum/feature/localization
[1.7.10] Fix missed localization
2017-06-15 13:05:32 +03:00
kordum d30f682523 Code cleanup 2017-06-15 13:00:25 +03:00
kordum c005bc02b5 Fix species description 2017-06-15 12:56:56 +03:00
kordum ce19751ca2 Fix missed localization 2017-06-15 12:26:10 +03:00
Alexander Kornilov 5b0f57fa7b Merge pull request #122 from KorDum/feature/localization
[1.7.10] Fixed missed localization
2017-06-14 11:07:40 +03:00
Alexander Kornilov 9569559ec2 Merge pull request #121 from lex1975/patch-13
Create ru_RU.lang
2017-06-14 11:06:57 +03:00
kordum b1bd4a30f7 Fixed localizations 2017-06-14 11:06:21 +03:00
kordum 6fa547c9c3 Added missed localization 2017-06-14 11:04:55 +03:00
Alexander Kornilov f07ceb948c Merge pull request #120 from lex1975/patch-12
Update ru_RU.lang
2017-06-14 10:55:19 +03:00
lex1975 b75a8bbffd Create ru_RU.lang 2017-06-14 10:52:41 +03:00
lex1975 409061c589 Create ru_RU.lang 2017-06-14 10:46:47 +03:00
lex1975 445db14b96 Update ru_RU.lang 2017-06-14 10:19:16 +03:00
Alexander Kornilov 0e796ab351 Merge pull request #117 from KorDum/feature/localization
[1.7.10] Fixed missed localization
2017-06-12 11:59:17 +03:00
kordum 7146b73a5c Fixed missed localization 2017-06-12 11:58:40 +03:00
Alexander Kornilov 4bdab6876d Merge pull request #116 from KorDum/feature/refactoring
[1.7.10] Added some localization
2017-06-12 10:56:20 +03:00
kordum 0441379c1c Added some localization 2017-06-12 10:53:08 +03:00
Alexander Kornilov 82fab2c1cb Merge pull request #114 from KorDum/feature/refactoring
[1.7.10] Added some localization
2017-06-11 12:16:03 +03:00
kordum 005d284ddb Added missed ru-localization 2017-06-11 12:15:16 +03:00
kordum 404ba9ce5c Added missing localization 2017-06-11 12:04:53 +03:00
kordum 75df80ae3c Added some localization 2017-06-11 11:59:17 +03:00
Alexander Kornilov 43211303bb Merge pull request #113 from KorDum/feature/refatoring
[1.7.10] Added some localization
2017-06-11 11:43:10 +03:00
kordum 42ee61bd72 Added some localization
Fixed wrong localization
2017-06-11 11:37:02 +03:00
kordum 493ef4fdf9 Added some localization 2017-06-11 10:55:57 +03:00
Alexander Kornilov 1d3b4b7572 Merge pull request #111 from KorDum/bugfix/issue-105
Fix #105
2017-06-10 18:39:52 +03:00
kordum 1f6e6626b1 Fix 2017-06-10 18:34:04 +03:00
kordum 79d46e5cc9 #105
Fix wrong display Climate Bar control in database
Drop ControlBiomes beacause it's not finished
2017-06-10 18:20:58 +03:00
kordum 25f064df81 Fix display average flowering allele 2017-06-10 17:58:18 +03:00
Alexander Kornilov 7a4575e6f8 Merge pull request #110 from KorDum/bugfix/issue-107
Fix #107
2017-06-10 10:37:31 +03:00
kordum a993d70687 #107
Fix undiscovered species in master database
2017-06-10 10:34:25 +03:00
Alexander Kornilov 3a21b1895e Merge pull request #109 from KorDum/feature/refactoring
[1.7.10] Added some localization
2017-06-10 10:24:39 +03:00
kordum 32028dc85e Added and fix some localization
Some refactoring extratrees machines
2017-06-10 10:18:50 +03:00
Alexander Kornilov 7d1a0d84d0 Merge pull request #108 from KorDum/feature/refactoring
Feature/refactoring
2017-06-09 12:41:11 +03:00
kordum 99998bcfbd Added some localization 2017-06-09 12:36:58 +03:00
kordum d8dfb3882b Added some localization 2017-06-08 10:26:43 +03:00
Alexander Kornilov bd0dbc3e14 [1.7.10] Added some localization (#106)
* Some refactoring

* Some refactoring
Added some localization

* Added some localization
Fix wrong branch localization in page branch overview
Simplify some localization

* Simplify some localization

* Removed unused localize method

* Simplify some localization

* Removed proxy.localise method

* Simplify localization

* Added some localization

* Added some localization

* Added some localization

* Some refactoring
2017-06-07 19:47:12 -07:00
Alexander Kornilov 1ffaad9fcd [1.7.10] Some refactoring (#102)
* Some refactoring

* Some refactoring
Added some localization

* Added some localization
Fix wrong branch localization in page branch overview
Simplify some localization

* Simplify some localization

* Removed unused localize method

* Simplify some localization

* Removed proxy.localise method

* Simplify localization
2017-06-06 21:43:47 -07:00
Alexander Kornilov 81301c3bd2 Merge pull request #93 from lex1975/patch-9
Update en_US.lang
2017-06-05 10:24:38 +03:00
Alexander Kornilov e2e6bdc3e0 Merge pull request #94 from lex1975/patch-10
Update ru_RU.lang
2017-06-05 10:24:19 +03:00
lex1975 0f9dbfd61b Update en_US.lang 2017-06-05 10:22:27 +03:00
lex1975 a806db3168 Update ru_RU.lang 2017-06-05 10:20:55 +03:00
lex1975 f564403a98 Update ru_RU.lang 2017-06-05 10:09:47 +03:00
lex1975 b91615a9a7 Update en_US.lang 2017-06-05 10:08:35 +03:00
Alexander Kornilov b244267989 Merge pull request #100 from 3TUSK/zh_cn
Update zh_CN.lang-s
2017-06-05 09:08:09 +03:00
3TUSK 83b3016306 Update zh_CN.lang for binniecore, botany, extrabees, extratrees, and genetics, flower names are powered by @Prunoideae 2017-06-05 11:51:03 +08:00
Alexander Kornilov 286137a4d3 Feature/refactoring (#96)
* Some refactoring

* Added some localization

* Added some localization
2017-06-04 12:26:57 -07:00
Alexander Kornilov 895dd048f1 Merge pull request #95 from lex1975/patch-11
Update and rename binnie-mods-2.0(1.7.10)-pre15-ru-u8.zs to binnie-mo…
2017-06-04 08:59:16 +03:00
lex1975 5cfe0a7d0d Update and rename binnie-mods-2.0(1.7.10)-pre15-ru-u8.zs to binnie-mods-2.0(1.7.10)-ru-u8.zs
Delete extra lines. Those lines that are already localized.
2017-06-04 00:39:09 +03:00
lex1975 8a94064606 Update ru_RU.lang
Added some localization. One bug fixed
2017-06-04 00:33:24 +03:00
lex1975 6a8085603b Update en_US.lang
Added some localization. One bug fixed
2017-06-04 00:31:13 +03:00
Alexander Kornilov 68e9fb7c99 Merge pull request #88 from KorDum/bugfix/issue-87
#87
2017-06-03 11:20:39 +03:00
kordum 57088f03d7 #87
Fix crash on startup - wrong name FORESTRY (need Forestry)
Fix genesis crash
Some refactoring
2017-06-03 11:13:26 +03:00
Alexander Kornilov 2f683650c0 [1.7.10] Added some localization (#86)
* Added some localization
us_GB lang files cleanup

* Fix compile errors

* Some refactoring

* Added some localization
Some refactoring
2017-06-02 22:50:03 -07:00
Alexander Kornilov 0c15ee9943 Feature/refactoring (#85)
* Added some localization

* Added some localization

* Fix modid

* Added some localization
2017-05-31 21:06:11 -07:00
Alexander Kornilov b5a6919f7f Feature/refactoring (#81)
* Added some localization

* Added some localization

* Added some localization

* Added some localization
2017-05-30 21:45:37 -07:00
Alexander Kornilov 618b291015 Feature/refactoring (#79)
* Added some localization

* Added some localization

* Some refactoring
2017-05-29 11:31:06 -07:00
Alexander Kornilov 1ea7b62e5f Localization and refactoring (#77)
* Some refactoring for bee production

* Code cleanup

* Code cleanup

* Added some localization

* Fix wrong dropped class

* Added some localization

* Added some localization

* Added some localization

* Fix wrong import
2017-05-23 23:58:13 -07:00
mezz 68bbe7710c Merge pull request #76 from KorDum/feature/refactoring
Feature/refactoring
2017-05-21 10:31:50 -07:00
kordum 3a389dee6d Added some localization 2017-05-21 18:57:15 +03:00
kordum 1c53f13250 Added some localization 2017-05-21 14:44:28 +03:00
kordum 3377ff8382 Added some localization
Move FieldKit to botany package
2017-05-21 14:02:41 +03:00
kordum a877002667 Remove some unused code 2017-05-21 10:34:02 +03:00
Alexander Kornilov 4ef41b6f62 Refactoring bee species (#73)
* Added *Definition for bee branches and bees

* Some refactoring for ExtraBeesSpecies

* More refactoring Bees

* Added effect to bees
Some refactoring
Added bee branch parent

* Fix Barren branch

* Fix Hostile branch

* Fix other bees

* Added person mutation condition

* Added person requirement mutation condition

* Fix change  for Jaded bee

* Drop some unused methods

* Revert Binnie logic in BreedingSystem
2017-05-20 10:50:14 -07:00
mezz a12ad2eae3 Merge pull request #71 from KorDum/feature/issue-30
Partial fix for issue #30
2017-05-11 13:45:17 -07:00
kordum 338010ffe8 Code improve 2017-05-11 18:43:34 +03:00
kordum 47cca224df Some localization and refactoring
Move binnie.extratrees.gen classes to binnie.extratrees.worldgen package
Drop binnie.extratrees.gen package
2017-05-11 18:38:40 +03:00
kordum 0d8c5b9230 Some refactoring
Partial drop Binnie ForestryAllele and similar class, replace to Forestry EnumAllele, EnumTemperature, etc
2017-05-11 15:03:23 +03:00
kordum c9bc65bde2 Revert "Some refactoring"
This reverts commit 1ed37f9b8d.
2017-05-11 14:37:39 +03:00
kordum 1ed37f9b8d Some refactoring 2017-05-11 14:31:50 +03:00
kordum 5e35e3c803 Added some localization
Added AlleleHelper
2017-05-11 14:21:08 +03:00
kordum 89f0b94f65 #30
Added some localization for flowers
2017-05-10 19:52:16 +03:00
kordum 263a4f3bfc #30
Rename color and flower enum entities to UPPER_CASE
Refactoring FlowerSpecies
Added some localization
2017-05-10 12:53:10 +03:00
lex1975 542dbb15b0 Update binnie-mods-2.0(1.7.10)-pre15-ru-u8.zs
Florist Encyclopedia removed
2017-05-09 14:30:08 -07:00
mezz 4337f5521d Merge pull request #63 from KorDum/feature/refactoring
Some refactoring
2017-05-09 14:29:55 -07:00
mezz 3bafd5974d Add .travis.yml 2017-05-09 14:21:56 -07:00
Alexander Kornilov bddd3e69a3 Some refacoring genetic machines (#67)
* #56
Fixed inoculator don't need Bacteria Vector to process
Some refactored Inoculator machine class

* Refactoring Inoculator and Sequencer machines
2017-05-09 14:05:25 -07:00
Alexander Kornilov 5052920d73 #56 (#65)
Fixed inoculator don't need Bacteria Vector to process
Some refactored Inoculator machine class
2017-05-09 21:58:47 +02:00
kordum 186cbda444 Removed LanguageManager
Added I18N static class
Some code reformatting
2017-05-09 20:07:11 +03:00
kordum 1ffe80b8c9 Replace binnie.botany.farm.Vect to forestry.core.utils.vect.Vect 2017-05-09 19:04:06 +03:00
marcin212 c3d0da2d0a Merge branch 'master-MC1.7.10' of https://github.com/ForestryMC/Binnie into master-MC1.7.10 2017-05-09 11:29:27 +02:00
marcin212 8986256b12 Fix #50 Crash server on startup 2017-05-09 11:29:06 +02:00
lex1975 e896b041f2 Create binnie-mods-2.0(1.7.10)-pre15-ru-u8.zs
Not all items are in the language files.
Therefore, for more complete Russification NEI and CraftTweaker script are required
2017-05-08 14:09:34 -07:00
Alexander Kornilov 5e4d271f37 Part fix #30 Add more localization (#59)
* Added missing ru_RU localization

* Fixed first letter

* Rename Binnie.Language to short Binnie.I18N
Removed some unused methods, classes.
Removed some hardcod strings, replaced it on i18n
Moved pigment colors of blocks and items to tooltips

* #30
Fix some bugged localizations

* #30
Added localization for PageSpeciesFlowerGenome

* #30
Fixed some format in lang

* #30
Added localization for ItemBotany and ItemPollen

* Added localization for ItemGermling
2017-05-08 14:07:58 -07:00
Alexander Kornilov 7fe97e9323 Fix #17 accept mutator in Alveary accepts any item (#53)
* #17
Fix accept mutator in Alveary accepts any item

* Fixed returned koef of mutation catalyst
2017-05-08 00:46:08 -07:00
Alexander Kornilov e8802c66d3 Fix #30 Add more localization (#55)
* Added missing ru_RU localization

* Fixed first letter

* Rename Binnie.Language to short Binnie.I18N
Removed some unused methods, classes.
Removed some hardcod strings, replaced it on i18n
Moved pigment colors of blocks and items to tooltips
2017-05-08 00:44:56 -07:00
Alexander Kornilov f6186d3cf3 Fix #19 (#57)
* #19
Fix Sequencer don't reset progress after remove sequence item
Some rafactoring Sequencer class

* #19
Fixed imports
2017-05-08 00:07:02 -07:00
mezz 64259e06da Merge pull request #58 from 3TUSK/zh-cn
Simplified Chinese i18n
2017-05-07 19:04:01 -07:00
3TUSK 909ac40320 A quick fix 2017-05-07 21:49:13 -04:00
3TUSK b32ba93404 Simplified Chinese i18n
Ported from binnie567/Binnies-Mods-Localisation#11 directly
2017-05-07 21:42:45 -04:00
kordum 77322d7c45 Move Field Kit to Botany creative tab 2017-05-07 17:51:30 -07:00
kordum f1fd19df99 Remove useless item Encyclopedia 2017-05-07 17:48:13 -07:00
Alexander Kornilov ecbb1cb8e4 Added missing ru_RU localization (#52)
* Added missing ru_RU localization

* Fixed first letter
2017-05-07 17:47:32 -07:00
Alexander Kornilov 9c27918e92 Fix #20 Wrong Coconut tree (#49)
Fix small height Coconut.
Added custom generation for Coconut (drop Oak like)
2017-05-06 21:04:27 -07:00
kordum e896a31586 Fix custom gen tree 2017-05-06 21:03:09 -07:00
lex1975 145e727c38 Create ru_RU.lang
Add Russian translation for Genetics MC1.7.10
2017-05-06 21:02:15 -07:00
lex1975 0de5877c0f Create ru_RU.lang
Add Russian translation for ExtraTrees
2017-05-06 21:02:05 -07:00
lex1975 4080dfd9f2 Update en_US.lang
Add two missing lines
2017-05-06 21:00:10 -07:00
lex1975 4c58bd361d Create ru_RU.lang
Add russian translation for binniecore
2017-05-06 21:00:01 -07:00
kordum 96e4814ae3 Improve code readability in binnie.extratrees package 2017-05-03 14:10:02 -07:00
Alexander Kornilov adccdd181a Fix #16 (#38)
Added missed textures for trowels
2017-04-29 13:44:20 +02:00
Alexander Kornilov c09ad04284 Improve code readability in binnie.extrabees package and other packages
* Improve code readability in binnie.extrabees package and other packages
* Fix compile error after refactoring
2017-04-29 13:43:35 +02:00
kordum b609d6688f Improve code readability in binnie.botany package 2017-04-28 17:45:38 -07:00
kordum e05bf8bb7b Added some info about builds into README.md
Fix mod artifact naming like another mods
2017-04-27 14:49:22 -07:00
kordum 730043ba9c Improve code readability in binnie.genetics package
Drop unused (empty) method MachinePackage#register() from all classes
2017-04-27 14:48:45 -07:00
Alexander Kornilov 856f08b752 Text colors wrap to EnumChatFormatting
* Fix #22
Text colors wrap to EnumChatFormatting

* Fix #22
Fixed code error with "paragraph" char in EnumColor
2017-04-27 15:06:23 +02:00
Alexander Kornilov f402cb155f Improve/refactoring (#15)
* Improve the code

* Code improve in binnie.core.utils package

* Code improve in binnie.core.triggers package

* Code improve in binnie.core.resource package

* Code improve in binnie.core.proxy package

* Code improve readability in binnie.core package

* Add missed constructors

* Some improve code readabilty

* Expand import with *

* Revert "Expand import with *"

This reverts commit 3bb4a44f3b69a8559bd5753337e0f6793ad18dc4.

* Fix using fully qualified names in imports

* Fix missed unnessesary "this."

* Removed binnie.craftgui package
Optimised imports and removed unnessesary "this."

* Some refactoring code in binnie.core.craftgui package

* Merge from master1.7.10

* Improve code readability in binnie.core.craftgui.database package

* Improve code readability in binnie.core.craftgui.events package

* Improve code readability in binnie.core.craftgui.geometry package

* Improve code readability in binnie.core.craftgui.* package
2017-04-26 15:09:09 -07:00
Alexander Kornilov a3c2360ba6 Fix #23 corn grain recipe conflcit (#28)
Fix corn grains recipe
2017-04-26 15:05:09 -07:00
marcin212 c392c3b295 Add build number to version 2017-04-24 23:55:38 +02:00
Alexander Kornilov d251d83105 Improve code readability for binnie.core package (#14) 2017-04-22 18:31:40 -07:00
mezz a610833a24 Merge pull request #10 from KorDum/improve/refactoring
Improve build
2017-04-19 00:04:10 -07:00
kordum 740cea5916 Some fixes in build script
Removed Forge license and credits
2017-04-19 09:53:21 +03:00
Alexander Kornilov 765db4853c Fix drop doors after break (#8)
Fix drop doors after break and Improve code code readability
2017-04-18 19:31:05 +02:00
kordum 663c41fa40 Add eclipse folder to gitignore 2017-04-18 17:54:16 +03:00
kordum cdda249d31 Added Forge License 2017-04-18 14:03:00 +03:00
kordum 40a2d4b86d Fix build config
Added README file with short instruction for build mod
2017-04-18 13:44:24 +03:00
marcin212 8f319fa931 Release 2.0-pre15 2017-02-09 12:59:59 +01:00
2844 changed files with 55293 additions and 75703 deletions

No files matched your search

+10 -18
View File
@@ -1,28 +1,20 @@
# everything
/*
.gradle
# IntelliJ
/build
/run
/eclipse
/out
/classes
.idea
*.iml
*.ipr
*.iws
classes/
# minecraft
/config
/logs
/saves
/options.txt
/usernamecache.json
# folders
!/gradle/wrapper
!/src
# files
!/.gitignore
!/LICENSE.txt
!/license-header.txt
!/README.md
!/gradle.properties
!/build.gradle
!/gradlew
!/gradlew.bat
changelog.html
*.bat
+4 -1
View File
@@ -10,7 +10,7 @@ along with new features such as fully breedable flowers and genetic manipulation
[Wiki](https://binnie.mods.wiki/wiki/Main_Page)
[Latest Builds for 1.11 / 1.11.2](http://jenkins.ic2.player.to/job/Binnie's%201.11.2/)
[Latest Builds for 1.7.10](https://ci.bymarcin.com/job/Binnie-Mods-MC1.7.10/)
### Mods
@@ -36,6 +36,9 @@ Genetics is for those who want to eschew conventional breeding, and want to ente
Binnie Core is a mod which contains a lot of the core functionality such as networking and GUI's for the other mods. The only in game features it currently contains are the Compartments
### Warning
Removed unused (unfinished) items and blocks: Honey Crystal, Alcohol, etc.
### Building
+35 -78
View File
@@ -1,114 +1,68 @@
buildscript {
repositories {
jcenter()
mavenCentral()
maven {
name = "forge"
url = "http://files.minecraftforge.net/maven"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
classpath "gradle.plugin.se.bjurr.gitchangelog:git-changelog-gradle-plugin:1.47"
}
}
plugins {
id "com.matthewprenger.cursegradle" version "1.0.9"
id "com.matthewprenger.cursegradle" version "1.0.6"
}
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'idea'
apply plugin: 'maven'
apply plugin: "se.bjurr.gitchangelog.git-changelog-gradle-plugin"
apply plugin: 'forge'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
version = version_major + '.' + version_minor + '.' + version_patch
version = "2.0.24"
if (System.getenv("BUILD_NUMBER") != null) {
version = version + "." + System.getenv("BUILD_NUMBER")
}
group = "binnie" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "binnie-mods-" + mcversion
archivesBaseName = "binnie-mods-1.7.10"
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
// uncomment this hack if you use old IDEA
/*sourceSets {
main {
output.resourcesDir = output.classesDir
}
}*/
minecraft {
version = mcversion + "-" + forgeversion
mappings = mcp_mappings
runDir = "run"
replace '@VERSION@', project.version
}
repositories {
maven {
name = "jei"
url "http://dvs1.progwml6.com/files/maven"
}
maven {
name = "ic2, forestry"
url = "http://maven.ic2.player.to/"
}
maven {
name = "CurseForge"
url = "https://minecraft.curseforge.com/api/maven/"
}
maven {
name "Jared"
url "http://maven.blamejared.com/"
}
}
dependencies {
deobfCompile("net.sengir.forestry:forestry_${mcversion}:${forestry_version}") {
transitive = false
}
deobfProvided "mezz.jei:jei_${mcversion}:${jei_version}:api"
runtime "mezz.jei:jei_${mcversion}:${jei_version}"
runtime "jei-bees:jeibees:${jeibees_version}:mc${mcversion}"
deobfProvided "net.industrial-craft:industrialcraft-2:${ic2_version}:api"
runtime "net.industrial-craft:industrialcraft-2:${ic2_version}"
deobfProvided "CraftTweaker2:CraftTweaker2-API:${minetweaker_version}"
version = "1.7.10-10.13.4.1614-1.7.10"
runDir = "eclipse"
}
processResources {
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
// replace version and mcversion
expand 'version':project.version, 'mcversion':project.minecraft.version
expand 'version': project.version,
'mcversion': project.minecraft.version,
'modid': "BinnieMods"
}
// copy everything else, thats not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
}
// prevent java 8's strict doclint for javadocs from failing builds
allprojects {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
}
}
uploadArchives {
repositories {
if (project.hasProperty('mavenDir')) {
mavenDeployer {
repository(url: "file://" + mavenDir)
}
} else {
println 'Archives upload disabled, mavenDir in gradle.properties is missing.'
}
}
}
task makeChangelog(type: se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask) {
task gitChangelogTask(type: se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask) {
filePath = "changelog.html"
untaggedName = "Current release ${project.version}"
fromCommit = "dbc5c1a564c39e4a9c042411d1bdbe450985ce2c"
@@ -119,16 +73,19 @@ task makeChangelog(type: se.bjurr.gitchangelog.plugin.gradle.GitChangelogTask) {
curseforge {
apiKey = project.hasProperty('curseforge_apikey') ? project.curseforge_apikey : '0'
project {
id = curse_project_id
id = '223525'
changelog = file('changelog.html')
changelogType = 'html'
releaseType = 'alpha'
releaseType = 'release'
relations {
requiredLibrary 'forestry'
incompatible 'binnie-fix'
incompatible 'binniepatcher'
incompatible 'more-binnie-fixes'
}
}
}
afterEvaluate {
tasks.curseforge223525.dependsOn.add(makeChangelog)
tasks.curseforge223525.dependsOn.add(gitChangelogTask)
}
+7 -9
View File
@@ -1,10 +1,8 @@
Alpha version. Do not create a world you care about with this version, it may break things severely.<br/>
Please help the project by trying it out and <a href="https://github.com/ForestryMC/Binnie/issues">reporting issues here.</a><br/>
{{#tags}}
<h3>{{name}}</h3>
<ul>
{{#commits}}
<li>{{{message}}} - {{authorName}}</li>
{{/commits}}
</ul>
{{#tags}}
<h3>{{name}}</h3>
<ul>
{{#commits}}
<li>{{{message}}} - {{authorName}}</li>
{{/commits}}
</ul>
{{/tags}}
-19
View File
@@ -1,19 +0,0 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G
mcversion=1.12
forgeversion=14.21.1.2443
mcp_mappings=snapshot_20170806
curse_project_id=223525
forestry_version=5.5.0.154
ic2_version=2.8.14-ex112
version_major=2
version_minor=2
version_patch=0
jei_version=4.7.4.82
jeibees_version=0.9.0.2
minetweaker_version=4.0.3.239
Binary file not shown.
+2 -2
View File
@@ -1,6 +1,6 @@
#Thu Jul 13 23:08:17 PDT 2017
#Wed Jul 02 15:54:47 CDT 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
Vendored
+26 -26
View File
@@ -6,30 +6,12 @@
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
@@ -48,7 +30,6 @@ die ( ) {
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
@@ -59,11 +40,31 @@ case "`uname`" in
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@@ -89,7 +90,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -113,7 +114,6 @@ fi
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
Vendored Executable → Regular
+4 -4
View File
@@ -8,14 +8,14 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@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=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@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=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -46,7 +46,7 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
Binary file not shown.
Binary file not shown.
Binary file not shown.
+11 -9
View File
@@ -1,20 +1,22 @@
package binnie;
import java.util.ArrayList;
import java.util.List;
import binnie.core.ManagerBase;
import binnie.core.genetics.ManagerGenetics;
import binnie.core.item.ManagerItem;
import binnie.core.liquid.ManagerLiquid;
import binnie.core.machines.ManagerMachine;
import binnie.core.mod.config.ManagerConfig;
import binnie.core.resource.ManagerResource;
import java.util.ArrayList;
import java.util.List;
public final class Binnie {
public static final List<ManagerBase> MANAGERS = new ArrayList<>();
public static final ManagerGenetics GENETICS = new ManagerGenetics();
public static final ManagerConfig CONFIGURATION = new ManagerConfig();
public static final ManagerLiquid LIQUID = new ManagerLiquid();
public static final ManagerMachine MACHINE = new ManagerMachine();
public static final ManagerResource RESOURCE = new ManagerResource();
public static List<ManagerBase> Managers = new ArrayList<>();
public static ManagerGenetics Genetics = new ManagerGenetics();
public static ManagerConfig Configuration = new ManagerConfig();
public static ManagerLiquid Liquid = new ManagerLiquid();
public static ManagerMachine Machine = new ManagerMachine();
public static ManagerItem Item = new ManagerItem();
public static ManagerResource Resource = new ManagerResource();
}
-16
View File
@@ -1,16 +0,0 @@
package binnie;
public final class Constants {
public static final String CORE_MOD_ID = "binniecore";
public static final String BOTANY_MOD_ID = "botany";
public static final String EXTRA_TREES_MOD_ID = "extratrees";
public static final String GENETICS_MOD_ID = "genetics";
public static final String LIQUID_JUICE = "juice";
public static final String LIQUID_WATER = "water";
public static final String LIQUID_SEED_OIL = "seedoil";
public static final String LIQUID_CREOSOTE = "Creosote Oil";
public static final String LIQUID_BIO_ETHANOL = "bioethanol";
public static final String LIQUID_FOR_HONEY = "for.honey";
}
+186 -165
View File
@@ -1,115 +1,122 @@
package binnie.botany;
import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.BonemealEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import binnie.Constants;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.IGardeningManager;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.ceramic.BlockCeramic;
import binnie.botany.ceramic.BlockCeramicBrick;
import binnie.botany.ceramic.BlockCeramicPatterned;
import binnie.botany.ceramic.BlockStained;
import binnie.botany.core.BotanyCore;
import binnie.botany.core.BotanyGUI;
import binnie.botany.core.ModuleCore;
import binnie.botany.flower.BlockFlower;
import binnie.botany.flower.ItemBotany;
import binnie.botany.flower.ItemFlower;
import binnie.botany.flower.ItemInsulatedTube;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.gardening.BlockPlant;
import binnie.botany.gardening.BlockSoil;
import binnie.botany.gardening.Gardening;
import binnie.botany.gardening.ItemSoilMeter;
import binnie.botany.gardening.ItemTrowel;
import binnie.botany.gardening.ModuleGardening;
import binnie.botany.genetics.ItemDictionary;
import binnie.botany.genetics.ModuleGenetics;
import binnie.botany.items.ItemClay;
import binnie.botany.items.ItemPigment;
import binnie.botany.network.PacketID;
import binnie.botany.proxy.Proxy;
import binnie.core.AbstractMod;
import binnie.core.BinnieCore;
import binnie.core.gui.IBinnieGUID;
import binnie.core.item.ItemMisc;
import binnie.core.network.BinniePacketHandler;
import binnie.core.network.IPacketID;
import binnie.core.proxy.IProxyCore;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.block.Block;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.BonemealEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BlockEvent;
@Mod(
modid = Constants.BOTANY_MOD_ID,
name = "Binnie's Botany",
dependencies = "required-after:" + Constants.CORE_MOD_ID
modid = "Botany",
name = "Botany",
useMetadata = true,
dependencies = "after:BinnieCore"
)
public class Botany extends AbstractMod {
public static final float AGE_CHANCE = 0.2f;
@SuppressWarnings("NullableProblems")
@Mod.Instance(Constants.BOTANY_MOD_ID)
@Mod.Instance("Botany")
public static Botany instance;
@SuppressWarnings("NullableProblems")
@SidedProxy(clientSide = "binnie.botany.proxy.ProxyClient", serverSide = "binnie.botany.proxy.ProxyServer")
public static Proxy proxy;
/* MODULE GENETIC */
public static BlockFlower flower;
public static ItemBotany flowerItem;
public static ItemBotany seed;
public static ItemBotany pollen;
public static ItemDictionary database;
@Nullable
public static Item botanistBackpack;
@Nullable
private static ModuleGardening gardening;
@Nullable
private static ModuleGenetics genetics;
@SidedProxy(
clientSide = "binnie.botany.proxy.ProxyClient",
serverSide = "binnie.botany.proxy.ProxyServer"
)
public static Proxy proxy;
public static BlockFlower flower;
public static Item seed;
public static Item pollen;
public static ItemDictionary database;
public static BlockPlant plant;
public static ItemTrowel trowelWood;
public static ItemTrowel trowelStone;
public static ItemTrowel trowelIron;
public static ItemTrowel trowelDiamond;
public static ItemTrowel trowelGold;
public static BlockSoil soil;
public static BlockSoil loam;
public static BlockSoil flowerbed;
public static BlockSoil soilNoWeed;
public static BlockSoil loamNoWeed;
public static BlockSoil flowerbedNoWeed;
public static ItemInsulatedTube insulatedTube;
public static ItemSoilMeter soilMeter;
public static ItemMisc misc;
public static ItemFlower flowerItem;
public static ItemPigment pigment;
public static ItemClay clay;
public static BlockCeramic ceramic;
public static BlockCeramicPatterned ceramicTile;
public static BlockStained stained;
public static BlockCeramicBrick ceramicBrick;
public Botany() {
Botany.instance = this;
}
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent evt) {
public void preInit(FMLPreInitializationEvent event) {
addModule(new ModuleCore());
addModule(new ModuleGenetics());
addModule(new ModuleGardening());
preInit();
}
@Mod.EventHandler
public void init(FMLInitializationEvent evt) {
public void init(FMLInitializationEvent event) {
init();
}
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent evt) {
public void postInit(FMLPostInitializationEvent event) {
postInit();
}
@Override
protected void registerModules() {
addModule(new ModuleCore());
addModule(genetics = new ModuleGenetics());
addModule(gardening = new ModuleGardening());
}
public static ModuleGardening gardening() {
Preconditions.checkState(gardening != null);
return gardening;
}
public static ModuleGenetics genetics() {
Preconditions.checkState(genetics != null);
return genetics;
}
@Override
public IBinnieGUID[] getGUIDs() {
return BotanyGUI.values();
@@ -137,7 +144,7 @@ public class Botany extends AbstractMod {
@Override
public String getModID() {
return Constants.BOTANY_MOD_ID;
return "botany";
}
@Override
@@ -145,171 +152,185 @@ public class Botany extends AbstractMod {
return PacketHandler.class;
}
@Override
public boolean isAvailable() {
return BinnieCore.isBotanyActive();
}
@SubscribeEvent
public void onShearFlower(PlayerInteractEvent.RightClickBlock event) {
EntityPlayer player = event.getEntityPlayer();
if (player == null) {
public void onShearFlower(PlayerInteractEvent event) {
if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) {
return;
}
ItemStack heldItem = player.getHeldItemMainhand();
if (heldItem.isEmpty()) {
return;
if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == Items.shears) {
TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
flower.onShear();
event.entityPlayer.getHeldItem().damageItem(1, event.entityPlayer);
}
}
TileEntity tile = event.getWorld().getTileEntity(event.getPos());
if (!(tile instanceof TileEntityFlower)) {
return;
}
TileEntityFlower flower = (TileEntityFlower) tile;
if (heldItem.getItem() == Items.SHEARS) {
flower.onShear();
heldItem.damageItem(1, player);
} else if (heldItem.getItem() == Botany.pollen) {
IFlower pollen = BotanyCore.getFlowerRoot().getMember(heldItem);
if (pollen != null && flower.canMateWith(pollen)) {
flower.mateWith(pollen);
if (!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
if (event.entityPlayer != null && event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == Botany.pollen) {
TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
IFlower pollen = BotanyCore.getFlowerRoot().getMember(event.entityPlayer.getHeldItem());
if (pollen != null && flower.canMateWith(pollen)) {
flower.mateWith(pollen);
if (!event.entityPlayer.capabilities.isCreativeMode) {
ItemStack heldItem = event.entityPlayer.getHeldItem();
heldItem.stackSize--;
}
}
}
}
}
@SubscribeEvent
public void onFertiliseSoil(PlayerInteractEvent.RightClickBlock event) {
World world = event.getWorld();
if (world == null) {
public void onFertiliseSoil(PlayerInteractEvent event) {
if (event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK || event.world == null) {
return;
}
BlockPos pos = event.getPos();
EntityPlayer player = event.getEntityPlayer();
if (player == null) {
if (event.entityPlayer == null || event.entityPlayer.getHeldItem() == null) {
return;
}
ItemStack heldItem = player.getHeldItemMainhand();
if (heldItem.isEmpty()) {
return;
int y = event.y;
Block block = event.world.getBlock(event.x, y, event.z);
if (block == null || !Gardening.isSoil(block)) {
block = event.world.getBlock(event.x, --y, event.z);
}
IGardeningManager gardening = BotanyCore.getGardening();
Block block = world.getBlockState(event.getPos()).getBlock();
if (!gardening.isSoil(block)) {
pos = pos.down();
block = world.getBlockState(pos).getBlock();
}
if (!gardening.isSoil(block)) {
if (block == null || !Gardening.isSoil(block)) {
return;
}
IBlockSoil soil = (IBlockSoil) block;
int fertiliserStrength = gardening.getFertiliserStrength(heldItem);
if (gardening.isNutrientFertiliser(heldItem) && soil.getType(world, pos) != EnumSoilType.FLOWERBED) {
EnumSoilType type = soil.getType(world, pos);
int next = Math.min(type.ordinal() + fertiliserStrength, 2);
if (soil.fertilise(world, pos, EnumSoilType.values()[next]) && !player.capabilities.isCreativeMode) {
heldItem.shrink(1);
if (Gardening.isNutrientFertiliser(event.entityPlayer.getHeldItem()) && soil.getType(event.world, event.x, y, event.z) != EnumSoilType.FLOWERBED) {
EnumSoilType type = soil.getType(event.world, event.x, y, event.z);
int next = Math.min(type.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2);
if (soil.fertilise(event.world, event.x, y, event.z, EnumSoilType.values()[next]) && !event.entityPlayer.capabilities.isCreativeMode) {
ItemStack heldItem = event.entityPlayer.getHeldItem();
heldItem.stackSize--;
return;
}
}
if (gardening.isAcidFertiliser(heldItem) && soil.getPH(world, pos) != EnumAcidity.ACID) {
EnumAcidity pH = soil.getPH(world, pos);
int next = Math.max(pH.ordinal() - fertiliserStrength, 0);
if (soil.setPH(world, pos, EnumAcidity.values()[next]) && !player.capabilities.isCreativeMode) {
heldItem.shrink(1);
if (Gardening.isAcidFertiliser(event.entityPlayer.getHeldItem()) && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.ACID) {
EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z);
int next = Math.max(pH.ordinal() - Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 0);
if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) && !event.entityPlayer.capabilities.isCreativeMode) {
ItemStack heldItem2 = event.entityPlayer.getHeldItem();
heldItem2.stackSize--;
return;
}
}
if (gardening.isAlkalineFertiliser(heldItem) && soil.getPH(world, pos) != EnumAcidity.ALKALINE) {
EnumAcidity pH = soil.getPH(world, pos);
int next = Math.min(pH.ordinal() + fertiliserStrength, 2);
if (soil.setPH(world, pos, EnumAcidity.values()[next]) && !player.capabilities.isCreativeMode) {
heldItem.shrink(1);
if (Gardening.isAlkalineFertiliser(event.entityPlayer.getHeldItem()) && soil.getPH(event.world, event.x, y, event.z) != EnumAcidity.ALKALINE) {
EnumAcidity pH = soil.getPH(event.world, event.x, y, event.z);
int next = Math.min(pH.ordinal() + Gardening.getFertiliserStrength(event.entityPlayer.getHeldItem()), 2);
if (soil.setPH(event.world, event.x, y, event.z, EnumAcidity.values()[next]) && !event.entityPlayer.capabilities.isCreativeMode) {
ItemStack heldItem3 = event.entityPlayer.getHeldItem();
heldItem3.stackSize--;
return;
}
}
if (gardening.isWeedkiller(heldItem) && gardening.addWeedKiller(world, pos) && !player.capabilities.isCreativeMode) {
heldItem.shrink(1);
if (Gardening.isWeedkiller(event.entityPlayer.getHeldItem()) && Gardening.addWeedKiller(event.world, event.x, y, event.z) && !event.entityPlayer.capabilities.isCreativeMode) {
ItemStack heldItem4 = event.entityPlayer.getHeldItem();
heldItem4.stackSize--;
}
}
@SubscribeEvent
public void plantVanilla(BlockEvent.PlaceEvent event) {
World world = event.getWorld();
BlockPos pos = event.getPos();
Block block = world.getBlockState(pos.down()).getBlock();
if (!BotanyCore.getGardening().isSoil(block)) {
World world = event.world;
int x = event.x;
int y = event.y;
int z = event.z;
Block block = world.getBlock(x, y - 1, z);
if (!(block instanceof IBlockSoil)) {
return;
}
EntityPlayer player = event.getPlayer();
ItemStack heldItem = player.getHeldItem(event.getHand());
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
IFlower flower = flowerRoot.getConversion(heldItem);
IFlower flower = BotanyCore.getFlowerRoot().getConversion(event.itemInHand);
if (flower != null) {
flowerRoot.plant(world, pos, flower, player.getGameProfile());
Gardening.plant(world, x, y, z, flower, event.player.getGameProfile());
}
}
@Deprecated
public void onPlantVanilla(PlayerInteractEvent.RightClickBlock event) {
BlockPos pos = event.getPos();
World world = event.getWorld();
EntityPlayer player = event.getEntityPlayer();
ItemStack heldItem = player.getHeldItemMainhand();
if (!BinnieCore.getBinnieProxy().isSimulating(event.getWorld())) {
public void onPlantVanilla(PlayerInteractEvent event) {
if (!BinnieCore.proxy.isSimulating(event.world) || event.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) {
return;
}
if (event.entityPlayer == null || event.entityPlayer.getHeldItem() == null) {
return;
}
if (heldItem.isEmpty()) {
return;
}
Block block = world.getBlockState(pos).getBlock();
World world = event.world;
int x = event.x;
int y = event.y;
int z = event.z;
Block block = world.getBlock(x, y, z);
int py = -1;
if (block instanceof IBlockSoil && (world.isAirBlock(pos.up()) || block.isReplaceable(world, pos))) {
if (block instanceof IBlockSoil && (world.isAirBlock(x, y + 1, z) || world.getBlock(x, y, z).isReplaceable(world, x, y, z))) {
py = 1;
}
if (py < 0) {
return;
}
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
IFlower flower = flowerRoot.getConversion(heldItem);
if (flower != null && flowerRoot.plant(world, pos.add(0, py, 0), flower, player.getGameProfile()) && !player.capabilities.isCreativeMode) {
heldItem.shrink(1);
IFlower flower = BotanyCore.getFlowerRoot().getConversion(event.entityPlayer.getHeldItem());
if (flower != null && Gardening.plant(world, x, y + py, z, flower, event.entityPlayer.getGameProfile()) && !event.entityPlayer.capabilities.isCreativeMode) {
ItemStack heldItem = event.entityPlayer.getHeldItem();
heldItem.stackSize--;
}
}
@SubscribeEvent
public void onBonemeal(BonemealEvent event) {
BlockPos pos = event.getPos();
Block block = event.getBlock().getBlock();
if (BotanyCore.getGardening().isSoil(block)) {
Block block = event.world.getBlock(event.x, event.y, event.z);
if (Gardening.isSoil(block)) {
IBlockSoil soil = (IBlockSoil) block;
if (soil.fertilise(event.getWorld(), pos, EnumSoilType.LOAM)) {
if (soil.fertilise(event.world, event.x, event.y, event.z, EnumSoilType.LOAM)) {
event.setResult(Event.Result.ALLOW);
}
}
TileEntity tile = event.getWorld().getTileEntity(pos);
TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).onBonemeal()) {
event.setResult(Event.Result.ALLOW);
}
}
@Override
public boolean isActive() {
return BinnieCore.isBotanyActive();
}
@Mod.EventHandler
public void onIMC(FMLInterModComms.IMCEvent event) {
for (FMLInterModComms.IMCMessage message : event.getMessages()) {
if (message.key.equals("add-nutrient-fertiliser-1")) {
ModuleGardening.queuedNutrientFertilisers.put(message.getItemStackValue(), 1);
}
if (message.key.equals("add-nutrient-fertiliser-2")) {
ModuleGardening.queuedNutrientFertilisers.put(message.getItemStackValue(), 2);
}
if (message.key.equals("add-acid-fertiliser-1")) {
ModuleGardening.queuedAcidFertilisers.put(message.getItemStackValue(), 1);
}
if (message.key.equals("add-acid-fertiliser-2")) {
ModuleGardening.queuedAcidFertilisers.put(message.getItemStackValue(), 2);
}
if (message.key.equals("add-alkaline-fertiliser-1")) {
ModuleGardening.queuedAlkalineFertilisers.put(message.getItemStackValue(), 1);
}
if (message.key.equals("add-alkaline-fertiliser-2")) {
ModuleGardening.queuedAlkalineFertilisers.put(message.getItemStackValue(), 1);
}
}
}
public static class PacketHandler extends BinniePacketHandler {
public PacketHandler() {
super(Botany.instance);
@@ -1,14 +1,13 @@
package binnie.botany;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.core.util.I18N;
public class CreativeTabBotany extends CreativeTabs {
public static CreativeTabs instance = new CreativeTabBotany();
@@ -18,11 +17,10 @@ public class CreativeTabBotany extends CreativeTabs {
@Override
public ItemStack getIconItemStack() {
return new ItemStack(Blocks.RED_FLOWER, 1, 5);
return new ItemStack(Blocks.red_flower, 1, 5);
}
@Override
@SideOnly(Side.CLIENT)
public String getTranslatedTabLabel() {
return getTabLabel();
}
@@ -35,7 +33,7 @@ public class CreativeTabBotany extends CreativeTabs {
@Override
@SideOnly(Side.CLIENT)
public ItemStack getTabIconItem() {
return new ItemStack(Blocks.YELLOW_FLOWER);
public Item getTabIconItem() {
return Item.getItemFromBlock(Blocks.yellow_flower);
}
}
@@ -1,34 +1,11 @@
package binnie.botany.api;
import javax.annotation.Nullable;
public enum EnumAcidity {
ACID,
NEUTRAL,
ALKALINE;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import binnie.core.util.I18N;
public enum EnumAcidity implements IStringSerializable {
ACID(TextFormatting.RED),
NEUTRAL(null),
ALKALINE(TextFormatting.AQUA);
@Nullable
TextFormatting color;
EnumAcidity(@Nullable TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
public String getID() {
return name().toLowerCase();
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18N.localise("botany.ph." + getName());
if (withColor && color != null) {
localisedName += color;
}
return localisedName;
}
}
@@ -1,7 +1,5 @@
package binnie.botany.api;
import java.util.Locale;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleArea;
@@ -38,7 +36,7 @@ public enum EnumFlowerChromosome implements IChromosomeType {
@Override
public String getName() {
return toString().toLowerCase(Locale.ENGLISH);
return toString().toLowerCase();
}
@Override
@@ -1,31 +1,18 @@
package binnie.botany.api;
import forestry.api.genetics.ISpeciesType;
public enum EnumFlowerStage implements ISpeciesType {
public enum EnumFlowerStage {
FLOWER("Flower"),
SEED("Seed"),
POLLEN("Pollen");
POLLEN("Pollen"),
NONE("NONE");
public static final EnumFlowerStage[] VALUES = values();
String name;
protected String name;
EnumFlowerStage(String name) {
this.name = name;
}
public static EnumFlowerStage getStage(IFlower flower) {
return getStage(flower.getAge());
}
public static EnumFlowerStage getStage(int age) {
return age == 0
? EnumFlowerStage.SEED
: EnumFlowerStage.FLOWER;
}
public String getName() {
return name;
}
}
@@ -1,34 +1,11 @@
package binnie.botany.api;
import javax.annotation.Nullable;
public enum EnumMoisture {
DRY,
NORMAL,
DAMP;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import binnie.core.util.I18N;
public enum EnumMoisture implements IStringSerializable {
DRY(TextFormatting.YELLOW),
NORMAL(null),
DAMP(TextFormatting.DARK_BLUE);
@Nullable
final TextFormatting color;
EnumMoisture(@Nullable TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
public String getID() {
return name().toLowerCase();
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18N.localise("botany.moisture." + getName());
if (withColor && color != null) {
localisedName += color;
}
return localisedName;
}
}
@@ -1,29 +1,11 @@
package binnie.botany.api;
import java.util.Locale;
public enum EnumSoilType {
SOIL,
LOAM,
FLOWERBED;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import binnie.core.util.I18N;
public enum EnumSoilType implements IStringSerializable {
SOIL(TextFormatting.DARK_GRAY),
LOAM(TextFormatting.GOLD),
FLOWERBED(TextFormatting.LIGHT_PURPLE);
private final TextFormatting color;
EnumSoilType(TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
return name().toLowerCase(Locale.ENGLISH);
}
public String getTranslated() {
return color + I18N.localise("botany.soil." + getName());
public String getID() {
return name().toLowerCase();
}
}
@@ -1,18 +0,0 @@
package binnie.botany.api;
public class FlowerManager {
/**
* Convenient access to AlleleManager.alleleRegistry.getSpeciesRoot("rootFlowers")
*/
public static IFlowerRoot flowerRoot;
/**
* Used to create new flowers.
*/
public static IFlowerFactory flowerFactory;
/**
* Used to manager soil.
*/
public static IGardeningManager gardening;
}
@@ -1,10 +1,9 @@
package binnie.botany.api;
import net.minecraft.world.World;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
import net.minecraft.world.World;
public interface IAlleleFlowerEffect extends IAlleleEffect {
IEffectData doEffect(IFlowerGenome genome, IEffectData effect, World world, int x, int y, int z);
IEffectData doEffect(IFlowerGenome genome, IEffectData storedData, World world, int x, int y, int z);
}
@@ -1,28 +1,11 @@
package binnie.botany.api;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IModelManager;
import forestry.api.genetics.IAlleleProperty;
import forestry.api.genetics.IAlleleSpecies;
public interface IAlleleFlowerSpecies extends IAlleleSpecies, IAlleleProperty<IAlleleFlowerSpecies> {
public interface IAlleleFlowerSpecies extends IAlleleSpecies {
IFlowerType getType();
EnumAcidity getPH();
EnumMoisture getMoisture();
@SideOnly(Side.CLIENT)
int getFlowerColor(EnumFlowerStage type, int renderPass);
@SideOnly(Side.CLIENT)
ModelResourceLocation getFlowerModel(EnumFlowerStage type, boolean flowered);
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager, EnumFlowerStage type);
}
@@ -1,12 +0,0 @@
package binnie.botany.api;
import forestry.api.genetics.IAlleleSpeciesBuilder;
public interface IAlleleFlowerSpeciesBuilder extends IAlleleSpeciesBuilder {
@Override
IAlleleFlowerSpecies build();
IAlleleFlowerSpeciesBuilder setPH(EnumAcidity acidity);
IAlleleFlowerSpeciesBuilder setMoisture(EnumMoisture moisture);
}
@@ -1,22 +0,0 @@
package binnie.botany.api;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface IBlockSoil {
EnumAcidity getPH(World world, BlockPos pos);
EnumMoisture getMoisture(World world, BlockPos pos);
EnumSoilType getType(World world, BlockPos pos);
boolean fertilise(World world, BlockPos pos, EnumSoilType soilType);
boolean degrade(World world, BlockPos pos, EnumSoilType soilType);
boolean setPH(World world, BlockPos pos, EnumAcidity acidity);
boolean setMoisture(World world, BlockPos pos, EnumMoisture moisture);
boolean resistsWeeds(World world, BlockPos pos);
}
@@ -1,13 +0,0 @@
package binnie.botany.api;
public interface IColorMix {
IFlowerColor getColorFirst();
IFlowerColor getColorSecond();
boolean isMutation(IFlowerColor colorFirst, IFlowerColor colorSecond);
int getChance();
IFlowerColor getResult();
}
@@ -0,0 +1,13 @@
package binnie.botany.api;
public interface IColourMix {
IFlowerColor getColor1();
IFlowerColor getColor2();
boolean isMutation(IFlowerColor color1, IFlowerColor color2);
int getChance();
IFlowerColor getResult();
}
+5 -10
View File
@@ -1,20 +1,15 @@
package binnie.botany.api;
import javax.annotation.Nullable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.genetics.IIndividual;
import net.minecraft.world.World;
public interface IFlower extends IIndividual {
@Override
IFlowerGenome getGenome();
@Nullable
IFlowerGenome getMate();
void mate(IFlower flower);
void mate(IFlower other);
int getAge();
@@ -22,17 +17,17 @@ public interface IFlower extends IIndividual {
void age();
IFlower getOffspring(World world, BlockPos pos);
IFlower getOffspring(World world);
int getMaxAge();
boolean isWilted();
void setWilted(boolean p0);
void setWilted(boolean value);
boolean hasFlowered();
void setFlowered(boolean p0);
void setFlowered(boolean value);
void removeMate();
}
@@ -9,5 +9,5 @@ public interface IFlowerColor {
int getID();
String getColorName();
String getName();
}
@@ -1,15 +0,0 @@
package binnie.botany.api;
import net.minecraft.item.ItemStack;
import forestry.core.genetics.IGeneticDefinition;
public interface IFlowerDefinition extends IGeneticDefinition {
@Override
IFlowerGenome getGenome();
@Override
IFlower getIndividual();
ItemStack getMemberStack(EnumFlowerStage flowerStage);
}
@@ -1,10 +0,0 @@
package binnie.botany.api;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IClassification;
public interface IFlowerFactory {
IAlleleFlowerSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean isDominant, IClassification branch, String binomial, IFlowerType flowerType);
IFlowerMutationBuilder createMutation(IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IAllele[] result, int chance);
}
@@ -33,9 +33,9 @@ public interface IFlowerGenome extends IGenome {
float getSappiness();
boolean canTolerate(EnumAcidity acidity);
boolean canTolerate(EnumAcidity pH);
boolean canTolerate(EnumMoisture moisture);
boolean canTolerate(EnumTemperature temperature);
boolean canTolerate(EnumTemperature temp);
}
@@ -1,13 +1,9 @@
package binnie.botany.api;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IGenome;
import forestry.api.genetics.IMutation;
public interface IFlowerMutation extends IMutation {
@Override
IFlowerRoot getRoot();
float getChance(World world, BlockPos pos, IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IFlowerGenome genome0, IFlowerGenome genome1);
float getChance(IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1);
}
@@ -1,6 +0,0 @@
package binnie.botany.api;
import forestry.api.genetics.IMutationBuilder;
public interface IFlowerMutationBuilder extends IMutationBuilder {
}
@@ -1,28 +1,22 @@
package binnie.botany.api;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.ISpeciesRoot;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import java.util.Collection;
public interface IFlowerRoot extends ISpeciesRoot {
@Override
@Nullable
IFlower getMember(ItemStack memberStack);
IFlower getMember(ItemStack stack);
@Override
IFlower templateAsIndividual(IAllele[] template);
@Override
IFlower templateAsIndividual(IAllele[] templateFirst, IAllele[] templateSecond);
IFlower templateAsIndividual(IAllele[] templateActive, IAllele[] templateInactive);
@Override
IFlowerGenome templateAsGenome(IAllele[] template);
@@ -31,29 +25,20 @@ public interface IFlowerRoot extends ISpeciesRoot {
IFlowerGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive);
@Override
IBotanistTracker getBreedingTracker(World world, @Nullable GameProfile profile);
IBotanistTracker getBreedingTracker(World world, GameProfile player);
@Override
List<? extends IFlowerMutation> getMutations(boolean shuffle);
Collection<IFlowerMutation> getMutations(boolean shuffle);
@Override
@Nullable
EnumFlowerStage getType(ItemStack itemStack);
EnumFlowerStage getStageType(ItemStack stack);
IFlower getFlower(IFlowerGenome genome);
IFlower getFlower(World world, IFlowerGenome genome);
void addConversion(ItemStack memberStack, IAllele[] template);
void addConversion(ItemStack stack, IAllele[] template);
@Nullable
IFlower getConversion(ItemStack memberStack);
IFlower getConversion(ItemStack stack);
Collection<IColorMix> getColorMixes(boolean shuffle);
Collection<IColourMix> getColourMixes(boolean shuffle);
void registerColourMix(IColorMix colorMix);
boolean plant(World world, BlockPos pos, IFlower flower, GameProfile owner);
void tryGrowSection(World world, BlockPos pos);
void onGrowFromSeed(World world, BlockPos pos);
void registerColourMix(IColourMix colorMix);
}
@@ -1,21 +1,13 @@
package binnie.botany.api;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.util.IIcon;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IFlowerType {
IIcon getStem(EnumFlowerStage stage, boolean flowered, int section);
import forestry.api.core.IModelManager;
IIcon getPetalIcon(EnumFlowerStage stage, boolean flowered, int section);
public interface IFlowerType<I extends IFlowerType<I>> extends Comparable<I> {
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager, EnumFlowerStage type);
@SideOnly(Side.CLIENT)
ModelResourceLocation getModel(EnumFlowerStage type, boolean flowered);
String getName();
IIcon getVariantIcon(EnumFlowerStage stage, boolean flowered, int section);
int getID();
@@ -1,68 +0,0 @@
package binnie.botany.api;
import javax.annotation.Nullable;
import java.util.Collection;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.core.EnumTemperature;
public interface IGardeningManager {
default boolean isSoil(Block block) {
return block instanceof IBlockSoil;
}
boolean isSoil(Item item);
boolean isSoil(ItemStack item);
EnumMoisture getNaturalMoisture(World world, BlockPos pos);
EnumAcidity getNaturalPH(World world, BlockPos pos);
float getBiomeMoisture(World world, BlockPos pos);
float getBiomePH(World world, BlockPos pos);
void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity);
Collection<ItemStack> getAcidFertilisers();
Collection<ItemStack> getAlkalineFertilisers();
Collection<ItemStack> getNutrientFertilisers();
void registerAcidFertiliser(ItemStack stack, int strength);
void registerAlkalineFertiliser(ItemStack stack, int strength);
void registerNutrientFertiliser(ItemStack stack, int strength);
boolean isAcidFertiliser(ItemStack stack);
boolean isAlkalineFertiliser(ItemStack stack);
boolean isNutrientFertiliser(ItemStack stack);
int getFertiliserStrength(ItemStack stack);
boolean canTolerate(@Nullable IFlower flower, World world, BlockPos pos);
EnumSoilType getSoilType(World world, BlockPos pos);
default Block getSoilBlock(EnumSoilType type) {
return getSoilBlock(type, false);
}
Block getSoilBlock(EnumSoilType type, boolean weedKill);
boolean canTolerate(IFlower flower, EnumAcidity acidity, EnumMoisture moisture, EnumTemperature temperature);
boolean isWeedkiller(ItemStack heldItem);
boolean addWeedKiller(World world, BlockPos pos);
}
@@ -0,0 +1,24 @@
package binnie.botany.api.gardening;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import net.minecraft.world.World;
public interface IBlockSoil {
EnumAcidity getPH(World world, int x, int y, int z);
EnumMoisture getMoisture(World world, int x, int y, int z);
EnumSoilType getType(World world, int x, int y, int z);
boolean fertilise(World world, int x, int y, int z, EnumSoilType maxLevel);
boolean degrade(World world, int x, int y, int z, EnumSoilType minLevel);
boolean setPH(World world, int x, int y, int z, EnumAcidity pH);
boolean setMoisture(World world, int x, int y, int z, EnumMoisture p4);
boolean resistsWeeds(World world, int x, int y, int z);
}
@@ -1,7 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,118 +1,146 @@
package binnie.botany.ceramic;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.BlockMetadata;
import binnie.core.block.IBlockMetadata;
import binnie.core.block.TileEntityMetadata;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
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.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.List;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.BinnieCore;
import binnie.core.util.TileUtil;
public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegister {
public class BlockCeramic extends Block implements IBlockMetadata {
public BlockCeramic() {
super(Material.ROCK);
super(Material.rock);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramic");
setBlockName("ceramic");
setCreativeTab(CreativeTabBotany.instance);
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
manager.registerItemModel(item, c.ordinal());
}
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int blockMeta, int fortune) {
return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta);
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return Collections.emptyList();
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
return BlockMetadata.breakBlock(this, player, world, x, y, z);
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, @Nullable EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = new ArrayList<>();
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
drops = Collections.singletonList(ceramic.getStack());
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && BinnieCore.getBinnieProxy().isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
public TileEntity createNewTileEntity(World var1, int i) {
return new TileEntityMetadata();
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileCeramic();
}
@Override
public boolean hasTileEntity(IBlockState state) {
public boolean hasTileEntity(int meta) {
return true;
}
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
TileCeramic ceramic = TileUtil.getTile(worldIn, pos, TileCeramic.class);
if (ceramic != null) {
ceramic.setColor(EnumFlowerColor.VALUES[stack.getItemDamage()]);
}
public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventType) {
super.onBlockEventReceived(world, x, y, z, eventId, eventType);
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null && tileentity.receiveClientEvent(eventId, eventType);
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
public int getPlacedMeta(ItemStack itemStack, World world, int x, int y, int z, ForgeDirection direction) {
return TileEntityMetadata.getItemDamage(itemStack);
}
@Override
public int getDroppedMeta(int blockMeta, int tileMeta) {
return tileMeta;
}
@Override
public String getBlockName(ItemStack itemStack) {
return I18N.localise("botany.ceramicBlock");
}
@Override
public void addBlockTooltip(ItemStack stack, List tooltip) {
int meta = TileEntityMetadata.getItemDamage(stack);
tooltip.add(EnumChatFormatting.GRAY + EnumFlowerColor.get(meta).getName());
}
@Override
public void dropAsStack(World world, int x, int y, int z, ItemStack itemStack) {
dropBlockAsItem(world, x, y, z, itemStack);
}
@Override
public void getSubBlocks(Item item, CreativeTabs tabs, List itemList) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
itemList.add(new ItemStack(this, 1, c.getFlowerColorAllele().getID()));
itemList.add(TileEntityMetadata.getItemStack(this, c.ordinal()));
}
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
return ceramic.getStack();
}
return super.getPickBlock(state, target, world, pos, player);
}
@SideOnly(Side.CLIENT)
@Override
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
return ceramic.getColor().getFlowerColorAllele().getColor(false);
}
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
if (tile != null) {
return getIcon(side, tile.getTileMetadata());
}
return EnumFlowerColor.get(0).getFlowerColorAllele().getColor(false);
return super.getIcon(world, x, y, z, side);
}
@Override
public IIcon getIcon(int side, int meta) {
return blockIcon;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
blockIcon = Botany.proxy.getIcon(register, "ceramic");
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
if (tile != null) {
return getRenderColor(tile.getTileMetadata());
}
return 0xffffff;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int side) {
super.breakBlock(world, x, y, z, block, side);
world.removeTileEntity(x, y, z);
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
return BlockMetadata.getPickBlock(world, x, y, z);
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderColor(int meta) {
return EnumFlowerColor.get(meta).getColor(false);
}
}
@@ -0,0 +1,553 @@
package binnie.botany.ceramic;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.items.BotanyItems;
import binnie.core.BinnieCore;
import binnie.core.block.BlockMetadata;
import binnie.core.block.IBlockMetadata;
import binnie.core.block.IMultipassBlock;
import binnie.core.block.MultipassBlockRenderer;
import binnie.core.block.TileEntityMetadata;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
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.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.List;
public class BlockCeramicBrick extends Block implements IBlockMetadata, IMultipassBlock {
public BlockCeramicBrick() {
super(Material.rock);
setHardness(1.0f);
setResistance(5.0f);
setBlockName("ceramicBrick");
setCreativeTab(CreativeTabBotany.instance);
}
private static BlockType getType(int meta) {
return new BlockType(meta);
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int blockMeta, int fortune) {
return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta);
}
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) {
return BlockMetadata.breakBlock(this, player, world, x, y, z);
}
@Override
public TileEntity createNewTileEntity(World var1, int i) {
return new TileEntityMetadata();
}
@Override
public boolean hasTileEntity(int meta) {
return true;
}
@Override
public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventType) {
super.onBlockEventReceived(world, x, y, z, eventId, eventType);
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null && tileentity.receiveClientEvent(eventId, eventType);
}
@Override
public int getPlacedMeta(ItemStack itemStack, World world, int x, int y, int z, ForgeDirection direction) {
return TileEntityMetadata.getItemDamage(itemStack);
}
@Override
public int getDroppedMeta(int blockMeta, int tileMeta) {
return tileMeta;
}
@Override
public String getBlockName(ItemStack itemStack) {
int meta = TileEntityMetadata.getItemDamage(itemStack);
return getType(meta).getName();
}
@Override
public void addBlockTooltip(ItemStack itemStack, List tooltip) {
int meta = TileEntityMetadata.getItemDamage(itemStack);
getType(meta).addTooltip(tooltip);
}
@Override
public void dropAsStack(World world, int x, int y, int z, ItemStack itemStack) {
dropBlockAsItem(world, x, y, z, itemStack);
}
@Override
public void getSubBlocks(Item item, CreativeTabs tab, List itemList) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
BlockType type = new BlockType(c, c, TileType.Tile);
itemList.add(TileEntityMetadata.getItemStack(this, type.ordinal()));
}
for (TileType type2 : TileType.values()) {
if (type2.canDouble()) {
itemList.add(new BlockType(EnumFlowerColor.BROWN, EnumFlowerColor.GOLD, type2).getStack(1));
}
}
itemList.add(new BlockType(EnumFlowerColor.GOLD, EnumFlowerColor.GOLD, TileType.Split).getStack(1));
itemList.add(new BlockType(EnumFlowerColor.BROWN, EnumFlowerColor.BROWN, TileType.Chequered).getStack(1));
itemList.add(new BlockType(EnumFlowerColor.GOLD, EnumFlowerColor.BROWN, TileType.LargeBrick).getStack(1));
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
if (tile != null) {
return getIcon(side, tile.getTileMetadata());
}
return super.getIcon(world, x, y, z, side);
}
@Override
public IIcon getIcon(int side, int meta) {
return getType(meta).getIcon(MultipassBlockRenderer.getLayer());
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
for (TileType type : TileType.values()) {
for (int i = 0; i < 3; ++i) {
type.icons[i] = Botany.proxy.getIcon(register, "ceramic." + type.id + "." + i);
}
}
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
if (tile != null) {
return getRenderColor(tile.getTileMetadata());
}
return 0xffffff;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int side) {
super.breakBlock(world, x, y, z, block, side);
world.removeTileEntity(x, y, z);
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
return BlockMetadata.getPickBlock(world, x, y, z);
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderColor(int meta) {
return colorMultiplier(meta);
}
@Override
public int getNumberOfPasses() {
return 3;
}
@Override
public int colorMultiplier(int meta) {
BlockType type = getType(meta);
if (MultipassBlockRenderer.getLayer() == 0) {
return 0xffffff;
}
if (MultipassBlockRenderer.getLayer() == 1) {
return type.color1.getColor(false);
}
return type.color2.getColor(false);
}
@Override
public int getRenderType() {
return BinnieCore.multipassRenderID;
}
public enum TileType {
Tile("tile", "ceramicTile"),
Brick("brick", "ceramicBricks"),
StripeBrick("brickstripe", "strippedCeramicBricks"),
LargeBrick("bricklarge", "largeCeramicBricks"),
Split("split", "splitCeramicTile"),
Chequered("cheque", "chequeredCeramicTile"),
Mixed("mixed", "mixedCeramicTile"),
VerticalBrick("verticalbrick", "verticalCeramicBricks"),
VerticalStripeBrick("verticalbrickstripe", "verticalStripedCeramicBricks"),
VerticalLargeBrick("verticalbricklarge", "largeVerticalCeramicBricks");
protected String id;
protected String name;
protected IIcon[] icons;
TileType(String id, String name) {
icons = new IIcon[3];
this.id = id;
this.name = name;
}
public static TileType get(int id) {
return values()[id % values().length];
}
public boolean canDouble() {
return this != TileType.Tile;
}
public ItemStack getRecipe(List<ItemStack> stacks) {
switch (this) {
case Tile:
return getTileRecipe(stacks);
case Split:
return getSplitRecipe(stacks);
case Chequered:
return getChequeredRecipe(stacks);
case Mixed:
return getMixedRecipe(stacks);
case LargeBrick:
return getLargeBrickRecipe(stacks);
case Brick:
case StripeBrick:
return getBrickRecipe(stacks);
case VerticalLargeBrick:
case VerticalBrick:
case VerticalStripeBrick:
return getVerticalBrickRecipe(stacks);
}
return null;
}
private ItemStack getTileRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return null;
}
int mortars = 0;
int blockColor = -1;
for (ItemStack stack : stacks) {
if (isMortar(stack)) {
mortars++;
} else {
if (stack.getItem() != Item.getItemFromBlock(Botany.ceramic)) {
return null;
}
int color = TileEntityMetadata.getItemDamage(stack);
if (blockColor == -1) {
blockColor = color;
} else if (blockColor != color) {
return null;
}
}
}
if (mortars != 1) {
return null;
}
EnumFlowerColor c = EnumFlowerColor.get(blockColor);
return new BlockType(c, c, TileType.Tile).getStack(3);
}
private ItemStack getSplitRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return null;
}
int[] colors = {-1, -1};
int altCounter = 0;
for (ItemStack stack : stacks) {
int alt = (altCounter != 0 && altCounter != 3) ? 1 : 0;
if (stack.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) {
return null;
}
BlockType type = new BlockType(stack);
if (type.type != TileType.Tile) {
return null;
}
int color2 = type.color1.ordinal();
if (colors[alt] == -1) {
colors[alt] = color2;
} else if (colors[alt] != color2) {
return null;
}
altCounter++;
}
return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.Split).getStack(4);
}
private ItemStack getChequeredRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return null;
}
int[] colors = {-1, -1};
for (ItemStack stack : stacks) {
if (stack.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) {
return null;
}
BlockType type2 = new BlockType(stack);
if (type2.type != TileType.Split) {
return null;
}
int color1 = type2.color1.ordinal();
int color2 = type2.color2.ordinal();
if (colors[0] == -1) {
colors[0] = color1;
colors[1] = color2;
} else if (colors[0] != color1 || colors[1] != color2) {
return null;
}
}
return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.Chequered).getStack(4);
}
private ItemStack getMixedRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return null;
}
int[] colors = {-1, -1};
for (ItemStack stack : stacks) {
if (stack.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) {
return null;
}
BlockType type2 = new BlockType(stack);
if (type2.isTwoColors()) {
return null;
}
int color3 = type2.color1.ordinal();
if (type2.type == TileType.Split) {
if (colors[1] != -1) {
return null;
}
colors[1] = color3;
} else {
if (type2.type != TileType.Chequered) {
return null;
}
if (colors[0] == -1) {
colors[0] = color3;
} else if (colors[0] != color3) {
return null;
}
}
}
if (colors[0] == -1 || colors[1] == -1) {
return null;
}
return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.Mixed).getStack(4);
}
private ItemStack getLargeBrickRecipe(List<ItemStack> stacks) {
if (stacks.size() == 1) {
ItemStack stack3 = stacks.get(0);
BlockType type3 = new BlockType(stack3);
if (type3.type == TileType.VerticalLargeBrick) {
type3.type = this;
return type3.getStack(1);
}
return null;
}
if (stacks.size() != 3) {
return null;
}
int[] colors = {-1, -1};
for (ItemStack stack4 : stacks) {
if (stack4.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) {
return null;
}
BlockType type4 = new BlockType(stack4);
if (type4.type != TileType.Tile) {
return null;
}
int color5 = type4.color1.ordinal();
if (colors[0] == -1) {
colors[0] = color5;
} else if (colors[1] == -1) {
colors[1] = color5;
} else if (colors[1] != color5) {
return null;
}
}
if (colors[1] == -1) {
colors[1] = colors[0];
}
return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), TileType.LargeBrick).getStack(3);
}
private ItemStack getBrickRecipe(List<ItemStack> stacks) {
if (stacks.size() == 1) {
ItemStack stack = stacks.get(0);
BlockType type = new BlockType(stack);
if (type.type == TileType.VerticalBrick) {
type.type = this;
return type.getStack(1);
}
if (type.type == TileType.StripeBrick) {
type.type = this;
return type.getStack(1);
}
return null;
}
if (stacks.size() != 4) {
return null;
}
int[] colors = {-1, -1};
for (int index2 = 0; index2 < stacks.size(); ++index2) {
ItemStack stack = stacks.get(index2);
if (stack.getItem() != Item.getItemFromBlock(Botany.ceramicBrick)) {
return null;
}
BlockType type = new BlockType(stack);
if (type.type != TileType.LargeBrick) {
return null;
}
int color5 = type.color1.ordinal();
int color6 = type.color2.ordinal();
int alt2 = (index2 != 0 && index2 != 3) ? 1 : 0;
if (this == TileType.StripeBrick) {
alt2 = 0;
}
if (colors[alt2] == -1) {
colors[alt2] = color5;
colors[1 - alt2] = color6;
} else if (colors[alt2] != color5 || colors[1 - alt2] != color6) {
return null;
}
}
return new BlockType(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), this).getStack(4);
}
private ItemStack getVerticalBrickRecipe(List<ItemStack> stacks) {
if (stacks.size() != 1) {
return null;
}
ItemStack stack5 = stacks.get(0);
BlockType type = new BlockType(stack5);
if (type.type == TileType.LargeBrick) {
type.type = TileType.VerticalLargeBrick;
return type.getStack(1);
}
if (type.type == TileType.Brick) {
type.type = TileType.VerticalBrick;
return type.getStack(1);
}
if (type.type == TileType.StripeBrick) {
type.type = TileType.VerticalStripeBrick;
return type.getStack(1);
}
return null;
}
private boolean isMortar(ItemStack stack) {
return stack.getItem() == Botany.misc
&& stack.getItemDamage() == BotanyItems.Mortar.ordinal();
}
}
public static class BlockType {
protected EnumFlowerColor color1;
protected EnumFlowerColor color2;
protected TileType type;
private BlockType(EnumFlowerColor color1, EnumFlowerColor color2, TileType type) {
this.color1 = color1;
this.color2 = color2;
this.type = type;
}
public boolean isTwoColors() {
return type.canDouble() && color2 != color1;
}
public BlockType(ItemStack stack) {
this(TileEntityMetadata.getItemDamage(stack));
}
public ItemStack getStack(int stackSize) {
ItemStack stack = TileEntityMetadata.getItemStack(Botany.ceramicBrick, ordinal());
stack.stackSize = stackSize;
return stack;
}
public BlockType(int id) {
color1 = EnumFlowerColor.get(id & 0xFF);
color2 = EnumFlowerColor.get(id >> 8 & 0xFF);
type = TileType.get(id >> 16 & 0xFF);
}
public String getName() {
return I18N.localise("botany." + type.name);
}
public void addTooltip(List tooltip) {
String name = color1.getName();
if (type.canDouble() && color2 != color1) {
name = I18N.localise("botany.colour.double", name, color2.getName());
}
tooltip.add(EnumChatFormatting.GRAY + name);
}
public int ordinal() {
return color1.ordinal() + color2.ordinal() * 256 + type.ordinal() * 65536;
}
public IIcon getIcon(int layer) {
return type.icons[layer];
}
}
}
@@ -1,32 +1,42 @@
package binnie.botany.ceramic;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.TileEntityMetadata;
import binnie.core.util.I18N;
import binnie.extratrees.api.IDesign;
import binnie.extratrees.carpentry.BlockDesign;
import binnie.extratrees.carpentry.DesignBlock;
import binnie.extratrees.carpentry.ModuleCarpentry;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import java.util.List;
public class BlockCeramicPatterned extends BlockDesign {
public BlockCeramicPatterned() {
super(CeramicDesignSystem.instance, Material.ROCK);
super(CeramicDesignSystem.instance, Material.rock);
setHardness(1.0f);
setResistance(5.0f);
setCreativeTab(CreativeTabBotany.instance);
setRegistryName("ceramicPattern");
setBlockName("ceramicPattern");
}
@Override
public ItemStack getCreativeStack(IDesign design) {
return ModuleCarpentry.getItemStack(this, CeramicColor.get(EnumFlowerColor.White), CeramicColor.get(EnumFlowerColor.Black), design);
return ModuleCarpentry.getItemStack(this, CeramicColor.get(EnumFlowerColor.WHITE), CeramicColor.get(EnumFlowerColor.BLACK), design);
}
@Override
public String getBlockName(DesignBlock design) {
return I18N.localise("botany.ceramic.block.name", design.getDesign().getName());
return I18N.localise("botany.ceramicBlock");
}
@Override
public void addBlockTooltip(ItemStack stack, List tooltip) {
super.addBlockTooltip(stack, tooltip);
DesignBlock block = ModuleCarpentry.getDesignBlock(getDesignSystem(), TileEntityMetadata.getItemDamage(stack));
tooltip.add(EnumChatFormatting.GRAY + block.getDesign().getName());
}
}
@@ -0,0 +1,197 @@
package binnie.botany.ceramic;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.BlockMetadata;
import binnie.core.block.IBlockMetadata;
import binnie.core.block.TileEntityMetadata;
import binnie.core.util.I18N;
import binnie.extratrees.ExtraTrees;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
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.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class BlockStained extends Block implements IBlockMetadata {
public BlockStained() {
super(Material.glass);
setCreativeTab(CreativeTabBotany.instance);
setBlockName("stained");
}
@Override
public int quantityDropped(Random rand) {
return 0;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderBlockPass() {
return 1;
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) {
// Block block2 = world.getBlock(x - Facing.offsetsXForSide[side], y - Facing.offsetsYForSide[side], z - Facing.offsetsZForSide[side]);
Block block = world.getBlock(x, y, z);
return block != this
&& block != ExtraTrees.blockStained
&& super.shouldSideBeRendered(world, x, y, z, side);
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int blockMeta, int fortune) {
return BlockMetadata.getBlockDropped(this, world, x, y, z, blockMeta);
}
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
return BlockMetadata.breakBlock(this, player, world, x, y, z);
}
@Override
public TileEntity createNewTileEntity(World var1, int i) {
return new TileEntityMetadata();
}
@Override
public boolean hasTileEntity(int meta) {
return true;
}
@Override
public boolean onBlockEventReceived(World world, int x, int y, int z, int eventId, int eventType) {
super.onBlockEventReceived(world, x, y, z, eventId, eventType);
TileEntity tileentity = world.getTileEntity(x, y, z);
return tileentity != null && tileentity.receiveClientEvent(eventId, eventType);
}
@Override
public int getPlacedMeta(ItemStack itemStack, World world, int x, int y, int z, ForgeDirection direction) {
return TileEntityMetadata.getItemDamage(itemStack);
}
@Override
public int getDroppedMeta(int blockMeta, int tileMeta) {
return tileMeta;
}
@Override
public String getBlockName(ItemStack itemStack) {
return I18N.localise("botany.pigmentedGlass");
}
@Override
public void addBlockTooltip(ItemStack itemStack, List tooltip) {
int meta = TileEntityMetadata.getItemDamage(itemStack);
tooltip.add(EnumChatFormatting.GRAY + EnumFlowerColor.get(meta).getName());
}
@Override
public void dropAsStack(World world, int x, int y, int z, ItemStack stack) {
dropBlockAsItem(world, x, y, z, stack);
}
@Override
public void getSubBlocks(Item item, CreativeTabs tab, List itemList) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
itemList.add(TileEntityMetadata.getItemStack(this, c.ordinal()));
}
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
if (tile != null) {
return getIcon(side, tile.getTileMetadata());
}
return super.getIcon(world, x, y, z, side);
}
@Override
public IIcon getIcon(int side, int meta) {
return blockIcon;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
blockIcon = Botany.proxy.getIcon(register, "stained");
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, x, y, z);
if (tile != null) {
return getRenderColor(tile.getTileMetadata());
}
return 0xffffff;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int side) {
super.breakBlock(world, x, y, z, block, side);
world.removeTileEntity(x, y, z);
}
@Override
public boolean isWood(IBlockAccess world, int x, int y, int z) {
return true;
}
@Override
public int getFlammability(IBlockAccess world, int x, int y, int z, ForgeDirection face) {
return 20;
}
@Override
public boolean isFlammable(IBlockAccess world, int x, int y, int z, ForgeDirection face) {
return true;
}
@Override
public int getFireSpreadSpeed(IBlockAccess world, int x, int y, int z, ForgeDirection face) {
return 5;
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
return BlockMetadata.getPickBlock(world, x, y, z);
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderColor(int meta) {
return EnumFlowerColor.get(meta).getColor(false);
}
}
@@ -1,185 +0,0 @@
package binnie.botany.ceramic;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Enchantments;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.BlockMetadata;
import binnie.core.block.IBlockMetadata;
import binnie.core.block.TileEntityMetadata;
import binnie.core.util.I18N;
public class BlockStainedGlass extends Block implements IBlockMetadata, IColoredBlock, IItemModelRegister {
public BlockStainedGlass() {
super(Material.GLASS);
setCreativeTab(CreativeTabBotany.instance);
setRegistryName("stained");
setSoundType(SoundType.GLASS);
setHardness(0.3F);
}
@Override
public int quantityDropped(Random rand) {
return 0;
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.TRANSLUCENT;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
for (EnumFlowerColor color : EnumFlowerColor.values()) {
manager.registerItemModel(item, color.getFlowerColorAllele().getID());
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) {
IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
Block block = iblockstate.getBlock();
return block != this;
}
@Override
public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) {
player.addStat(StatList.getBlockStats(this));
player.addExhaustion(0.005F);
if (EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0 && te instanceof TileEntityMetadata) {
List<ItemStack> items = new ArrayList<>();
TileEntityMetadata tile = (TileEntityMetadata) te;
int damage = getDroppedMeta(state, tile.getTileMetadata());
ItemStack itemstack = TileEntityMetadata.getItemStack(this, damage);
if (!itemstack.isEmpty()) {
items.add(itemstack);
}
ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player);
for (ItemStack item : items) {
spawnAsEntity(worldIn, pos, item);
}
}
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return Collections.emptyList();
}
@Override
public TileEntity createNewTileEntity(World var1, int i) {
return new TileEntityMetadata();
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) {
TileEntity tileentity = worldIn.getTileEntity(pos);
return tileentity != null && tileentity.receiveClientEvent(id, param);
}
@Override
public int getPlacedMeta(ItemStack stack, World world, BlockPos pos, EnumFacing clickedBlock) {
return TileEntityMetadata.getItemDamage(stack);
}
@Override
public int getDroppedMeta(IBlockState state, int tileMetadata) {
return tileMetadata;
}
@Override
public String getDisplayName(ItemStack itemStack) {
EnumFlowerColor color = EnumFlowerColor.get(TileEntityMetadata.getItemDamage(itemStack));
return I18N.localise("botany.pigmented.glass.name", color.getDisplayName());
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
for (EnumFlowerColor color : EnumFlowerColor.values()) {
itemList.add(TileEntityMetadata.getItemStack(this, color.ordinal()));
}
}
@Override
public boolean isWood(IBlockAccess world, BlockPos pos) {
return true;
}
@Override
public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face) {
return 20;
}
@Override
public boolean isFlammable(IBlockAccess world, BlockPos pos, EnumFacing face) {
return true;
}
@Override
public int getFireSpreadSpeed(IBlockAccess world, BlockPos pos, EnumFacing face) {
return 5;
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
return BlockMetadata.getPickBlock(world, pos);
}
@Override
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) {
if (worldIn == null || pos == null) {
return 0;
}
EnumFlowerColor color = EnumFlowerColor.get(TileEntityMetadata.getTileMetadata(worldIn, pos));
return color.getFlowerColorAllele().getColor(false);
}
}
@@ -1,25 +1,25 @@
package binnie.botany.ceramic;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.item.ItemStack;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.TileEntityMetadata;
import binnie.extratrees.api.IDesignMaterial;
import net.minecraft.item.ItemStack;
import java.util.LinkedHashMap;
import java.util.Map;
public class CeramicColor implements IDesignMaterial {
private final static Map<EnumFlowerColor, CeramicColor> map = new LinkedHashMap<>();
private static Map<EnumFlowerColor, CeramicColor> map;
static {
CeramicColor.map = new LinkedHashMap<>();
for (EnumFlowerColor c : EnumFlowerColor.values()) {
CeramicColor.map.put(c, new CeramicColor(c));
}
}
EnumFlowerColor color;
protected EnumFlowerColor color;
CeramicColor(EnumFlowerColor color) {
this.color = color;
@@ -31,21 +31,16 @@ public class CeramicColor implements IDesignMaterial {
@Override
public ItemStack getStack() {
return TileEntityMetadata.getItemStack(Botany.gardening().ceramic, color.ordinal());
return TileEntityMetadata.getItemStack(Botany.ceramic, color.ordinal());
}
@Override
public ItemStack getStack(boolean fireproof) {
return getStack();
}
@Override
public String getDesignMaterialName() {
public String getName() {
return color.getName();
}
@Override
public int getColour() {
return color.getFlowerColorAllele().getColor(false);
public int getColor() {
return color.getColor(false);
}
}
@@ -1,33 +1,28 @@
package binnie.botany.ceramic;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.items.BotanyItems;
import binnie.core.AbstractMod;
import binnie.core.BinnieCore;
import binnie.extratrees.api.IDesignMaterial;
import binnie.extratrees.api.IDesignSystem;
import binnie.extratrees.api.IPattern;
import binnie.extratrees.carpentry.DesignerManager;
import binnie.extratrees.carpentry.EnumPattern;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import java.util.HashMap;
import java.util.Map;
public class CeramicDesignSystem implements IDesignSystem {
public static CeramicDesignSystem instance = new CeramicDesignSystem();
Map<Integer, TextureAtlasSprite> primary;
Map<Integer, TextureAtlasSprite> secondary;
protected Map<Integer, IIcon> primary;
protected Map<Integer, IIcon> secondary;
CeramicDesignSystem() {
primary = new HashMap<>();
@@ -37,12 +32,12 @@ public class CeramicDesignSystem implements IDesignSystem {
@Override
public IDesignMaterial getDefaultMaterial() {
return CeramicColor.get(EnumFlowerColor.White);
return CeramicColor.get(EnumFlowerColor.WHITE);
}
@Override
public IDesignMaterial getDefaultMaterial2() {
return CeramicColor.get(EnumFlowerColor.Black);
return CeramicColor.get(EnumFlowerColor.BLACK);
}
@Override
@@ -56,13 +51,11 @@ public class CeramicDesignSystem implements IDesignSystem {
}
public String getTexturePath() {
return "blocks/ceramic";
return "ceramic";
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getPrimarySprite(IPattern pattern) {
public IIcon getPrimaryIcon(IPattern pattern) {
if (pattern instanceof EnumPattern) {
return primary.get(((EnumPattern) pattern).ordinal());
}
@@ -70,9 +63,7 @@ public class CeramicDesignSystem implements IDesignSystem {
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSecondarySprite(IPattern pattern) {
public IIcon getSecondaryIcon(IPattern pattern) {
if (pattern instanceof EnumPattern) {
return secondary.get(((EnumPattern) pattern).ordinal());
}
@@ -80,14 +71,10 @@ public class CeramicDesignSystem implements IDesignSystem {
}
@Override
@SideOnly(Side.CLIENT)
public void registerSprites() {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
public void registerIcons(IIconRegister register) {
for (EnumPattern pattern : EnumPattern.values()) {
ResourceLocation primaryLocation = new ResourceLocation(getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0");
ResourceLocation secondaryLocation = new ResourceLocation(getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1");
primary.put(pattern.ordinal(), textureMap.registerSprite(primaryLocation));
secondary.put(pattern.ordinal(), textureMap.registerSprite(secondaryLocation));
primary.put(pattern.ordinal(), BinnieCore.proxy.getIcon(register, getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0"));
secondary.put(pattern.ordinal(), BinnieCore.proxy.getIcon(register, getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1"));
}
}
@@ -97,14 +84,11 @@ public class CeramicDesignSystem implements IDesignSystem {
@Override
public ItemStack getAdhesive() {
return BotanyItems.MORTAR.get(1);
return BotanyItems.Mortar.get(1);
}
@Override
@Nullable
public IDesignMaterial getMaterial(ItemStack itemStack) {
return (itemStack.getItem() == Item.getItemFromBlock(Botany.gardening().ceramic))
? getMaterial(itemStack.getItemDamage())
: null;
public IDesignMaterial getMaterial(ItemStack stack) {
return (stack.getItem() == Item.getItemFromBlock(Botany.ceramic)) ? getMaterial(stack.getItemDamage()) : null;
}
}
@@ -1,49 +1,37 @@
package binnie.botany.ceramic;
import java.util.ArrayList;
import java.util.List;
import binnie.Constants;
import binnie.botany.Botany;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeHooks;
import java.util.ArrayList;
import java.util.List;
import binnie.botany.Botany;
import binnie.botany.ceramic.brick.CeramicBrickType;
import binnie.botany.gardening.ModuleGardening;
import net.minecraftforge.registries.IForgeRegistryEntry;
public class CeramicTileRecipe extends IForgeRegistryEntry.Impl<IRecipe> implements IRecipe { private ItemStack cached = ItemStack.EMPTY;
public CeramicTileRecipe() {
setRegistryName(new ResourceLocation(Constants.BOTANY_MOD_ID, "ceramic_tile"));
}
public class CeramicTileRecipe implements IRecipe {
protected ItemStack cached;
@Override
public boolean matches(InventoryCrafting inv, World world) {
cached = getCraftingResult(inv);
return !cached.isEmpty();
public boolean matches(InventoryCrafting crafting, World world) {
cached = getCraftingResult(crafting);
return cached != null;
}
@Override
public ItemStack getCraftingResult(InventoryCrafting inv) {
ModuleGardening gardening = Botany.gardening();
Item ceramicBlock = Item.getItemFromBlock(gardening.ceramic);
Item ceramicTile = Item.getItemFromBlock(gardening.ceramicTile);
Item ceramicBrick = Item.getItemFromBlock(gardening.ceramicBrick);
Item mortar = gardening.misc;
Item ceramicBlock = Item.getItemFromBlock(Botany.ceramic);
Item ceramicTile = Item.getItemFromBlock(Botany.ceramicTile);
Item ceramicBrick = Item.getItemFromBlock(Botany.ceramicBrick);
Item mortar = Botany.misc;
List<ItemStack> stacks = new ArrayList<>();
int ix = -1;
int iy = -1;
for (int i = 0; i < inv.getSizeInventory(); ++i) {
ItemStack stack = inv.getStackInSlot(i);
if (!stack.isEmpty()) {
if (stack != null) {
int x = i / 3;
int y = i % 3;
if (ix == -1) {
@@ -51,35 +39,33 @@ public class CeramicTileRecipe extends IForgeRegistryEntry.Impl<IRecipe> impleme
iy = y;
}
if (x - ix >= 2 || y - iy >= 2 || y < iy || x < ix) {
return ItemStack.EMPTY;
return null;
}
if (stack.getItem() != ceramicBlock && stack.getItem() != ceramicTile && stack.getItem() != ceramicBrick && stack.getItem() != mortar) {
return ItemStack.EMPTY;
Item item = stack.getItem();
if (item != ceramicBlock && item != ceramicTile && item != ceramicBrick && item != mortar) {
return null;
}
stacks.add(stack);
}
}
for (CeramicBrickType type : CeramicBrickType.VALUES) {
ItemStack result = type.getRecipe(stacks);
if (!result.isEmpty()) {
return result;
for (BlockCeramicBrick.TileType type : BlockCeramicBrick.TileType.values()) {
ItemStack stack2 = type.getRecipe(stacks);
if (stack2 != null) {
return stack2;
}
}
return ItemStack.EMPTY;
return null;
}
@Override
public boolean canFit(int width, int height) {
return width >= 2 && height >= 2;
public int getRecipeSize() {
return 2;
}
@Override
public ItemStack getRecipeOutput() {
return cached;
}
@Override
public NonNullList<ItemStack> getRemainingItems(InventoryCrafting inv) {
return ForgeHooks.defaultRecipeGetRemainingItems(inv);
}
}
@@ -1,37 +0,0 @@
package binnie.botany.ceramic;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.core.items.IColoredItem;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.util.I18N;
public class ItemCeramic extends ItemBlock implements IColoredItem {
public ItemCeramic(BlockCeramic block) {
super(block);
}
@Override
public int getMetadata(int metadata) {
return metadata;
}
@SideOnly(Side.CLIENT)
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
EnumFlowerColor color = EnumFlowerColor.get(stack.getItemDamage());
return color.getFlowerColorAllele().getColor(false);
}
@Override
@SideOnly(Side.CLIENT)
public String getItemStackDisplayName(ItemStack itemStack) {
EnumFlowerColor color = EnumFlowerColor.get(itemStack.getItemDamage());
return I18N.localise("botany.ceramic.name", color.getDisplayName());
}
}
@@ -1,26 +0,0 @@
package binnie.botany.ceramic;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.core.items.IColoredItem;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.ItemMetadata;
import binnie.core.block.TileEntityMetadata;
public class ItemStainedGlass extends ItemMetadata implements IColoredItem {
public ItemStainedGlass(Block block) {
super(block);
}
@SideOnly(Side.CLIENT)
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
EnumFlowerColor color = EnumFlowerColor.get(TileEntityMetadata.getItemDamage(stack));
return color.getFlowerColorAllele().getColor(false);
}
}
@@ -1,46 +1,51 @@
package binnie.botany.ceramic;
import binnie.Binnie;
import binnie.Constants;
import binnie.botany.Botany;
import binnie.botany.api.IFlower;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.registries.IForgeRegistryEntry;
public class PigmentRecipe extends IForgeRegistryEntry.Impl<IRecipe> implements IRecipe {
public class PigmentRecipe implements IRecipe {
protected ItemStack cached;
private ItemStack unknown;
public PigmentRecipe() {
setRegistryName(new ResourceLocation(Constants.BOTANY_MOD_ID, "pigment"));
unknown = null;
}
@Override
public boolean matches(InventoryCrafting crafting, World world) {
return !getCraftingResult(crafting).isEmpty();
return getCraftingResult(crafting) != null;
}
@Override
public ItemStack getRecipeOutput() {
return ItemStack.EMPTY;
if (cached != null) {
return cached;
}
return unknown;
}
@Override
public ItemStack getCraftingResult(InventoryCrafting crafting) {
int n = 0;
ItemStack stack = ItemStack.EMPTY;
ItemStack stack = null;
for (int i = 0; i < crafting.getSizeInventory(); ++i) {
ItemStack stackInSlot = crafting.getStackInSlot(i);
if (!stackInSlot.isEmpty()) {
if (crafting.getStackInSlot(i) != null) {
if (++n > 1) {
return ItemStack.EMPTY;
return null;
}
if (Binnie.GENETICS.getFlowerRoot().isMember(stackInSlot)) {
IFlower flower = Binnie.GENETICS.getFlowerRoot().getMember(stackInSlot);
if (flower != null && flower.getAge() >= 1) {
stack = new ItemStack(Botany.gardening().pigment, 1, flower.getGenome().getPrimaryColor().getID());
}
if (!Binnie.Genetics.getFlowerRoot().isMember(crafting.getStackInSlot(i))) {
continue;
}
IFlower flower = Binnie.Genetics.getFlowerRoot().getMember(crafting.getStackInSlot(i));
if (flower.getAge() >= 1) {
stack = new ItemStack(Botany.pigment, 1, flower.getGenome().getPrimaryColor().getID());
}
}
}
@@ -48,7 +53,7 @@ public class PigmentRecipe extends IForgeRegistryEntry.Impl<IRecipe> implements
}
@Override
public boolean canFit(int width, int height) {
return width >= 1 && height >= 1;
public int getRecipeSize() {
return 1;
}
}
@@ -1,44 +0,0 @@
package binnie.botany.ceramic;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
public class TileCeramic extends TileEntity {
protected EnumFlowerColor color = EnumFlowerColor.Black;
public EnumFlowerColor getColor() {
return color;
}
public void setColor(EnumFlowerColor color) {
this.color = color;
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
compound.setInteger("Color", color.getFlowerColorAllele().getID());
return super.writeToNBT(compound);
}
@Override
public void readFromNBT(NBTTagCompound compound) {
super.readFromNBT(compound);
color = EnumFlowerColor.VALUES[compound.getInteger("Color")];
}
public ItemStack getStack() {
return getStack(1);
}
public ItemStack getStack(int amount) {
int ID = 0;
if (color != null) {
ID = color.getFlowerColorAllele().getID();
}
return new ItemStack(Botany.gardening().ceramic, amount, ID);
}
}
@@ -1,263 +0,0 @@
package binnie.botany.ceramic.brick;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
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.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.api.core.ISpriteRegister;
import forestry.api.core.IStateMapperRegister;
import forestry.api.core.ITextureManager;
import forestry.core.blocks.IColoredBlock;
import forestry.core.blocks.properties.UnlistedBlockAccess;
import forestry.core.blocks.properties.UnlistedBlockPos;
import forestry.core.models.BlockModelEntry;
import binnie.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.ceramic.TileCeramic;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.BinnieCore;
import binnie.core.block.IMultipassBlock;
import binnie.core.models.DefaultStateMapper;
import binnie.core.models.ModelManager;
import binnie.core.models.ModelMutlipass;
import binnie.core.util.TileUtil;
public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicBrickPair>, IColoredBlock, ISpriteRegister, IStateMapperRegister, IItemModelRegister {
private static final PropertyEnum<CeramicBrickType> TYPE = PropertyEnum.create("type", CeramicBrickType.class);
public BlockCeramicBrick() {
super(Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramicBrick");
setCreativeTab(CreativeTabBotany.instance);
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
return Collections.emptyList();
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, @Nullable EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = new ArrayList<>();
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
drops = Collections.singletonList(ceramic.getStack());
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && BinnieCore.getBinnieProxy().isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileCeramicBrick();
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
for (EnumFlowerColor color : EnumFlowerColor.values()) {
itemList.add(new CeramicBrickPair(color, color, CeramicBrickType.TILE).getStack(1));
}
for (CeramicBrickType type : CeramicBrickType.VALUES) {
if (type.canDouble()) {
itemList.add(new CeramicBrickPair(EnumFlowerColor.Brown, EnumFlowerColor.Gold, type).getStack(1));
}
}
itemList.add(new CeramicBrickPair(EnumFlowerColor.Gold, EnumFlowerColor.Gold, CeramicBrickType.SPLIT).getStack(1));
itemList.add(new CeramicBrickPair(EnumFlowerColor.Brown, EnumFlowerColor.Brown, CeramicBrickType.CHEQUERED).getStack(1));
itemList.add(new CeramicBrickPair(EnumFlowerColor.Gold, EnumFlowerColor.Brown, CeramicBrickType.LARGE_BRICK).getStack(1));
}
@SideOnly(Side.CLIENT)
@Override
public void registerStateMapper() {
ResourceLocation resourceLocation = new ResourceLocation(Constants.BOTANY_MOD_ID, "ceramicBrick");
ModelLoader.setCustomStateMapper(this, new DefaultStateMapper(resourceLocation));
ModelManager.registerCustomBlockModel(new BlockModelEntry(
new ModelResourceLocation(resourceLocation, "normal"),
new ModelResourceLocation(resourceLocation, "inventory"),
new ModelMutlipass<>(BlockCeramicBrick.class),
this
));
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
manager.registerItemModel(item, new CeramicBrickMeshDefinition());
}
@Override
protected BlockStateContainer createBlockState() {
return new ExtendedBlockState(
this,
new IProperty[]{TYPE},
new IUnlistedProperty[]{
UnlistedBlockPos.POS,
UnlistedBlockAccess.BLOCKACCESS
}
);
}
@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(TYPE, CeramicBrickType.VALUES[meta]);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(TYPE).ordinal();
}
@Override
public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) {
return ((IExtendedBlockState) super.getExtendedState(state, world, pos)).withProperty(UnlistedBlockPos.POS, pos).withProperty(UnlistedBlockAccess.BLOCKACCESS, world);
}
@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) {
ItemStack stack = placer.getHeldItem(hand);
CeramicBrickPair pair = new CeramicBrickPair(stack);
return getDefaultState().withProperty(TYPE, pair.type);
}
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
TileCeramicBrick ceramic = TileUtil.getTile(worldIn, pos, TileCeramicBrick.class);
if (ceramic != null) {
CeramicBrickPair pair = new CeramicBrickPair(stack);
ceramic.setColors(pair.colorFirst, pair.colorSecond);
}
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
TileCeramicBrick ceramic = TileUtil.getTile(world, pos, TileCeramicBrick.class);
if (ceramic != null) {
return ceramic.pair().getStack(0);
}
return super.getPickBlock(state, target, world, pos, player);
}
@SideOnly(Side.CLIENT)
@Override
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileCeramicBrick ceramic = TileUtil.getTile(world, pos, TileCeramicBrick.class);
if (ceramic != null) {
if (tintIndex == 1) {
return ceramic.getColorFirst().getFlowerColorAllele().getColor(false);
} else if (tintIndex == 2) {
return ceramic.getColorSecond().getFlowerColorAllele().getColor(false);
}
}
}
return 0xffffff;
}
@SideOnly(Side.CLIENT)
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderPasses() {
return 3;
}
@Override
@SideOnly(Side.CLIENT)
public CeramicBrickPair getInventoryKey(ItemStack stack) {
return new CeramicBrickPair(stack);
}
@Override
@SideOnly(Side.CLIENT)
public CeramicBrickPair getWorldKey(IBlockState state) {
IExtendedBlockState extendedState = (IExtendedBlockState) state;
IBlockAccess world = extendedState.getValue(UnlistedBlockAccess.BLOCKACCESS);
BlockPos pos = extendedState.getValue(UnlistedBlockPos.POS);
TileCeramicBrick ceramic = TileUtil.getTile(world, pos, TileCeramicBrick.class);
if (ceramic != null) {
return ceramic.pair();
}
return null;
}
@Override
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite(CeramicBrickPair type, @Nullable EnumFacing facing, int pass) {
return type.getSprite(pass);
}
@Override
@SideOnly(Side.CLIENT)
public void registerSprites(ITextureManager manager) {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
for (CeramicBrickType type : CeramicBrickType.VALUES) {
type.sprites = new TextureAtlasSprite[3];
for (int i = 0; i < 3; ++i) {
type.sprites[i] = textureMap.registerSprite(new ResourceLocation(Constants.BOTANY_MOD_ID + ":blocks/ceramic." + type.id + "." + i));
}
}
}
private class CeramicBrickMeshDefinition implements ItemMeshDefinition {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
return new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":ceramicBrick", "inventory");
}
}
}
@@ -1,90 +0,0 @@
package binnie.botany.ceramic.brick;
import com.google.common.base.Preconditions;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagInt;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.util.I18N;
public class CeramicBrickPair {
public static final CeramicBrickPair EMPTY = new CeramicBrickPair(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkSeaGreen, CeramicBrickType.TILE);
public final EnumFlowerColor colorFirst;
public final EnumFlowerColor colorSecond;
public CeramicBrickType type;
public int ordinal;
CeramicBrickPair(EnumFlowerColor colorFirst, EnumFlowerColor colorSecond, CeramicBrickType type) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
this.type = type;
ordinal = colorFirst.ordinal() + colorSecond.ordinal() * 256 + type.ordinal() * 256 * 256;
}
public CeramicBrickPair(ItemStack stack) {
this(getId(stack));
}
public CeramicBrickPair(int id) {
colorFirst = EnumFlowerColor.get(id & 0xFF);
colorSecond = EnumFlowerColor.get(id >> 8 & 0xFF);
type = CeramicBrickType.get(id >> 16 & 0xFF);
}
public boolean isTwoColors() {
return type.canDouble() && colorSecond != colorFirst;
}
public static int getId(ItemStack stack){
if(!stack.hasTagCompound()){
return EMPTY.ordinal();
}
NBTTagCompound nbtTagCompound = stack.getTagCompound();
return nbtTagCompound.getInteger("id");
}
public ItemStack getStack(int i) {
ItemStack stack = new ItemStack(Botany.gardening().ceramicBrick, i);
stack.setTagInfo("id", new NBTTagInt(ordinal()));
return stack;
}
public String getName() {
String name = colorFirst.getFlowerColorAllele().getColorName();
if (type.canDouble() && colorSecond != colorFirst) {
name = name + " & " + colorSecond.getFlowerColorAllele().getColorName();
}
return I18N.localise("botany.ceramic.type." + type.id + ".name", name);
}
public int ordinal() {
return ordinal;
}
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite(int pass) {
TextureAtlasSprite[] sprites = type.sprites;
Preconditions.checkState(sprites != null, "Sprites have not been registered.");
return sprites[pass];
}
@Override
public int hashCode() {
return Integer.hashCode(type.ordinal());
}
@Override
public boolean equals(Object obj) {
return obj instanceof CeramicBrickPair
&& ((CeramicBrickPair) obj).type == type;
}
}
@@ -1,329 +0,0 @@
package binnie.botany.ceramic.brick;
import javax.annotation.Nullable;
import java.util.List;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.items.BotanyItems;
import binnie.core.block.TileEntityMetadata;
public enum CeramicBrickType implements IStringSerializable {
TILE("tile") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int mortars = 0;
int blocks = 0;
int blockColor = -1;
for (ItemStack stack : stacks) {
if (isMortar(stack)) {
++mortars;
} else {
if (stack.getItem() != Item.getItemFromBlock(Botany.gardening().ceramic)) {
return ItemStack.EMPTY;
}
++blocks;
int color = TileEntityMetadata.getItemDamage(stack);
if (blockColor == -1) {
blockColor = color;
} else {
if (blockColor != color) {
return ItemStack.EMPTY;
}
}
}
}
if (mortars != 1) {
return ItemStack.EMPTY;
}
EnumFlowerColor c = EnumFlowerColor.get(blockColor);
return new CeramicBrickPair(c, c, CeramicBrickType.TILE).getStack(3);
}
},
BRICK("brick") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getBrickRecipe(this, stacks);
}
},
STRIPE_BRICK("brickstripe") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getBrickRecipe(this, stacks);
}
},
LARGE_BRICK("bricklarge") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() == 1) {
ItemStack stack3 = stacks.get(0);
CeramicBrickPair type3 = new CeramicBrickPair(stack3);
if (type3.type == CeramicBrickType.VERTICAL_LARGE_BRICK) {
type3.type = this;
return type3.getStack(1);
}
return ItemStack.EMPTY;
} else {
if (stacks.size() != 3) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
int a = 0;
int b = 0;
for (ItemStack stack4 : stacks) {
if (stack4.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.type != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color5 = type4.colorFirst.ordinal();
if (colors[0] == -1) {
colors[0] = color5;
a++;
} else if (colors[0] == color5) {
a++;
} else if (colors[1] == -1) {
colors[1] = color5;
b++;
} else {
if (colors[1] != color5) {
return ItemStack.EMPTY;
}
b++;
}
}
if (colors[1] == -1) {
colors[1] = colors[0];
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.LARGE_BRICK).getStack(3);
}
}
},
SPLIT("split") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
int altCounter = 0;
for (ItemStack stack2 : stacks) {
int alt = (altCounter != 0 && altCounter != 3) ? 1 : 0;
if (stack2.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type = new CeramicBrickPair(stack2);
if (type.type != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color2 = type.colorFirst.ordinal();
if (colors[alt] == -1) {
colors[alt] = color2;
} else if (colors[alt] != color2) {
return ItemStack.EMPTY;
}
++altCounter;
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.SPLIT).getStack(4);
}
},
CHEQUERED("cheque") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
for (ItemStack stack2 : stacks) {
if (stack2.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.type != CeramicBrickType.SPLIT) {
return ItemStack.EMPTY;
}
int color3 = type2.colorFirst.ordinal();
int color4 = type2.colorSecond.ordinal();
if (colors[0] == -1) {
colors[0] = color3;
colors[1] = color4;
} else {
if (colors[0] != color3 || colors[1] != color4) {
return ItemStack.EMPTY;
}
}
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.CHEQUERED).getStack(4);
}
},
MIXED("mixed") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
for (ItemStack stack2 : stacks) {
if (stack2.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.isTwoColors()) {
return ItemStack.EMPTY;
}
int color3 = type2.colorFirst.ordinal();
if (type2.type == CeramicBrickType.SPLIT) {
if (colors[1] != -1) {
return ItemStack.EMPTY;
}
colors[1] = color3;
} else {
if (type2.type != CeramicBrickType.CHEQUERED) {
return ItemStack.EMPTY;
}
if (colors[0] == -1) {
colors[0] = color3;
} else if (colors[0] != color3) {
return ItemStack.EMPTY;
}
}
int color4 = type2.colorSecond.ordinal();
}
if (colors[0] == -1 || colors[1] == -1) {
return ItemStack.EMPTY;
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.MIXED).getStack(4);
}
},
VERTICAL_BRICK("verticalbrick") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getVerticalBrickRecipe(stacks);
}
},
VERTICAL_STRIPE_BRICK("verticalbrickstripe") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getVerticalBrickRecipe(stacks);
}
},
VERTICAL_LARGE_BRICK("verticalbricklarge") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getVerticalBrickRecipe(stacks);
}
};
public static final CeramicBrickType[] VALUES = values();
public String id;
@SideOnly(Side.CLIENT)
@Nullable
TextureAtlasSprite[] sprites;
CeramicBrickType(String id) {
this.id = id;
}
public static CeramicBrickType get(int id) {
return VALUES[id % VALUES.length];
}
public boolean canDouble() {
return this != CeramicBrickType.TILE;
}
public abstract ItemStack getRecipe(List<ItemStack> stacks);
protected ItemStack getVerticalBrickRecipe(List<ItemStack> stacks) {
if (stacks.size() != 1) {
return ItemStack.EMPTY;
}
ItemStack stack5 = stacks.get(0);
CeramicBrickPair type = new CeramicBrickPair(stack5);
if (type.type == CeramicBrickType.LARGE_BRICK) {
type.type = CeramicBrickType.VERTICAL_LARGE_BRICK;
return type.getStack(1);
}
if (type.type == CeramicBrickType.BRICK) {
type.type = CeramicBrickType.VERTICAL_BRICK;
return type.getStack(1);
}
if (type.type == CeramicBrickType.STRIPE_BRICK) {
type.type = CeramicBrickType.VERTICAL_STRIPE_BRICK;
return type.getStack(1);
}
return ItemStack.EMPTY;
}
protected ItemStack getBrickRecipe(CeramicBrickType ceramicType, List<ItemStack> stacks) {
if (stacks.size() == 1) {
ItemStack stack5 = stacks.get(0);
CeramicBrickPair type = new CeramicBrickPair(stack5);
if (type.type == CeramicBrickType.VERTICAL_BRICK) {
type.type = ceramicType;
return type.getStack(1);
}
if (type.type == CeramicBrickType.STRIPE_BRICK) {
type.type = ceramicType;
return type.getStack(1);
}
return ItemStack.EMPTY;
} else if (stacks.size() == 4) {
int[] colors = {-1, -1};
for (int index2 = 0; index2 < stacks.size(); ++index2) {
ItemStack stack4 = stacks.get(index2);
if (stack4.getItem() != Item.getItemFromBlock(Botany.gardening().ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.type != CeramicBrickType.LARGE_BRICK) {
return ItemStack.EMPTY;
}
int color5 = type4.colorFirst.ordinal();
int color6 = type4.colorSecond.ordinal();
int alt2 = (index2 != 0 && index2 != 3) ? 1 : 0;
if (ceramicType == CeramicBrickType.STRIPE_BRICK) {
alt2 = 0;
}
if (colors[alt2] == -1) {
colors[alt2] = color5;
colors[1 - alt2] = color6;
} else if (colors[alt2] != color5 || colors[1 - alt2] != color6) {
return ItemStack.EMPTY;
}
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), ceramicType).getStack(4);
}
return ItemStack.EMPTY;
}
protected boolean isMortar(ItemStack stack) {
return stack.getItem() == Botany.gardening().misc && stack.getItemDamage() == BotanyItems.MORTAR.ordinal();
}
@Override
public String getName() {
return id;
}
}
@@ -1,38 +0,0 @@
package binnie.botany.ceramic.brick;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.core.items.IColoredItem;
public class ItemCeramicBrick extends ItemBlock implements IColoredItem {
public ItemCeramicBrick(BlockCeramicBrick block) {
super(block);
}
@Override
public int getMetadata(int metadata) {
return metadata;
}
@SideOnly(Side.CLIENT)
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
CeramicBrickPair ceramic = new CeramicBrickPair(stack);
if (tintIndex == 1) {
return ceramic.colorFirst.getFlowerColorAllele().getColor(false);
} else if (tintIndex == 2) {
return ceramic.colorSecond.getFlowerColorAllele().getColor(false);
}
return 0xffffff;
}
@Override
@SideOnly(Side.CLIENT)
public String getItemStackDisplayName(ItemStack itemStack) {
return new CeramicBrickPair(itemStack).getName();
}
}
@@ -1,69 +0,0 @@
package binnie.botany.ceramic.brick;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import binnie.botany.Botany;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.block.TileEntityMetadata;
public class TileCeramicBrick extends TileEntity {
private EnumFlowerColor colorFirst = EnumFlowerColor.Black;
private EnumFlowerColor colorSecond = EnumFlowerColor.White;
public void setColors(EnumFlowerColor colorFirst, EnumFlowerColor colorSecond) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
}
public boolean hasTwoColors() {
return CeramicBrickType.VALUES[getBlockMetadata()].canDouble() && colorSecond != colorFirst;
}
public ItemStack getStack(int i) {
ItemStack s = TileEntityMetadata.getItemStack(Botany.gardening().ceramicBrick, ordinal());
s.setCount(i);
return s;
}
public int ordinal() {
return colorFirst.ordinal() + colorSecond.ordinal() * 256 + getBlockMetadata() * 256 * 256;
}
public CeramicBrickPair pair() {
return new CeramicBrickPair(colorFirst, colorSecond, CeramicBrickType.VALUES[getBlockMetadata()]);
}
public EnumFlowerColor getColorFirst() {
return colorFirst;
}
public EnumFlowerColor getColorSecond() {
return colorSecond;
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
compound.setInteger("First", colorFirst.ordinal());
compound.setInteger("Second", colorSecond.ordinal());
return super.writeToNBT(compound);
}
@Override
public NBTTagCompound getUpdateTag() {
return writeToNBT(new NBTTagCompound());
}
@Override
public void readFromNBT(NBTTagCompound compound) {
super.readFromNBT(compound);
if (compound.hasKey("First")) {
colorFirst = EnumFlowerColor.VALUES[compound.getInteger("First")];
}
if (compound.hasKey("Second")) {
colorSecond = EnumFlowerColor.VALUES[compound.getInteger("Second")];
}
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.ceramic.brick;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.ceramic;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,25 +1,12 @@
package binnie.botany.core;
import binnie.botany.api.FlowerManager;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.IGardeningManager;
import binnie.botany.gardening.Gardening;
import binnie.botany.genetics.FlowerRoot;
import binnie.botany.genetics.FlowerHelper;
public class BotanyCore {
public static final int CHANCE_INTERPOLLINATION = 20;
public static IFlowerRoot speciesRoot = new FlowerHelper();
public static IFlowerRoot getFlowerRoot() {
if (FlowerManager.flowerRoot == null) {
FlowerManager.flowerRoot = new FlowerRoot();
}
return FlowerManager.flowerRoot;
}
public static IGardeningManager getGardening() {
if (FlowerManager.gardening == null) {
FlowerManager.gardening = new Gardening();
}
return FlowerManager.gardening;
return BotanyCore.speciesRoot;
}
}
@@ -1,33 +1,23 @@
package binnie.botany.core;
import binnie.botany.craftgui.WindowBotanistDatabase;
import binnie.core.craftgui.minecraft.Window;
import binnie.core.gui.IBinnieGUID;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import binnie.botany.gui.database.WindowBotanistDatabase;
import binnie.core.gui.IBinnieGUID;
import binnie.core.gui.minecraft.Window;
public enum BotanyGUI implements IBinnieGUID {
DATABASE,
DATABASE_NEI;
Database,
DatabaseNEI;
@Override
public Window getWindow(EntityPlayer player, World world, int x, int y, int z, Side side) {
Window window = null;
TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
IInventory object = null;
if (tileEntity instanceof IInventory) {
object = (IInventory) tileEntity;
}
switch (this) {
case DATABASE:
case DATABASE_NEI: {
window = WindowBotanistDatabase.create(player, side, this != BotanyGUI.DATABASE);
case Database:
case DatabaseNEI: {
window = WindowBotanistDatabase.create(player, side, this != BotanyGUI.Database);
break;
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.core;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,43 @@
package binnie.botany.craftgui;
import binnie.botany.api.IFlowerColor;
import binnie.core.craftgui.CraftGUI;
import binnie.core.craftgui.ITooltip;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.Tooltip;
import binnie.core.craftgui.WidgetAttribute;
import binnie.core.craftgui.controls.core.Control;
import binnie.core.craftgui.controls.core.IControlValue;
import binnie.core.craftgui.geometry.IArea;
public class ControlColorDisplay extends Control implements IControlValue<IFlowerColor>, ITooltip {
private IFlowerColor value;
public ControlColorDisplay(IWidget parent, float x, float y) {
super(parent, x, y, 16.0f, 16.0f);
addAttribute(WidgetAttribute.MOUSE_OVER);
}
@Override
public IFlowerColor getValue() {
return value;
}
@Override
public void setValue(IFlowerColor value) {
this.value = value;
}
@Override
public void onRenderBackground() {
IArea area = getArea();
CraftGUI.render.solid(area, -1);
CraftGUI.render.solid(area.inset(1), 0xff000000 + getValue().getColor(false));
}
@Override
public void getTooltip(Tooltip tooltip) {
super.getTooltip(tooltip);
tooltip.add(value.getName());
}
}
@@ -0,0 +1,24 @@
package binnie.botany.craftgui;
import binnie.botany.api.IColourMix;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.controls.listbox.ControlListBox;
public class ControlColorMixBox extends ControlListBox<IColourMix> {
private Type type;
public ControlColorMixBox(IWidget parent, int x, int y, int width, int height, Type type) {
super(parent, x, y, width, height, 12.0f);
this.type = type;
}
@Override
public IWidget createOption(IColourMix value, int y) {
return new ControlColorMixItem(getContent(), value, y);
}
enum Type {
Resultant,
Further
}
}
@@ -0,0 +1,30 @@
package binnie.botany.craftgui;
import binnie.botany.api.IColourMix;
import binnie.core.craftgui.controls.listbox.ControlList;
import binnie.core.craftgui.controls.listbox.ControlOption;
public class ControlColorMixItem extends ControlOption<IColourMix> {
protected ControlColorDisplay itemWidget1;
protected ControlColorDisplay itemWidget2;
protected ControlColorDisplay itemWidget3;
protected ControlColourMixSymbol addSymbol;
protected ControlColourMixSymbol arrowSymbol;
public ControlColorMixItem(ControlList<IColourMix> controlList, IColourMix option, int y) {
super(controlList, option, y);
itemWidget1 = new ControlColorDisplay(this, 4.0f, 4.0f);
itemWidget2 = new ControlColorDisplay(this, 44.0f, 4.0f);
itemWidget3 = new ControlColorDisplay(this, 104.0f, 4.0f);
addSymbol = new ControlColourMixSymbol(this, 24, 4, 0);
arrowSymbol = new ControlColourMixSymbol(this, 64, 4, 1);
if (getValue() != null) {
itemWidget1.setValue(getValue().getColor1());
itemWidget2.setValue(getValue().getColor2());
itemWidget3.setValue(getValue().getResult());
addSymbol.setValue(getValue());
arrowSymbol.setValue(getValue());
}
}
}
@@ -0,0 +1,28 @@
package binnie.botany.craftgui;
import binnie.botany.api.IFlowerColor;
import binnie.core.craftgui.CraftGUI;
import binnie.core.craftgui.WidgetAttribute;
import binnie.core.craftgui.controls.listbox.ControlList;
import binnie.core.craftgui.controls.listbox.ControlTextOption;
import binnie.core.craftgui.geometry.CraftGUIUtil;
import binnie.core.craftgui.geometry.IPoint;
public class ControlColorOption extends ControlTextOption<IFlowerColor> {
protected ControlColorDisplay controlBee;
protected IPoint boxPosition;
public ControlColorOption(ControlList<IFlowerColor> controlList, IFlowerColor option, int y) {
super(controlList, option, option.getName(), y);
setSize(new IPoint(getSize().x(), 20.0f));
(controlBee = new ControlColorDisplay(this, 2.0f, 2.0f)).setValue(option);
addAttribute(WidgetAttribute.MOUSE_OVER);
CraftGUIUtil.moveWidget(textWidget, new IPoint(22.0f, 0.0f));
textWidget.setSize(textWidget.getSize().sub(new IPoint(24.0f, 0.0f)));
int th = (int) CraftGUI.render.textHeight(textWidget.getValue(), textWidget.getSize().x());
int height = Math.max(20, th + 6);
setSize(new IPoint(size().x(), height));
textWidget.setSize(new IPoint(textWidget.getSize().x(), height));
boxPosition = new IPoint(2.0f, (height - 18) / 2);
}
}
@@ -0,0 +1,52 @@
package binnie.botany.craftgui;
import binnie.botany.api.IColourMix;
import binnie.core.craftgui.CraftGUI;
import binnie.core.craftgui.ITooltip;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.Tooltip;
import binnie.core.craftgui.WidgetAttribute;
import binnie.core.craftgui.controls.core.Control;
import binnie.core.craftgui.geometry.IPoint;
import binnie.core.craftgui.resource.Texture;
import binnie.core.craftgui.resource.minecraft.CraftGUITextureSheet;
import binnie.core.craftgui.resource.minecraft.StandardTexture;
import binnie.core.util.I18N;
public class ControlColourMixSymbol extends Control implements ITooltip {
protected static Texture MutationPlus = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.Controls2);
protected static Texture MutationArrow = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.Controls2);
protected IColourMix value;
protected int type;
protected ControlColourMixSymbol(IWidget parent, int x, int y, int type) {
super(parent, x, y, 16 + type * 16, 16.0f);
this.type = type;
value = null;
addAttribute(WidgetAttribute.MOUSE_OVER);
}
@Override
public void onRenderBackground() {
super.onRenderBackground();
if (type == 0) {
CraftGUI.render.texture(ControlColourMixSymbol.MutationPlus, IPoint.ZERO);
} else {
CraftGUI.render.texture(ControlColourMixSymbol.MutationArrow, IPoint.ZERO);
}
}
public void setValue(IColourMix value) {
this.value = value;
setColor(0xffffff);
}
@Override
public void getTooltip(Tooltip tooltip) {
if (type == 1) {
float chance = value.getChance();
tooltip.add(I18N.localise("botany.gui.controls.colorMixSymbol.chance", chance));
}
}
}
@@ -0,0 +1,36 @@
package binnie.botany.craftgui;
import binnie.botany.api.IColourMix;
import binnie.botany.api.IFlowerColor;
import binnie.botany.core.BotanyCore;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.controls.ControlText;
import binnie.core.craftgui.controls.ControlTextCentered;
import binnie.core.craftgui.database.DatabaseTab;
import binnie.core.craftgui.database.PageAbstract;
import binnie.core.util.I18N;
import java.util.ArrayList;
import java.util.List;
public class PageColorMix extends PageAbstract<IFlowerColor> {
ControlText title;
ControlColorMixBox list;
public PageColorMix(IWidget parent, DatabaseTab tab) {
super(parent, tab);
title = new ControlTextCentered(this, 8.0f, I18N.localise("botany.gui.controls.pageColorFurtherTitle"));
list = new ControlColorMixBox(this, 4, 20, 136, 152, ControlColorMixBox.Type.Further);
}
@Override
public void onValueChanged(IFlowerColor colour) {
List<IColourMix> mixes = new ArrayList<>();
for (IColourMix mix : BotanyCore.getFlowerRoot().getColourMixes(false)) {
if (mix.getColor1() == colour || mix.getColor2() == colour) {
mixes.add(mix);
}
}
list.setOptions(mixes);
}
}
@@ -0,0 +1,36 @@
package binnie.botany.craftgui;
import binnie.botany.api.IColourMix;
import binnie.botany.api.IFlowerColor;
import binnie.botany.core.BotanyCore;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.controls.ControlText;
import binnie.core.craftgui.controls.ControlTextCentered;
import binnie.core.craftgui.database.DatabaseTab;
import binnie.core.craftgui.database.PageAbstract;
import binnie.core.util.I18N;
import java.util.ArrayList;
import java.util.List;
public class PageColorMixResultant extends PageAbstract<IFlowerColor> {
protected ControlText title;
protected ControlColorMixBox list;
public PageColorMixResultant(IWidget parent, DatabaseTab tab) {
super(parent, tab);
title = new ControlTextCentered(this, 8.0f, I18N.localise("botany.gui.controls.pageSpeciesFurtherTitle"));
list = new ControlColorMixBox(this, 4, 20, 136, 152, ControlColorMixBox.Type.Resultant);
}
@Override
public void onValueChanged(IFlowerColor color) {
List<IColourMix> mixes = new ArrayList<>();
for (IColourMix mix : BotanyCore.getFlowerRoot().getColourMixes(false)) {
if (mix.getResult() == color) {
mixes.add(mix);
}
}
list.setOptions(mixes);
}
}
@@ -0,0 +1,108 @@
package binnie.botany.craftgui;
import binnie.Binnie;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.core.BotanyCore;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.controls.ControlText;
import binnie.core.craftgui.controls.core.Control;
import binnie.core.craftgui.controls.scroll.ControlScrollableContent;
import binnie.core.craftgui.database.DatabaseTab;
import binnie.core.craftgui.database.PageSpecies;
import binnie.core.craftgui.geometry.IArea;
import binnie.core.craftgui.geometry.IPoint;
import binnie.core.craftgui.geometry.TextJustification;
import binnie.core.craftgui.minecraft.control.ControlItemDisplay;
import binnie.core.util.I18N;
import binnie.genetics.genetics.AlleleHelper;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IIndividual;
import net.minecraft.item.ItemStack;
public class PageSpeciesFlowerGenome extends PageSpecies {
public PageSpeciesFlowerGenome(IWidget parent, DatabaseTab tab) {
super(parent, tab);
}
@Override
public void onValueChanged(IAlleleSpecies species) {
deleteAllChildren();
IAllele[] template = Binnie.Genetics.getFlowerRoot().getTemplate(species.getUID());
if (template == null) {
return;
}
IFlower tree = Binnie.Genetics.getFlowerRoot().templateAsIndividual(template);
if (tree == null) {
return;
}
IFlowerGenome genome = tree.getGenome();
IAlleleFlowerSpecies treeSpecies = genome.getPrimary();
int w = 144;
int h = 176;
new ControlText(this, new IArea(0.0f, 4.0f, w, 16.0f), I18N.localise("botany.gui.database.tab.genome"), TextJustification.MIDDLE_CENTER);
ControlScrollableContent scrollable = new ControlScrollableContent(this, 4.0f, 20.0f, w - 8, h - 8 - 16, 12.0f);
Control contents = new Control(scrollable, 0.0f, 0.0f, w - 8 - 12, h - 8 - 16);
int tw = w - 8 - 12;
int w2 = 55;
int w3 = tw - 50;
int y = 0;
int th = 14;
int valueX = w2 + 4;
new ControlText(contents, new IArea(0.0f, y, w2, th), I18N.localise("botany.gui.database.tab.genome.temp"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new IArea(valueX, y, w3, th), AlleleHelper.toDisplay(treeSpecies.getTemperature()), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new IArea(0.0f, y, w2, th), I18N.localise("botany.gui.database.tab.genome.moist"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new IArea(valueX, y, w3, th), AlleleHelper.toDisplay(treeSpecies.getMoisture()), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new IArea(0.0f, y, w2, th), I18N.localise("botany.gui.database.tab.genome.ph"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new IArea(valueX, y, w3, th), AlleleHelper.toDisplay(treeSpecies.getPH()), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new IArea(0.0f, y, w2, th), I18N.localise("botany.gui.database.tab.genome.fertility"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new IArea(valueX, y, w3, th), genome.getFertility() + "x", TextJustification.MIDDLE_LEFT);
y += th;
float lifespan = genome.getLifespan() * 68.27f / genome.getAgeChance() / 24000.0f;
String lifespanValue = String.format("%.2f", lifespan);
new ControlText(contents, new IArea(0.0f, y, w2, th), I18N.localise("botany.gui.database.tab.genome.lifespan"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new IArea(valueX, y, w3, th), I18N.localise("botany.gui.database.tab.genome.lifespan.value", lifespanValue), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new IArea(0.0f, y, w2, th), I18N.localise("botany.gui.database.tab.genome.nectar"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new IArea(valueX, y, w3, th), genome.getActiveAllele(EnumFlowerChromosome.SAPPINESS).getName(), TextJustification.MIDDLE_LEFT);
y += th;
int x = w2;
int tot = 0;
for (IIndividual vid : BotanyCore.getFlowerRoot().getIndividualTemplates()) {
if (vid.getGenome().getPrimary() == treeSpecies) {
if (tot > 0 && tot % 3 == 0) {
x -= 54;
y += 18;
}
ItemStack stack = BotanyCore.getFlowerRoot().getMemberStack(vid, EnumFlowerStage.FLOWER.ordinal());
ControlItemDisplay display = new ControlItemDisplay(contents, x, y);
display.setItemStack(stack);
tot++;
x += 18;
}
}
int numOfLines = 1 + (tot - 1) / 3;
new ControlText(contents, new IArea(0.0f, y - (numOfLines - 1) * 18, w2, 4 + 18 * numOfLines), I18N.localise("botany.gui.database.tab.genome.varieties"), TextJustification.MIDDLE_RIGHT);
y += th;
contents.setSize(new IPoint(contents.size().x(), y));
scrollable.setScrollableContent(contents);
}
}
@@ -0,0 +1,91 @@
package binnie.botany.craftgui;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.IFlowerColor;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.core.AbstractMod;
import binnie.core.craftgui.IWidget;
import binnie.core.craftgui.controls.listbox.ControlListBox;
import binnie.core.craftgui.database.DatabaseTab;
import binnie.core.craftgui.database.IDatabaseMode;
import binnie.core.craftgui.database.PageBranchOverview;
import binnie.core.craftgui.database.PageBranchSpecies;
import binnie.core.craftgui.database.PageBreeder;
import binnie.core.craftgui.database.PageSpeciesClassification;
import binnie.core.craftgui.database.PageSpeciesMutations;
import binnie.core.craftgui.database.PageSpeciesOverview;
import binnie.core.craftgui.database.PageSpeciesResultant;
import binnie.core.craftgui.database.WindowAbstractDatabase;
import binnie.core.craftgui.geometry.IArea;
import binnie.core.craftgui.minecraft.Window;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.entity.player.EntityPlayer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class WindowBotanistDatabase extends WindowAbstractDatabase {
public WindowBotanistDatabase(EntityPlayer player, Side side, boolean nei) {
super(player, side, nei, Binnie.Genetics.flowerBreedingSystem, 130.0f);
}
public static Window create(EntityPlayer player, Side side, boolean nei) {
return new WindowBotanistDatabase(player, side, nei);
}
@Override
protected void addTabs() {
new PageSpeciesOverview(getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.overview"));
new PageSpeciesFlowerGenome(getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "genome"));
new PageSpeciesClassification(getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.classification"));
new PageSpeciesResultant(getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.resultant"));
new PageSpeciesMutations(getInfoPages(Mode.Species), new DatabaseTab(Botany.instance, "species.further"));
new PageBranchOverview(getInfoPages(Mode.Branches), new DatabaseTab(Botany.instance, "branches.overview"));
new PageBranchSpecies(getInfoPages(Mode.Branches), new DatabaseTab(Botany.instance, "branches.species"));
createMode(FlowerMode.COLOR, new ColorModeWidget());
new PageColorMixResultant(getInfoPages(FlowerMode.COLOR), new DatabaseTab(Botany.instance, "colour.resultant"));
new PageColorMix(getInfoPages(FlowerMode.COLOR), new DatabaseTab(Botany.instance, "colour.further"));
new PageBreeder(getInfoPages(Mode.Breeder), getUsername(), new DatabaseTab(Botany.instance, "breeder"));
}
@Override
protected AbstractMod getMod() {
return Botany.instance;
}
@Override
protected String getName() {
return I18N.localise("botany.gui.database.name");
}
enum FlowerMode implements IDatabaseMode {
COLOR;
@Override
public String getName() {
return I18N.localise("botany.gui.database.tab." + name().toLowerCase());
}
}
private class ColorModeWidget extends ModeWidgets {
public ColorModeWidget() {
super(FlowerMode.COLOR, WindowBotanistDatabase.this);
}
@Override
public void createListBox(IArea area) {
listBox = new ControlListBox<IFlowerColor>(modePage, area.x(), area.y(), area.w(), area.h(), 12.0f) {
@Override
public IWidget createOption(IFlowerColor value, int y) {
return new ControlColorOption(getContent(), value, y);
}
};
List<IFlowerColor> colors = new ArrayList<>();
Collections.addAll(colors, EnumFlowerColor.values());
listBox.setOptions(colors);
}
}
}
@@ -1,63 +1,74 @@
package binnie.botany.farm;
import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import forestry.api.circuits.ChipsetManager;
import forestry.api.circuits.ICircuitLayout;
import forestry.api.farming.FarmDirection;
import forestry.api.farming.IFarmHousing;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.core.circuits.BinnieCircuit;
import binnie.core.util.I18N;
import forestry.api.circuits.ChipsetManager;
import forestry.api.farming.FarmDirection;
import forestry.api.farming.IFarmHousing;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
public class CircuitGarden extends BinnieCircuit {
private boolean isManual;
private GardenLogic logic;
private boolean isFertilised;
private ItemStack icon;
private EnumMoisture moisture;
private EnumAcidity acidity;
public CircuitGarden(EnumMoisture moisture, @Nullable EnumAcidity ph, boolean manual, boolean fertilised, ItemStack recipe, ItemStack icon) {
super(getName(moisture, ph, manual, fertilised), 4, getLayout(manual), recipe);
public CircuitGarden(EnumMoisture moisture, EnumAcidity ph, boolean manual, boolean fertilised, ItemStack recipe, ItemStack icon) {
super("garden." + moisture.getID() + ((ph != null) ? ("." + ph.getID()) : "") + (manual ? ".manual" : "") + (fertilised ? ".fert" : ""), 4, manual ? ChipsetManager.circuitRegistry.getLayout("forestry.farms.manual") : ChipsetManager.circuitRegistry.getLayout("forestry.farms.managed"), recipe);
this.moisture = moisture;
this.icon = icon;
isManual = manual;
logic = new GardenLogic(moisture, ph, isManual, fertilised, icon, I18N.localise(getUnlocalizedName()));
String info = I18N.localise("botany.moisture") + ": " + moisture.getLocalisedName(true);
if (ph != null) {
info += TextFormatting.GRAY + ", " + I18N.localise("botany.ph") + ": " + moisture.getLocalisedName(true);
}
String fertilizedKey = fertilised ? "for.binnie.circuit.garden.fertilized" : "for.binnie.circuit.garden.unfertilized";
info += TextFormatting.GRAY + " " + I18N.localise(fertilizedKey);
addTooltipString(I18N.localise("for.binnie.circuit.garden.info", info));
}
isFertilised = fertilised;
acidity = ph;
String info = "";
private static ICircuitLayout getLayout(boolean manual) {
String layoutUid = manual ? "forestry.farms.manual" : "forestry.farms.managed";
ICircuitLayout layout = ChipsetManager.circuitRegistry.getLayout(layoutUid);
Preconditions.checkState(layout != null, "Couldn't find Forestry circuit layout %s.", layoutUid);
return layout;
}
if (moisture == EnumMoisture.DRY) {
info += EnumChatFormatting.YELLOW
+ I18N.localise("botany.moisture.dry")
+ EnumChatFormatting.RESET;
}
private static String getName(EnumMoisture moisture, @Nullable EnumAcidity ph, boolean manual, boolean fertilised) {
String name = "garden." + moisture.getName();
if (ph != null) {
name += "." + ph.getName();
if (moisture == EnumMoisture.DAMP) {
info += EnumChatFormatting.YELLOW
+ I18N.localise("botany.moisture.damp")
+ EnumChatFormatting.RESET;
}
if (manual) {
name += ".manual";
}
if (fertilised) {
name += ".fert";
}
return name;
}
public CircuitGarden setManual() {
isManual = true;
return this;
if (acidity == EnumAcidity.ACID) {
if (info.length() > 0) {
info += ", ";
}
info += EnumChatFormatting.RED
+ I18N.localise("botany.ph.acid")
+ EnumChatFormatting.RESET;
}
if (acidity == EnumAcidity.NEUTRAL) {
if (info.length() > 0) {
info += ", ";
}
info += EnumChatFormatting.GREEN
+ I18N.localise("botany.ph.neutral")
+ EnumChatFormatting.RESET;
}
if (acidity == EnumAcidity.ALKALINE) {
if (info.length() > 0) {
info += ", ";
}
info += EnumChatFormatting.AQUA
+ I18N.localise("botany.ph.alkaline")
+ EnumChatFormatting.RESET;
}
if (info.length() > 0) {
info = " (" + info + EnumChatFormatting.RESET + ")";
}
addTooltipString(I18N.localise("botany.circuit.flowers") + info);
}
@Override
@@ -65,24 +76,15 @@ public class CircuitGarden extends BinnieCircuit {
return tile instanceof IFarmHousing;
}
@Nullable
private IFarmHousing getCircuitable(Object tile) {
if (!isCircuitable(tile)) {
return null;
}
return (IFarmHousing) tile;
}
@Override
public void onInsertion(int slot, Object tile) {
IFarmHousing housing = getCircuitable(tile);
if (housing == null) {
if (!isCircuitable(tile)) {
return;
}
logic.setManual(isManual);
housing.setFarmLogic(FarmDirection.values()[slot], logic);
GardenLogic logic = new GardenLogic((IFarmHousing) tile);
logic.setData(moisture, acidity, isManual, isFertilised, icon, I18N.localise(getName()));
((IFarmHousing) tile).setFarmLogic(FarmDirection.values()[slot], logic);
}
@Override
@@ -92,16 +94,14 @@ public class CircuitGarden extends BinnieCircuit {
@Override
public void onRemoval(int slot, Object tile) {
IFarmHousing farmHousing = getCircuitable(tile);
if (farmHousing == null) {
if (!isCircuitable(tile)) {
return;
}
farmHousing.resetFarmLogic(FarmDirection.values()[slot]);
((IFarmHousing) tile).resetFarmLogic(FarmDirection.values()[slot]);
}
@Override
public void onTick(int slot, Object tile) {
public void onTick(int arg0, Object arg1) {
// ignored
}
}
+29 -20
View File
@@ -1,16 +1,22 @@
package binnie.botany.farm;
import forestry.api.farming.FarmDirection;
import forestry.api.farming.IFarmHousing;
import forestry.api.farming.IFarmLogic;
import forestry.core.utils.vect.Vect;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.farming.IFarmLogic;
public abstract class FarmLogic implements IFarmLogic {
boolean isManual;
protected World world;
protected IFarmHousing housing;
protected boolean isManual;
public FarmLogic(IFarmHousing housing) {
this.housing = housing;
}
@Override
public IFarmLogic setManual(boolean flag) {
@@ -18,32 +24,35 @@ public abstract class FarmLogic implements IFarmLogic {
return this;
}
protected final boolean isAirBlock(World world, BlockPos pos) {
return world.isAirBlock(pos);
protected boolean isAirBlock(Vect position) {
return world.isAirBlock(position.x, position.y, position.z);
}
protected final IBlockState getBlockState(World world, BlockPos pos) {
return world.getBlockState(pos);
protected boolean isWaterBlock(Vect position) {
return world.getBlock(position.x, position.y, position.z) == Blocks.water;
}
protected final Block getBlock(World world, BlockPos pos) {
return getBlockState(world, pos).getBlock();
protected Block getBlock(Vect position) {
return world.getBlock(position.x, position.y, position.z);
}
protected final int getBlockMeta(World world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
return blockState.getBlock().getMetaFromState(blockState);
protected int getBlockMeta(Vect position) {
return world.getBlockMetadata(position.x, position.y, position.z);
}
protected final ItemStack getAsItemStack(World world, BlockPos position) {
return new ItemStack(getBlock(world, position), 1, getBlockMeta(world, position));
protected ItemStack getAsItemStack(Vect position) {
return new ItemStack(getBlock(position), 1, getBlockMeta(position));
}
protected final boolean isWaterBlock(World world, BlockPos pos) {
return getBlock(world, pos) == Blocks.WATER;
protected Vect translateWithOffset(int x, int y, int z, FarmDirection direction, int step) {
return new Vect(
x + direction.getForgeDirection().offsetX * step,
y + direction.getForgeDirection().offsetY * step,
z + direction.getForgeDirection().offsetZ * step
);
}
protected final void setBlock(World world, BlockPos pos, Block block, int meta) {
world.setBlockState(pos, block.getStateFromMeta(meta), 2);
protected void setBlock(Vect position, Block block, int meta) {
world.setBlock(position.x, position.y, position.z, block, meta, 2);
}
}
@@ -1,54 +1,30 @@
package binnie.botany.farm;
import javax.annotation.Nullable;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmable;
import binnie.botany.Botany;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.core.BotanyCore;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.gardening.Gardening;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class FarmableFlower implements IFarmable {
@Override
public boolean isSaplingAt(World world, BlockPos pos) {
return world.getBlockState(pos) == Botany.flower;
public boolean isSaplingAt(World world, int x, int y, int z) {
return world.getBlock(x, y, z) == Botany.flower;
}
@Nullable
@Override
public ICrop getCropAt(World world, BlockPos pos, IBlockState blockState) {
IFlower flower = null;
if (world.getTileEntity(pos) instanceof TileEntityFlower) {
flower = ((TileEntityFlower) world.getTileEntity(pos)).getFlower();
}
// TODO Look at TileEntityFlower::onShear logic
if (flower != null && flower.getAge() > 1) {
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
ItemStack mature = flowerRoot.getMemberStack(flower, EnumFlowerStage.FLOWER);
ItemStack seed = flowerRoot.getMemberStack(flower, EnumFlowerStage.SEED);
if (mature != null && seed != null) {
world.setBlockState(pos, Blocks.AIR.getDefaultState(), 2);
return new FlowerCrop(pos, mature, seed);
}
}
public ICrop getCropAt(World world, int x, int y, int z) {
return null;
}
@Override
public boolean isGermling(ItemStack itemstack) {
EnumFlowerStage stage = BotanyCore.getFlowerRoot().getType(itemstack);
EnumFlowerStage stage = BotanyCore.speciesRoot.getStageType(itemstack);
return stage == EnumFlowerStage.FLOWER || stage == EnumFlowerStage.SEED;
}
@@ -58,10 +34,9 @@ public class FarmableFlower implements IFarmable {
}
@Override
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, BlockPos pos) {
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
IFlower flower = flowerRoot.getMember(germling);
flowerRoot.plant(world, pos, flower, player.getGameProfile());
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, int x, int y, int z) {
IFlower flower = BotanyCore.getFlowerRoot().getMember(germling);
Gardening.plant(world, x, y, z, flower, player.getGameProfile());
return true;
}
}
@@ -1,14 +1,12 @@
package binnie.botany.farm;
import binnie.botany.api.IFlower;
import binnie.botany.core.BotanyCore;
import binnie.botany.gardening.Gardening;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.core.BotanyCore;
public class FarmableVanillaFlower extends FarmableFlower {
@Override
public boolean isGermling(ItemStack itemstack) {
@@ -16,9 +14,8 @@ public class FarmableVanillaFlower extends FarmableFlower {
}
@Override
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, BlockPos pos) {
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
IFlower flower = flowerRoot.getConversion(germling);
return flowerRoot.plant(world, pos, flower, player.getGameProfile());
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, int x, int y, int z) {
IFlower flower = BotanyCore.getFlowerRoot().getConversion(germling);
return Gardening.plant(world, x, y, z, flower, player.getGameProfile());
}
}
@@ -1,31 +0,0 @@
package binnie.botany.farm;
import javax.annotation.Nullable;
import java.util.Collections;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import forestry.api.farming.ICrop;
public class FlowerCrop implements ICrop {
NonNullList<ItemStack> drops = NonNullList.create();
BlockPos position;
public FlowerCrop(BlockPos pos, ItemStack... drops) {
Collections.addAll(this.drops, drops);
position = pos;
}
@Nullable
@Override
public NonNullList<ItemStack> harvest() {
return drops;
}
@Override
public BlockPos getPosition() {
return position;
}
}
+229 -220
View File
@@ -1,13 +1,22 @@
package binnie.botany.farm;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.gardening.Gardening;
import com.mojang.authlib.GameProfile;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.farming.FarmDirection;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmHousing;
import forestry.api.farming.IFarmable;
import forestry.core.access.IOwnable;
import forestry.core.utils.vect.Vect;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.init.Blocks;
@@ -15,53 +24,30 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
import forestry.api.farming.FarmDirection;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmHousing;
import forestry.api.farming.IFarmable;
import forestry.core.owner.IOwnedTile;
import forestry.core.utils.BlockUtil;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.IGardeningManager;
import binnie.botany.core.BotanyCore;
import binnie.botany.flower.TileEntityFlower;
import binnie.core.liquid.ManagerLiquid;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class GardenLogic extends FarmLogic {
List<IFarmable> farmables;
private EnumMoisture moisture;
@Nullable
private EnumAcidity acidity;
private boolean fertilised;
private String name;
private NonNullList<ItemStack> produce;
protected EnumMoisture moisture;
protected EnumAcidity acidity;
protected boolean fertilised;
protected String name;
protected ArrayList<ItemStack> produce;
protected List<IFarmable> farmables;
private ItemStack icon;
public GardenLogic(EnumMoisture moisture2, @Nullable EnumAcidity acidity2, boolean isManual, boolean isFertilised, ItemStack icon2, String name2) {
this.isManual = isManual;
produce = NonNullList.create();
public GardenLogic(IFarmHousing housing) {
super(housing);
produce = new ArrayList<>();
farmables = new ArrayList<>();
farmables.add(new FarmableFlower());
farmables.add(new FarmableVanillaFlower());
moisture = moisture2;
acidity = acidity2;
fertilised = isFertilised;
icon = icon2;
name = name2;
}
@Override
@@ -75,96 +61,114 @@ public class GardenLogic extends FarmLogic {
}
@Override
public boolean isAcceptedResource(ItemStack itemstack) {
IGardeningManager gardening = BotanyCore.getGardening();
return gardening.isSoil(itemstack.getItem()) ||
itemstack.getItem() == Item.getItemFromBlock(Blocks.SAND) ||
itemstack.getItem() == Item.getItemFromBlock(Blocks.DIRT) ||
gardening.isAcidFertiliser(itemstack) ||
gardening.isAlkalineFertiliser(itemstack);
public boolean isAcceptedResource(ItemStack stack) {
Item item = stack.getItem();
return Gardening.isSoil(item)
|| item == Item.getItemFromBlock(Blocks.sand)
|| item == Item.getItemFromBlock(Blocks.dirt)
|| Gardening.isAcidFertiliser(stack)
|| Gardening.isAlkalineFertiliser(stack);
}
@Override
public NonNullList<ItemStack> collect(World world, IFarmHousing farmHousing) {
NonNullList<ItemStack> products = produce;
produce = NonNullList.create();
public Collection<ItemStack> collect() {
Collection<ItemStack> products = produce;
produce = new ArrayList<>();
return products;
}
@Override
public boolean cultivate(World world, IFarmHousing farmHousing, BlockPos pos, FarmDirection direction, int extent) {
return maintainSoil(world, pos, direction, extent, farmHousing) ||
(!isManual && maintainWater(world, pos, direction, extent, farmHousing)) ||
maintainCrops(world, pos.up(), direction, extent, farmHousing);
public boolean cultivate(int x, int y, int z, FarmDirection direction, int extent) {
world = housing.getWorld();
return maintainSoil(x, y, z, direction, extent)
|| !isManual && maintainWater(x, y, z, direction, extent)
|| maintainCrops(x, y + 1, z, direction, extent);
}
private boolean isWaste(ItemStack stack) {
return stack.getItem() == Item.getItemFromBlock(Blocks.DIRT);
return stack.getItem() == Item.getItemFromBlock(Blocks.dirt);
}
private boolean maintainSoil(World world, BlockPos pos, FarmDirection direction, int extent, IFarmHousing housing) {
IGardeningManager gardening = BotanyCore.getGardening();
private boolean maintainSoil(int x, int y, int z, FarmDirection direction, int extent) {
for (int i = 0; i < extent; ++i) {
BlockPos position = pos.offset(direction.getFacing(), i);
if (fertilised && gardening.isSoil(getBlock(world, position))) {
IBlockSoil soil = (IBlockSoil) getBlock(world, position);
if (soil.fertilise(world, position, EnumSoilType.FLOWERBED)) {
Vect position = translateWithOffset(x, y, z, direction, i);
boolean isSoil = Gardening.isSoil(world.getBlock(position.x, position.y, position.z));
// remove unnecessary blocks
if (!isManual && !isSoil && !isAirBlock(position)) {
Block block = world.getBlock(position.x, position.y, position.z);
if (moisture == EnumMoisture.DAMP) {
if (block != Blocks.water) {
dropBlockAsProduction(position);
}
} else if (moisture == EnumMoisture.DRY) {
if (block != Blocks.sand) {
dropBlockAsProduction(position);
}
} else {
dropBlockAsProduction(position);
}
}
if (fertilised && isSoil) {
IBlockSoil soil = (IBlockSoil) world.getBlock(position.x, position.y, position.z);
if (soil.fertilise(world, position.x, position.y, position.z, EnumSoilType.FLOWERBED)) {
continue;
}
}
if (getBlock(world, position.up()) == Botany.gardening().plant) {
world.setBlockToAir(position.up());
} else {
if (acidity != null && gardening.isSoil(getBlock(world, position))) {
IBlockSoil soil = (IBlockSoil) getBlock(world, position);
EnumAcidity pH = soil.getPH(world, position);
if (pH.ordinal() < acidity.ordinal()) {
ItemStack stack = getAvailableAlkaline(housing);
if (!stack.isEmpty() && soil.setPH(world, position, EnumAcidity.values()[pH.ordinal() + 1])) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
housing.getFarmInventory().removeResources(resources);
continue;
}
}
if (pH.ordinal() > acidity.ordinal()) {
ItemStack stack = getAvailableAcid(housing);
if (!stack.isEmpty() && soil.setPH(world, position, EnumAcidity.values()[pH.ordinal() - 1])) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
housing.getFarmInventory().removeResources(resources);
continue;
}
if (world.getBlock(position.x, position.y + 1, position.z) == Botany.plant) {
world.setBlockToAir(position.x, position.y + 1, position.z);
continue;
}
if (acidity != null && isSoil) {
IBlockSoil soil = (IBlockSoil) world.getBlock(position.x, position.y, position.z);
EnumAcidity pH = soil.getPH(world, position.x, position.y, position.z);
if (pH.ordinal() < acidity.ordinal()) {
ItemStack stack = getAvailableAlkaline();
if (stack != null && soil.setPH(world, position.x, position.y, position.z, EnumAcidity.values()[pH.ordinal() + 1])) {
housing.getFarmInventory().removeResources(new ItemStack[]{stack});
continue;
}
}
if (!isAirBlock(world, position) && !BlockUtil.isReplaceableBlock(getBlockState(world, position), world, position)) {
ItemStack block = getAsItemStack(world, position);
ItemStack loam = getAvailableLoam(housing);
if (isWaste(block) && !loam.isEmpty()) {
produce.addAll(Blocks.DIRT.getDrops(world, position, Block.getBlockFromItem(block.getItem()).getStateFromMeta(block.getItemDamage()), 0));
setBlock(world, position, Blocks.AIR, 0);
return trySetSoil(world, position, loam, housing);
if (pH.ordinal() > acidity.ordinal()) {
ItemStack stack = getAvailableAcid();
if (stack != null && soil.setPH(world, position.x, position.y, position.z, EnumAcidity.values()[pH.ordinal() - 1])) {
housing.getFarmInventory().removeResources(new ItemStack[]{stack});
continue;
}
} else if (!isManual) {
if (!isWaterBlock(world, position)) {
if (i % 2 == 0) {
return trySetSoil(world, position, housing);
}
FarmDirection cclock = FarmDirection.EAST;
if (direction == FarmDirection.EAST) {
cclock = FarmDirection.SOUTH;
} else if (direction == FarmDirection.SOUTH) {
cclock = FarmDirection.EAST;
} else if (direction == FarmDirection.WEST) {
cclock = FarmDirection.SOUTH;
}
BlockPos previous = position.offset(cclock.getFacing());
ItemStack soil2 = getAsItemStack(world, previous);
if (!gardening.isSoil(soil2.getItem())) {
trySetSoil(world, position, housing);
}
}
}
if (!isAirBlock(position) && !world.getBlock(position.x, position.y, position.z).isReplaceable(world, position.x, position.y, position.z)) {
ItemStack block = getAsItemStack(position);
ItemStack loam = getAvailableLoam();
if (isWaste(block) && loam != null) {
produce.addAll(Blocks.dirt.getDrops(world, position.x, position.y, position.z, block.getItemDamage(), 0));
setBlock(position, Blocks.air, 0);
return trySetSoil(position, loam);
}
} else if (!isManual) {
if (!isWaterBlock(position)) {
if (i % 2 == 0) {
return trySetSoil(position);
}
FarmDirection cclock = FarmDirection.EAST;
if (direction == FarmDirection.EAST) {
cclock = FarmDirection.SOUTH;
} else if (direction == FarmDirection.SOUTH) {
cclock = FarmDirection.EAST;
} else if (direction == FarmDirection.WEST) {
cclock = FarmDirection.SOUTH;
}
Vect previous = translateWithOffset(position.x, position.y, position.z, cclock, 1);
ItemStack soil2 = getAsItemStack(previous);
if (!Gardening.isSoil(soil2.getItem())) {
trySetSoil(position);
}
}
}
@@ -172,140 +176,140 @@ public class GardenLogic extends FarmLogic {
return false;
}
private boolean maintainWater(World world, BlockPos pos, FarmDirection direction, int extent, IFarmHousing housing) {
private boolean maintainWater(int x, int y, int z, FarmDirection direction, int extent) {
for (int i = 0; i < extent; ++i) {
BlockPos position = pos.offset(direction.getFacing(), i);
if (!isAirBlock(world, position) && !BlockUtil.isReplaceableBlock(getBlockState(world, position), world, position)) {
Vect position = translateWithOffset(x, y, z, direction, i);
if (!isAirBlock(position) && !world.getBlock(x, y, z).isReplaceable(world, position.x, position.y, position.z)) {
continue;
}
if (isWaterBlock(world, position)) {
if (isWaterBlock(position)) {
continue;
}
boolean isEnclosed = true;
if (world.isAirBlock(position.east())) {
if (world.isAirBlock(position.x + 1, position.y, position.z)) {
isEnclosed = false;
} else if (world.isAirBlock(position.west())) {
} else if (world.isAirBlock(position.x - 1, position.y, position.z)) {
isEnclosed = false;
} else if (world.isAirBlock(position.south())) {
} else if (world.isAirBlock(position.x, position.y, position.z + 1)) {
isEnclosed = false;
} else if (world.isAirBlock(position.north())) {
} else if (world.isAirBlock(position.x, position.y, position.z - 1)) {
isEnclosed = false;
}
isEnclosed = (isEnclosed || moisture != EnumMoisture.DAMP);
if (isEnclosed) {
return trySetWater(world, position, housing);
return trySetWater(position);
}
}
return false;
}
private ItemStack getAvailableLoam(IFarmHousing housing) {
private ItemStack getAvailableLoam() {
EnumMoisture[] moistures;
if (moisture == EnumMoisture.DAMP) {
moistures = new EnumMoisture[]{
EnumMoisture.DAMP,
EnumMoisture.NORMAL,
EnumMoisture.DRY
EnumMoisture.DAMP,
EnumMoisture.NORMAL,
EnumMoisture.DRY
};
} else if (moisture == EnumMoisture.DRY) {
moistures = new EnumMoisture[]{
EnumMoisture.DRY,
EnumMoisture.DAMP,
EnumMoisture.DRY
EnumMoisture.DRY,
EnumMoisture.DAMP,
EnumMoisture.DRY
};
} else {
moistures = new EnumMoisture[]{
EnumMoisture.DRY,
EnumMoisture.NORMAL,
EnumMoisture.DAMP
EnumMoisture.DRY,
EnumMoisture.NORMAL,
EnumMoisture.DAMP
};
}
EnumAcidity[] acidities = {
EnumAcidity.NEUTRAL,
EnumAcidity.ACID,
EnumAcidity.ALKALINE
EnumAcidity.NEUTRAL,
EnumAcidity.ACID,
EnumAcidity.ALKALINE
};
for (EnumMoisture moist : moistures) {
for (EnumAcidity acid : acidities) {
for (Block type : new Block[]{Botany.gardening().flowerbed, Botany.gardening().loam, Botany.gardening().soil}) {
for (Block type : new Block[]{Botany.flowerbed, Botany.loam, Botany.soil}) {
int meta = acid.ordinal() * 3 + moist.ordinal();
NonNullList<ItemStack> resources = NonNullList.create();
ItemStack resourceStack = new ItemStack(type, 1, meta);
resources.add(resourceStack);
if (housing.getFarmInventory().hasResources(resources)) {
return resourceStack;
ItemStack[] resource = {new ItemStack(type, 1, meta)};
if (housing.getFarmInventory().hasResources(resource)) {
return resource[0];
}
}
}
}
NonNullList<ItemStack> resources = NonNullList.create();
ItemStack resourceStack = new ItemStack(Blocks.DIRT);
resources.add(resourceStack);
if (housing.getFarmInventory().hasResources(resources)) {
return new ItemStack(Blocks.DIRT);
if (housing.getFarmInventory().hasResources(new ItemStack[]{new ItemStack(Blocks.dirt)})) {
return new ItemStack(Blocks.dirt);
}
return ItemStack.EMPTY;
return null;
}
private boolean trySetSoil(World world, BlockPos position, IFarmHousing housing) {
return trySetSoil(world, position, getAvailableLoam(housing), housing);
private boolean trySetSoil(Vect position) {
return trySetSoil(position, getAvailableLoam());
}
private boolean trySetSoil(World world, BlockPos position, ItemStack loam, IFarmHousing housing) {
private boolean trySetSoil(Vect position, ItemStack loam) {
ItemStack copy = loam;
if (loam.isEmpty()) {
if (loam == null) {
return false;
}
if (loam.getItem() == Item.getItemFromBlock(Blocks.DIRT)) {
loam = new ItemStack(Botany.gardening().soil, 1, 4);
if (loam.getItem() == Item.getItemFromBlock(Blocks.dirt)) {
loam = new ItemStack(Botany.soil, 0, 4);
}
setBlock(world, position, ((ItemBlock) loam.getItem()).getBlock(), loam.getItemDamage());
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(copy);
housing.getFarmInventory().removeResources(resources);
setBlock(position, ((ItemBlock) loam.getItem()).field_150939_a, loam.getItemDamage());
housing.getFarmInventory().removeResources(new ItemStack[]{copy});
return true;
}
private boolean trySetWater(World world, BlockPos position, IFarmHousing housing) {
FluidStack water = Binnie.LIQUID.getFluidStack(ManagerLiquid.WATER, 1000);
private boolean trySetWater(Vect position) {
FluidStack water = Binnie.Liquid.getLiquidStack("water", 1000);
if (moisture == EnumMoisture.DAMP) {
if (water == null || !housing.hasLiquid(water)) {
if (!housing.hasLiquid(water)) {
return false;
}
setBlock(world, position, Blocks.WATER, 0);
setBlock(position, Blocks.water, 0);
housing.removeLiquid(water);
return true;
}
if (moisture != EnumMoisture.DRY) {
return trySetSoil(world, position, housing);
return trySetSoil(position);
}
ItemStack sand = new ItemStack(Blocks.SAND, 1);
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(sand);
if (!housing.getFarmInventory().hasResources(resources)) {
ItemStack[] sand = {new ItemStack(Blocks.sand, 1)};
if (!housing.getFarmInventory().hasResources(sand)) {
return false;
}
setBlock(world, position, Blocks.SAND, 0);
housing.getFarmInventory().removeResources(resources);
setBlock(position, Blocks.sand, 0);
housing.getFarmInventory().removeResources(sand);
return true;
}
public void setIcon(ItemStack icon) {
this.icon = icon;
private void dropBlockAsProduction(Vect position) {
ItemStack stack = new ItemStack(world.getBlock(position.x, position.y, position.z));
if (stack.getItem() == null) {
return;
}
produce.add(stack);
world.setBlockToAir(position.x, position.y, position.z);
}
@Override
public boolean isAcceptedGermling(ItemStack itemstack) {
public boolean isAcceptedGermling(ItemStack stack) {
for (IFarmable farmable : farmables) {
if (farmable.isGermling(itemstack)) {
if (farmable.isGermling(stack)) {
return true;
}
}
@@ -313,17 +317,23 @@ public class GardenLogic extends FarmLogic {
}
@Override
public Collection<ICrop> harvest(World world, BlockPos pos, FarmDirection direction, int extent) {
if (isManual) {
return Collections.emptyList();
}
return farmables.stream().map(farmable -> farmable.getCropAt(world, pos.up(), world.getBlockState(pos.up())))
.filter(Objects::nonNull).collect(Collectors.toList());
public Collection<ICrop> harvest(int x, int y, int z, FarmDirection direction, int extent) {
return null;
}
@Override
public ResourceLocation getTextureMap() {
return TextureMap.LOCATION_BLOCKS_TEXTURE;
@SideOnly(Side.CLIENT)
public IIcon getIcon() {
return icon.getIconIndex();
}
public void setIcon(ItemStack icon) {
this.icon = icon;
}
@Override
public ResourceLocation getSpriteSheet() {
return TextureMap.locationBlocksTexture;
}
@Override
@@ -331,68 +341,67 @@ public class GardenLogic extends FarmLogic {
return name;
}
@Override
public ItemStack getIconItemStack() {
return icon;
}
protected boolean maintainCrops(World world, BlockPos pos, FarmDirection direction, int extent, IFarmHousing housing) {
IGardeningManager gardening = BotanyCore.getGardening();
protected boolean maintainCrops(int x, int y, int z, FarmDirection direction, int extent) {
for (int i = 0; i < extent; ++i) {
BlockPos position = pos.offset(direction.getFacing(), i);
if (isAirBlock(world, position) || BlockUtil.isReplaceableBlock(getBlockState(world, position), world, position)) {
ItemStack below = getAsItemStack(world, position.down());
if (gardening.isSoil(below.getItem())) {
return trySetCrop(world, position, housing);
Vect position = translateWithOffset(x, y, z, direction, i);
if (isAirBlock(position) || world.getBlock(x, y, z).isReplaceable(world, position.x, position.y, position.z)) {
ItemStack below = getAsItemStack(position.add(new Vect(0, -1, 0)));
if (Gardening.isSoil(below.getItem())) {
return trySetCrop(position);
}
}
}
return false;
}
private boolean trySetCrop(World world, BlockPos position, IFarmHousing housing) {
private boolean trySetCrop(Vect position) {
for (IFarmable farmable : farmables) {
if (!housing.plantGermling(farmable, world, position)) {
boolean success = housing.plantGermling(farmable, world, position.x, position.y, position.z);
if (!success || !(housing instanceof IOwnable)) {
continue;
}
if (housing instanceof IOwnedTile) {
TileEntity tile = world.getTileEntity(position);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
IOwnedTile owned = (IOwnedTile) housing;
TileEntity tile = housing.getWorld().getTileEntity(position.x, position.y, position.z);
if (!(tile instanceof TileEntityFlower)) {
return true;
}
flower.setOwner(owned.getOwnerHandler().getOwner());
}
try {
IOwnable housing2 = (IOwnable) housing;
GameProfile prof = (GameProfile) IOwnable.class.getMethod("getOwnerProfile", new Class[0]).invoke(housing2);
((TileEntityFlower) tile).setOwner(prof);
} catch (Exception ex) {
// ignored
}
return true;
}
return false;
}
public ItemStack getAvailableAcid(IFarmHousing housing) {
for (ItemStack stack : BotanyCore.getGardening().getAcidFertilisers()) {
if (!stack.isEmpty()) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
if (housing.getFarmInventory().hasResources(resources)) {
return stack;
}
public ItemStack getAvailableAcid() {
for (ItemStack stack : Gardening.getAcidFertilisers()) {
if (stack != null && stack.getItem() != null && housing.getFarmInventory().hasResources(new ItemStack[]{stack})) {
return stack;
}
}
return ItemStack.EMPTY;
return null;
}
public ItemStack getAvailableAlkaline(IFarmHousing housing) {
for (ItemStack stack : BotanyCore.getGardening().getAlkalineFertilisers()) {
if (!stack.isEmpty()) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
if (housing.getFarmInventory().hasResources(resources)) {
return stack;
}
public ItemStack getAvailableAlkaline() {
for (ItemStack stack : Gardening.getAlkalineFertilisers()) {
if (stack != null && stack.getItem() != null && housing.getFarmInventory().hasResources(new ItemStack[]{stack})) {
return stack;
}
}
return ItemStack.EMPTY;
return null;
}
public void setData(EnumMoisture moisture, EnumAcidity acidity, boolean isManual, boolean fertilised, ItemStack icon, String name) {
this.moisture = moisture;
this.acidity = acidity;
this.isManual = isManual;
this.fertilised = fertilised;
this.icon = icon;
this.name = name;
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.farm;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,320 +1,232 @@
package binnie.botany.flower;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IStateMapperRegister;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.Botany;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.IFlowerType;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.FlowerDefinition;
import binnie.botany.network.PacketID;
import binnie.core.BinnieCore;
import binnie.core.network.packet.MessageNBT;
import binnie.core.util.TileUtil;
public class BlockFlower extends BlockContainer implements IColoredBlock, IStateMapperRegister {
public static final AxisAlignedBB FLOWER_BLOCK_AABB = new AxisAlignedBB(0.3D, 0.0D, 0.3D, 0.7D, 0.6D, 0.7D);
/* PROPERTIES */
public static final PropertyFlower FLOWER = new PropertyFlower("flower", IFlowerType.class);
public static final PropertyInteger SECTION = PropertyInteger.create("section", 0, EnumFlowerType.highestSection - 1);
public static final PropertyBool FLOWERED = PropertyBool.create("flowered");
public static final PropertyBool SEED = PropertyBool.create("seed");
public BlockFlower() {
super(Material.PLANTS);
setTickRandomly(true);
setRegistryName("flower");
setSoundType(SoundType.PLANT);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFlower();
}
@Override
@SideOnly(Side.CLIENT)
public void registerStateMapper() {
ModelLoader.setCustomStateMapper(this, new StateMapperFlower());
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
ItemStack heldItem = player.getHeldItemMainhand();
if (heldItem.isEmpty() || heldItem.getItem() != BinnieCore.getFieldKit() || !player.isSneaking()) {
return false;
}
if (world.isRemote) {
return true;
}
TileEntity tile = world.getTileEntity(pos);
if (!(tile instanceof TileEntityFlower)) {
return true;
}
TileEntityFlower tileFlower = (TileEntityFlower) tile;
IFlower flower = tileFlower.getFlower();
if (flower == null) {
return true;
}
IFlowerGenome flowerGenome = flower.getGenome();
NBTTagCompound info = new NBTTagCompound();
info.setString("Species", flowerGenome.getPrimary().getUID());
info.setString("Species2", flowerGenome.getSecondary().getUID());
info.setFloat("Age", flower.getAge() / flowerGenome.getLifespan());
info.setShort("Colour", (short) flowerGenome.getPrimaryColor().getID());
info.setShort("Colour2", (short) flowerGenome.getSecondaryColor().getID());
info.setBoolean("Wilting", flower.isWilted());
info.setBoolean("Flowered", flower.hasFlowered());
Botany.proxy.sendToPlayer(new MessageNBT(PacketID.FIELDKIT.ordinal(), info), player);
heldItem.damageItem(1, player);
return true;
}
@Override
@Nullable
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
return null;
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
TileEntity tile = source.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getType().getSections() > 1) {
return FULL_BLOCK_AABB;
}
}
return FLOWER_BLOCK_AABB;
}
@Override
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getType().getSections() > 1) {
return FULL_BLOCK_AABB.offset(pos);
}
}
return FLOWER_BLOCK_AABB.offset(pos);
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
TileEntity flower = world.getTileEntity(pos);
if (!BinnieCore.getBinnieProxy().isSimulating(world)) {
if (flower != null && flower instanceof TileEntityFlower) {
IFlower f = flowerRoot.getMember(stack);
if (f != null) {
((TileEntityFlower) flower).setRender(new TileEntityFlower.RenderInfo(f, (TileEntityFlower) flower));
}
}
return;
}
TileEntity below = world.getTileEntity(pos.down());
if (flower != null && flower instanceof TileEntityFlower) {
if (below instanceof TileEntityFlower) {
((TileEntityFlower) flower).setSection(((TileEntityFlower) below).getSection());
} else {
GameProfile owner = (placer instanceof EntityPlayer) ? ((EntityPlayer) placer).getGameProfile() : null;
((TileEntityFlower) flower).create(stack, owner);
}
}
flowerRoot.tryGrowSection(world, pos);
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (tintIndex == 0) {
return flower.getStemColour();
} else if (tintIndex == 1) {
return flower.getPrimaryColour();
}
return flower.getSecondaryColour();
}
}
return 0xffffff;
}
@Override
public boolean canPlaceBlockAt(World world, BlockPos pos) {
return super.canPlaceBlockAt(world, pos) && canBlockStay(world, pos);
}
public boolean canBlockStay(World world, BlockPos pos) {
TileEntity tile = world.getTileEntity(pos);
IBlockState downState = world.getBlockState(pos.down());
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() > 0) {
return downState.getBlock() == Botany.flower;
}
return canPlaceBlockOn(downState.getBlock());
}
protected boolean canPlaceBlockOn(Block block) {
return block == Blocks.GRASS
|| block == Blocks.DIRT
|| block == Blocks.FARMLAND
|| BotanyCore.getGardening().isSoil(block);
}
@Override
@SideOnly(Side.CLIENT)
public EnumBlockRenderType getRenderType(IBlockState state) {
return EnumBlockRenderType.MODEL;
}
@Override
@SideOnly(Side.CLIENT)
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
}
@Override
@SideOnly(Side.CLIENT)
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
TileEntityFlower flower = TileUtil.getTile(world, pos, TileEntityFlower.class);
if (flower != null && flower.getType() != null) {
state = state.withProperty(FLOWER, flower.getType());
state = state.withProperty(FLOWERED, flower.isFlowered());
state = state.withProperty(SECTION, flower.getRenderSection());
state = state.withProperty(SEED, flower.getAge() == 0);
} else {
state = state.withProperty(FLOWER, FlowerDefinition.Dandelion.getSpecies().getType());
state = state.withProperty(FLOWERED, false);
state = state.withProperty(SEED, false);
}
return state;
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, FLOWER, FLOWERED, SECTION, SEED);
}
@Override
public int getMetaFromState(IBlockState state) {
return 0;
}
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) {
checkAndDropBlock(worldIn, pos);
TileEntity tile = worldIn.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getSection() == 0 && flower.getFlower() != null && flower.getFlower().getAge() > 0 && flower.getFlower().getGenome().getPrimary().getType().getSections() > 1 && worldIn.getBlockState(pos.up()).getBlock() != Botany.flower) {
dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0);
worldIn.setBlockToAir(pos);
}
}
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
((TileEntityFlower) tile).randomUpdate(rand);
checkAndDropBlock(world, pos);
return;
}
world.setBlockToAir(pos);
}
protected void checkAndDropBlock(World world, BlockPos pos) {
if (!canBlockStay(world, pos)) {
dropBlockAsItem(world, pos, world.getBlockState(pos), 0);
world.setBlockToAir(pos);
}
}
@Override
public NonNullList<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
NonNullList<ItemStack> drops = NonNullList.create();
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) {
ItemStack flower = ((TileEntityFlower) tile).getItemStack();
if (!flower.isEmpty()) {
drops.add(flower);
}
}
return drops;
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = getDrops(world, pos, world.getBlockState(pos), 0);
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && BinnieCore.getBinnieProxy().isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
}
package binnie.botany.flower;
import binnie.botany.Botany;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerType;
import binnie.botany.core.BotanyCore;
import binnie.botany.gardening.Gardening;
import binnie.botany.genetics.EnumFlowerType;
import binnie.core.BinnieCore;
import com.mojang.authlib.GameProfile;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
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.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class BlockFlower extends BlockContainer {
public BlockFlower() {
super(Material.plants);
float f = 0.2f;
setBlockBounds(0.5f - f, 0.0f, 0.5f - f, 0.5f + f, f * 3.0f, 0.5f + f);
setTickRandomly(true);
setBlockName("flower");
setStepSound(Block.soundTypeGrass);
}
@Override
public String getUnlocalizedName() {
return "botany.flower";
}
@Override
public int getRenderType() {
return RendererBotany.renderID;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
for (EnumFlowerType type : EnumFlowerType.values()) {
type.registerIcons(register);
}
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFlower();
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return null;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
super.onBlockPlacedBy(world, x, y, z, entity, stack);
TileEntity flower = world.getTileEntity(x, y, z);
if (!BinnieCore.proxy.isSimulating(world)) {
if (flower != null && flower instanceof TileEntityFlower) {
IFlower f = BotanyCore.getFlowerRoot().getMember(stack);
((TileEntityFlower) flower).setRender(new TileEntityFlower.RenderInfo(f, (TileEntityFlower) flower));
}
return;
}
TileEntity below = world.getTileEntity(x, y - 1, z);
if (flower != null && flower instanceof TileEntityFlower) {
if (below instanceof TileEntityFlower) {
((TileEntityFlower) flower).setSection(((TileEntityFlower) below).getSection());
} else {
GameProfile owner = (entity instanceof EntityPlayer) ? ((EntityPlayer) entity).getGameProfile() : null;
((TileEntityFlower) flower).create(stack, owner);
}
}
Gardening.tryGrowSection(world, x, y, z);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
TileEntity tile = world.getTileEntity(x, y, z);
if (!(tile instanceof TileEntityFlower)) {
return super.getIcon(world, x, y, z, side);
}
TileEntityFlower f = (TileEntityFlower) tile;
EnumFlowerStage stage = (f.getAge() == 0) ? EnumFlowerStage.SEED : EnumFlowerStage.FLOWER;
IFlowerType flower = f.getType();
int section = f.getRenderSection();
boolean flowered = f.isFlowered();
if (RendererBotany.pass == 0) {
return flower.getStem(stage, flowered, section);
}
return (RendererBotany.pass == 1) ?
flower.getPetalIcon(stage, flowered, section) :
flower.getVariantIcon(stage, flowered, section);
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess world, int x, int y, int z) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityFlower) {
TileEntityFlower f = (TileEntityFlower) tile;
if (RendererBotany.pass == 0) {
return f.getStemColour();
}
return (RendererBotany.pass == 1) ?
f.getPrimaryColor() :
f.getSecondaryColor();
}
return 0xffffff;
}
@Override
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
return super.canPlaceBlockAt(world, x, y, z)
&& canBlockStay(world, x, y, z);
}
protected boolean canPlaceBlockOn(Block block) {
return block == Blocks.grass
|| block == Blocks.dirt
|| block == Blocks.farmland
|| Gardening.isSoil(block);
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
super.onNeighborBlockChange(world, x, y, z, block);
checkAndDropBlock(world, x, y, z);
TileEntity tile = world.getTileEntity(x, y, z);
if (!(tile instanceof TileEntityFlower)) {
return;
}
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getSection() == 0
&& flower.getFlower() != null
&& flower.getFlower().getAge() > 0
&& flower.getFlower().getGenome().getPrimary().getType().getSections() > 1
&& world.getBlock(x, y + 1, z) != Botany.flower) {
dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
world.setBlockToAir(x, y, z);
}
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityFlower) {
((TileEntityFlower) tile).randomUpdate(rand);
checkAndDropBlock(world, x, y, z);
return;
}
world.setBlockToAir(x, y, z);
}
protected void checkAndDropBlock(World world, int x, int y, int z) {
if (!canBlockStay(world, x, y, z)) {
dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
world.setBlockToAir(x, y, z);
}
}
@Override
public boolean canBlockStay(World world, int x, int y, int z) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() > 0) {
return world.getBlock(x, y - 1, z) == Botany.flower;
}
return canPlaceBlockOn(world.getBlock(x, y - 1, z));
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int blockMeta, int fortune) {
ArrayList<ItemStack> drops = new ArrayList<>();
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) {
ItemStack flower = ((TileEntityFlower) tile).getItemStack();
if (flower != null) {
drops.add(flower);
}
}
return drops;
}
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
List<ItemStack> drops = getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
boolean hasBeenBroken = world.setBlockToAir(x, y, z);
if (hasBeenBroken && BinnieCore.proxy.isSimulating(world) && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
dropBlockAsItem(world, x, y, z, drop);
}
}
return hasBeenBroken;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int meta, int side) {
return Blocks.yellow_flower.getIcon(0, 0);
}
}
@@ -1,64 +0,0 @@
package binnie.botany.flower;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import binnie.core.util.I18N;
public enum EnumTubeInsulate {
CLAY(0xa1aacc, "clay"),
COBBLE(0x7b7b7b, "cobblestone"),
SAND(0xefeab5, "sandstone"),
HARDENED_CLAY(0x935c43, "hardened_clay"),
STONE(0x6d6d6d, "stone"),
SANDSTONE(0xc1b989, "sandstone");
public static final EnumTubeInsulate[] VALUES = values();
int color;
String uid;
EnumTubeInsulate(int color, String uid) {
this.color = color;
this.uid = uid;
}
public static EnumTubeInsulate get(int meta) {
return VALUES[meta / 128 % VALUES.length];
}
public int getColor() {
return color;
}
public String getDisplayName() {
return I18N.localise("botany.tube.insulate." + uid + ".name");
}
public String getUid() {
return uid;
}
public ItemStack getStack() {
switch (this) {
case CLAY:
return new ItemStack(Blocks.CLAY);
case COBBLE:
return new ItemStack(Blocks.COBBLESTONE);
case HARDENED_CLAY:
return new ItemStack(Blocks.HARDENED_CLAY);
case SAND:
return new ItemStack(Blocks.SAND);
case SANDSTONE:
return new ItemStack(Blocks.SANDSTONE);
case STONE:
return new ItemStack(Blocks.STONE);
}
throw new IllegalStateException("Unknown insulated tube type: " + this);
}
}
@@ -1,36 +0,0 @@
package binnie.botany.flower;
import binnie.core.util.I18N;
public enum EnumTubeMaterial {
COPPER(0xe3b78e, "copper"),
TIN(0xe1eef4, "tin"),
BRONZE(0xddc276, "bronze"),
IRON(0xd8d8d8, "iron");
public static final EnumTubeMaterial[] VALUES = values();
int color;
String uid;
EnumTubeMaterial(int color, String uid) {
this.color = color;
this.uid = uid;
}
public static EnumTubeMaterial get(int meta) {
return VALUES[meta % VALUES.length];
}
public String getUid() {
return uid;
}
public int getColor() {
return color;
}
public String getDisplayName() {
return I18N.localise("botany.tube.material." + uid + ".name");
}
}
@@ -1,96 +0,0 @@
package binnie.botany.flower;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.IFlowerType;
import binnie.core.resource.BinnieSprite;
public class FlowerSpriteManager {
private static final Map<IFlowerType, FlowerSprites> flowerSprites = new HashMap<>();
public static void initSprites(IFlowerType type) {
if (flowerSprites.containsKey(type)) {
return;
}
flowerSprites.put(type, new FlowerSprites(type));
}
@Nullable
@SideOnly(Side.CLIENT)
public static TextureAtlasSprite getStem(IFlowerType type, int section, boolean flowered) {
FlowerSprites flower = flowerSprites.get(type);
if (flower == null) {
return null;
}
return flower.getStem(type, section, flowered);
}
@Nullable
@SideOnly(Side.CLIENT)
public static TextureAtlasSprite getPetal(IFlowerType type, int section, boolean flowered) {
FlowerSprites flower = flowerSprites.get(type);
if (flower == null) {
return null;
}
return flower.getPetal(type, section, flowered);
}
@Nullable
@SideOnly(Side.CLIENT)
public static TextureAtlasSprite getVariant(IFlowerType type, int section, boolean flowered) {
FlowerSprites flower = flowerSprites.get(type);
if (flower == null) {
return null;
}
return flower.getVariant(type, section, flowered);
}
private static class FlowerSprites {
private BinnieSprite[] stem;
private BinnieSprite[] variant;
private BinnieSprite[] petal;
private BinnieSprite[] unflowered;
private int sections;
public FlowerSprites(IFlowerType type) {
sections = type.getSections();
stem = new BinnieSprite[sections];
petal = new BinnieSprite[sections];
variant = new BinnieSprite[sections];
unflowered = new BinnieSprite[sections];
for (int section = 0; section < sections; ++section) {
String suf = (section == 0) ? "" : ("" + (section + 1));
String pre = (sections == 1) ? "" : "double/";
stem[section] = Binnie.RESOURCE.getBlockSprite(Botany.instance, "flowers/" + pre + type.toString().toLowerCase() + suf + ".0");
petal[section] = Binnie.RESOURCE.getBlockSprite(Botany.instance, "flowers/" + pre + type.toString().toLowerCase() + suf + ".1");
variant[section] = Binnie.RESOURCE.getBlockSprite(Botany.instance, "flowers/" + pre + type.toString().toLowerCase() + suf + ".2");
unflowered[section] = Binnie.RESOURCE.getBlockSprite(Botany.instance, "flowers/" + pre + type.toString().toLowerCase() + suf + ".3");
}
}
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getStem(IFlowerType type, int section, boolean flowered) {
return stem[section % sections].getSprite();
}
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getPetal(IFlowerType type, int section, boolean flowered) {
return (flowered ? petal[section % sections] : unflowered[section % sections]).getSprite();
}
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getVariant(IFlowerType type, int section, boolean flowered) {
return flowered ? variant[section % sections].getSprite() : null;
}
}
}
+201 -178
View File
@@ -1,69 +1,50 @@
package binnie.botany.flower;
import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import forestry.core.config.Config;
import forestry.core.items.IColoredItem;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumFlowerChromosome;
import binnie.botany.api.EnumFlowerStage;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerType;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.Flower;
import binnie.core.BinnieCore;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import forestry.core.config.Config;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class ItemBotany extends Item implements IColoredItem, IItemModelRegister {
private EnumFlowerStage type;
private String tag;
import java.util.List;
public ItemBotany(String name, EnumFlowerStage type, String tag) {
this.type = type;
this.tag = tag;
public abstract class ItemBotany extends Item {
public ItemBotany(String name) {
setCreativeTab(CreativeTabBotany.instance);
setUnlocalizedName(name);
setRegistryName(name);
hasSubtypes = true;
}
@Override
@SideOnly(Side.CLIENT)
public int getSpriteNumber() {
return 0;
}
@Override
public boolean isDamageable() {
return false;
@@ -80,187 +61,229 @@ public class ItemBotany extends Item implements IColoredItem, IItemModelRegister
}
@Override
public boolean hasEffect(ItemStack itemstack) {
if (!itemstack.hasTagCompound()) {
public boolean hasEffect(ItemStack stack, int pass) {
if (!stack.hasTagCompound()) {
return false;
}
IIndividual individual = getIndividual(itemstack);
return individual != null && individual.hasEffect();
IIndividual individual = getIndividual(stack);
return individual != null
&& individual.getGenome() != null
&& individual.hasEffect();
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemStack, @Nullable World worldIn, List<String> list, ITooltipFlag flagIn) {
IFlower individual = (IFlower) getIndividual(itemStack);
public void addInformation(ItemStack itemstack, EntityPlayer player, List tooltip, boolean flag) {
if (!itemstack.hasTagCompound()) {
return;
}
IFlower individual = (IFlower) getIndividual(itemstack);
if (individual == null) {
list.add(TextFormatting.DARK_RED + I18N.localise("item.botany.flower.destroy"));
tooltip.add(I18N.localise("botany.item.tooltip.bugged"));
return;
}
IFlowerGenome genome = individual.getGenome();
//Colors
String primaryColor = genome.getPrimaryColor().getColorName();
String secondaryColor = genome.getSecondaryColor().getColorName();
String stemColor = genome.getStemColor().getColorName();
String colorInfo;
if (!primaryColor.equals(secondaryColor)) {
colorInfo = I18N.localise("item.botany.grammar.flower.secondary");
IFlowerColor primaryColor = genome.getPrimaryColor();
IFlowerColor secondColor = genome.getSecondaryColor();
IFlowerColor stemColor = genome.getStemColor();
if (primaryColor == secondColor) {
tooltip.add(EnumChatFormatting.YELLOW + I18N.localise("botany.item.tooltip.flowerColor1", primaryColor.getName(), stemColor.getName()));
} else {
colorInfo = I18N.localise("item.botany.grammar.flower");
tooltip.add(EnumChatFormatting.YELLOW + I18N.localise("botany.item.tooltip.flowerColor2", primaryColor.getName(), secondColor.getName(), stemColor.getName()));
}
list.add(TextFormatting.YELLOW + colorInfo.replaceAll("%PRIMARY", primaryColor).replaceAll("%SECONDARY", secondaryColor).replaceAll("%STEM", stemColor));
if (individual.isAnalyzed()) {
if (GuiScreen.isShiftKeyDown()) {
individual.addTooltip(list);
if (BinnieCore.proxy.isShiftDown()) {
individual.addTooltip(tooltip);
} else {
list.add(TextFormatting.ITALIC + "<" + I18N.localise("for.gui.tooltip.tmi") + ">");
tooltip.add(EnumChatFormatting.GRAY + I18N.localise("botany.item.tooltip.holdMore"));
}
} else {
list.add("<" + I18N.localise("for.gui.unknown") + ">");
tooltip.add(I18N.localise("botany.item.tooltip.unknownGenome"));
}
}
@Nullable
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister par1IconRegister) {
}
protected IIndividual getIndividual(ItemStack itemstack) {
NBTTagCompound tagCompound = itemstack.getTagCompound();
if (tagCompound == null) {
return null;
}
return new Flower(tagCompound);
}
private IAlleleFlowerSpecies getPrimarySpecies(ItemStack itemstack) {
IFlower tree = BotanyCore.getFlowerRoot().getMember(itemstack);
if (tree == null) {
return (IAlleleFlowerSpecies) BotanyCore.getFlowerRoot().getDefaultTemplate()[EnumFlowerChromosome.SPECIES.ordinal()];
}
return tree.getGenome().getPrimary();
return new Flower(itemstack.getTagCompound());
}
@Override
public String getItemStackDisplayName(ItemStack itemstack) {
if (!itemstack.hasTagCompound()) {
return I18N.localise("item.botany.flower.corrupted.name");
return I18N.localise("botany.item.tooltip.unknown");
}
IIndividual individual = getIndividual(itemstack);
if (individual != null) {
return individual.getDisplayName() + (!tag.isEmpty() ? " " + I18N.localise("item.botany." + tag + ".name") : "");
if (individual != null && individual.getGenome() != null) {
String tag = getTag();
if (tag == null || tag.isEmpty()) {
return individual.getDisplayName();
}
return I18N.localise("botany.item.botany.name", individual.getDisplayName(), tag);
}
return I18N.localise("item.botany.flower.corrupted.name");
return I18N.localise("botany.item.flowerCorrupted.name");
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
if (this.isInCreativeTab(tab)) {
addCreativeItems(items, true);
}
public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) {
addCreativeItems(itemList, true);
}
public void addCreativeItems(NonNullList<ItemStack> itemList, boolean hideSecrets) {
for (IIndividual individual : BotanyCore.getFlowerRoot().getIndividualTemplates()) {
public void addCreativeItems(List itemList, boolean hideSecrets) {
for (IIndividual individual : BotanyCore.speciesRoot.getIndividualTemplates()) {
if (hideSecrets && individual.isSecret() && !Config.isDebug) {
continue;
}
itemList.add(BotanyCore.getFlowerRoot().getMemberStack(individual.copy(), type));
itemList.add(BotanyCore.speciesRoot.getMemberStack(individual.copy(), getStage().ordinal()));
}
}
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
IFlower flower = BotanyCore.getFlowerRoot().getMember(stack);
if (flower == null) {
public int getColorFromItemStack(ItemStack itemstack, int renderPass) {
IFlower flower = BotanyCore.speciesRoot.getMember(itemstack);
if (flower == null || flower.getGenome() == null) {
return 0xffffff;
}
if (tintIndex == 0) {
if (renderPass == 0) {
return flower.getGenome().getStemColor().getColor(flower.isWilted());
}
return (tintIndex == 1)
? flower.getGenome().getPrimaryColor().getColor(flower.isWilted())
: flower.getGenome().getSecondaryColor().getColor(flower.isWilted());
return (renderPass == 1) ?
flower.getGenome().getPrimaryColor().getColor(flower.isWilted()) :
flower.getGenome().getSecondaryColor().getColor(flower.isWilted());
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (IFlowerType flowerType : (List<IFlowerType>) BlockFlower.FLOWER.getAllowedValues()) {
flowerType.registerModels(item, manager, type);
}
manager.registerItemModel(item, new BotanyMeshDefinition());
}
@Override
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
ItemStack stack = player.getHeldItem(hand);
if (type == EnumFlowerStage.POLLEN) {
return pollinateFlower(world, pos, player, stack);
}
return placeFlower(player, stack, world, pos, hand, facing, hitX, hitY, hitZ);
}
private EnumActionResult pollinateFlower(World world, BlockPos pos, EntityPlayer player, ItemStack stack){
IFlower flower = Binnie.GENETICS.getFlowerRoot().getMember(stack);
TileEntity target = world.getTileEntity(pos);
if (!(target instanceof IPollinatable)) {
return EnumActionResult.PASS;
}
IPollinatable pollinatable = (IPollinatable) target;
if (!pollinatable.canMateWith(flower)) {
return EnumActionResult.FAIL;
}
pollinatable.mateWith(flower);
if (!player.capabilities.isCreativeMode) {
stack.shrink(1);
}
return EnumActionResult.SUCCESS;
}
private EnumActionResult placeFlower(EntityPlayer player, ItemStack stack, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){
IBlockState blockState = world.getBlockState(pos);
Block block = blockState.getBlock();
if (!block.isReplaceable(world, pos)) {
pos = pos.offset(facing);
}
if (stack.getCount() != 0 && player.canPlayerEdit(pos, facing, stack) && world.mayPlace(Botany.flower, pos, false, facing, null)) {
int i = getMetadata(stack.getMetadata());
IBlockState stateForPlacement = Botany.flower.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, i, player, hand);
if (placeBlockAt(stack, player, world, pos, facing, hitX, hitY, hitZ, stateForPlacement)) {
SoundType soundType = block.getSoundType(stateForPlacement, world, pos, player);
world.playSound(player, pos, soundType.getPlaceSound(), SoundCategory.BLOCKS, (soundType.getVolume() + 1.0F) / 2.0F, soundType.getPitch() * 0.8F);
stack.shrink(1);
}
return EnumActionResult.SUCCESS;
}
return EnumActionResult.FAIL;
}
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) {
if (!world.setBlockState(pos, newState, 3)) {
return false;
}
IBlockState state = world.getBlockState(pos);
if (state.getBlock() == Botany.flower) {
ItemBlock.setTileEntityNBT(world, player, pos, stack);
Botany.flower.onBlockPlacedBy(world, pos, state, player, stack);
}
public boolean requiresMultipleRenderPasses() {
return true;
}
@SideOnly(Side.CLIENT)
private class BotanyMeshDefinition implements ItemMeshDefinition {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
IFlower flower = BotanyCore.getFlowerRoot().getMember(stack);
Preconditions.checkNotNull(flower);
IAlleleFlowerSpecies flowerSpecies = flower.getGenome().getPrimary();
IFlowerType flowerType = flowerSpecies.getType();
return flowerSpecies.getFlowerModel(type, flower.hasFlowered());
}
@Override
public int getRenderPasses(int metadata) {
return 3;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack itemstack, int renderPass) {
IFlower flower = BotanyCore.speciesRoot.getMember(itemstack);
if (flower == null || flower.getGenome() == null || flower.getGenome().getPrimary() == null) {
return EnumFlowerType.ALLIUM.getBlank();
}
IFlowerType type = flower.getGenome().getPrimary().getType();
if (renderPass == 0) {
return type.getStem(getStage(), flower.hasFlowered(), type.getSections() - 1);
}
if (renderPass == 1) {
return type.getPetalIcon(getStage(), flower.hasFlowered(), type.getSections() - 1);
}
return type.getVariantIcon(getStage(), flower.hasFlowered(), type.getSections() - 1);
}
@Override
public boolean onItemUse(ItemStack itemstack, EntityPlayer player, World world, int x, int y, int z, int side, float px, float py, float pz) {
if (getStage() == EnumFlowerStage.POLLEN) {
IFlower flower = Binnie.Genetics.getFlowerRoot().getMember(itemstack);
TileEntity target = world.getTileEntity(x, y, z);
if (!(target instanceof IPollinatable)) {
return false;
}
IPollinatable pollinatable = (IPollinatable) target;
if (!pollinatable.canMateWith(flower)) {
return false;
}
pollinatable.mateWith(flower);
if (!player.capabilities.isCreativeMode) {
itemstack.stackSize--;
}
return true;
}
Block blockFlower = Botany.flower;
Block blockAlreadyThere = world.getBlock(x, y, z);
if (blockAlreadyThere == Blocks.snow_layer && (world.getBlockMetadata(x, y, z) & 0x7) < 1) {
side = 1;
} else if (blockAlreadyThere != Blocks.vine && blockAlreadyThere != Blocks.tallgrass && blockAlreadyThere != Blocks.deadbush && !blockAlreadyThere.isReplaceable(world, x, y, z)) {
if (side == 0) {
y--;
} else if (side == 1) {
y++;
} else if (side == 2) {
z--;
} else if (side == 3) {
z++;
} else if (side == 4) {
x--;
} else if (side == 5) {
x++;
}
}
if (itemstack.stackSize == 0 || !player.canPlayerEdit(x, y, z, side, itemstack)) {
return false;
}
if (y == 255 && blockFlower.getMaterial().isSolid()) {
return false;
}
if (world.canPlaceEntityOnSide(blockFlower, x, y, z, false, side, player, itemstack)) {
int i1 = getMetadata(itemstack.getItemDamage());
int j1 = blockFlower.onBlockPlaced(world, x, y, z, side, px, py, pz, i1);
if (placeBlockAt(itemstack, player, world, x, y, z, side, px, py, pz, j1)) {
world.playSoundEffect(x + 0.5f, y + 0.5f, z + 0.5f, blockFlower.stepSound.func_150496_b(), (blockFlower.stepSound.getVolume() + 1.0f) / 2.0f, blockFlower.stepSound.getPitch() * 0.8f);
itemstack.stackSize--;
}
return true;
}
return false;
}
@SideOnly(Side.CLIENT)
public boolean func_150936_a(World world, int x, int y, int z, int side, EntityPlayer player, ItemStack stack) {
Block field_150939_a = Botany.flower;
Block block = world.getBlock(x, y, z);
if (block == Blocks.snow_layer) {
side = 1;
} else if (block != Blocks.vine && block != Blocks.tallgrass && block != Blocks.deadbush && !block.isReplaceable(world, x, y, z)) {
if (side == 0) {
y--;
} else if (side == 1) {
y++;
} else if (side == 2) {
z--;
} else if (side == 3) {
z++;
} else if (side == 4) {
x--;
} else if (side == 5) {
x++;
}
}
return world.canPlaceEntityOnSide(field_150939_a, x, y, z, false, side, null, stack);
}
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) {
Block block = Botany.flower;
if (!world.setBlock(x, y, z, block, metadata, 3)) {
return false;
}
if (world.getBlock(x, y, z) == block) {
block.onBlockPlacedBy(world, x, y, z, player, stack);
block.onPostBlockPlaced(world, x, y, z, metadata);
}
return true;
}
public abstract EnumFlowerStage getStage();
public abstract String getTag();
}
@@ -0,0 +1,19 @@
package binnie.botany.flower;
import binnie.botany.api.EnumFlowerStage;
public class ItemFlower extends ItemBotany {
public ItemFlower() {
super("itemFlower");
}
@Override
public EnumFlowerStage getStage() {
return EnumFlowerStage.FLOWER;
}
@Override
public String getTag() {
return "";
}
}
@@ -1,126 +1,167 @@
package binnie.botany.flower;
import javax.annotation.Nullable;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import java.util.Collection;
import java.util.List;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.util.ITooltipFlag;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List;
import forestry.api.circuits.ChipsetManager;
import forestry.api.circuits.ICircuit;
import forestry.api.circuits.ICircuitLayout;
import forestry.api.core.IModelManager;
import forestry.core.circuits.SolderManager;
import forestry.core.items.IColoredItem;
import forestry.core.utils.Translator;
public class ItemInsulatedTube extends Item {
IIcon[] icons;
import binnie.botany.CreativeTabBotany;
import binnie.core.item.ItemCore;
import binnie.core.util.I18N;
public class ItemInsulatedTube extends ItemCore implements IColoredItem {
public ItemInsulatedTube() {
super("insulated_tube");
setUnlocalizedName("botany.insulated_tube");
icons = new IIcon[3];
setUnlocalizedName("insulatedTube");
setCreativeTab(CreativeTabBotany.instance);
setHasSubtypes(true);
}
private static Multimap<ICircuitLayout, ICircuit> getCircuits(ItemStack itemStack) {
Multimap<ICircuitLayout, ICircuit> circuits = ArrayListMultimap.create();
Collection<ICircuitLayout> allLayouts = ChipsetManager.circuitRegistry.getRegisteredLayouts().values();
for (ICircuitLayout circuitLayout : allLayouts) {
ICircuit circuit = SolderManager.getCircuit(circuitLayout, itemStack);
if (circuit != null) {
circuits.put(circuitLayout, circuit);
}
}
return circuits;
}
public static String getInsulate(ItemStack stack) {
return EnumTubeInsulate.get(stack.getItemDamage()).getDisplayName();
}
public static ItemStack getInsulateStack(ItemStack stack) {
return EnumTubeInsulate.get(stack.getItemDamage()).getStack();
return Insulate.get(stack.getItemDamage()).getStack();
}
@Override
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
if (this.isInCreativeTab(tab)) {
for (EnumTubeMaterial mat : EnumTubeMaterial.values()) {
for (EnumTubeInsulate ins : EnumTubeInsulate.values()) {
items.add(new ItemStack(this, 1, mat.ordinal() + ins.ordinal() * 128));
}
}
}
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
for (EnumTubeMaterial mat : EnumTubeMaterial.values()) {
for (EnumTubeInsulate ins : EnumTubeInsulate.values()) {
manager.registerItemModel(item, mat.ordinal() + ins.ordinal() * 128);
public void getSubItems(Item item, CreativeTabs tab, List list) {
for (Material mat : Material.values()) {
for (Insulate ins : Insulate.values()) {
list.add(new ItemStack(this, 1, mat.ordinal() + ins.ordinal() * 128));
}
}
}
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
if (tintIndex == 0) {
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
for (int i = 0; i < 3; ++i) {
icons[i] = Botany.proxy.getIcon(register, "insulatedTube." + i);
}
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass) {
if (pass == 0) {
return 0xffffff;
} else if (tintIndex == 1) {
return EnumTubeMaterial.get(stack.getItemDamage()).getColor();
}
return EnumTubeInsulate.get(stack.getItemDamage()).getColor();
return (pass == 1)
? Material.get(stack.getItemDamage()).getColor()
: Insulate.get(stack.getItemDamage()).getColor();
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemstack, @Nullable World worldIn, List<String> list, ITooltipFlag flagIn) {
super.addInformation(itemstack, worldIn, list, flagIn);
Multimap<ICircuitLayout, ICircuit> circuits = getCircuits(itemstack);
if (!circuits.isEmpty()) {
if (GuiScreen.isShiftKeyDown()) {
for (ICircuitLayout circuitLayout : circuits.keys()) {
String circuitLayoutName = circuitLayout.getUsage();
list.add(TextFormatting.WHITE.toString() + TextFormatting.UNDERLINE + circuitLayoutName);
for (ICircuit circuit : circuits.get(circuitLayout)) {
circuit.addTooltip(list);
}
}
} else {
list.add(TextFormatting.ITALIC + "<" + Translator.translateToLocal("for.gui.tooltip.tmi") + ">");
}
} else {
list.add("<" + Translator.translateToLocal("for.gui.noeffect") + ">");
}
public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
tooltip.add(Insulate.get(stack.getItemDamage()).getName());
}
@Override
public String getItemStackDisplayName(ItemStack itemStack) {
int meta = itemStack.getMetadata();
return I18N.localise(
"item.botany.insulated_tube.name",
EnumTubeMaterial.get(meta).getDisplayName(),
EnumTubeInsulate.get(meta).getDisplayName()
);
public String getItemStackDisplayName(ItemStack stack) {
return Material.get(stack.getItemDamage()).getName() + " "
+ I18N.localise("botany.tube.name");
}
@Override
public int getRenderPasses(int metadata) {
return 3;
}
@Override
public IIcon getIcon(ItemStack stack, int pass) {
return icons[pass % 3];
}
@Override
public boolean requiresMultipleRenderPasses() {
return true;
}
enum Material {
Copper(0xe3b78e, "cooper"),
Tin(0xe1eef4, "tin"),
Bronze(0xddc276, "bronze"),
Iron(0xd8d8d8, "iron");
protected int color;
protected String name;
Material(int color, String name) {
this.color = color;
this.name = name;
}
public static Material get(int i) {
return values()[i % values().length];
}
public int getColor() {
return color;
}
public String getName() {
return I18N.localise("botany.tube." + name);
}
}
enum Insulate {
Clay(0xa1aacc, "clay"),
Cobble(0x7b7b7b, "cobblestone"),
Sand(0xefeab5, "sand"),
HardenedClay(0x935c43, "hardenedClay"),
Stone(0x6d6d6d, "smoothStone"),
Sandstone(0xc1b989, "sandstone");
protected int color;
protected String name;
Insulate(int color, String name) {
this.color = color;
this.name = name;
}
public static Insulate get(int i) {
return values()[i / 128 % values().length];
}
public int getColor() {
return color;
}
public String getName() {
return I18N.localise("botany.tube.insulate." + name);
}
public ItemStack getStack() {
switch (this) {
case Clay:
return new ItemStack(Blocks.clay);
case Cobble:
return new ItemStack(Blocks.cobblestone);
case HardenedClay:
return new ItemStack(Blocks.hardened_clay);
case Sand:
return new ItemStack(Blocks.sand);
case Sandstone:
return new ItemStack(Blocks.sandstone);
case Stone:
return new ItemStack(Blocks.stone);
}
return null;
}
}
}
@@ -0,0 +1,20 @@
package binnie.botany.flower;
import binnie.botany.api.EnumFlowerStage;
import binnie.core.util.I18N;
public class ItemPollen extends ItemBotany {
public ItemPollen() {
super("pollen");
}
@Override
public EnumFlowerStage getStage() {
return EnumFlowerStage.POLLEN;
}
@Override
public String getTag() {
return I18N.localise("botany.item.pollen.tag.name");
}
}
@@ -0,0 +1,20 @@
package binnie.botany.flower;
import binnie.botany.api.EnumFlowerStage;
import binnie.core.util.I18N;
public class ItemSeed extends ItemBotany {
public ItemSeed() {
super("seed");
}
@Override
public EnumFlowerStage getStage() {
return EnumFlowerStage.SEED;
}
@Override
public String getTag() {
return I18N.localise("botany.item.germling.tag.name");
}
}
@@ -1,53 +0,0 @@
package binnie.botany.flower;
import com.google.common.base.Optional;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import net.minecraft.block.properties.PropertyHelper;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlowerType;
public class PropertyFlower<I extends IFlowerType<I>> extends PropertyHelper<I> {
public PropertyFlower(String name, Class<I> flowerTypeClass) {
super(name, flowerTypeClass);
}
@Override
public List<I> getAllowedValues() {
List<I> flowerTypes = new ArrayList<>();
for (IAllele allele : AlleleManager.alleleRegistry.getRegisteredAlleles().values()) {
if (allele instanceof IAlleleFlowerSpecies) {
IFlowerType flowerType = ((IAlleleFlowerSpecies) allele).getType();
if (!flowerTypes.contains(flowerType)) {
flowerTypes.add((I) flowerType);
}
}
}
return flowerTypes;
}
/**
* Get the name for the given value.
*/
@Override
public String getName(IFlowerType value) {
return value.getName().toLowerCase(Locale.ENGLISH);
}
@Override
public Optional<I> parseValue(String value) {
IAllele allele = AlleleManager.alleleRegistry.getAllele(value);
if (IAlleleFlowerSpecies.class.isInstance(allele)) {
IAlleleFlowerSpecies alleleValue = IAlleleFlowerSpecies.class.cast(allele);
return Optional.of((I) alleleValue.getType());
}
return Optional.absent();
}
}
@@ -0,0 +1,60 @@
package binnie.botany.flower;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
public class RendererBotany implements ISimpleBlockRenderingHandler {
public static int renderID;
public static int pass;
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {
// ignored
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(renderer.blockAccess, x, y, z));
double d1 = x;
double d2 = y;
double d3 = z;
long i1 = x * 3129871 ^ z * 116129781L;
i1 = i1 * i1 * 42317861L + i1 * 11L;
d1 += ((i1 >> 16 & 0xFL) / 15.0f - 0.5) * 0.3;
d3 += ((i1 >> 24 & 0xFL) / 15.0f - 0.5) * 0.3;
for (int j = 0; j < 3; ++j) {
RendererBotany.pass = j;
int l = block.colorMultiplier(renderer.blockAccess, x, y, z);
float f = (l >> 16 & 0xFF) / 255.0f;
float f2 = (l >> 8 & 0xFF) / 255.0f;
float f3 = (l & 0xFF) / 255.0f;
if (EntityRenderer.anaglyphEnable) {
f = (f * 30.0f + f2 * 59.0f + f3 * 11.0f) / 100.0f;
f2 = (f * 30.0f + f2 * 70.0f) / 100.0f;
f3 = (f * 30.0f + f3 * 70.0f) / 100.0f;
}
tessellator.setColorOpaque_F(f, f2, f3);
IIcon iicon = block.getIcon(world, x, y, z, 0);
renderer.drawCrossedSquares(iicon, d1, d2, d3, 1.0f);
}
return false;
}
@Override
public boolean shouldRender3DInInventory(int i) {
return false;
}
@Override
public int getRenderId() {
return RendererBotany.renderID;
}
}
@@ -1,39 +0,0 @@
package binnie.botany.flower;
import com.google.common.collect.Maps;
import java.util.Map;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.Constants;
import binnie.botany.api.IFlowerType;
@SideOnly(Side.CLIENT)
public class StateMapperFlower extends StateMapperBase {
@Override
protected ModelResourceLocation getModelResourceLocation(IBlockState state) {
Map<IProperty<?>, Comparable<?>> properties = Maps.newLinkedHashMap(state.getProperties());
IFlowerType flowerType = (IFlowerType) state.getValue(BlockFlower.FLOWER);
if (flowerType.getSections() < 2) {
properties.remove(BlockFlower.SECTION);
} else if (flowerType.getSections() <= state.getValue(BlockFlower.SECTION)) {
properties.put(BlockFlower.SECTION, flowerType.getSections() - 1);
}
if (state.getValue(BlockFlower.SEED)) {
properties.remove(BlockFlower.SECTION);
properties.remove(BlockFlower.FLOWER);
properties.remove(BlockFlower.FLOWERED);
} else {
properties.remove(BlockFlower.SEED);
}
return new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":flower", getPropertyString(properties));
}
}
@@ -1,35 +1,5 @@
package binnie.botany.flower;
import javax.annotation.Nullable;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.common.EnumPlantType;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.api.core.IErrorState;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import forestry.api.lepidopterology.IButterfly;
import forestry.api.lepidopterology.IButterflyNursery;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.api.EnumFlowerStage;
@@ -38,27 +8,46 @@ import binnie.botany.api.IAlleleFlowerSpecies;
import binnie.botany.api.IFlower;
import binnie.botany.api.IFlowerColor;
import binnie.botany.api.IFlowerGenome;
import binnie.botany.api.IFlowerRoot;
import binnie.botany.api.IFlowerType;
import binnie.botany.api.IGardeningManager;
import binnie.botany.core.BotanyCore;
import binnie.botany.gardening.PlantType;
import binnie.botany.gardening.BlockPlant;
import binnie.botany.gardening.Gardening;
import binnie.botany.genetics.EnumFlowerColor;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.Flower;
import binnie.botany.network.MessageFlowerUpdate;
import binnie.core.BinnieCore;
import com.mojang.authlib.GameProfile;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import forestry.api.lepidopterology.IButterfly;
import forestry.api.lepidopterology.IButterflyNursery;
import forestry.lepidopterology.entities.EntityButterfly;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.EnumPlantType;
import java.util.EnumSet;
import java.util.Random;
public class TileEntityFlower extends TileEntity implements IPollinatable, IButterflyNursery {
@Nullable
IFlower flower;
@Nullable
GameProfile owner;
int section;
@Nullable
RenderInfo renderInfo;
@Nullable
IButterfly caterpillar;
int matureTime;
protected IFlower flower;
protected GameProfile owner;
protected int section;
protected RenderInfo renderInfo;
protected IButterfly caterpillar;
protected int matureTime;
public TileEntityFlower() {
flower = null;
@@ -68,61 +57,49 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
}
@Override
public void readFromNBT(NBTTagCompound nbtCompound) {
if (nbtCompound.hasKey("Flower")) {
flower = new Flower(nbtCompound.getCompoundTag("Flower"));
if (flower.getAge() == 0) {
flower.setFlowered(false);
}
public void readFromNBT(NBTTagCompound nbttagcompound) {
flower = new Flower(nbttagcompound);
section = nbttagcompound.getByte("section");
if (flower.getAge() == 0) {
flower.setFlowered(false);
}
if (nbtCompound.hasKey("section")) {
section = nbtCompound.getByte("section");
owner = NBTUtil.func_152459_a(nbttagcompound.getCompoundTag("owner"));
if (nbttagcompound.hasKey("CATER") && BinnieCore.isLepidopteryActive()) {
matureTime = nbttagcompound.getInteger("caterTime");
caterpillar = Binnie.Genetics.getButterflyRoot().getMember(nbttagcompound.getCompoundTag("cater"));
}
if (nbtCompound.hasKey("owner")) {
owner = NBTUtil.readGameProfileFromNBT(nbtCompound.getCompoundTag("owner"));
}
if (nbtCompound.hasKey("CATER") && BinnieCore.isLepidopteryActive()) {
matureTime = nbtCompound.getInteger("caterTime");
caterpillar = Binnie.GENETICS.getButterflyRoot().getMember(nbtCompound.getCompoundTag("cater"));
}
readRenderInfo(nbtCompound);
super.readFromNBT(nbtCompound);
super.readFromNBT(nbttagcompound);
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound nbtCompound) {
public void writeToNBT(NBTTagCompound nbttagcompound) {
if (flower != null) {
nbtCompound.setTag("Flower", flower.writeToNBT(new NBTTagCompound()));
flower.writeToNBT(nbttagcompound);
}
if (owner != null) {
NBTTagCompound nbt = new NBTTagCompound();
NBTUtil.writeGameProfile(nbt, owner);
nbtCompound.setTag("owner", nbt);
NBTUtil.func_152460_a(nbt, owner);
nbttagcompound.setTag("owner", nbt);
}
if (caterpillar != null) {
nbtCompound.setInteger("caterTime", matureTime);
nbttagcompound.setInteger("caterTime", matureTime);
NBTTagCompound subcompound = new NBTTagCompound();
caterpillar.writeToNBT(subcompound);
nbtCompound.setTag("cater", subcompound);
nbttagcompound.setTag("cater", subcompound);
}
nbtCompound.setByte("section", (byte) getSection());
return super.writeToNBT(nbtCompound);
nbttagcompound.setByte("section", (byte) getSection());
super.writeToNBT(nbttagcompound);
}
public void create(ItemStack stack, @Nullable GameProfile owner) {
IFlower flower = BotanyCore.getFlowerRoot().getMember(stack);
create(flower, owner);
public void create(ItemStack stack, GameProfile owner) {
create(BotanyCore.getFlowerRoot().getMember(stack), owner);
}
public void create(IFlower flower, @Nullable GameProfile owner) {
this.flower = flower;
public void create(IFlower stack, GameProfile owner) {
flower = stack;
if (flower.getAge() == 0) {
flower.setFlowered(false);
}
@@ -132,12 +109,11 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
}
@Override
public EnumPlantType getPlantType() {
return EnumPlantType.Plains;
public EnumSet<EnumPlantType> getPlantType() {
return EnumSet.of(EnumPlantType.Plains);
}
@Override
@Nullable
public IIndividual getPollen() {
return getFlower();
}
@@ -145,11 +121,11 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
@Override
public boolean canMateWith(IIndividual individual) {
return isBreeding()
&& individual instanceof IFlower
&& getFlower() != null
&& getFlower().getMate() == null
&& getFlower().hasFlowered()
&& !getFlower().isGeneticEqual(individual);
&& individual instanceof IFlower
&& getFlower() != null
&& getFlower().getMate() == null
&& getFlower().hasFlowered()
&& !getFlower().isGeneticEqual(individual);
}
@Override
@@ -160,19 +136,18 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
IAlleleFlowerSpecies primary = (IAlleleFlowerSpecies) individual.getGenome().getPrimary();
IAlleleFlowerSpecies primary2 = getFlower().getGenome().getPrimary();
if (primary == primary2 || world.rand.nextInt(4) == 0) {
if (primary == primary2 || worldObj.rand.nextInt(4) == 0) {
getFlower().mate((IFlower) individual);
world.markBlockRangeForRenderUpdate(pos, pos);
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
}
@Nullable
public IFlower getFlower() {
if (getSection() <= 0) {
return flower;
}
TileEntity tile = world.getTileEntity(pos.down(getSection()));
TileEntity tile = worldObj.getTileEntity(xCoord, yCoord - getSection(), zCoord);
if (tile instanceof TileEntityFlower) {
return ((TileEntityFlower) tile).getFlower();
}
@@ -180,104 +155,38 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
}
public boolean isBreeding() {
Block roots = getWorld().getBlockState(getPos().down()).getBlock();
return BotanyCore.getGardening().isSoil(roots);
Block roots = getWorldObj().getBlock(xCoord, yCoord - 1, zCoord);
return Gardening.isSoil(roots);
}
public void randomUpdate(Random rand) {
if (world.getBlockState(pos).getBlock() != Botany.flower) {
if (worldObj.getBlock(xCoord, yCoord, zCoord) != Botany.flower) {
invalidate();
return;
}
if (getSection() > 0) {
return;
}
if (flower == null) {
if (getSection() > 0 || flower == null) {
return;
}
if (flower.getGenome() == null) {
invalidate();
return;
}
if (!isBreeding()) {
return;
}
if(updateState(rand)){
return;
}
IGardeningManager gardening = BotanyCore.getGardening();
EnumSoilType soil = gardening.getSoilType(world, pos.down());
float chanceDispersal = 0.8f;
chanceDispersal += 0.2f * flower.getGenome().getFertility();
chanceDispersal *= 1.0f + soil.ordinal() * 0.5f;
float chancePollinate = 1.0f;
chancePollinate += 0.25f * flower.getGenome().getFertility();
chancePollinate *= 1.0f + soil.ordinal() * 0.5f;
float chanceSelfPollinate = 0.2f * chancePollinate;
plantOffspring(rand, chanceDispersal);
mateFlower(rand, chancePollinate, chanceSelfPollinate);
spawnButterflies();
matureCaterpillar();
checkIfDead(false);
updateRender(true);
}
private void mateFlower(Random rand, float chancePollinate, float chanceSelfPollinate){
if (world.rand.nextFloat() < chancePollinate && flower.hasFlowered() && !flower.isWilted()) {
for (int a2 = 0; a2 < 4; ++a2) {
int dx3;
int dz2;
for (dx3 = 0, dz2 = 0; dx3 == 0 && dz2 == 0; dx3 = rand.nextInt(5) - 2, dz2 = rand.nextInt(5) - 2) {
}
TileEntity tile = world.getTileEntity(pos.add(dx3, 0, dz2));
if (tile instanceof IPollinatable && ((IPollinatable) tile).canMateWith(getFlower())) {
((IPollinatable) tile).mateWith(getFlower());
}
}
}
if (world.rand.nextFloat() < chanceSelfPollinate && flower.hasFlowered() && flower.getMate() == null) {
mateWith(getFlower());
}
}
private void plantOffspring(Random rand, float chanceDispersal){
if (world.rand.nextFloat() < chanceDispersal && flower.hasFlowered() && !flower.isWilted()) {
IFlowerGenome mate = flower.getMate();
if (mate != null) {
boolean dispersed = false;
for (int a = 0; a < 5 && !dispersed; ++a) {
int dx2;
int dz;
for (dx2 = 0, dz = 0; dx2 == 0 && dz == 0; dx2 = rand.nextInt(3) - 1, dz = rand.nextInt(3) - 1) {
}
Block b2 = world.getBlockState(pos.add(dx2, -1, dz)).getBlock();
if (world.isAirBlock(pos.add(dx2, 0, dz)) && BotanyCore.getGardening().isSoil(b2)) {
IFlower offspring = flower.getOffspring(world, pos);
if (offspring != null) {
BotanyCore.getFlowerRoot().plant(world, pos.add(dx2, 0, dz), offspring, getOwner());
flower.removeMate();
dispersed = true;
}
}
}
}
}
}
private boolean updateState(Random rand){
float light = world.getLight(pos);
float light = worldObj.getBlockLightValue(xCoord, yCoord, zCoord);
if (light < 6.0f) {
for (int offsetX = -2; offsetX <= 2; ++offsetX) {
for (int offsetY = -2; offsetY <= 2; ++offsetY) {
light -= (world.canBlockSeeSky(pos.add(offsetX, 0, offsetY)) ? 0.0f : 0.5f);
for (int dx = -2; dx <= 2; ++dx) {
for (int dy = -2; dy <= 2; ++dy) {
light -= (worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord) ? 0.0f : 0.5f);
}
}
}
IGardeningManager gardening = BotanyCore.getGardening();
boolean canTolerate = gardening.canTolerate(getFlower(), world, pos);
boolean canTolerate = Gardening.canTolerate(getFlower(), worldObj, xCoord, yCoord, zCoord);
EnumSoilType soil = Gardening.getSoilType(worldObj, xCoord, yCoord, zCoord);
if (rand.nextFloat() < getFlower().getGenome().getAgeChance()) {
if (flower.getAge() < 1) {
if (canTolerate && light > 6.0f) {
@@ -291,15 +200,14 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
if (canTolerate && flower.getAge() > 1 && !flower.isWilted() && light > 6.0f) {
flower.setFlowered(true);
}
if (!canTolerate && flower.isWilted() && rand.nextInt(2 + Math.max(flower.getAge(), 2)) == 0) {
kill();
return true;
return;
}
if (light < 2.0f && flower.isWilted()) {
kill();
return true;
return;
}
if (!canTolerate || light < 1.0f) {
@@ -308,71 +216,85 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
flower.setWilted(false);
}
return false;
float chanceDispersal = 0.8f;
chanceDispersal += 0.2f * flower.getGenome().getFertility();
chanceDispersal *= 1.0f + soil.ordinal() * 0.5f;
float chancePollinate = 1.0f;
chancePollinate += 0.25f * flower.getGenome().getFertility();
chancePollinate *= 1.0f + soil.ordinal() * 0.5f;
float chanceSelfPollinate = 0.2f * chancePollinate;
if (worldObj.rand.nextFloat() < chanceDispersal && flower.hasFlowered() && !flower.isWilted()) {
IFlowerGenome mate = flower.getMate();
if (mate != null) {
boolean dispersed = false;
for (int a = 0; a < 5 && !dispersed; ++a) {
int dx2 = 0;
int dz = 0;
while (dx2 == 0 && dz == 0) {
dx2 = rand.nextInt(3) - 1;
dz = rand.nextInt(3) - 1;
}
Block b = getWorldObj().getBlock(xCoord + dx2, yCoord, zCoord + dz);
Block b2 = getWorldObj().getBlock(xCoord + dx2, yCoord - 1, zCoord + dz);
if (b == Blocks.air && Gardening.isSoil(b2)) {
IFlower offspring = flower.getOffspring(getWorldObj());
if (offspring != null) {
Gardening.plant(getWorldObj(), xCoord + dx2, yCoord, zCoord + dz, offspring, getOwner());
flower.removeMate();
dispersed = true;
}
}
}
}
}
if (worldObj.rand.nextFloat() < chancePollinate && flower.hasFlowered() && !flower.isWilted()) {
for (int a2 = 0; a2 < 4; ++a2) {
int dx3 = 0;
int dz2 = 0;
while (dx3 == 0 && dz2 == 0) {
dx3 = rand.nextInt(5) - 2;
dz2 = rand.nextInt(5) - 2;
}
TileEntity tile = getWorldObj().getTileEntity(xCoord + dx3, yCoord, zCoord + dz2);
if (tile instanceof IPollinatable && ((IPollinatable) tile).canMateWith(getFlower())) {
((IPollinatable) tile).mateWith(getFlower());
}
}
}
if (worldObj.rand.nextFloat() < chanceSelfPollinate && flower.hasFlowered() && flower.getMate() == null) {
mateWith(getFlower());
}
spawnButterflies();
matureCaterpillar();
checkIfDead(false);
updateRender(true);
}
private void doFlowerAge() {
getFlower().age();
if (getFlower().getAge() == 1) {
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
flowerRoot.onGrowFromSeed(world, pos);
if (getOwner() != null && getFlower() != null) {
flowerRoot.getBreedingTracker(world, getOwner()).registerBirth(getFlower());
}
if (getFlower().getAge() != 1) {
return;
}
}
private NBTTagCompound writeRenderInfo(NBTTagCompound tag) {
if (renderInfo != null) {
NBTTagCompound nbtRenderInfo = new NBTTagCompound();
nbtRenderInfo.setByte("primary", (byte) renderInfo.primary.getID());
nbtRenderInfo.setByte("secondary", (byte) renderInfo.secondary.getID());
nbtRenderInfo.setByte("stem", (byte) renderInfo.stem.getID());
nbtRenderInfo.setByte("type", (byte) renderInfo.type.ordinal());
nbtRenderInfo.setByte("age", renderInfo.age);
nbtRenderInfo.setByte("section", renderInfo.section);
nbtRenderInfo.setBoolean("wilted", renderInfo.wilted);
nbtRenderInfo.setBoolean("flowered", renderInfo.flowered);
tag.setTag("renderinfo", nbtRenderInfo);
}
return tag;
}
private void readRenderInfo(NBTTagCompound tag) {
if (tag.hasKey("renderinfo")) {
NBTTagCompound infotag = tag.getCompoundTag("renderinfo");
RenderInfo info = new RenderInfo();
info.primary = EnumFlowerColor.values()[infotag.getByte("primary")].getFlowerColorAllele();
info.secondary = EnumFlowerColor.values()[infotag.getByte("secondary")].getFlowerColorAllele();
info.stem = EnumFlowerColor.values()[infotag.getByte("stem")].getFlowerColorAllele();
info.type = EnumFlowerType.values()[infotag.getByte("type")];
info.age = infotag.getByte("age");
info.section = infotag.getByte("section");
info.wilted = infotag.getBoolean("wilted");
info.flowered = infotag.getBoolean("flowered");
setRender(info);
Gardening.onGrowFromSeed(worldObj, xCoord, yCoord, zCoord);
if (getOwner() != null && getFlower() != null) {
BotanyCore.getFlowerRoot().getBreedingTracker(getWorldObj(), getOwner()).registerBirth(getFlower());
}
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
super.onDataPacket(net, pkt);
// TODO client only call?
readRenderInfo(pkt.getNbtCompound());
}
@Override
public NBTTagCompound getUpdateTag() {
updateRender(true);
return writeRenderInfo(super.getUpdateTag());
}
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
if (renderInfo == null && getFlower() != null) {
public Packet getDescriptionPacket() {
if (renderInfo == null && getFlower() != null && getFlower().getGenome() != null) {
renderInfo = new RenderInfo(getFlower(), this);
}
return (renderInfo != null) ? new SPacketUpdateTileEntity(pos, 0, getUpdateTag()) : null;
return (renderInfo != null) ?
Botany.instance.getNetworkWrapper().getPacketFrom(new MessageFlowerUpdate(xCoord, yCoord, zCoord, renderInfo).getMessage()) :
null;
}
public void updateRender(boolean update) {
@@ -383,7 +305,7 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
}
}
TileEntity above = world.getTileEntity(pos.up());
TileEntity above = worldObj.getTileEntity(xCoord, yCoord + 1, zCoord);
if (above instanceof TileEntityFlower) {
((TileEntityFlower) above).updateRender(true);
}
@@ -395,25 +317,26 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
public void setSection(int i) {
section = i;
if (BinnieCore.getBinnieProxy().isSimulating(world)) {
if (BinnieCore.proxy.isSimulating(worldObj)) {
updateRender(true);
}
}
public ItemStack getItemStack() {
IFlower flower = getFlower();
if (flower == null) {
return ItemStack.EMPTY;
return null;
}
return Binnie.GENETICS.getFlowerRoot().getMemberStack(flower, EnumFlowerStage.getStage(flower));
int stage = (flower.getAge() == 0) ? EnumFlowerStage.SEED.ordinal() : EnumFlowerStage.FLOWER.ordinal();
return Binnie.Genetics.getFlowerRoot().getMemberStack(getFlower(), stage);
}
@Nullable
private TileEntityFlower getRoot() {
if (getSection() == 0) {
return null;
}
TileEntity tile = world.getTileEntity(pos.down(getSection()));
TileEntity tile = worldObj.getTileEntity(xCoord, yCoord - getSection(), zCoord);
return (tile instanceof TileEntityFlower) ? ((TileEntityFlower) tile) : null;
}
@@ -429,14 +352,15 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
Random rand = new Random();
IFlower cutting = (IFlower) getFlower().copy();
cutting.setAge(0);
ItemStack cuttingStack = BotanyCore.getFlowerRoot().getMemberStack(cutting, EnumFlowerStage.SEED);
ItemStack cuttingStack = BotanyCore.getFlowerRoot().getMemberStack(cutting, EnumFlowerStage.SEED.ordinal());
float f = 0.7f;
double xPos = rand.nextFloat() * f + (1.0f - f) * 0.5;
double yPos = rand.nextFloat() * f + (1.0f - f) * 0.5;
double zPos = rand.nextFloat() * f + (1.0f - f) * 0.5;
EntityItem entityItem = new EntityItem(world, pos.getX() + xPos, pos.getY() + yPos, pos.getZ() + zPos, cuttingStack);
entityItem.setPickupDelay(10);
world.spawnEntity(entityItem);
double d = rand.nextFloat() * f + (1.0f - f) * 0.5;
double d2 = rand.nextFloat() * f + (1.0f - f) * 0.5;
double d3 = rand.nextFloat() * f + (1.0f - f) * 0.5;
EntityItem entityitem = new EntityItem(worldObj, xCoord + d, yCoord + d2, zCoord + d3, cuttingStack);
entityitem.delayBeforeCanPickup = 10;
worldObj.spawnEntityInWorld(entityitem);
for (int maxAge = getFlower().getMaxAge(), i = 0; i < maxAge; ++i) {
if (rand.nextBoolean()) {
getFlower().age();
@@ -452,58 +376,53 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
return getRoot().checkIfDead(wasCut);
}
EnumSoilType soil = BotanyCore.getGardening().getSoilType(world, pos);
EnumSoilType soil = Gardening.getSoilType(worldObj, xCoord, yCoord, zCoord);
int maxAge = (int) (flower.getMaxAge() * (1.0f + soil.ordinal() * 0.25f));
if (flower.getAge() > maxAge) {
if (!wasCut && flower.getMate() != null) {
world.setBlockToAir(pos);
IFlower offspring = flower.getOffspring(world, pos.down());
TileEntity above = world.getTileEntity(pos.up());
if (above instanceof TileEntityFlower) {
world.setBlockToAir(pos.up());
}
BotanyCore.getFlowerRoot().plant(world, pos, offspring, getOwner());
} else {
kill();
}
return true;
if (flower.getAge() <= maxAge) {
return false;
}
return false;
if (!wasCut && flower.getMate() != null) {
worldObj.setBlockToAir(xCoord, yCoord, zCoord);
IFlower offspring = flower.getOffspring(getWorldObj());
TileEntity above = worldObj.getTileEntity(xCoord, yCoord + 1, zCoord);
if (above instanceof TileEntityFlower) {
worldObj.setBlockToAir(xCoord, yCoord + 1, zCoord);
}
Gardening.plant(worldObj, xCoord, yCoord, zCoord, offspring, getOwner());
} else {
kill();
}
return true;
}
public void kill() {
if (flower.getAge() > 0) {
world.setBlockState(pos, Botany.gardening().plant.getStateFromMeta(PlantType.DEAD_FLOWER.ordinal()), 2);
worldObj.setBlock(xCoord, yCoord, zCoord, Botany.plant, BlockPlant.Type.DeadFlower.ordinal(), 2);
} else {
world.setBlockToAir(pos);
worldObj.setBlockToAir(xCoord, yCoord, zCoord);
}
for (int i = 1; world.getTileEntity(pos.up(i)) instanceof TileEntityFlower; ++i) {
world.setBlockToAir(pos.up(i));
for (int i = 1; worldObj.getTileEntity(xCoord, yCoord + i, zCoord) instanceof TileEntityFlower; ++i) {
worldObj.setBlockToAir(xCoord, yCoord + i, zCoord);
}
}
public boolean onBonemeal() {
if (getFlower() == null) {
return false;
}
if (!isBreeding()) {
return false;
}
if (getFlower().isWilted()) {
if (getFlower() == null || !isBreeding() || getFlower().isWilted()) {
return false;
}
//this.doFlowerAge();
doFlowerAge();
if (getFlower().getAge() > 1 && !getFlower().hasFlowered()) {
getFlower().setFlowered(true);
}
checkIfDead(false);
updateRender(true);
return true;
}
@Nullable
public GameProfile getOwner() {
return owner;
}
@@ -513,88 +432,73 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
}
public void spawnButterflies() {
/*if (!BinnieCore.isLepidopteryActive()) {
if (!BinnieCore.isLepidopteryActive()) {
return;
}
final int x = this.xCoord;
final int y = this.yCoord;
final int z = this.zCoord;
final World world = this.worldObj;
if (this.getCaterpillar() != null) {
int x = xCoord;
int y = yCoord;
int z = zCoord;
World world = worldObj;
if (getCaterpillar() != null) {
return;
}
if (world.rand.nextFloat() >= this.getFlower().getGenome().getSappiness()) {
if (world.rand.nextFloat() >= getFlower().getGenome().getSappiness()) {
return;
}
if (this.worldObj.rand.nextFloat() >= 0.2f) {
if (worldObj.rand.nextFloat() >= 0.2f) {
return;
}
final IButterfly spawn = Binnie.Genetics.getButterflyRoot().getIndividualTemplates().get(this.worldObj.rand.nextInt(Binnie.Genetics.getButterflyRoot().getIndividualTemplates().size()));
if (this.worldObj.rand.nextFloat() >= spawn.getGenome().getPrimary().getRarity() * 0.5f) {
IButterfly spawn = Binnie.Genetics.getButterflyRoot().getIndividualTemplates().get(worldObj.rand.nextInt(Binnie.Genetics.getButterflyRoot().getIndividualTemplates().size()));
if (worldObj.rand.nextFloat() >= spawn.getGenome().getPrimary().getRarity() * 0.5f) {
return;
}
if (this.worldObj.countEntities(EntityButterfly.class) > 100) {
if (worldObj.countEntities(EntityButterfly.class) > 100) {
return;
}
if (!spawn.canSpawn(this.worldObj, x, y, z)) {
if (!spawn.canSpawn(worldObj, x, y, z)) {
return;
}
if (world.isAirBlock(x, y + 1, z)) {
this.attemptButterflySpawn(world, spawn, x, y + 1, z);
attemptButterflySpawn(world, spawn, x, y + 1, z);
} else if (world.isAirBlock(x - 1, y, z)) {
attemptButterflySpawn(world, spawn, x - 1, y, z);
} else if (world.isAirBlock(x + 1, y, z)) {
attemptButterflySpawn(world, spawn, x + 1, y, z);
} else if (world.isAirBlock(x, y, z - 1)) {
attemptButterflySpawn(world, spawn, x, y, z - 1);
} else if (world.isAirBlock(x, y, z + 1)) {
attemptButterflySpawn(world, spawn, x, y, z + 1);
}
else if (world.isAirBlock(x - 1, y, z)) {
this.attemptButterflySpawn(world, spawn, x - 1, y, z);
}
else if (world.isAirBlock(x + 1, y, z)) {
this.attemptButterflySpawn(world, spawn, x + 1, y, z);
}
else if (world.isAirBlock(x, y, z - 1)) {
this.attemptButterflySpawn(world, spawn, x, y, z - 1);
}
else if (world.isAirBlock(x, y, z + 1)) {
this.attemptButterflySpawn(world, spawn, x, y, z + 1);
}*/
}
private void attemptButterflySpawn(World world, IButterfly butterfly, double x, double y, double z) {
if (BinnieCore.isLepidopteryActive()) {
Binnie.GENETICS.getButterflyRoot().spawnButterflyInWorld(world, butterfly.copy(), x, y + 0.10000000149011612, z);
Binnie.Genetics.getButterflyRoot().spawnButterflyInWorld(world, butterfly.copy(), x, y + 0.10000000149011612, z);
}
}
public GameProfile getOwnerName() {
return getOwner();
public World getWorld() {
return getWorldObj();
}
@Override
public EnumTemperature getTemperature() {
return EnumTemperature.getFromValue(world.getBiome(getPos()).getTemperature());
return EnumTemperature.getFromValue(worldObj.getBiomeGenForCoords(xCoord, zCoord).temperature);
}
@Override
public EnumHumidity getHumidity() {
return EnumHumidity.getFromValue(world.getBiome(getPos()).getRainfall());
}
public void setErrorState(int state) {
}
public int getErrorOrdinal() {
return 0;
}
public boolean addProduct(ItemStack product, boolean all) {
return false;
return EnumHumidity.getFromValue(worldObj.getBiomeGenForCoords(xCoord, zCoord).rainfall);
}
@Override
@Nullable
public IButterfly getCaterpillar() {
return caterpillar;
}
@Override
public void setCaterpillar(@Nullable IButterfly butterfly) {
public void setCaterpillar(IButterfly butterfly) {
caterpillar = butterfly;
matureTime = 0;
}
@@ -610,40 +514,31 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
}
private void matureCaterpillar() {
//TODO Spawn the caterpillar in a cocon on the next Tree or other thing
/*if (this.getCaterpillar() == null) {
if (getCaterpillar() == null) {
return;
}
++this.matureTime;
if (this.matureTime >= this.caterpillar.getGenome().getLifespan() / (this.caterpillar.getGenome().getFertility() * 2) && this.caterpillar.canTakeFlight(this.worldObj, this.xCoord, this.yCoord, this.zCoord)) {
if (this.worldObj.isAirBlock(this.xCoord, this.yCoord + 1, this.zCoord)) {
this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord, this.yCoord + 1, this.zCoord);
matureTime++;
if (matureTime >= caterpillar.getGenome().getLifespan() / (caterpillar.getGenome().getFertility() * 2) && caterpillar.canTakeFlight(worldObj, xCoord, yCoord, zCoord)) {
if (worldObj.isAirBlock(xCoord, yCoord + 1, zCoord)) {
attemptButterflySpawn(worldObj, caterpillar, xCoord, yCoord + 1, zCoord);
} else if (worldObj.isAirBlock(xCoord - 1, yCoord, zCoord)) {
attemptButterflySpawn(worldObj, caterpillar, xCoord - 1, yCoord, zCoord);
} else if (worldObj.isAirBlock(xCoord + 1, yCoord, zCoord)) {
attemptButterflySpawn(worldObj, caterpillar, xCoord + 1, yCoord, zCoord);
} else if (worldObj.isAirBlock(xCoord, yCoord, zCoord - 1)) {
attemptButterflySpawn(worldObj, caterpillar, xCoord, yCoord, zCoord - 1);
} else if (worldObj.isAirBlock(xCoord, yCoord, zCoord + 1)) {
attemptButterflySpawn(worldObj, caterpillar, xCoord, yCoord, zCoord + 1);
}
else if (this.worldObj.isAirBlock(this.xCoord - 1, this.yCoord, this.zCoord)) {
this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord - 1, this.yCoord, this.zCoord);
}
else if (this.worldObj.isAirBlock(this.xCoord + 1, this.yCoord, this.zCoord)) {
this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord + 1, this.yCoord, this.zCoord);
}
else if (this.worldObj.isAirBlock(this.xCoord, this.yCoord, this.zCoord - 1)) {
this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord, this.yCoord, this.zCoord - 1);
}
else if (this.worldObj.isAirBlock(this.xCoord, this.yCoord, this.zCoord + 1)) {
this.attemptButterflySpawn(this.worldObj, this.caterpillar, this.xCoord, this.yCoord, this.zCoord + 1);
}
this.setCaterpillar(null);
}*/
setCaterpillar(null);
}
}
public void setRender(RenderInfo render) {
renderInfo = render;
section = renderInfo.section;
if (!world.isRemote) {
IBlockState blockState = world.getBlockState(pos);
world.notifyBlockUpdate(pos, blockState, blockState, 0);
} else {
world.markBlockRangeForRenderUpdate(pos, pos);
}
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
public int getAge() {
@@ -662,66 +557,45 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
return renderInfo == null || renderInfo.flowered;
}
public int getPrimaryColour() {
return (renderInfo == null)
? EnumFlowerColor.Red.getFlowerColorAllele().getColor(false)
: renderInfo.primary.getColor(isWilted());
public int getPrimaryColor() {
return (renderInfo == null) ?
EnumFlowerColor.RED.getColor(false) :
renderInfo.primary.getColor(isWilted());
}
public int getSecondaryColour() {
return (renderInfo == null)
? EnumFlowerColor.Red.getFlowerColorAllele().getColor(false)
: renderInfo.secondary.getColor(isWilted());
public int getSecondaryColor() {
return (renderInfo == null) ?
EnumFlowerColor.RED.getColor(false) :
renderInfo.secondary.getColor(isWilted());
}
public int getStemColour() {
return (renderInfo == null)
? EnumFlowerColor.Green.getFlowerColorAllele().getColor(false)
: renderInfo.stem.getColor(isWilted());
return (renderInfo == null) ?
EnumFlowerColor.GREEN.getColor(false) :
renderInfo.stem.getColor(isWilted());
}
public IFlowerType getType() {
return (renderInfo == null)
? EnumFlowerType.Poppy
: renderInfo.type;
return (renderInfo == null) ?
EnumFlowerType.POPPY :
renderInfo.type;
}
public BiomeGenBase getBiome() {
return getWorld().getBiomeGenForCoords(xCoord, zCoord);
}
@Override
public Biome getBiome() {
return getWorld().getBiome(getPos());
}
@Nullable
public IErrorState getErrorState() {
return null;
}
public void setErrorState(IErrorState state) {
}
public boolean setErrorCondition(boolean condition, IErrorState errorState) {
return false;
}
public Set<IErrorState> getErrorStates() {
return new HashSet<>();
}
@Override
public BlockPos getCoordinates() {
return getPos();
public ChunkCoordinates getCoordinates() {
return new ChunkCoordinates(xCoord, yCoord, zCoord);
}
// TODO ??
@Override
public boolean isPollinated() {
return isBreeding();
}
@Override
public World getWorldObj() {
return world;
}
public static class RenderInfo {
public IFlowerColor primary;
public IFlowerColor secondary;
@@ -750,7 +624,13 @@ public class TileEntityFlower extends TileEntity implements IPollinatable, IButt
public boolean equals(Object obj) {
if (obj instanceof RenderInfo) {
RenderInfo o = (RenderInfo) obj;
return o.age == age && o.wilted == wilted && o.flowered == flowered && o.primary == primary && o.secondary == secondary && o.stem == stem && o.type == type;
return o.age == age
&& o.wilted == wilted
&& o.flowered == flowered
&& o.primary == primary
&& o.secondary == secondary
&& o.stem == stem
&& o.type == type;
}
return super.equals(obj);
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.flower;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,153 +1,157 @@
package binnie.botany.gardening;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBush;
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 net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBush;
import net.minecraft.block.SoundType;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.core.BotanyCore;
public class BlockPlant extends BlockBush implements IItemModelRegister {
public static final PropertyEnum<PlantType> PLANT_TYPE = PropertyEnum.create("plant_type", PlantType.class);
public class BlockPlant extends BlockBush {
public BlockPlant() {
setRegistryName("plant");
setBlockName("plant");
setCreativeTab(CreativeTabBotany.instance);
setTickRandomly(true);
setSoundType(SoundType.PLANT);
setStepSound(Block.soundTypeGrass);
}
public static boolean isWeed(IBlockAccess world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
if (!(blockState.getBlock() instanceof BlockPlant)) {
public static boolean isWeed(IBlockAccess world, int x, int y, int z) {
if (!(world.getBlock(x, y, z) instanceof BlockPlant)) {
return false;
}
PlantType type = blockState.getValue(PLANT_TYPE);
return type.isWeed();
Type type = Type.get(world.getBlockMetadata(x, y, z));
return type == Type.Weeds
|| type == Type.WeedsLong
|| type == Type.WeedsVeryLong;
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
int index = 0;
for (PlantType type : PlantType.values()) {
manager.registerItemModel(item, index, type.getName());
index++;
}
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, PLANT_TYPE);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(PLANT_TYPE).ordinal();
}
@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(PLANT_TYPE, PlantType.values()[meta]);
}
@Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
return new ArrayList<>();
}
@Override
public boolean canPlaceBlockAt(World worldIn, BlockPos pos) {
return super.canPlaceBlockAt(worldIn, pos) || BotanyCore.getGardening().isSoil(worldIn.getBlockState(pos).getBlock());
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}
@Override
public void getSubBlocks(CreativeTabs p_149666_2_, NonNullList<ItemStack> subBlocks) {
for (PlantType type : PlantType.values()) {
subBlocks.add(type.get());
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
for (Type t : Type.values()) {
t.icon = Botany.proxy.getIcon(register, t.name().toLowerCase());
}
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
PlantType type = state.getValue(PLANT_TYPE);
if (rand.nextInt(4) == 0) {
if (type == PlantType.WEEDS) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS_LONG), 2);
} else if (type == PlantType.WEEDS_LONG) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS_VERY_LONG), 2);
} else if (type == PlantType.DEAD_FLOWER) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.DECAYING_FLOWER), 2);
} else if (type == PlantType.DECAYING_FLOWER) {
world.setBlockToAir(pos);
protected boolean canPlaceBlockOn(Block block) {
return super.canPlaceBlockOn(block) || Gardening.isSoil(block);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return Type.values()[meta % Type.values().length].icon;
}
@Override
public int damageDropped(int damage) {
return damage;
}
@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
for (Type type : Type.values()) {
list.add(type.get());
}
}
@Override
public void updateTick(World world, int x, int y, int z, Random random) {
Type type = Type.get(world.getBlockMetadata(x, y, z));
if (random.nextInt(4) == 0) {
if (type == Type.Weeds) {
world.setBlockMetadataWithNotify(x, y, z, Type.WeedsLong.ordinal(), 2);
} else if (type == Type.WeedsLong) {
world.setBlockMetadataWithNotify(x, y, z, Type.WeedsVeryLong.ordinal(), 2);
} else if (type == Type.DeadFlower) {
world.setBlockMetadataWithNotify(x, y, z, Type.DecayingFlower.ordinal(), 2);
} else if (type == Type.DecayingFlower) {
world.setBlockToAir(x, y, z);
return;
}
}
if (rand.nextInt(6) == 0) {
if (type == PlantType.WEEDS) {
world.setBlockToAir(pos);
} else if (type == PlantType.WEEDS_LONG) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS), 2);
} else if (type == PlantType.WEEDS_VERY_LONG) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS_LONG), 2);
if (random.nextInt(6) == 0) {
if (type == Type.Weeds) {
world.setBlockToAir(x, y, z);
} else if (type == Type.WeedsLong) {
world.setBlockMetadataWithNotify(x, y, z, Type.Weeds.ordinal(), 2);
} else if (type == Type.WeedsVeryLong) {
world.setBlockMetadataWithNotify(x, y, z, Type.WeedsLong.ordinal(), 2);
}
}
Block below = world.getBlockState(pos.down()).getBlock();
if (!BotanyCore.getGardening().isSoil(below)) {
Block below = world.getBlock(x, y - 1, z);
if (!Gardening.isSoil(below)) {
return;
}
IBlockSoil soil = (IBlockSoil) below;
if (rand.nextInt(3) != 0) {
if (random.nextInt(3) != 0) {
return;
}
if (type.isWeed()) {
if (!soil.degrade(world, pos.down(), EnumSoilType.LOAM)) {
soil.degrade(world, pos.down(), EnumSoilType.SOIL);
if (type == Type.Weeds || type == Type.WeedsLong || type == Type.WeedsVeryLong) {
if (!soil.degrade(world, x, y - 1, z, EnumSoilType.LOAM)) {
soil.degrade(world, x, y - 1, z, EnumSoilType.SOIL);
}
} else if (type == PlantType.DECAYING_FLOWER && !soil.fertilise(world, pos.down(), EnumSoilType.LOAM)) {
soil.fertilise(world, pos.down(), EnumSoilType.FLOWERBED);
} else if (type == Type.DecayingFlower && !soil.fertilise(world, x, y - 1, z, EnumSoilType.LOAM)) {
soil.fertilise(world, x, y - 1, z, EnumSoilType.FLOWERBED);
}
}
@Override
public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) {
public boolean isReplaceable(IBlockAccess world, int x, int y, int z) {
return true;
}
@Override
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
public enum Type {
Weeds("weeds"),
WeedsLong("longWeeds"),
WeedsVeryLong("veryLongWeeds"),
DeadFlower("deadFlower"),
DecayingFlower("decayingFlower");
public IIcon icon;
protected String name;
Type(String name) {
this.name = name;
}
public static Type get(int id) {
return values()[id % values().length];
}
public ItemStack get() {
return new ItemStack(Botany.plant, 1, ordinal());
}
public String getName() {
return I18N.localise("botany.plant." + name);
}
}
}
@@ -1,141 +1,60 @@
package binnie.botany.gardening;
import javax.annotation.Nullable;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.core.BotanyCore;
import binnie.core.util.I18N;
import binnie.botany.api.gardening.IBlockSoil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
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;
public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
public static final PropertyEnum<EnumMoisture> MOISTURE = PropertyEnum.create("moisture", EnumMoisture.class);
public static final PropertyEnum<EnumAcidity> ACIDITY = PropertyEnum.create("acidity", EnumAcidity.class);
public static final AxisAlignedBB SOIL_BLOCK_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.9375D, 1.0D);
private final boolean weedKilled;
private final EnumSoilType type;
import java.util.List;
import java.util.Random;
public class BlockSoil extends Block implements IBlockSoil {
protected boolean weedKilled;
protected IIcon[] iconsTop;
protected IIcon[] iconsSide;
protected IIcon[] iconsNoWeed;
protected EnumSoilType type;
public BlockSoil(EnumSoilType type, String blockName, boolean weedKilled) {
super(Material.GROUND);
super(Material.ground);
this.type = type;
this.weedKilled = weedKilled;
setUnlocalizedName("botany.soil." + type.getName());
iconsTop = new IIcon[9];
iconsSide = new IIcon[9];
iconsNoWeed = new IIcon[9];
setCreativeTab(CreativeTabBotany.instance);
setRegistryName(blockName);
setBlockName(blockName);
setTickRandomly(true);
setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.9375f, 1.0f);
setLightOpacity(255);
setHardness(0.5f);
setSoundType(SoundType.GROUND);
setStepSound(Block.soundTypeGravel);
}
public static int getMeta(EnumAcidity acid, EnumMoisture moisture) {
return acid.ordinal() * 3 + moisture.ordinal();
}
public static String getPH(ItemStack stack, boolean withColor, boolean byNeutralNone) {
EnumAcidity ph = EnumAcidity.values()[stack.getItemDamage() / 3];
if (byNeutralNone) {
if (ph == EnumAcidity.NEUTRAL) {
return "";
}
}
return TextFormatting.GRAY + I18N.localise("botany.ph") + ": " + ph.getLocalisedName(withColor);
}
public static String getMoisture(ItemStack stack, boolean withColor, boolean byNormalNone) {
EnumMoisture moisure = EnumMoisture.values()[stack.getItemDamage() % 3];
if (byNormalNone) {
if (moisure == EnumMoisture.NORMAL) {
return "";
}
}
return TextFormatting.GRAY + I18N.localise("botany.moisture") + ": " + moisure.getLocalisedName(withColor);
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) {
switch (side) {
case UP:
return true;
case NORTH:
case SOUTH:
case WEST:
case EAST:
IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
Block block = iblockstate.getBlock();
return !iblockstate.isOpaqueCube() && block != Blocks.FARMLAND && block != Blocks.GRASS_PATH && block != this;
}
return super.shouldSideBeRendered(blockState, blockAccess, pos, side);
}
/**
* Used to determine ambient occlusion and culling when rebuilding chunks for render
*/
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public String getUnlocalizedName() {
return super.getUnlocalizedName().replaceFirst("tile.", "");
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
return SOIL_BLOCK_AABB;
}
@Nullable
@Override
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
return SOIL_BLOCK_AABB;
}
@Override
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
return SOIL_BLOCK_AABB;
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> list) {
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
for (int i = 0; i < 9; ++i) {
list.add(new ItemStack(this, 1, i));
}
@@ -143,172 +62,153 @@ public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (EnumAcidity acidity : EnumAcidity.values()) {
for (EnumMoisture moisture : EnumMoisture.values()) {
String modelName = "";
if (acidity != EnumAcidity.NEUTRAL) {
modelName += acidity.getName();
}
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
return getIcon(side, world.getBlockMetadata(x, y, z));
}
if (moisture != EnumMoisture.NORMAL) {
if (!modelName.isEmpty()) {
modelName += "_";
}
modelName += moisture.getName();
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
meta = ((meta >= 9) ? 8 : meta);
if (side == 1) {
return weedKilled ? iconsNoWeed[meta] : iconsTop[meta];
}
return (side == 0) ? Blocks.dirt.getIcon(side, 0) : iconsSide[meta];
}
if (modelName.isEmpty()) {
modelName = "normal";
}
String identifier;
if (weedKilled) {
identifier = type.getName() + "_no_weed/" + modelName;
} else {
identifier = type.getName() + "/" + modelName;
}
manager.registerItemModel(item, moisture.ordinal() + acidity.ordinal() * 3, identifier);
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
for (EnumMoisture moisture : EnumMoisture.values()) {
for (EnumAcidity pH : EnumAcidity.values()) {
int index = moisture.ordinal() + pH.ordinal() * 3;
String id = "soil/" + getType().getID() + "." + pH.getID() + "." + moisture.getID();
iconsTop[index] = Botany.proxy.getIcon(register, id + ".0");
iconsSide[index] = Botany.proxy.getIcon(register, id + ".1");
iconsNoWeed[index] = Botany.proxy.getIcon(register, id + ".2");
}
}
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, MOISTURE, ACIDITY);
}
@Override
public int getMetaFromState(IBlockState state) {
return getMeta(state.getValue(ACIDITY), state.getValue(MOISTURE));
}
@Override
public IBlockState getStateFromMeta(int meta) {
EnumMoisture moisture = EnumMoisture.values()[meta % 3];
EnumAcidity acidity = EnumAcidity.values()[meta / 3];
return getDefaultState().withProperty(MOISTURE, moisture).withProperty(ACIDITY, acidity);
}
public EnumSoilType getType() {
return type;
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
public int damageDropped(int damage) {
return damage;
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
EnumMoisture moisture = state.getValue(MOISTURE);
EnumMoisture desiredMoisture = BotanyCore.getGardening().getNaturalMoisture(world, pos);
public void updateTick(World world, int x, int y, int z, Random random) {
int meta = world.getBlockMetadata(x, y, z);
EnumMoisture moisture = EnumMoisture.values()[meta % 3];
EnumAcidity acidity = EnumAcidity.values()[meta / 3];
EnumMoisture desiredMoisture = Gardening.getNaturalMoisture(world, x, y, z);
if (desiredMoisture.ordinal() > moisture.ordinal()) {
moisture = ((moisture == EnumMoisture.DRY) ? EnumMoisture.NORMAL : EnumMoisture.DAMP);
} else if (desiredMoisture.ordinal() < moisture.ordinal()) {
}
if (desiredMoisture.ordinal() < moisture.ordinal()) {
moisture = ((moisture == EnumMoisture.DAMP) ? EnumMoisture.NORMAL : EnumMoisture.DRY);
}
IBlockState blockState = state.withProperty(MOISTURE, moisture);
if (state != blockState) {
world.setBlockState(pos, blockState, 2);
int meta2 = getMeta(acidity, moisture);
if (meta != meta2) {
world.setBlockMetadataWithNotify(x, y, z, meta2, 2);
}
if (!weedKilled) {
if (rand.nextInt(5 - getType(world, pos).ordinal()) != 0) {
return;
}
pos = pos.up();
if (!world.isAirBlock(pos)) {
return;
}
world.setBlockState(pos, Botany.gardening().plant.getStateFromMeta(PlantType.WEEDS.ordinal()), 2);
if (!weedKilled && random.nextInt(5 - getType(world, x, y, z).ordinal()) == 0 && world.getBlock(x, y + 1, z) == Blocks.air) {
world.setBlock(x, y + 1, z, Botany.plant, BlockPlant.Type.Weeds.ordinal(), 2);
}
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) {
super.neighborChanged(state, worldIn, pos, blockIn, fromPos);
if (worldIn.getBlockState(pos.up()).getMaterial().isSolid()) {
worldIn.setBlockState(pos, Blocks.DIRT.getDefaultState());
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
}
@Override
public EnumAcidity getPH(World world, BlockPos pos) {
return world.getBlockState(pos).getValue(ACIDITY);
public boolean isOpaqueCube() {
return false;
}
@Override
public EnumMoisture getMoisture(World world, BlockPos pos) {
return world.getBlockState(pos).getValue(MOISTURE);
public boolean renderAsNormalBlock() {
return false;
}
@Override
public EnumSoilType getType(World world, BlockPos pos) {
public EnumAcidity getPH(World world, int x, int y, int z) {
return EnumAcidity.values()[world.getBlockMetadata(x, y, z) / 3];
}
@Override
public EnumMoisture getMoisture(World world, int x, int y, int z) {
return EnumMoisture.values()[world.getBlockMetadata(x, y, z) % 3];
}
@Override
public EnumSoilType getType(World world, int x, int y, int z) {
return type;
}
@Override
public boolean fertilise(World world, BlockPos pos, EnumSoilType maxLevel) {
EnumSoilType type = getType(world, pos);
public boolean fertilise(World world, int x, int y, int z, EnumSoilType maxLevel) {
EnumSoilType type = getType(world, x, y, z);
if (type.ordinal() >= maxLevel.ordinal()) {
return false;
}
IBlockState old = world.getBlockState(pos);
return world.setBlockState(pos, BotanyCore.getGardening().getSoilBlock(maxLevel, weedKilled).getDefaultState().withProperty(ACIDITY, old.getValue(ACIDITY)).withProperty(MOISTURE, old.getValue(MOISTURE)), 2);
int meta = world.getBlockMetadata(x, y, z);
return world.setBlock(x, y, z, Gardening.getSoilBlock(maxLevel, weedKilled), meta, 2);
}
@Override
public boolean degrade(World world, BlockPos pos, EnumSoilType minLevel) {
EnumSoilType type = getType(world, pos);
public boolean degrade(World world, int x, int y, int z, EnumSoilType minLevel) {
EnumSoilType type = getType(world, x, y, z);
if (type.ordinal() <= minLevel.ordinal()) {
return false;
}
IBlockState old = world.getBlockState(pos);
return world.setBlockState(pos, BotanyCore.getGardening().getSoilBlock(minLevel, weedKilled).getDefaultState().withProperty(ACIDITY, old.getValue(ACIDITY)).withProperty(MOISTURE, old.getValue(MOISTURE)), 2);
int meta = world.getBlockMetadata(x, y, z);
return world.setBlock(x, y, z, Gardening.getSoilBlock(minLevel, weedKilled), meta, 2);
}
@Override
public boolean setPH(World world, BlockPos pos, EnumAcidity pH) {
IBlockState blockState = world.getBlockState(pos);
return world.setBlockState(pos, blockState.withProperty(ACIDITY, pH));
public boolean setPH(World world, int x, int y, int z, EnumAcidity pH) {
int meta = getMeta(pH, getMoisture(world, x, y, z));
return world.setBlockMetadataWithNotify(x, y, z, meta, 2);
}
@Override
public boolean setMoisture(World world, BlockPos pos, EnumMoisture moisture) {
IBlockState blockState = world.getBlockState(pos);
return world.setBlockState(pos, blockState.withProperty(MOISTURE, moisture));
public boolean setMoisture(World world, int x, int y, int z, EnumMoisture moisture) {
int meta = getMeta(getPH(world, x, y, z), moisture);
return world.setBlockMetadataWithNotify(x, y, z, meta, 2);
}
@Override
public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor) {
super.onNeighborChange(world, pos, neighbor);
if (world.isSideSolid(pos.up(), EnumFacing.DOWN, false)) {
((World) world).setBlockState(pos, Blocks.DIRT.getDefaultState(), 2);
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
super.onNeighborBlockChange(world, x, y, z, block);
if (world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN, false)) {
world.setBlock(x, y, z, Blocks.dirt, 0, 2);
}
}
@Override
public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
IBlockState plant = plantable.getPlant(world, pos.up());
if (plant.getBlock() == Botany.flower) {
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) {
Block plant = plantable.getPlant(world, x, y + 1, z);
if (plant == Botany.flower) {
return true;
}
if (plant.getBlock() == Botany.gardening().plant) {
return !weedKilled || !BlockPlant.isWeed(world, pos);
if (plant == Botany.plant) {
return !weedKilled || !BlockPlant.isWeed(world, x, y, z);
}
return world instanceof World && Blocks.DIRT.canSustainPlant(state, world, pos, direction, plantable);
return world instanceof World
&& Blocks.dirt.canSustainPlant(world, x, y, z, direction, plantable);
}
@Override
public boolean resistsWeeds(World world, BlockPos pos) {
return weedKilled;
}
public boolean isWeedKilled() {
public boolean resistsWeeds(World world, int x, int y, int z) {
return weedKilled;
}
}
@@ -1,197 +1,213 @@
package binnie.botany.gardening;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import forestry.api.climate.IClimateInfo;
import forestry.api.core.EnumTemperature;
import forestry.api.core.ForestryAPI;
import binnie.botany.Botany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.IFlower;
import binnie.botany.api.IGardeningManager;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.flower.TileEntityFlower;
import binnie.botany.items.BotanyItems;
import binnie.core.BinnieCore;
import com.mojang.authlib.GameProfile;
import forestry.api.core.EnumTemperature;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
public class Gardening implements IGardeningManager {
private final Map<ItemStack, Integer> fertiliserAcid = new LinkedHashMap<>();
private final Map<ItemStack, Integer> fertiliserAlkaline = new LinkedHashMap<>();
private final Map<ItemStack, Integer> fertiliserNutrient = new LinkedHashMap<>();
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
public Gardening() {
// ignored
}
public class Gardening {
public static Map<ItemStack, Integer> fertiliserAcid = new LinkedHashMap<>();
public static Map<ItemStack, Integer> fertiliserAlkaline = new LinkedHashMap<>();
public static Map<ItemStack, Integer> fertiliserNutrient = new LinkedHashMap<>();
@Override
public boolean isSoil(Block block) {
public static boolean isSoil(Block block) {
return block instanceof IBlockSoil;
}
@Override
public boolean isSoil(Item item) {
return item instanceof ItemBlock && isSoil(((ItemBlock) item).getBlock());
public static boolean isSoil(Item item) {
return item instanceof ItemBlock
&& isSoil(((ItemBlock) item).field_150939_a);
}
@Override
public boolean isSoil(ItemStack item) {
return isSoil(item.getItem());
}
@Override
public EnumMoisture getNaturalMoisture(World world, BlockPos pos) {
float bias = getBiomeMoisture(world, pos);
public static EnumMoisture getNaturalMoisture(World world, int x, int y, int z) {
float bias = getBiomeMoisture(world.getBiomeGenForCoords(x, z), y);
for (int dx = -1; dx < 2; ++dx) {
for (int dz = -1; dz < 2; ++dz) {
if (dx != 0 || dz != 0) {
if (world.getBlockState(pos.add(dx, 0, dz)) == Blocks.SAND) {
if (world.getBlock(x + dx, y, z + dz) == Blocks.sand) {
bias -= 1.5;
} else if (world.getBlockState(pos.add(dx, 0, dz)) == Blocks.WATER) {
} else if (world.getBlock(x + dx, y, z + dz) == Blocks.water) {
bias += 1.5;
}
}
}
}
if (world.isRaining() && world.canBlockSeeSky(pos.up()) && world.getPrecipitationHeight(pos).getY() <= pos.getY() + 1) {
if (world.isRaining() && world.canBlockSeeTheSky(x, y + 1, z) && world.getPrecipitationHeight(x, z) <= y + 1) {
bias += 1.5;
}
for (int dx = -1; dx < 2; ++dx) {
for (int dz = -1; dz < 2; ++dz) {
if (dx != 0 || dz != 0) {
if (world.getBlockState(pos.add(dx, 0, dz)).getBlock() == Blocks.GRAVEL && bias > 0.0f) {
if (world.getBlock(x + dx, y, z + dz) == Blocks.gravel && bias > 0.0f) {
bias *= 0.4f;
}
}
}
}
return (bias <= -1.0f) ? EnumMoisture.DRY : ((bias >= 1.0f) ? EnumMoisture.DAMP : EnumMoisture.NORMAL);
if (bias <= -1.0f) {
return EnumMoisture.DRY;
}
return (bias >= 1.0f) ? EnumMoisture.DAMP : EnumMoisture.NORMAL;
}
@Override
public EnumAcidity getNaturalPH(World world, BlockPos pos) {
float bias = getBiomePH(world, pos);
public static EnumAcidity getNaturalPH(World world, int x, int y, int z) {
float bias = getBiomePH(world.getBiomeGenForCoords(x, z), y);
if (bias <= -1.0f) {
return EnumAcidity.ACID;
}
return (bias >= 1.0f) ? EnumAcidity.ALKALINE : EnumAcidity.NEUTRAL;
}
@Override
public float getBiomeMoisture(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
double m = 3.2 * (humidity - 0.5) - 0.4 * (1.0 + temperature + 0.5 * temperature * temperature) + 1.1 - 1.6 * (temperature - 0.9) * (temperature - 0.9) - 0.002 * (pos.getY() - 64);
return (float) ((m == 0.0) ? m : ((m < 0.0) ? (-Math.sqrt(m * m)) : Math.sqrt(m * m)));
public static float getBiomeMoisture(BiomeGenBase biome, int H) {
double R = biome.rainfall;
double T = biome.temperature;
double m = 3.2 * (R - 0.5) - 0.4 * (1.0 + T + 0.5 * T * T) + 1.1 - 1.6 * (T - 0.9) * (T - 0.9) - 0.002 * (H - 64);
if (m == 0.0) {
return (float) m;
}
if (m < 0.0){
return (float) -Math.sqrt(m * m);
}
return (float) Math.sqrt(m * m);
}
@Override
public float getBiomePH(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
return (float) (-3.0 * (humidity - 0.5) + 0.5 * (temperature - 0.699999988079071) * (temperature - 0.699999988079071) + 0.02f * (pos.getY() - 64) - 0.15000000596046448);
public static float getBiomePH(BiomeGenBase biome, int H) {
double R = biome.rainfall;
double T = biome.temperature;
return (float) (-3.0 * (R - 0.5) + 0.5 * (T - 0.699999988079071) * (T - 0.699999988079071) + 0.02f * (H - 64) - 0.15000000596046448);
}
@Override
public void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity) {
public static void createSoil(World world, int x, int y, int z, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity) {
int meta = moisture.ordinal() + acidity.ordinal() * 3;
world.setBlockState(pos, getSoilBlock(soil).getStateFromMeta(meta), 2);
world.setBlock(x, y, z, getSoilBlock(soil), meta, 2);
}
@Override
public Collection<ItemStack> getAcidFertilisers() {
return Collections.unmodifiableSet(fertiliserAcid.keySet());
public static boolean plant(World world, int x, int y, int z, IFlower flower, GameProfile owner) {
boolean set = world.setBlock(x, y, z, Botany.flower, 0, 2);
if (!set) {
return false;
}
TileEntity tileFlower = world.getTileEntity(x, y, z);
TileEntity below = world.getTileEntity(x, y - 1, z);
if (tileFlower != null && tileFlower instanceof TileEntityFlower) {
if (below instanceof TileEntityFlower) {
((TileEntityFlower) tileFlower).setSection(((TileEntityFlower) below).getSection());
} else {
((TileEntityFlower) tileFlower).create(flower, owner);
}
}
tryGrowSection(world, x, y, z);
return true;
}
@Override
public Collection<ItemStack> getAlkalineFertilisers() {
return Collections.unmodifiableSet(fertiliserAlkaline.keySet());
public static void tryGrowSection(World world, int x, int y, int z) {
if (!BinnieCore.proxy.isSimulating(world)) {
return;
}
TileEntity flower = world.getTileEntity(x, y, z);
if (flower == null || !(flower instanceof TileEntityFlower)) {
return;
}
IFlower iflower = ((TileEntityFlower) flower).getFlower();
int section = ((TileEntityFlower) flower).getSection();
if (iflower == null || section >= iflower.getGenome().getPrimary().getType().getSections() - 1 || iflower.getAge() <= 0) {
return;
}
world.setBlock(x, y + 1, z, Botany.flower, 0, 2);
TileEntity tileFlower = world.getTileEntity(x, y + 1, z);
if (tileFlower != null && tileFlower instanceof TileEntityFlower) {
((TileEntityFlower) tileFlower).setSection(section + 1);
}
}
@Override
public Collection<ItemStack> getNutrientFertilisers() {
return Collections.unmodifiableSet(fertiliserNutrient.keySet());
public static void onGrowFromSeed(World world, int x, int y, int z) {
tryGrowSection(world, x, y, z);
}
@Override
public void registerAcidFertiliser(ItemStack stack, int strength) {
ModuleGardening.queuedAcidFertilisers.put(stack, strength);
fertiliserAcid.put(stack, strength);
public static Collection<ItemStack> getAcidFertilisers() {
return Gardening.fertiliserAcid.keySet();
}
@Override
public void registerAlkalineFertiliser(ItemStack stack, int strength) {
ModuleGardening.queuedAlkalineFertilisers.put(stack, strength);
fertiliserAlkaline.put(stack, strength);
public static Collection<ItemStack> getAlkalineFertilisers() {
return Gardening.fertiliserAlkaline.keySet();
}
@Override
public void registerNutrientFertiliser(ItemStack stack, int strength) {
ModuleGardening.queuedNutrientFertilisers.put(stack, strength);
fertiliserNutrient.put(stack, strength);
public static Collection<ItemStack> getNutrientFertilisers() {
return Gardening.fertiliserNutrient.keySet();
}
@Override
public boolean isAcidFertiliser(ItemStack itemstack) {
public static boolean isAcidFertiliser(ItemStack itemstack) {
for (ItemStack stack : getAcidFertilisers()) {
if (!stack.isEmpty() && stack.isItemEqual(itemstack)) {
if (stack != null && stack.isItemEqual(itemstack)) {
return true;
}
}
return false;
}
@Override
public boolean isAlkalineFertiliser(ItemStack itemstack) {
public static boolean isAlkalineFertiliser(ItemStack itemstack) {
for (ItemStack stack : getAlkalineFertilisers()) {
if (!stack.isEmpty() && stack.isItemEqual(itemstack)) {
if (stack != null && stack.isItemEqual(itemstack)) {
return true;
}
}
return false;
}
@Override
public boolean isNutrientFertiliser(ItemStack itemstack) {
public static boolean isNutrientFertiliser(ItemStack itemstack) {
for (ItemStack stack : getNutrientFertilisers()) {
if (!stack.isEmpty() && stack.isItemEqual(itemstack)) {
if (stack != null && stack.isItemEqual(itemstack)) {
return true;
}
}
return false;
}
@Override
public int getFertiliserStrength(ItemStack stack) {
for (Map.Entry<ItemStack, Integer> entry : fertiliserAcid.entrySet()) {
public static int getFertiliserStrength(ItemStack stack) {
if (stack == null) {
return 1;
}
for (Map.Entry<ItemStack, Integer> entry : Gardening.fertiliserAcid.entrySet()) {
if (entry.getKey().isItemEqual(stack)) {
return entry.getValue();
}
}
for (Map.Entry<ItemStack, Integer> entry : fertiliserAlkaline.entrySet()) {
for (Map.Entry<ItemStack, Integer> entry : Gardening.fertiliserAlkaline.entrySet()) {
if (entry.getKey().isItemEqual(stack)) {
return entry.getValue();
}
}
for (Map.Entry<ItemStack, Integer> entry : fertiliserNutrient.entrySet()) {
for (Map.Entry<ItemStack, Integer> entry : Gardening.fertiliserNutrient.entrySet()) {
if (entry.getKey().isItemEqual(stack)) {
return entry.getValue();
}
@@ -199,73 +215,59 @@ public class Gardening implements IGardeningManager {
return 1;
}
@Override
public boolean canTolerate(@Nullable IFlower flower, World world, BlockPos pos) {
if (flower == null) {
public static boolean canTolerate(IFlower flower, World world, int x, int y, int z) {
if (flower == null || flower.getGenome() == null) {
return false;
}
IBlockState soil = world.getBlockState(pos.down());
Block soilBlock = soil.getBlock();
int soilMeta = soilBlock.getMetaFromState(soil);
Biome biome = world.getBiome(pos);
return canTolerate(
flower,
EnumAcidity.values()[soilMeta / 3 % 3],
EnumMoisture.values()[soilMeta % 3],
EnumTemperature.getFromValue(biome.getTemperature())
);
int soilMeta = world.getBlockMetadata(x, y - 1, z);
BiomeGenBase biome = world.getBiomeGenForCoords(x, z);
return canTolerate(flower, EnumAcidity.values()[soilMeta / 3 % 3], EnumMoisture.values()[soilMeta % 3], EnumTemperature.getFromValue(biome.temperature));
}
@Override
public EnumSoilType getSoilType(World world, BlockPos pos) {
if (world.getBlockState(pos).getBlock() instanceof IBlockSoil) {
return ((IBlockSoil) world.getBlockState(pos).getBlock()).getType(world, pos);
public static EnumSoilType getSoilType(World world, int x, int y, int z) {
if (world.getBlock(x, y, z) instanceof IBlockSoil) {
return ((IBlockSoil) world.getBlock(x, y, z)).getType(world, x, y, z);
}
return EnumSoilType.SOIL;
}
@Override
public Block getSoilBlock(EnumSoilType type) {
public static Block getSoilBlock(EnumSoilType type) {
return getSoilBlock(type, false);
}
@Override
public Block getSoilBlock(EnumSoilType type, boolean weedKill) {
public static Block getSoilBlock(EnumSoilType type, boolean weedkill) {
switch (type) {
case FLOWERBED:
return weedKill ? Botany.gardening().flowerbedNoWeed : Botany.gardening().flowerbed;
return weedkill ? Botany.flowerbedNoWeed : Botany.flowerbed;
case LOAM:
return weedKill ? Botany.gardening().loamNoWeed : Botany.gardening().loam;
return weedkill ? Botany.loamNoWeed : Botany.loam;
}
return weedKill ? Botany.gardening().soilNoWeed : Botany.gardening().soil;
return weedkill ? Botany.soilNoWeed : Botany.soil;
}
@Override
public boolean canTolerate(IFlower flower, EnumAcidity acidity, EnumMoisture moisture, EnumTemperature temperature) {
return flower.getGenome().canTolerate(acidity)
&& flower.getGenome().canTolerate(moisture)
&& flower.getGenome().canTolerate(temperature);
public static boolean canTolerate(IFlower flower, EnumAcidity ePH, EnumMoisture eMoisture, EnumTemperature eTemp) {
return flower.getGenome().canTolerate(ePH)
&& flower.getGenome().canTolerate(eMoisture)
&& flower.getGenome().canTolerate(eTemp);
}
@Override
public boolean isWeedkiller(ItemStack heldItem) {
return heldItem.isItemEqual(BotanyItems.WEEDKILLER.get(1));
public static boolean isWeedkiller(ItemStack heldItem) {
return heldItem != null
&& heldItem.isItemEqual(BotanyItems.Weedkiller.get(1));
}
@Override
public boolean addWeedKiller(World world, BlockPos pos) {
if (!(world.getBlockState(pos).getBlock() instanceof IBlockSoil)) {
public static boolean addWeedKiller(World world, int x, int y, int z) {
if (!(world.getBlock(x, y, z) instanceof IBlockSoil)) {
return false;
}
EnumSoilType type = getSoilType(world, pos);
EnumSoilType type = getSoilType(world, x, y, z);
Block block = getSoilBlock(type, true);
IBlockState oldState = world.getBlockState(pos);
IBlockState newState = block.getStateFromMeta(oldState.getBlock().getMetaFromState(oldState));
boolean done = world.setBlockState(pos, newState, 2);
if (done && BlockPlant.isWeed(world, pos.up())) {
world.setBlockToAir(pos.up());
boolean done = world.setBlock(x, y, z, block, world.getBlockMetadata(x, y, z), 2);
if (done && BlockPlant.isWeed(world, x, y + 1, z)) {
world.setBlockToAir(x, y + 1, z);
}
return done;
}
@@ -1,57 +1,86 @@
package binnie.botany.gardening;
import javax.annotation.Nullable;
import java.util.List;
import net.minecraft.client.util.ITooltipFlag;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.core.util.I18N;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.EnumSoilType;
import binnie.core.util.I18N;
import java.util.List;
import java.util.Locale;
public class ItemSoil extends ItemBlock {
private final EnumSoilType type;
private final boolean noWeed;
protected EnumSoilType type;
public ItemSoil(BlockSoil block) {
private boolean noWeed;
public ItemSoil(Block block) {
super(block);
type = block.getType();
noWeed = block.isWeedKilled();
type = ((BlockSoil) field_150939_a).getType();
noWeed = ((BlockSoil) field_150939_a).weedKilled;
hasSubtypes = true;
}
@Override
public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
EnumMoisture moisture = EnumMoisture.values()[stack.getItemDamage() % 3];
EnumAcidity acidity = EnumAcidity.values()[stack.getItemDamage() / 3];
String info = "";
info += BlockSoil.getMoisture(stack, true, true);
if (info.length() > 0) {
info += ", ";
if (moisture == EnumMoisture.DRY) {
info += EnumChatFormatting.YELLOW
+ I18N.localise("botany.moisture.dry")
+ EnumChatFormatting.RESET;
}
if (moisture == EnumMoisture.DAMP) {
info += EnumChatFormatting.YELLOW
+ I18N.localise("botany.moisture.damp")
+ EnumChatFormatting.RESET;
}
if (acidity == EnumAcidity.ACID) {
if (info.length() > 0) {
info += ", ";
}
info += EnumChatFormatting.YELLOW
+ I18N.localise("botany.ph.acid")
+ EnumChatFormatting.RESET;
}
if (acidity == EnumAcidity.ALKALINE) {
if (info.length() > 0) {
info += ", ";
}
info += EnumChatFormatting.YELLOW
+ I18N.localise("botany.ph.alkaline")
+ EnumChatFormatting.RESET;
}
info += BlockSoil.getPH(stack, true, true);
if (info.length() > 0) {
tooltip.add(info);
}
if (noWeed) {
tooltip.add(TextFormatting.GREEN + I18N.localise("botany.soil.weedkiller"));
tooltip.add(I18N.localise("botany.soil.weedkiller"));
}
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
return getUnlocalizedNameInefficiently(stack).trim();
String soilName = type.name().toLowerCase(Locale.ENGLISH);
return I18N.localise("botany.soil." + soilName);
}
@Override
public int getMetadata(int damage) {
return damage;
public int getMetadata(int meta) {
return meta;
}
}
@@ -1,93 +1,84 @@
package binnie.botany.gardening;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.IBlockSoil;
import binnie.botany.api.IGardeningManager;
import binnie.botany.core.BotanyCore;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.core.BinnieCore;
import binnie.core.util.I18N;
import binnie.genetics.genetics.AlleleHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
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.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.world.World;
public class ItemSoilMeter extends Item implements IItemModelRegister {
public class ItemSoilMeter extends Item {
public ItemSoilMeter() {
setCreativeTab(CreativeTabBotany.instance);
setUnlocalizedName("botany.soil_meter");
setUnlocalizedName("soilMeter");
setMaxStackSize(1);
setRegistryName("soil_meter");
}
public static String getPH(ItemStack stack, boolean withColor, boolean byNeutralNone) {
EnumAcidity ph = EnumAcidity.values()[stack.getItemDamage() / 3];
if (byNeutralNone) {
if (ph == EnumAcidity.NEUTRAL) {
return "";
}
}
return TextFormatting.GRAY + I18N.localise("botany.ph") + ": " + ph.getLocalisedName(withColor);
}
public static String getMoisture(ItemStack stack, boolean withColor, boolean byNormalNone) {
EnumMoisture moisure = EnumMoisture.values()[stack.getItemDamage() % 3];
if (byNormalNone) {
if (moisure == EnumMoisture.NORMAL) {
return "";
}
}
return TextFormatting.GRAY + I18N.localise("botany.moisture") + ": " + moisure.getLocalisedName(withColor);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
manager.registerItemModel(item, 0);
}
@Override
public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
Block block = worldIn.getBlockState(pos).getBlock();
IGardeningManager gardening = BotanyCore.getGardening();
if (!gardening.isSoil(block)) {
pos = pos.down();
block = worldIn.getBlockState(pos).getBlock();
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float blockX, float blockY, float blockZ) {
Block block = world.getBlock(x, y, z);
if (!Gardening.isSoil(block)) {
y--;
block = world.getBlock(x, y, z);
}
if (!gardening.isSoil(block)) {
pos = pos.down();
block = worldIn.getBlockState(pos).getBlock();
}
if (gardening.isSoil(block) && !BinnieCore.getBinnieProxy().isSimulating(worldIn)) {
if (Gardening.isSoil(block) && !BinnieCore.proxy.isSimulating(world)) {
IBlockSoil soil = (IBlockSoil) block;
String info = I18N.localise("botany.soil.type") + ": "
+ soil.getType(worldIn, pos).getTranslated() + ", "
+ TextFormatting.WHITE + I18N.localise("botany.moisture") + ": "
+ soil.getMoisture(worldIn, pos).getLocalisedName(true) + ", "
+ TextFormatting.WHITE + I18N.localise("botany.ph") + ": "
+ soil.getPH(worldIn, pos).getLocalisedName(true);
EnumSoilType type = soil.getType(world, x, y, z);
EnumMoisture moisture = soil.getMoisture(world, x, y, z);
EnumAcidity pH = soil.getPH(world, x, y, z);
ITextComponent chat = new TextComponentString(info);
player.sendStatusMessage(chat, false);
EnumChatFormatting[] colors = new EnumChatFormatting[]{
EnumChatFormatting.DARK_GRAY,
EnumChatFormatting.GOLD,
EnumChatFormatting.LIGHT_PURPLE,
};
String info = I18N.localise("botany.soil.tooltip.type") + " ";
info += colors[type.ordinal()] + AlleleHelper.toDisplay(type) + EnumChatFormatting.RESET;
colors = new EnumChatFormatting[]{
EnumChatFormatting.YELLOW,
EnumChatFormatting.GRAY,
EnumChatFormatting.BLUE,
};
info += ", " + I18N.localise("botany.soil.tooltip.moisture") + " ";
info += colors[moisture.ordinal()] + AlleleHelper.toDisplay(moisture) + EnumChatFormatting.RESET;
colors = new EnumChatFormatting[]{
EnumChatFormatting.RED,
EnumChatFormatting.GREEN,
EnumChatFormatting.AQUA,
};
info += ", " + I18N.localise("botany.soil.tooltip.pH") + " ";
info += colors[pH.ordinal()] + AlleleHelper.toDisplay(pH) + EnumChatFormatting.RESET;
IChatComponent chat = new ChatComponentText(info);
player.addChatMessage(chat);
}
return EnumActionResult.SUCCESS;
return super.onItemUse(stack, player, world, x, y, z, side, blockX, blockY, blockZ);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
itemIcon = Botany.proxy.getIcon(register, "soilMeter");
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
return I18N.localise("botany.item.soilMeter.name");
}
}
@@ -1,98 +1,62 @@
package binnie.botany.gardening;
import com.google.common.collect.Multimap;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.Constants;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IGardeningManager;
import binnie.botany.core.BotanyCore;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class ItemTrowel extends Item implements IItemModelRegister {
protected final ToolMaterial theToolMaterial;
protected final String modelName;
public class ItemTrowel extends Item {
protected Item.ToolMaterial theToolMaterial;
String locName;
public ItemTrowel(ToolMaterial toolMaterial, String materialName) {
public ItemTrowel(Item.ToolMaterial toolMaterial, String material) {
theToolMaterial = toolMaterial;
setMaxStackSize(1);
maxStackSize = 1;
setMaxDamage(toolMaterial.getMaxUses());
setCreativeTab(CreativeTabBotany.instance);
modelName = "trowel_" + materialName;
setUnlocalizedName("botany." + modelName);
setRegistryName(modelName);
setUnlocalizedName("trowel" + material);
locName = "trowel" + material;
}
@Override
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
manager.registerItemModel(item, new ItemTrowelMeshDefinition());
ModelBakery.registerItemVariants(item, new ResourceLocation(Constants.BOTANY_MOD_ID + ":tools/" + modelName));
public void registerIcons(IIconRegister register) {
itemIcon = Botany.proxy.getIcon(register, "tools/" + locName);
}
@Override
public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
ItemStack stack = player.getHeldItem(hand);
if (!player.canPlayerEdit(pos, facing, stack)) {
return EnumActionResult.FAIL;
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float blockX, float blockY, float blockZ) {
if (!player.canPlayerEdit(x, y, z, side, stack)) {
return false;
}
Block block = world.getBlock(x, y, z);
if (side == 0 ||
(!world.getBlock(x, y + 1, z).isAir(world, x, y + 1, z) && world.getBlock(x, y + 1, z) != Botany.flower) ||
(block != Blocks.grass && block != Blocks.dirt)) {
return false;
}
Block block = worldIn.getBlockState(pos).getBlock();
if (facing == EnumFacing.DOWN || (!worldIn.isAirBlock(pos.up()) && worldIn.getBlockState(pos.up()).getBlock() != Botany.flower) || (block != Blocks.GRASS && block != Blocks.DIRT && block != Blocks.GRASS_PATH)) {
return EnumActionResult.PASS;
Block block2 = Botany.soil;
world.playSoundEffect(x + 0.5f, y + 0.5f, z + 0.5f, block2.stepSound.getStepResourcePath(), (block2.stepSound.getVolume() + 1.0f) / 2.0f, block2.stepSound.getPitch() * 0.8f);
if (world.isRemote) {
return true;
}
worldIn.playSound(player, pos, SoundEvents.ITEM_SHOVEL_FLATTEN, SoundCategory.BLOCKS, 1.0F, 1.0F);
if (worldIn.isRemote) {
return EnumActionResult.SUCCESS;
}
IGardeningManager gardening = BotanyCore.getGardening();
EnumMoisture moisture = gardening.getNaturalMoisture(worldIn, pos);
EnumAcidity acidity = gardening.getNaturalPH(worldIn, pos);
gardening.plantSoil(worldIn, pos, EnumSoilType.SOIL, moisture, acidity);
EnumMoisture moisture = Gardening.getNaturalMoisture(world, x, y, z);
EnumAcidity acidity = Gardening.getNaturalPH(world, x, y, z);
Gardening.createSoil(world, x, y, z, EnumSoilType.SOIL, moisture, acidity);
stack.damageItem(1, player);
return EnumActionResult.SUCCESS;
}
@Override
public Multimap<String, AttributeModifier> getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) {
Multimap<String, AttributeModifier> multimap = super.getItemAttributeModifiers(equipmentSlot);
if (equipmentSlot == EntityEquipmentSlot.MAINHAND) {
multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Tool modifier", theToolMaterial.getDamageVsEntity() + 0.5, 0));
multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", -1.5, 0));
}
return multimap;
return true;
}
@Override
@@ -100,16 +64,4 @@ public class ItemTrowel extends Item implements IItemModelRegister {
public boolean isFull3D() {
return true;
}
public String getToolMaterialName() {
return theToolMaterial.toString();
}
@SideOnly(Side.CLIENT)
private class ItemTrowelMeshDefinition implements ItemMeshDefinition {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
return new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":tools/" + modelName, "inventory");
}
}
}
@@ -1,10 +1,11 @@
package binnie.botany.gardening;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import binnie.core.util.I18N;
import net.minecraft.util.IIcon;
public class ItemWeed extends ItemBlock {
public ItemWeed(Block block) {
@@ -15,11 +16,17 @@ public class ItemWeed extends ItemBlock {
@Override
public String getItemStackDisplayName(ItemStack stack) {
return I18N.localise("botany.plant." + PlantType.values()[stack.getItemDamage()].getName());
return BlockPlant.Type.values()[stack.getItemDamage()].getName();
}
@Override
public int getMetadata(int damage) {
return damage;
public int getMetadata(int meta) {
return meta;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int damage) {
return field_150939_a.getIcon(2, damage);
}
}
@@ -1,43 +1,17 @@
package binnie.botany.gardening;
import java.util.HashMap;
import java.util.Map;
import binnie.Constants;
import binnie.botany.flower.EnumTubeInsulate;
import binnie.botany.flower.EnumTubeMaterial;
import binnie.core.util.RecipeUtil;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import net.minecraftforge.fml.common.registry.GameRegistry;
import binnie.Binnie;
import binnie.botany.Botany;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.EnumAcidity;
import binnie.botany.api.EnumMoisture;
import binnie.botany.api.EnumSoilType;
import binnie.botany.api.IGardeningManager;
import binnie.botany.ceramic.BlockCeramic;
import binnie.botany.ceramic.BlockCeramicBrick;
import binnie.botany.ceramic.BlockCeramicPatterned;
import binnie.botany.ceramic.BlockStainedGlass;
import binnie.botany.ceramic.BlockStained;
import binnie.botany.ceramic.CeramicTileRecipe;
import binnie.botany.ceramic.ItemCeramic;
import binnie.botany.ceramic.ItemStainedGlass;
import binnie.botany.ceramic.PigmentRecipe;
import binnie.botany.ceramic.TileCeramic;
import binnie.botany.ceramic.brick.BlockCeramicBrick;
import binnie.botany.ceramic.brick.ItemCeramicBrick;
import binnie.botany.ceramic.brick.TileCeramicBrick;
import binnie.botany.core.BotanyCore;
import binnie.botany.farm.CircuitGarden;
import binnie.botany.flower.ItemInsulatedTube;
import binnie.botany.genetics.EnumFlowerColor;
@@ -47,124 +21,100 @@ import binnie.botany.items.ItemPigment;
import binnie.core.BinnieCore;
import binnie.core.IInitializable;
import binnie.core.Mods;
import binnie.core.block.ItemMetadata;
import binnie.core.block.ItemMetadataRenderer;
import binnie.core.block.MultipassItemRenderer;
import binnie.core.block.TileEntityMetadata;
import binnie.core.item.ItemMisc;
import binnie.extratrees.carpentry.ItemDesign;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import java.util.HashMap;
import java.util.Map;
public class ModuleGardening implements IInitializable {
public static final HashMap<ItemStack, Integer> queuedAcidFertilisers = new HashMap<>();
public static final HashMap<ItemStack, Integer> queuedAlkalineFertilisers = new HashMap<>();
public static final HashMap<ItemStack, Integer> queuedNutrientFertilisers = new HashMap<>();
public BlockPlant plant;
public ItemTrowel trowelWood;
public ItemTrowel trowelStone;
public ItemTrowel trowelIron;
public ItemTrowel trowelDiamond;
public ItemTrowel trowelGold;
public BlockSoil soil;
public BlockSoil loam;
public BlockSoil flowerbed;
public BlockSoil soilNoWeed;
public BlockSoil loamNoWeed;
public BlockSoil flowerbedNoWeed;
public ItemInsulatedTube insulatedTube;
public ItemSoilMeter soilMeter;
public ItemMisc misc;
public ItemPigment pigment;
public ItemClay clay;
public BlockCeramic ceramic;
public BlockCeramicPatterned ceramicTile;
public BlockStainedGlass stained;
public BlockCeramicBrick ceramicBrick;
public static HashMap<ItemStack, Integer> queuedAcidFertilisers = new HashMap<>();
public static HashMap<ItemStack, Integer> queuedAlkalineFertilisers = new HashMap<>();
public static HashMap<ItemStack, Integer> queuedNutrientFertilisers = new HashMap<>();
@Override
public void preInit() {
plant = new BlockPlant();
soil = new BlockSoil(EnumSoilType.SOIL, "soil", false);
loam = new BlockSoil(EnumSoilType.LOAM, "loam", false);
flowerbed = new BlockSoil(EnumSoilType.FLOWERBED, "flowerbed", false);
soilNoWeed = new BlockSoil(EnumSoilType.SOIL, "soil_no_weed", true);
loamNoWeed = new BlockSoil(EnumSoilType.LOAM, "loam_no_weed", true);
flowerbedNoWeed = new BlockSoil(EnumSoilType.FLOWERBED, "flowerbed_no_weed", true);
soilMeter = new ItemSoilMeter();
insulatedTube = new ItemInsulatedTube();
trowelWood = new ItemTrowel(Item.ToolMaterial.WOOD, "wood");
trowelStone = new ItemTrowel(Item.ToolMaterial.STONE, "stone");
trowelIron = new ItemTrowel(Item.ToolMaterial.IRON, "iron");
trowelDiamond = new ItemTrowel(Item.ToolMaterial.DIAMOND, "diamond");
trowelGold = new ItemTrowel(Item.ToolMaterial.GOLD, "gold");
misc = new ItemMisc(CreativeTabBotany.instance, BotanyItems.values());
pigment = new ItemPigment();
clay = new ItemClay();
ceramic = new BlockCeramic();
stained = new BlockStainedGlass();
ceramicTile = new BlockCeramicPatterned();
ceramicBrick = new BlockCeramicBrick();
Botany.plant = new BlockPlant();
GameRegistry.registerBlock(Botany.plant, ItemWeed.class, "plant");
Botany.proxy.registerBlock(plant, new ItemWeed(plant));
Botany.proxy.registerBlock(soil, new ItemSoil(soil));
Botany.proxy.registerBlock(loam, new ItemSoil(loam));
Botany.proxy.registerBlock(flowerbed, new ItemSoil(flowerbed));
Botany.proxy.registerBlock(soilNoWeed, new ItemSoil(soilNoWeed));
Botany.proxy.registerBlock(loamNoWeed, new ItemSoil(loamNoWeed));
Botany.proxy.registerBlock(flowerbedNoWeed, new ItemSoil(flowerbedNoWeed));
Botany.proxy.registerItem(soilMeter);
Botany.proxy.registerItem(insulatedTube);
Botany.proxy.registerItem(trowelWood);
Botany.proxy.registerItem(trowelStone);
Botany.proxy.registerItem(trowelIron);
Botany.proxy.registerItem(trowelDiamond);
Botany.proxy.registerItem(trowelGold);
Botany.proxy.registerItem(misc);
Botany.proxy.registerItem(pigment);
Botany.proxy.registerItem(clay);
Botany.proxy.registerBlock(ceramic, new ItemCeramic(ceramic));
Botany.proxy.registerBlock(stained, new ItemStainedGlass(stained));
Botany.proxy.registerBlock(ceramicTile, new ItemDesign(ceramicTile));
Botany.proxy.registerBlock(ceramicBrick, new ItemCeramicBrick(ceramicBrick));
Botany.soil = new BlockSoil(EnumSoilType.SOIL, "soil", false);
GameRegistry.registerBlock(Botany.soil, ItemSoil.class, "soil");
BinnieCore.getBinnieProxy().registerTileEntity(TileCeramic.class, "botany.tile.ceramic");
//BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ceramic), new ItemMetadataRenderer());
//BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(stained), new ItemMetadataRenderer());
BinnieCore.getBinnieProxy().registerTileEntity(TileCeramicBrick.class, "botany.tile.ceramicBrick");
//BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ceramicTile), new MultipassItemRenderer());
//BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(ceramicBrick), new MultipassItemRenderer());
Botany.loam = new BlockSoil(EnumSoilType.LOAM, "loam", false);
GameRegistry.registerBlock(Botany.loam, ItemSoil.class, "loam");
OreDictionary.registerOre("pigment", pigment);
OreDictionary.registerOre("toolTrowel", trowelWood);
OreDictionary.registerOre("toolTrowel", trowelStone);
OreDictionary.registerOre("toolTrowel", trowelIron);
OreDictionary.registerOre("toolTrowel", trowelGold);
OreDictionary.registerOre("toolTrowel", trowelDiamond);
Botany.flowerbed = new BlockSoil(EnumSoilType.FLOWERBED, "flowerbed", false);
GameRegistry.registerBlock(Botany.flowerbed, ItemSoil.class, "flowerbed");
Botany.soilNoWeed = new BlockSoil(EnumSoilType.SOIL, "soilNoWeed", true);
GameRegistry.registerBlock(Botany.soilNoWeed, ItemSoil.class, "soilNoWeed");
Botany.loamNoWeed = new BlockSoil(EnumSoilType.LOAM, "loamNoWeed", true);
GameRegistry.registerBlock(Botany.loamNoWeed, ItemSoil.class, "loamNoWeed");
Botany.flowerbedNoWeed = new BlockSoil(EnumSoilType.FLOWERBED, "flowerbedNoWeed", true);
GameRegistry.registerBlock(Botany.flowerbedNoWeed, ItemSoil.class, "flowerbedNoWeed");
Botany.soilMeter = new ItemSoilMeter();
Botany.insulatedTube = new ItemInsulatedTube();
Botany.trowelWood = new ItemTrowel(Item.ToolMaterial.WOOD, "Wood");
Botany.trowelStone = new ItemTrowel(Item.ToolMaterial.STONE, "Stone");
Botany.trowelIron = new ItemTrowel(Item.ToolMaterial.IRON, "Iron");
Botany.trowelDiamond = new ItemTrowel(Item.ToolMaterial.EMERALD, "Diamond");
Botany.trowelGold = new ItemTrowel(Item.ToolMaterial.GOLD, "Gold");
Botany.misc = Binnie.Item.registerMiscItems(BotanyItems.values(), CreativeTabBotany.instance);
Botany.pigment = new ItemPigment();
Botany.clay = new ItemClay();
Botany.ceramic = new BlockCeramic();
GameRegistry.registerBlock(Botany.ceramic, ItemMetadata.class, "ceramic");
BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.ceramic), new ItemMetadataRenderer());
Botany.stained = new BlockStained();
GameRegistry.registerBlock(Botany.stained, ItemMetadata.class, "stained");
BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.stained), new ItemMetadataRenderer());
Botany.ceramicTile = new BlockCeramicPatterned();
GameRegistry.registerBlock(Botany.ceramicTile, ItemMetadata.class, "ceramicPattern");
BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.ceramicTile), new MultipassItemRenderer());
Botany.ceramicBrick = new BlockCeramicBrick();
GameRegistry.registerBlock(Botany.ceramicBrick, ItemMetadata.class, "ceramicBrick");
BinnieCore.proxy.registerCustomItemRenderer(Item.getItemFromBlock(Botany.ceramicBrick), new MultipassItemRenderer());
}
@Override
public void init() {
OreDictionary.registerOre("pigment", Botany.pigment);
RecipeSorter.register("botany:ceramictile", CeramicTileRecipe.class, RecipeSorter.Category.SHAPED, "");
RecipeSorter.register("botany:pigment", PigmentRecipe.class, RecipeSorter.Category.SHAPED, "");
ItemStack yellow = new ItemStack(Blocks.YELLOW_FLOWER, 1);
ItemStack red = new ItemStack(Blocks.RED_FLOWER, 1);
ItemStack blue = new ItemStack(Blocks.RED_FLOWER, 1, 7);
ItemStack yellow = new ItemStack(Blocks.yellow_flower, 1);
ItemStack red = new ItemStack(Blocks.red_flower, 1);
ItemStack blue = new ItemStack(Blocks.red_flower, 1, 7);
for (boolean manual : new boolean[]{true, false}) {
for (boolean fertilised : new boolean[]{true, false}) {
for (EnumMoisture moist : EnumMoisture.values()) {
ItemStack icon;
if (moist == EnumMoisture.DRY) {
icon = yellow;
} else if (moist == EnumMoisture.NORMAL) {
icon = red;
} else {
icon = blue;
}
ItemStack icon = (moist == EnumMoisture.DRY) ? yellow : ((moist == EnumMoisture.NORMAL) ? red : blue);
int insulate = 2 - moist.ordinal();
if (fertilised) {
insulate += 3;
}
new CircuitGarden(moist, null, manual, fertilised, new ItemStack(insulatedTube, 1, 128 * insulate), icon);
new CircuitGarden(moist, EnumAcidity.ACID, manual, fertilised, new ItemStack(insulatedTube, 1, 1 + 128 * insulate), icon);
new CircuitGarden(moist, EnumAcidity.NEUTRAL, manual, fertilised, new ItemStack(insulatedTube, 1, 2 + 128 * insulate), icon);
new CircuitGarden(moist, EnumAcidity.ALKALINE, manual, fertilised, new ItemStack(insulatedTube, 1, 3 + 128 * insulate), icon);
new CircuitGarden(moist, null, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 128 * insulate), icon);
new CircuitGarden(moist, EnumAcidity.ACID, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 1 + 128 * insulate), icon);
new CircuitGarden(moist, EnumAcidity.NEUTRAL, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 2 + 128 * insulate), icon);
new CircuitGarden(moist, EnumAcidity.ALKALINE, manual, fertilised, new ItemStack(Botany.insulatedTube, 1, 3 + 128 * insulate), icon);
}
}
}
@@ -172,163 +122,171 @@ public class ModuleGardening implements IInitializable {
@Override
public void postInit() {
RecipeUtil recipeUtil = new RecipeUtil(Constants.BOTANY_MOD_ID);
IGardeningManager gardening = BotanyCore.getGardening();
ForgeRegistries.RECIPES.register(new CeramicTileRecipe());
for (EnumTubeMaterial mat: EnumTubeMaterial.VALUES) {
for (EnumTubeInsulate insulate : EnumTubeInsulate.VALUES) {
ItemStack tubes = new ItemStack(insulatedTube, 2, mat.ordinal() + 128 * insulate.ordinal());
GameRegistry.addRecipe(new CeramicTileRecipe());
for (int mat = 0; mat < 4; ++mat) {
for (int insulate = 0; insulate < 6; ++insulate) {
ItemStack tubes = new ItemStack(Botany.insulatedTube, 2, mat + 128 * insulate);
ItemStack insulateStack = ItemInsulatedTube.getInsulateStack(tubes);
ItemStack forestryTube = new ItemStack(Mods.Forestry.item("thermionic_tubes"), 1, mat.ordinal());
String recipeName = "thermionic_tubes_" + insulate.getUid() + "_" + mat.getUid();
recipeUtil.addShapelessRecipe(recipeName, tubes, forestryTube, forestryTube, insulateStack);
ItemStack forestryTube = new ItemStack(Mods.forestry.item("thermionicTubes"), 1, mat);
GameRegistry.addShapelessRecipe(tubes, forestryTube, forestryTube, insulateStack);
}
}
recipeUtil.addRecipe("trowel_wood",
trowelWood,
GameRegistry.addShapelessRecipe(new ItemStack(Blocks.dirt), new ItemStack(Botany.soil, 1, OreDictionary.WILDCARD_VALUE));
GameRegistry.addShapelessRecipe(new ItemStack(Blocks.dirt), new ItemStack(Botany.loam, 1, OreDictionary.WILDCARD_VALUE));
GameRegistry.addShapelessRecipe(new ItemStack(Blocks.dirt), new ItemStack(Botany.flowerbed, 1, OreDictionary.WILDCARD_VALUE));
GameRegistry.addShapelessRecipe(new ItemStack(Blocks.dirt), new ItemStack(Botany.soilNoWeed, 1, OreDictionary.WILDCARD_VALUE));
GameRegistry.addShapelessRecipe(new ItemStack(Blocks.dirt), new ItemStack(Botany.loamNoWeed, 1, OreDictionary.WILDCARD_VALUE));
GameRegistry.addShapelessRecipe(new ItemStack(Blocks.dirt), new ItemStack(Botany.flowerbedNoWeed, 1, OreDictionary.WILDCARD_VALUE));
GameRegistry.addRecipe(new ShapedOreRecipe(
Botany.trowelWood,
new Object[]{
"d ", " x ", " s",
'd', Blocks.DIRT,
'd', Blocks.dirt,
's', "stickWood",
'x', "plankWood"
);
recipeUtil.addRecipe("trowel_stone",
trowelStone,
}
));
GameRegistry.addRecipe(new ShapedOreRecipe(
Botany.trowelStone,
new Object[]{
"d ", " x ", " s",
'd', Blocks.DIRT,
'd', Blocks.dirt,
's', "stickWood",
'x', "cobblestone"
);
recipeUtil.addRecipe("trowel_iron",
trowelIron,
}
));
GameRegistry.addRecipe(new ShapedOreRecipe(
Botany.trowelIron,
new Object[]{
"d ", " x ", " s",
'd', Blocks.DIRT,
'd', Blocks.dirt,
's', "stickWood",
'x', "ingotIron"
);
recipeUtil.addRecipe("trowel_gold",
trowelGold,
}
));
GameRegistry.addRecipe(new ShapedOreRecipe(
Botany.trowelGold,
new Object[]{
"d ", " x ", " s",
'd', Blocks.DIRT,
'd', Blocks.dirt,
's', "stickWood",
'x', "ingotGold"
);
recipeUtil.addRecipe("trowel_diamond",
trowelDiamond,
}
));
GameRegistry.addRecipe(new ShapedOreRecipe(
Botany.trowelDiamond,
new Object[]{
"d ", " x ", " s",
'd', Blocks.DIRT,
'd', Blocks.dirt,
's', "stickWood",
'x', "gemDiamond"
);
recipeUtil.addRecipe("soil_meter",
soilMeter,
}
));
GameRegistry.addRecipe(new ShapedOreRecipe(
Botany.soilMeter,
new Object[]{
" gg", " rg", "i ",
'g', "ingotGold",
'r', "dustRedstone",
'i', "ingotIron"
}
));
GameRegistry.addShapelessRecipe(
BotanyItems.Weedkiller.get(4),
new ItemStack(Items.spider_eye),
new ItemStack(Items.wheat_seeds),
new ItemStack(Items.wheat_seeds),
new ItemStack(Items.wheat_seeds)
);
recipeUtil.addShapelessRecipe("weed_killer",
BotanyItems.WEEDKILLER.get(4),
new ItemStack(Items.SPIDER_EYE),
new ItemStack(Items.WHEAT_SEEDS),
new ItemStack(Items.WHEAT_SEEDS),
new ItemStack(Items.WHEAT_SEEDS)
);
GameRegistry.addShapelessRecipe(BotanyItems.AshPowder.get(4), Mods.forestry.stack("ash"));
GameRegistry.addShapelessRecipe(BotanyItems.MulchPowder.get(4), Mods.forestry.stack("mulch"));
GameRegistry.addShapelessRecipe(BotanyItems.CompostPowder.get(4), Mods.forestry.stack("fertilizerBio"));
GameRegistry.addShapelessRecipe(BotanyItems.FertiliserPowder.get(4), Mods.forestry.stack("fertilizerCompound"));
GameRegistry.addShapelessRecipe(BotanyItems.PulpPowder.get(4), Mods.forestry.stack("woodPulp"));
GameRegistry.addRecipe(new ShapelessOreRecipe(
BotanyItems.SulphurPowder.get(4),
new Object[]{"dustSulphur"}
));
recipeUtil.addShapelessRecipe("powder_ash",
BotanyItems.POWDER_ASH.get(4),
Mods.Forestry.stack("ash")
);
GameRegistry.addRecipe(new ShapelessOreRecipe(
new ItemStack(Botany.pigment, 2, EnumFlowerColor.BLACK.ordinal()),
new Object[]{
"pigment",
"pigment",
"dyeBlack"
}
));
recipeUtil.addShapelessRecipe("powder_mulch",
BotanyItems.POWDER_MULCH.get(4),
Mods.Forestry.stack("mulch")
);
ModuleGardening.queuedAcidFertilisers.put(BotanyItems.SulphurPowder.get(1), 1);
ModuleGardening.queuedAcidFertilisers.put(BotanyItems.MulchPowder.get(1), 1);
ModuleGardening.queuedAcidFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "mulch")), 2);
recipeUtil.addShapelessRecipe("powder_compost",
BotanyItems.POWDER_COMPOST.get(4),
Mods.Forestry.stack("fertilizer_bio")
);
recipeUtil.addShapelessRecipe("powder_fertilizer",
BotanyItems.POWDER_FERTILISER.get(4),
Mods.Forestry.stack("fertilizer_compound")
);
recipeUtil.addShapelessRecipe("powder_pulp",
BotanyItems.POWDER_PULP.get(4),
Mods.Forestry.stack("wood_pulp")
);
recipeUtil.addShapelessRecipe("powder_sulphur",
BotanyItems.POWDER_SULPHUR.get(4),
"dustSulphur"
);
recipeUtil.addShapelessRecipe("pigment_black",
new ItemStack(pigment, 2, EnumFlowerColor.Black.ordinal()),
"pigment", "pigment", "dyeBlack"
);
gardening.registerAcidFertiliser(BotanyItems.POWDER_SULPHUR.get(1), 1);
gardening.registerAcidFertiliser(BotanyItems.POWDER_MULCH.get(1), 1);
gardening.registerAcidFertiliser(Mods.Forestry.stack("mulch"), 2);
for (ItemStack stack : OreDictionary.getOres("dustSulfur")) {
gardening.registerAcidFertiliser(stack, 2);
ModuleGardening.queuedAcidFertilisers.put(stack, 2);
}
gardening.registerAlkalineFertiliser(BotanyItems.POWDER_ASH.get(1), 1);
gardening.registerAlkalineFertiliser(BotanyItems.POWDER_PULP.get(1), 1);
gardening.registerAlkalineFertiliser(Mods.Forestry.stack("ash"), 2);
gardening.registerAlkalineFertiliser(Mods.Forestry.stack("wood_pulp"), 2);
gardening.registerNutrientFertiliser(BotanyItems.POWDER_COMPOST.get(1), 1);
gardening.registerNutrientFertiliser(BotanyItems.POWDER_FERTILISER.get(1), 1);
gardening.registerNutrientFertiliser(Mods.Forestry.stack("fertilizer_bio"), 2);
gardening.registerNutrientFertiliser(Mods.Forestry.stack("fertilizer_compound"), 2);
ModuleGardening.queuedAlkalineFertilisers.put(BotanyItems.AshPowder.get(1), 1);
ModuleGardening.queuedAlkalineFertilisers.put(BotanyItems.PulpPowder.get(1), 1);
ModuleGardening.queuedAlkalineFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "ash")), 2);
ModuleGardening.queuedAlkalineFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "woodPulp")), 2);
ModuleGardening.queuedNutrientFertilisers.put(BotanyItems.CompostPowder.get(1), 1);
ModuleGardening.queuedNutrientFertilisers.put(BotanyItems.FertiliserPowder.get(1), 1);
ModuleGardening.queuedNutrientFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "fertilizerBio")), 2);
ModuleGardening.queuedNutrientFertilisers.put(new ItemStack(GameRegistry.findItem("Forestry", "fertilizerCompound")), 2);
for (Map.Entry<ItemStack, Integer> entry : ModuleGardening.queuedAcidFertilisers.entrySet()) {
addAcidFertiliserRecipe(recipeUtil, entry.getKey(), entry.getValue());
addAcidFertiliser(entry.getKey(), entry.getValue());
}
for (Map.Entry<ItemStack, Integer> entry : ModuleGardening.queuedAlkalineFertilisers.entrySet()) {
addAlkalineFertiliserRecipe(recipeUtil, entry.getKey(), entry.getValue());
addAlkalineFertiliser(entry.getKey(), entry.getValue());
}
for (Map.Entry<ItemStack, Integer> entry : ModuleGardening.queuedNutrientFertilisers.entrySet()) {
addNutrientFertiliserRecipe(recipeUtil, entry.getKey(), entry.getValue());
addNutrientFertiliser(entry.getKey(), entry.getValue());
}
recipeUtil.addRecipe("mortar", BotanyItems.MORTAR.get(6), " c ", "cgc", " c ", 'c', Items.CLAY_BALL, 'g', Blocks.GRAVEL);
for (EnumFlowerColor c : EnumFlowerColor.values()) {
ItemStack clay = new ItemStack(this.clay, 1, c.ordinal());
ItemStack pigment = new ItemStack(this.pigment, 1, c.ordinal());
recipeUtil.addShapelessRecipe("clay_" + c.getIdent(), clay, Items.CLAY_BALL, Items.CLAY_BALL, Items.CLAY_BALL, pigment);
GameRegistry.addSmelting(clay, TileEntityMetadata.getItemStack(ceramic, c.ordinal()), 0.0f);
ItemStack glass = TileEntityMetadata.getItemStack(stained, c.ordinal());
glass.setCount(4);
GameRegistry.addRecipe(
BotanyItems.Mortar.get(6),
" c ", "cgc", " c ",
'c', Items.clay_ball,
'g', Blocks.gravel
);
recipeUtil.addRecipe("mortar_" + c.getIdent(),
glass,
" g ", "gpg", " g ",
'g', Blocks.GLASS,
'p', pigment
for (EnumFlowerColor c : EnumFlowerColor.values()) {
ItemStack clay = new ItemStack(Botany.clay, 1, c.ordinal());
ItemStack pigment = new ItemStack(Botany.pigment, 1, c.ordinal());
GameRegistry.addShapelessRecipe(clay, Items.clay_ball, Items.clay_ball, Items.clay_ball, pigment);
GameRegistry.addSmelting(clay, TileEntityMetadata.getItemStack(Botany.ceramic, c.ordinal()), 0.0f);
ItemStack glass = TileEntityMetadata.getItemStack(Botany.stained, c.ordinal());
glass.stackSize = 4;
GameRegistry.addShapedRecipe(
glass,
" g ", "gpg", " g ",
'g', Blocks.glass,
'p', pigment
);
}
ForgeRegistries.RECIPES.register(new PigmentRecipe());
GameRegistry.addRecipe(new PigmentRecipe());
}
private ItemStack getStack(int type, int pH, int moisture) {
if (type >= 0 && type <= 2 && pH >= 0 && pH <= 2 && moisture >= 0 && moisture <= 2) {
return new ItemStack(BotanyCore.getGardening().getSoilBlock(EnumSoilType.values()[type]), 1, BlockSoil.getMeta(EnumAcidity.values()[pH], EnumMoisture.values()[moisture]));
if (type < 0 || type > 2 || pH < 0 || pH > 2 || moisture < 0 || moisture > 2) {
return null;
}
return ItemStack.EMPTY;
return new ItemStack(Gardening.getSoilBlock(EnumSoilType.values()[type]), 1, BlockSoil.getMeta(EnumAcidity.values()[pH], EnumMoisture.values()[moisture]));
}
private void addAcidFertiliserRecipe(RecipeUtil recipeUtil, ItemStack stack, int strengthMax) {
private void addAcidFertiliser(ItemStack stack, int strengthMax) {
if (stack == null) {
return;
}
Gardening.fertiliserAcid.put(stack, strengthMax);
for (int moisture = 0; moisture < 3; ++moisture) {
for (int pH = 0; pH < 3; ++pH) {
for (int type = 0; type < 3; ++type) {
@@ -336,15 +294,14 @@ public class ModuleGardening implements IInitializable {
for (int strength = 1; strength < strengthMax; ++strength) {
ItemStack start = getStack(type, pH, moisture);
ItemStack end = getStack(type, pH - strength, moisture);
if (!start.isEmpty() && !end.isEmpty()) {
end.setCount(numOfBlocks);
if (end != null) {
end.stackSize = numOfBlocks;
Object[] stacks = new Object[numOfBlocks + 1];
for (int i = 0; i < numOfBlocks; ++i) {
stacks[i] = start;
}
stacks[numOfBlocks] = stack.copy();
String recipeName = "acid_fertiliser_moisture" + moisture + "_ph" + pH + "_type" + type + "_strength" + strength;
recipeUtil.addShapelessRecipe(recipeName, end, stacks);
GameRegistry.addShapelessRecipe(end, stacks);
}
numOfBlocks /= 2;
}
@@ -353,7 +310,12 @@ public class ModuleGardening implements IInitializable {
}
}
private void addAlkalineFertiliserRecipe(RecipeUtil recipeUtil, ItemStack stack, int strengthMax) {
private void addAlkalineFertiliser(ItemStack stack, int strengthMax) {
if (stack == null) {
return;
}
Gardening.fertiliserAlkaline.put(stack, strengthMax);
for (int moisture = 0; moisture < 3; ++moisture) {
for (int pH = 0; pH < 3; ++pH) {
for (int type = 0; type < 3; ++type) {
@@ -361,15 +323,14 @@ public class ModuleGardening implements IInitializable {
for (int strength = 1; strength < strengthMax; ++strength) {
ItemStack start = getStack(type, pH, moisture);
ItemStack end = getStack(type, pH + strength, moisture);
if (!end.isEmpty()) {
end.setCount(numOfBlocks);
if (end != null) {
end.stackSize = numOfBlocks;
Object[] stacks = new Object[numOfBlocks + 1];
for (int i = 0; i < numOfBlocks; ++i) {
stacks[i] = start;
}
stacks[numOfBlocks] = stack.copy();
String recipeName = "alkaline_fertiliser_moisture" + moisture + "_ph" + pH + "_type" + type + "_strength" + strength;
recipeUtil.addShapelessRecipe(recipeName, end, stacks);
GameRegistry.addShapelessRecipe(end, stacks);
}
numOfBlocks /= 2;
}
@@ -378,7 +339,12 @@ public class ModuleGardening implements IInitializable {
}
}
private void addNutrientFertiliserRecipe(RecipeUtil recipeUtil, ItemStack stack, int strengthMax) {
private void addNutrientFertiliser(ItemStack stack, int strengthMax) {
if (stack == null) {
return;
}
Gardening.fertiliserNutrient.put(stack, strengthMax);
for (int moisture = 0; moisture < 3; ++moisture) {
for (int pH = 0; pH < 3; ++pH) {
for (int type = 0; type < 3; ++type) {
@@ -386,15 +352,14 @@ public class ModuleGardening implements IInitializable {
for (int strength = 1; strength < strengthMax; ++strength) {
ItemStack start = getStack(type, pH, moisture);
ItemStack end = getStack(type + strength, pH, moisture);
if (!end.isEmpty()) {
end.setCount(numOfBlocks);
if (end != null) {
end.stackSize = numOfBlocks;
Object[] stacks = new Object[numOfBlocks + 1];
for (int i = 0; i < numOfBlocks; ++i) {
stacks[i] = start;
}
stacks[numOfBlocks] = stack.copy();
String recipeName = "nutrient_fertiliser_moisture" + moisture + "_ph" + pH + "_type" + type + "_strength" + strength;
recipeUtil.addShapelessRecipe(recipeName, end, stacks);
GameRegistry.addShapelessRecipe(end, stacks);
}
numOfBlocks /= 2;
}
Loaded 100 of 2844 files, more files were not shown because too many files have changed in this diff. Show more