Compare commits

..
263 Commits
Author SHA1 Message Date
DreamMasterXXL de53168447 bump version 2020-05-27 15:00:41 +02:00
Martin Robertz 18073d2f76 Merge pull request #4 from Kiwi233/master-MC1.7.10
Update zh_CN.lang
2020-05-27 14:07:12 +02:00
[Kiwi233] 87581cd03b Update zh_CN.lang 2020-05-25 21:52:34 +08:00
Dream-Master 6facfe5fa8 bump version 2020-03-19 18:46:56 +01:00
Martin Robertz e32e427f93 Merge pull request #3 from GTNewHorizons/wrong-blockname-in-waila
Fix Extra Trees fences and gates showing up wrong in WAILA
2020-03-18 17:05:57 +01:00
Wilhelm Schuster fe35f8e237 Fix fences and gates showing up wrong in WAILA 2020-03-18 16:26:49 +01:00
Wilhelm Schuster 4836d89ed9 Update gitignore 2020-03-18 15:20:31 +01:00
Martin Robertz d486b30dff Merge pull request #2 from GTNewHorizons/connectTo-patch
fix(fences): connection to logic
2020-03-08 19:38:15 +01:00
Léa Gris 1b9212786f bump(version): 2.0.27 2020-03-08 19:24:41 +01:00
Léa Gris d8bf61a44e fix(fences): connection to logic
Fix ExtraTrees fences to connect correctly to other wooden fences and fence gates.

Address issue: [Extra Trees fences are buggy #5694](https://github.com/GTNewHorizons/NewHorizons/issues/5694)

Works even better with https://github.com/mitchej123/Hodgepodge/pull/2 witch patches
vanilla fences to connect with other mod fences.
2020-03-08 19:18:14 +01:00
Léa Gris bce6c26704 fix(doors): up max stack size from 1 to 8
Align Max stack size to 8 same as MC Door Item.
2020-02-13 04:47:28 +01:00
Léa Gris a9eb396b7e fix(lang): osange orange and sync lang keys 2020-02-11 00:56:09 +01:00
Léa Gris 92211ddbf4 fix(fruitdrop): remove 5x multiplier
See issue https://github.com/GTNewHorizons/NewHorizons/issues/5131
2020-02-10 23:46:01 +01:00
Léa Gris 3c6ab0e052 fix(tile): remove useless meta nbt 2020-02-10 23:34:06 +01:00
Léa Gris 16793c2385 fix(gradle): wrapper update 4.4.1 2020-02-10 22:45:05 +01:00
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
5561 changed files with 72659 additions and 93047 deletions

No files matched your search

+16 -8
View File
@@ -1,13 +1,21 @@
.gradle
# IntelliJ
.idea/
/build
/run
/eclipse
/out
/bin
/classes
.idea
*.iml
*.ipr
*.iws
# minecraft
/config
/logs
/saves
/options.txt
/usernamecache.json
# folders
.gradle/
classes/
build/
run/
out/
/changelog.html
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.12 ](http://jenkins.ic2.player.to/job/Binnie's%201.12/)
[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
-9
View File
@@ -1,9 +0,0 @@
archivesBaseName = 'all-' + mcversion
dependencies {
runtimeOnly project(":botany")
runtimeOnly project(":core")
runtimeOnly project(":extrabees")
runtimeOnly project(":extratrees")
runtimeOnly project(":genetics")
}
-5
View File
@@ -1,5 +0,0 @@
archivesBaseName = 'botany-api-' + mcversion
dependencies {
compile project(":core-api")
}
@@ -1,22 +0,0 @@
package binnie.botany.api;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlowerFactory;
import binnie.botany.api.genetics.IFlowerRoot;
public class BotanyAPI {
/**
* 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,44 +0,0 @@
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
public enum EnumAcidity implements IStringSerializable {
ACID(TextFormatting.RED),
NEUTRAL(null),
ALKALINE(TextFormatting.AQUA);
@Nullable
private final
TextFormatting color;
EnumAcidity(@Nullable TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
return name().toLowerCase();
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18n.translateToLocal("botany.ph." + getName());
if (withColor && color != null) {
localisedName = color + localisedName;
}
return localisedName;
}
public static EnumAcidity getFromValue(float rawAcidity) {
if(rawAcidity <= -1.0f){
return EnumAcidity.ACID;
}else if(rawAcidity >= 1.0f){
return EnumAcidity.ALKALINE;
}else{
return EnumAcidity.NEUTRAL;
}
}
}
@@ -1,5 +0,0 @@
package binnie.botany.api.gardening;
public enum EnumFertiliserType {
ACID, ALKALINE, NUTRIENT
}
@@ -1,44 +0,0 @@
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
public enum EnumMoisture implements IStringSerializable {
DRY(TextFormatting.YELLOW),
NORMAL(null),
DAMP(TextFormatting.DARK_BLUE);
@Nullable
private final TextFormatting color;
EnumMoisture(@Nullable TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
return name().toLowerCase();
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18n.translateToLocal("botany.moisture." + getName());
if (withColor && color != null) {
localisedName = color + localisedName + TextFormatting.GRAY;
}
return localisedName;
}
public static EnumMoisture getFromValue(float rawMoisture) {
if(rawMoisture <= -1.0f){
return EnumMoisture.DRY;
}else if(rawMoisture >= 1.0f){
return EnumMoisture.DAMP;
}else{
return EnumMoisture.NORMAL;
}
}
}
@@ -1,29 +0,0 @@
package binnie.botany.api.gardening;
import java.util.Locale;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.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.translateToLocal("botany.soil." + getName());
}
}
@@ -1,22 +0,0 @@
package binnie.botany.api.gardening;
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,67 +0,0 @@
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
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;
import binnie.botany.api.genetics.IFlower;
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);
IBlockState getSoil(EnumSoilType soil, boolean weedKill, EnumMoisture moisture, EnumAcidity acidity);
void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity);
Collection<ItemStack> getFertilisers(EnumFertiliserType type);
Map<EnumFertiliserType, Map<ItemStack, Integer>> getFertilisers();
void registerFertiliser(EnumFertiliserType type, ItemStack stack, int strength);
boolean isFertiliser(EnumFertiliserType type, 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);
boolean onFertiliseSoil(ItemStack heldItem, IBlockSoil soil, World world, BlockPos pos, EntityPlayer player);
}
@@ -1,7 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api.gardening;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,130 +0,0 @@
package binnie.botany.api.genetics;
import java.awt.Color;
import binnie.botany.api.BotanyAPI;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.translation.I18n;
public enum EnumFlowerColor implements IStringSerializable {
Aquamarine("aquamarine", new Color(8388564)),
Black("black", new Color(2631720)),
Blue("blue", new Color(255)),
Brown("brown", new Color(10824234)),
CadetBlue("cadetBlue", new Color(6266528)),
Chocolate("chocolate", new Color(13789470)),
Coral("coral", new Color(16744272)),
Crimson("crimson", new Color(14423100)),
Cyan("cyan", new Color(65535)),
DarkGoldenrod("darkGoldenrod", new Color(12092939)),
DarkGray("darkGray", new Color(11119017)),
DarkGreen("darkGreen", new Color(25600)),
DarkKhaki("darkKhaki", new Color(12433259)),
DarkOliveGreen("darkOliveGreen", new Color(5597999)),
DarkOrange("darkOrange", new Color(16747520)),
DarkSalmon("darkSalmon", new Color(15308410)),
DarkSeaGreen("darkSeaGreen", new Color(9419915)),
DarkSlateBlue("darkSlateBlue", new Color(4734347)),
DarkSlateGray("darkSlateGray", new Color(3100495)),
DarkTurquoise("darkTurquoise", new Color(52945)),
DarkViolet("darkViolet", new Color(9699539)),
DeepPink("deepPink", new Color(16716947)),
DeepSkyBlue("deepSkyBlue", new Color(49151)),
DimGray("dimGray", new Color(6908265)),
DodgerBlue("dodgerBlue", new Color(2003199)),
Gold("gold", new Color(16766720)),
Goldenrod("goldenrod", new Color(14329120)),
Gray("gray", new Color(8421504)),
Green("green", new Color(32768)),
HotPink("hotPink", new Color(16738740)),
IndianRed("indianRed", new Color(13458524)),
Indigo("indigo", new Color(4915330)),
Khaki("khaki", new Color(15787660)),
Lavender("lavender", new Color(15132410)),
LemonChiffon("lemonChiffon", new Color(16775885)),
LightGray("lightGray", new Color(13882323)),
LightSeaGreen("lightSeaGreen", new Color(2142890)),
LightSteelBlue("lightSteelBlue", new Color(11584734)),
Lime("lime", new Color(65280)),
LimeGreen("limeGreen", new Color(3329330)),
Magenta("magenta", new Color(16711935)),
Maroon("maroon", new Color(8388608)),
MediumAquamarine("mediumAquamarine", new Color(6737322)),
MediumOrchid("mediumOrchid", new Color(12211667)),
MediumPurple("mediumPurple", new Color(9662683)),
MediumSeaGreen("mediumSeaGreen", new Color(3978097)),
MediumVioletRed("mediumVioletRed", new Color(13047173)),
MistyRose("mistyRose", new Color(16770273)),
Navy("navy", new Color(128)),
Olive("olive", new Color(8421376)),
OliveDrab("oliveDrab", new Color(7048739)),
Orange("orange", new Color(16753920)),
PaleGreen("paleGreen", new Color(10025880)),
PaleTurquoise("paleTurquoise", new Color(11529966)),
PaleVioletRed("paleVioletRed", new Color(14381203)),
Peru("peru", new Color(13468991)),
Pink("pink", new Color(16761035)),
Plum("plum", new Color(14524637)),
Purple("purple", new Color(8388736)),
Red("red", new Color(16711680)),
RosyBrown("rosyBrown", new Color(12357519)),
RoyalBlue("royalBlue", new Color(4286945)),
Salmon("salmon", new Color(16416882)),
SandyBrown("sandyBrown", new Color(16032864)),
SeaGreen("seaGreen", new Color(3050327)),
Sienna("sienna", new Color(10506797)),
SkyBlue("skyBlue", new Color(8900331)),
SlateBlue("slateBlue", new Color(6970061)),
SlateGray("slateGray", new Color(7372944)),
SpringGreen("springGreen", new Color(65407)),
SteelBlue("steelBlue", new Color(4620980)),
Tan("tan", new Color(13808780)),
Teal("teal", new Color(32896)),
Thistle("thistle", new Color(14204888)),
Turquoise("turquoise", new Color(4251856)),
Violet("violet", new Color(15631086)),
Wheat("wheat", new Color(16113331)),
White("white", new Color(16777215)),
Yellow("yellow", new Color(16776960)),
YellowGreen("yellowGreen", new Color(10145074));
public static final EnumFlowerColor[] VALUES = values();
private final String ident;
private final IAlleleFlowerColor allele;
EnumFlowerColor(String ident, Color color) {
this.ident = ident;
int r = color.getRed();
int g = color.getGreen();
int b = color.getBlue();
r = (int) (0.45 * (r + 214));
g = (int) (0.45 * (g + 174));
b = (int) (0.45 * (b + 131));
Color colorWilted = new Color(r, g, b);
String uid = "botany.color" + name();
allele = BotanyAPI.flowerFactory.createFlowerColorAllele(uid, ordinal(), color, colorWilted, name().toLowerCase(), uid, true);
}
public String getIdent() {
return ident;
}
public static EnumFlowerColor get(int i) {
return values()[Math.max(0, i) % values().length];
}
public String getDisplayName() {
return I18n.translateToLocal("botany.color." + getName());
}
@Override
public String getName() {
return name().toLowerCase();
}
public IAlleleFlowerColor getFlowerColorAllele() {
return allele;
}
}
@@ -1,29 +0,0 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.ISpeciesType;
public enum EnumFlowerStage implements ISpeciesType {
FLOWER("Flower"),
SEED("Seed"),
POLLEN("Pollen");
public static final EnumFlowerStage[] VALUES = values();
private final 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,6 +0,0 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
public interface IAlleleFlowerColor extends IFlowerColor, IAlleleInteger {
}
@@ -1,10 +0,0 @@
package binnie.botany.api.genetics;
import net.minecraft.world.World;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
public interface IAlleleFlowerEffect extends IAlleleEffect {
IEffectData doEffect(IFlowerGenome genome, IEffectData effect, World world, int x, int y, int z);
}
@@ -1,31 +0,0 @@
package binnie.botany.api.genetics;
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;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IAlleleFlowerSpecies extends IAlleleSpecies, IAlleleProperty<IAlleleFlowerSpecies> {
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,15 +0,0 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleSpeciesBuilder;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IAlleleFlowerSpeciesBuilder extends IAlleleSpeciesBuilder {
@Override
IAlleleFlowerSpecies build();
IAlleleFlowerSpeciesBuilder setPH(EnumAcidity acidity);
IAlleleFlowerSpeciesBuilder setMoisture(EnumMoisture moisture);
}
@@ -1,13 +0,0 @@
package binnie.botany.api.genetics;
public interface IColorMix {
IFlowerColor getColorFirst();
IFlowerColor getColorSecond();
boolean isMutation(IFlowerColor colorFirst, IFlowerColor colorSecond);
int getChance();
IFlowerColor getResult();
}
@@ -1,76 +0,0 @@
package binnie.botany.api.genetics;
import javax.annotation.Nullable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.genetics.IIndividual;
public interface IFlower extends IIndividual {
/**
* @return Flowers's genetic information.
*/
@Override
IFlowerGenome getGenome();
/**
* @return Genetic information of the flower's mate, null if unmated.
*/
@Nullable
IFlowerGenome getMate();
/**
* Mate with the given flower.
*
* @param flower the {@link IFlower} to mate this one with.
*/
void mate(IFlower flower);
/**
* Remove the mate of the flower.
*/
void removeMate();
IFlower getOffspring(World world, BlockPos pos);
/**
* @return The current age of the flower.
*/
int getAge();
/**
* Set the current age of the flower.
*/
void setAge(int age);
/**
* Age the flower.
*/
void age();
/**
* @return Maximum age of the flower.
*/
int getMaxAge();
/**
* @return true if the flower is wilted.
*/
boolean isWilted();
/**
* Set that the flower is wilted.
*/
void setWilted(boolean wilted);
/**
* @return true if the flower has flowered.
*/
boolean hasFlowered();
/**
* Set that the flower has flowered.
*/
void setFlowered(boolean flowered);
}
@@ -1,13 +0,0 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
public interface IFlowerColor {
int getColor(boolean dis);
IAlleleInteger getAllele();
int getID();
String getColorName();
}
@@ -1,15 +0,0 @@
package binnie.botany.api.genetics;
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,14 +0,0 @@
package binnie.botany.api.genetics;
import java.awt.Color;
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);
IAlleleFlowerColor createFlowerColorAllele(String uid, int id, Color color, Color colorWilted, String name, String unlocalizedName, boolean isDominant);
}
@@ -1,44 +0,0 @@
package binnie.botany.api.genetics;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IGenome;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IFlowerGenome extends IGenome {
@Override
IAlleleFlowerSpecies getPrimary();
@Override
IAlleleFlowerSpecies getSecondary();
IFlowerColor getPrimaryColor();
IFlowerColor getSecondaryColor();
IFlowerColor getStemColor();
int getFertility();
int getLifespan();
IFlowerType getType();
EnumTolerance getToleranceTemperature();
EnumTolerance getToleranceMoisture();
EnumTolerance getTolerancePH();
float getAgeChance();
float getSappiness();
boolean canTolerate(EnumAcidity acidity);
boolean canTolerate(EnumMoisture moisture);
boolean canTolerate(EnumTemperature temperature);
}
@@ -1,13 +0,0 @@
package binnie.botany.api.genetics;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
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);
}
@@ -1,6 +0,0 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IMutationBuilder;
public interface IFlowerMutationBuilder extends IMutationBuilder {
}
@@ -1,59 +0,0 @@
package binnie.botany.api.genetics;
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;
public interface IFlowerRoot extends ISpeciesRoot {
@Override
@Nullable
IFlower getMember(ItemStack memberStack);
@Override
IFlower templateAsIndividual(IAllele[] template);
@Override
IFlower templateAsIndividual(IAllele[] templateFirst, IAllele[] templateSecond);
@Override
IFlowerGenome templateAsGenome(IAllele[] template);
@Override
IFlowerGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive);
@Override
IBotanistTracker getBreedingTracker(World world, @Nullable GameProfile profile);
@Override
List<? extends IFlowerMutation> getMutations(boolean shuffle);
@Override
@Nullable
EnumFlowerStage getType(ItemStack itemStack);
IFlower getFlower(IFlowerGenome genome);
void addConversion(ItemStack memberStack, IAllele[] template);
@Nullable
IFlower getConversion(ItemStack memberStack);
Collection<IColorMix> getColorMixes(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);
}
@@ -1,23 +0,0 @@
package binnie.botany.api.genetics;
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;
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();
int getSections();
int ordinal();
}
@@ -1,7 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api.genetics;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,7 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
-9
View File
@@ -1,9 +0,0 @@
archivesBaseName = 'botany-' + mcversion
dependencies {
compile project(":core")
compile project(":botany-api")
compile project(":extratrees-api")
compile project(":genetics-api")
compile project(":design")
}
@@ -1,120 +0,0 @@
package binnie.botany;
import binnie.genetics.api.analyst.IAnalystManager;
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 binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.genetics.TolerancePh;
import binnie.botany.genetics.gui.analyst.FlowerAnalystPagePlugin;
import binnie.botany.gui.BotanyGUI;
import binnie.botany.network.PacketID;
import binnie.botany.proxy.Proxy;
import binnie.core.BinnieCore;
import binnie.core.Constants;
import binnie.core.gui.IBinnieGUID;
import binnie.core.modules.BlankModuleContainer;
import binnie.core.network.BinniePacketHandler;
import binnie.core.network.IPacketID;
import binnie.core.proxy.IProxyCore;
import binnie.genetics.api.GeneticsApi;
import binnie.genetics.api.acclimatiser.IAcclimatiserManager;
@Mod(
modid = Constants.BOTANY_MOD_ID,
name = "Binnie's Botany",
acceptedMinecraftVersions = Constants.ACCEPTED_MINECRAFT_VERSIONS,
dependencies = "required-after:" + Constants.CORE_MOD_ID + ";"
+ "after:" + Constants.GENETICS_MOD_ID + ";"
+ "after:" + Constants.DESIGN_MOD_ID + ";"
)
public class Botany extends BlankModuleContainer {
public static final float AGE_CHANCE = 0.2f;
@SuppressWarnings("NullableProblems")
@Mod.Instance(Constants.BOTANY_MOD_ID)
public static Botany instance;
@SuppressWarnings("NullableProblems")
@SidedProxy(clientSide = "binnie.botany.proxy.ProxyClient", serverSide = "binnie.botany.proxy.ProxyServer")
public static Proxy proxy;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent evt) {
super.preInit(evt);
IAnalystManager analystManager = GeneticsApi.analystManager;
if (analystManager != null) {
analystManager.registerAnalystPagePlugin(new FlowerAnalystPagePlugin());
}
IAcclimatiserManager acclimatiserManager = GeneticsApi.acclimatiserManager;
if(acclimatiserManager != null) {
acclimatiserManager.addTolerance(EnumFlowerChromosome.HUMIDITY_TOLERANCE, acclimatiserManager.getHumidityToleranceType());
acclimatiserManager.addTolerance(EnumFlowerChromosome.TEMPERATURE_TOLERANCE, acclimatiserManager.getTemperatureToleranceType());
acclimatiserManager.addTolerance(EnumFlowerChromosome.PH_TOLERANCE, new TolerancePh());
}
}
@Mod.EventHandler
public void init(FMLInitializationEvent evt) {
super.init(evt);
}
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent evt) {
super.postInit(evt);
}
@Override
protected void registerModules() {
}
@Override
public IBinnieGUID[] getGUIDs() {
return BotanyGUI.values();
}
@Override
public Class<?>[] getConfigs() {
return new Class[0];
}
@Override
public IPacketID[] getPacketIDs() {
return PacketID.values();
}
@Override
public IProxyCore getProxy() {
return Botany.proxy;
}
@Override
public String getChannel() {
return "BOT";
}
@Override
public String getModId() {
return Constants.BOTANY_MOD_ID;
}
@Override
protected Class<? extends BinniePacketHandler> getPacketHandler() {
return PacketHandler.class;
}
@Override
public boolean isAvailable() {
return BinnieCore.isBotanyActive();
}
public static class PacketHandler extends BinniePacketHandler {
public PacketHandler() {
super(Botany.instance);
}
}
}
@@ -1,36 +0,0 @@
package binnie.botany;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
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 final CreativeTabs INSTANCE = new CreativeTabBotany();
public CreativeTabBotany() {
super("Botany");
}
@Override
@SideOnly(Side.CLIENT)
public String getTranslatedTabLabel() {
return getTabLabel();
}
@Override
@SideOnly(Side.CLIENT)
public String getTabLabel() {
return I18N.localise("botany.tab.botany");
}
@Override
@SideOnly(Side.CLIENT)
public ItemStack getTabIconItem() {
return new ItemStack(Blocks.RED_FLOWER, 1, 5);
}
}
@@ -1,274 +0,0 @@
package binnie.botany;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
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.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.blocks.BlockPlant;
import binnie.botany.blocks.BlockSoil;
import binnie.botany.modules.ModuleGardening;
import binnie.core.util.OreDictionaryUtil;
public class GardeningManager implements IGardeningManager {
private final Map<EnumFertiliserType, Map<ItemStack, Integer>> fertilisers = new LinkedHashMap<>();
public GardeningManager() {
for(EnumFertiliserType type : EnumFertiliserType.values()){
fertilisers.put(type, new LinkedHashMap<>());
}
}
@Override
public boolean isSoil(Block block) {
return block instanceof IBlockSoil;
}
@Override
public boolean isSoil(Item item) {
return item instanceof ItemBlock && isSoil(((ItemBlock) item).getBlock());
}
@Override
public boolean isSoil(ItemStack item) {
return isSoil(item.getItem());
}
@Override
public EnumMoisture getNaturalMoisture(World world, BlockPos pos) {
float moisture = getBiomeMoisture(world, pos);
for (int offsetX = -1; offsetX < 2; ++offsetX) {
for (int offsetY = -1; offsetY < 2; ++offsetY) {
if (offsetX != 0 || offsetY != 0) {
Block block = world.getBlockState(pos.add(offsetX, 0, offsetY)).getBlock();
if (block == Blocks.SAND) {
moisture -= 1.5;
} else if (block == Blocks.WATER) {
moisture += 1.5;
}
}
}
}
if (world.isRainingAt(pos.up())) {
moisture += 1.5;
}
for (int offsetX = -1; offsetX < 2; ++offsetX) {
for (int offsetY = -1; offsetY < 2; ++offsetY) {
if (offsetX != 0 || offsetY != 0) {
Block block = world.getBlockState(pos.add(offsetX, 0, offsetY)).getBlock();
if (block == Blocks.GRAVEL && moisture > 0.0f) {
moisture *= 0.4f;
}
}
}
}
return EnumMoisture.getFromValue(moisture);
}
@Override
public EnumAcidity getNaturalPH(World world, BlockPos pos) {
float acidity = getBiomePH(world, pos);
return EnumAcidity.getFromValue(acidity);
}
@Override
public float getBiomeMoisture(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
double moisture = 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) ((moisture == 0.0) ? moisture : ((moisture < 0.0) ? (-Math.sqrt(moisture * moisture)) : Math.sqrt(moisture * moisture)));
}
@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);
}
@Override
public IBlockState getSoil(EnumSoilType soil, boolean weedKill, EnumMoisture moisture, EnumAcidity acidity) {
IBlockState blockState = getSoilBlock(soil, weedKill).getDefaultState();
return blockState.withProperty(BlockSoil.MOISTURE, moisture).withProperty(BlockSoil.ACIDITY, acidity);
}
@Override
public void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity) {
IBlockState blockState = getSoil(soil, false, moisture, acidity);
world.setBlockState(pos, blockState, 2);
}
public Map<EnumFertiliserType, Map<ItemStack, Integer>> getFertilisers() {
return fertilisers;
}
@Override
public Collection<ItemStack> getFertilisers(EnumFertiliserType type) {
Set<ItemStack> items = fertilisers.get(type).keySet();
return Collections.unmodifiableSet(items);
}
@Override
public boolean isFertiliser(EnumFertiliserType type, ItemStack stack) {
Collection<ItemStack> fertilisers = getFertilisers(type);
for (ItemStack fertiliser : fertilisers) {
if (!fertiliser.isEmpty() && fertiliser.isItemEqual(stack)) {
return true;
}
}
return false;
}
@Override
public void registerFertiliser(EnumFertiliserType type, ItemStack stack, int strength) {
fertilisers.get(type).put(stack, strength);
}
@Override
public int getFertiliserStrength(ItemStack stack) {
for(EnumFertiliserType type : EnumFertiliserType.values()) {
for (Map.Entry<ItemStack, Integer> entry : fertilisers.get(type).entrySet()) {
if (entry.getKey().isItemEqual(stack)) {
return entry.getValue();
}
}
}
return 1;
}
@Override
public boolean onFertiliseSoil(ItemStack heldItem, IBlockSoil soil, World world, BlockPos pos, EntityPlayer player) {
int fertiliserStrength = getFertiliserStrength(heldItem);
if (isFertiliser(EnumFertiliserType.NUTRIENT, 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])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
if (isFertiliser(EnumFertiliserType.ACID, 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])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
if (isFertiliser(EnumFertiliserType.ALKALINE, 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])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
return false;
}
@Override
public boolean canTolerate(@Nullable IFlower flower, World world, BlockPos pos) {
if (flower == null) {
return false;
}
IBlockState soil = world.getBlockState(pos.down());
Biome biome = world.getBiome(pos);
EnumAcidity acidity = soil.getValue(BlockSoil.ACIDITY);
EnumMoisture moisture = soil.getValue(BlockSoil.MOISTURE);
EnumTemperature temperature = EnumTemperature.getFromValue(biome.getTemperature());
return canTolerate(flower, acidity, moisture, temperature);
}
@Override
public EnumSoilType getSoilType(World world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
if (blockState.getBlock() instanceof IBlockSoil) {
IBlockSoil soil = ((IBlockSoil) blockState.getBlock());
return soil.getType(world, pos);
}
return EnumSoilType.SOIL;
}
@Override
public Block getSoilBlock(EnumSoilType type) {
return getSoilBlock(type, false);
}
@Override
public Block getSoilBlock(EnumSoilType type, boolean weedKill) {
switch (type) {
case FLOWERBED:
return weedKill ? ModuleGardening.flowerbedNoWeed : ModuleGardening.flowerbed;
case LOAM:
return weedKill ? ModuleGardening.loamNoWeed : ModuleGardening.loam;
default:
return weedKill ? ModuleGardening.soilNoWeed : ModuleGardening.soil;
}
}
@Override
public boolean canTolerate(IFlower flower, EnumAcidity acidity, EnumMoisture moisture, EnumTemperature temperature) {
IFlowerGenome genome = flower.getGenome();
return genome.canTolerate(acidity) && genome.canTolerate(moisture) && genome.canTolerate(temperature);
}
@Override
public boolean isWeedkiller(ItemStack heldItem) {
return OreDictionaryUtil.hasOreName(heldItem, "weedkiller");
}
@Override
public boolean addWeedKiller(World world, BlockPos pos) {
IBlockState oldState = world.getBlockState(pos);
if (!(oldState.getBlock() instanceof IBlockSoil)) {
return false;
}
EnumSoilType type = getSoilType(world, pos);
IBlockState newState = getSoil(type, true, oldState.getValue(BlockSoil.MOISTURE), oldState.getValue(BlockSoil.ACIDITY));
boolean done = world.setBlockState(pos, newState, 2);
if (done && BlockPlant.isWeed(world, pos.up())) {
world.setBlockToAir(pos.up());
}
return done;
}
}
@@ -1,118 +0,0 @@
package binnie.botany.blocks;
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.state.IBlockState;
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.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 forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.tile.TileCeramic;
import binnie.core.util.TileUtil;
public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegister {
public BlockCeramic() {
super(Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("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());
}
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@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 && !world.isRemote && 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 TileCeramic();
}
@Override
public boolean hasTileEntity(IBlockState state) {
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()]);
}
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
itemList.add(new ItemStack(this, 1, c.getFlowerColorAllele().getID()));
}
}
@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);
}
}
return EnumFlowerColor.get(0).getFlowerColorAllele().getColor(false);
}
}
@@ -1,267 +0,0 @@
package binnie.botany.blocks;
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.core.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.ceramic.brick.CeramicBrickPair;
import binnie.botany.ceramic.brick.CeramicBrickType;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.tile.TileCeramic;
import binnie.botany.tile.TileCeramicBrick;
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 void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@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 && !world.isRemote && 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.getType());
}
@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.getColorFirst(), pair.getColorSecond());
}
}
@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 CeramicBrickPair.EMPTY;
}
@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) {
TextureAtlasSprite[] sprites = new TextureAtlasSprite[3];
for (int i = 0; i < 3; ++i) {
ResourceLocation location = new ResourceLocation(Constants.BOTANY_MOD_ID + ":blocks/ceramic." + type.getId() + "." + i);
sprites[i] = textureMap.registerSprite(location);
}
type.setSprites(sprites);
}
}
private static class CeramicBrickMeshDefinition implements ItemMeshDefinition {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
return new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":ceramicBrick", "inventory");
}
}
}
@@ -1,32 +0,0 @@
package binnie.botany.blocks;
import binnie.design.DesignHelper;
import binnie.design.blocks.BlockDesign;
import binnie.design.blocks.DesignBlock;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import binnie.botany.ceramic.CeramicColor;
import binnie.botany.ceramic.CeramicDesignSystem;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.core.util.I18N;
import binnie.design.api.IDesign;
public class BlockCeramicPatterned extends BlockDesign {
public BlockCeramicPatterned() {
super(CeramicDesignSystem.instance, Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramicPattern");
}
@Override
public ItemStack getCreativeStack(IDesign design) {
return DesignHelper.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());
}
}
@@ -1,311 +0,0 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
import binnie.botany.tile.FlowerRenderInfo;
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.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.blocks.properties.PropertyFlower;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.FlowerDefinition;
import binnie.botany.models.StateMapperFlower;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.network.PacketID;
import binnie.botany.tile.TileEntityFlower;
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.offset(getOffset(state, source, 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 (!!world.isRemote) {
if (flower != null && flower instanceof TileEntityFlower) {
IFlower f = flowerRoot.getMember(stack);
if (f != null) {
((TileEntityFlower) flower).setRender(new FlowerRenderInfo(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() == ModuleFlowers.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() != ModuleFlowers.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 void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) {
ItemStack flower = ((TileEntityFlower) tile).getItemStack();
if (!flower.isEmpty()) {
drops.add(flower);
}
}
}
@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 && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
}
@@ -1,150 +0,0 @@
package binnie.botany.blocks;
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.gardening.EnumSoilType;
import binnie.botany.api.gardening.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 BlockPlant() {
setRegistryName("plant");
setCreativeTab(CreativeTabBotany.INSTANCE);
setTickRandomly(true);
setSoundType(SoundType.PLANT);
}
public static boolean isWeed(IBlockAccess world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
if (!(blockState.getBlock() instanceof BlockPlant)) {
return false;
}
PlantType type = blockState.getValue(PLANT_TYPE);
return type.isWeed();
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (int i = 0;i < PlantType.values().length;i++) {
PlantType type = PlantType.getType(i);
manager.registerItemModel(item, i, type.getName());
}
}
@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.getType(meta));
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@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());
}
}
@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);
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);
}
}
Block below = world.getBlockState(pos.down()).getBlock();
if (!BotanyCore.getGardening().isSoil(below)) {
return;
}
IBlockSoil soil = (IBlockSoil) below;
if (rand.nextInt(3) != 0) {
return;
}
if (type.isWeed()) {
if (!soil.degrade(world, pos.down(), EnumSoilType.LOAM)) {
soil.degrade(world, pos.down(), EnumSoilType.SOIL);
}
} else if (type == PlantType.DECAYING_FLOWER && !soil.fertilise(world, pos.down(), EnumSoilType.LOAM)) {
soil.fertilise(world, pos.down(), EnumSoilType.FLOWERBED);
}
}
@Override
public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) {
return true;
}
@Override
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
}
}
@@ -1,322 +0,0 @@
package binnie.botany.blocks;
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.core.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.core.BotanyCore;
import binnie.core.modules.BotanyModuleUIDs;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.modules.ModuleGardening;
import binnie.core.util.I18N;
import binnie.core.modules.ModuleManager;
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;
public BlockSoil(EnumSoilType type, String blockName, boolean weedKilled) {
super(Material.GROUND);
this.type = type;
this.weedKilled = weedKilled;
setUnlocalizedName("botany.soil." + type.getName());
setCreativeTab(CreativeTabBotany.INSTANCE);
setRegistryName(blockName);
setTickRandomly(true);
setLightOpacity(255);
setHardness(0.5f);
setSoundType(SoundType.GROUND);
}
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) {
for (int i = 0; i < 9; ++i) {
list.add(new ItemStack(this, 1, i));
}
}
@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();
}
if (moisture != EnumMoisture.NORMAL) {
if (!modelName.isEmpty()) {
modelName += "_";
}
modelName += moisture.getName();
}
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
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);
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
EnumMoisture moisture = state.getValue(MOISTURE);
EnumMoisture desiredMoisture = BotanyCore.getGardening().getNaturalMoisture(world, pos);
if (desiredMoisture.ordinal() > moisture.ordinal()) {
moisture = ((moisture == EnumMoisture.DRY) ? EnumMoisture.NORMAL : EnumMoisture.DAMP);
} else 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);
}
if (!weedKilled) {
if (rand.nextInt(5 - getType(world, pos).ordinal()) != 0) {
return;
}
pos = pos.up();
if (!world.isAirBlock(pos)) {
return;
}
world.setBlockState(pos, ModuleGardening.plant.getStateFromMeta(PlantType.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());
}
}
@Override
public EnumAcidity getPH(World world, BlockPos pos) {
return world.getBlockState(pos).getValue(ACIDITY);
}
@Override
public EnumMoisture getMoisture(World world, BlockPos pos) {
return world.getBlockState(pos).getValue(MOISTURE);
}
@Override
public EnumSoilType getType(World world, BlockPos pos) {
return type;
}
@Override
public boolean fertilise(World world, BlockPos pos, EnumSoilType maxLevel) {
EnumSoilType type = getType(world, pos);
if (type.ordinal() >= maxLevel.ordinal()) {
return false;
}
IBlockState old = world.getBlockState(pos);
IBlockState newState = BotanyCore.getGardening().getSoil(maxLevel, weedKilled, old.getValue(MOISTURE), old.getValue(ACIDITY));
return world.setBlockState(pos, newState, 2);
}
@Override
public boolean degrade(World world, BlockPos pos, EnumSoilType minLevel) {
EnumSoilType type = getType(world, pos);
if (type.ordinal() <= minLevel.ordinal()) {
return false;
}
IBlockState old = world.getBlockState(pos);
IBlockState newState = BotanyCore.getGardening().getSoil(minLevel, weedKilled, old.getValue(MOISTURE), old.getValue(ACIDITY));
return world.setBlockState(pos, newState, 2);
}
@Override
public boolean setPH(World world, BlockPos pos, EnumAcidity pH) {
IBlockState blockState = world.getBlockState(pos);
return world.setBlockState(pos, blockState.withProperty(ACIDITY, pH));
}
@Override
public boolean setMoisture(World world, BlockPos pos, EnumMoisture moisture) {
IBlockState blockState = world.getBlockState(pos);
return world.setBlockState(pos, blockState.withProperty(MOISTURE, moisture));
}
@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);
}
}
@Override
public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
IBlockState plant = plantable.getPlant(world, pos.up());
if(ModuleManager.isModuleEnabled(Constants.BOTANY_MOD_ID, BotanyModuleUIDs.FLOWERS)) {
if (plant.getBlock() == ModuleFlowers.flower) {
return true;
}
}
if (plant.getBlock() == ModuleGardening.plant) {
return !weedKilled || !BlockPlant.isWeed(world, pos);
}
return world instanceof World && Blocks.DIRT.canSustainPlant(state, world, pos, direction, plantable);
}
@Override
public boolean resistsWeeds(World world, BlockPos pos) {
return weedKilled;
}
public boolean isWeedKilled() {
return weedKilled;
}
}
@@ -1,184 +0,0 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
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.api.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 void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@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,46 +0,0 @@
package binnie.botany.blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import binnie.botany.modules.ModuleGardening;
public enum PlantType implements IStringSerializable {
WEEDS("weeds", true),
WEEDS_LONG("weeds_long", true),
WEEDS_VERY_LONG("weeds_very_long", true),
DEAD_FLOWER("dead_flower"),
DECAYING_FLOWER("decaying_flower");
private final String name;
private final boolean isWeed;
PlantType(String name) {
this(name, false);
}
PlantType(String name, boolean isWeed) {
this.name = name;
this.isWeed = isWeed;
}
public static PlantType getType(int meta){
if(meta >= values().length){
meta = values().length-1;
}
return values()[meta];
}
public ItemStack get() {
return new ItemStack(ModuleGardening.plant, 1, ordinal());
}
public boolean isWeed() {
return isWeed;
}
@Override
public String getName() {
return name;
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.blocks;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,53 +0,0 @@
package binnie.botany.blocks.properties;
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.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.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();
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.blocks.properties;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,55 +0,0 @@
package binnie.botany.ceramic;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.item.ItemStack;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.block.TileEntityMetadata;
import binnie.design.api.IDesignMaterial;
public class CeramicColor implements IDesignMaterial {
private final static Map<EnumFlowerColor, CeramicColor> map = new LinkedHashMap<>();
static {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
CeramicColor.map.put(c, new CeramicColor(c));
}
}
private final EnumFlowerColor color;
CeramicColor(EnumFlowerColor color) {
this.color = color;
}
public static CeramicColor get(EnumFlowerColor c) {
return CeramicColor.map.get(c);
}
@Override
public ItemStack getStack() {
return TileEntityMetadata.getItemStack(ModuleCeramic.ceramic, color.ordinal());
}
@Override
public ItemStack getStack(boolean fireproof) {
return getStack();
}
@Override
public String getDesignMaterialName() {
return color.getName();
}
@Override
public int getColour() {
return color.getFlowerColorAllele().getColor(false);
}
public int getMaterialIndex() {
return color.ordinal();
}
}
@@ -1,112 +0,0 @@
package binnie.botany.ceramic;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import binnie.design.Design;
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.api.genetics.EnumFlowerColor;
import binnie.botany.items.CeramicItems;
import binnie.botany.modules.ModuleCeramic;
import binnie.design.api.IDesignMaterial;
import binnie.design.api.IDesignSystem;
import binnie.design.api.IPattern;
import binnie.design.EnumPattern;
public class CeramicDesignSystem implements IDesignSystem {
public static final CeramicDesignSystem instance = new CeramicDesignSystem();
private final Map<Integer, TextureAtlasSprite> primary;
private final Map<Integer, TextureAtlasSprite> secondary;
CeramicDesignSystem() {
primary = new HashMap<>();
secondary = new HashMap<>();
Design.getDesignManager().registerDesignSystem(this);
}
@Override
public IDesignMaterial getDefaultMaterial() {
return CeramicColor.get(EnumFlowerColor.White);
}
@Override
public IDesignMaterial getDefaultMaterial2() {
return CeramicColor.get(EnumFlowerColor.Black);
}
@Override
public IDesignMaterial getMaterial(int id) {
return CeramicColor.get(EnumFlowerColor.get(id));
}
@Override
public int getMaterialIndex(IDesignMaterial id) {
return ((CeramicColor) id).getMaterialIndex();
}
public String getTexturePath() {
return "blocks/ceramic";
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getPrimarySprite(IPattern pattern) {
int index = pattern.getIndex();
if (index >= 0 && index < primary.size()) {
return primary.get(index);
}
return null;
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSecondarySprite(IPattern pattern) {
int index = pattern.getIndex();
if (index >= 0 && index < secondary.size()) {
return secondary.get(index);
}
return null;
}
@Override
@SideOnly(Side.CLIENT)
public void registerSprites() {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
for (EnumPattern pattern : EnumPattern.values()) {
ResourceLocation primaryLocation = new ResourceLocation(getModId(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0");
ResourceLocation secondaryLocation = new ResourceLocation(getModId(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1");
primary.put(pattern.getIndex(), textureMap.registerSprite(primaryLocation));
secondary.put(pattern.getIndex(), textureMap.registerSprite(secondaryLocation));
}
}
public String getModId() {
return Botany.instance.getModId();
}
@Override
public ItemStack getAdhesive() {
return CeramicItems.MORTAR.get(1);
}
@Override
@Nullable
public IDesignMaterial getMaterial(ItemStack itemStack) {
return (itemStack.getItem() == Item.getItemFromBlock(ModuleCeramic.ceramic))
? getMaterial(itemStack.getItemDamage())
: null;
}
}
@@ -1,106 +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.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.util.I18N;
public class CeramicBrickPair {
public static final CeramicBrickPair EMPTY = new CeramicBrickPair(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkSeaGreen, CeramicBrickType.TILE);
private final EnumFlowerColor colorFirst;
private final EnumFlowerColor colorSecond;
private CeramicBrickType type;
private int ordinal;
public 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(ModuleCeramic.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.getId() + ".name", name);
}
public int ordinal() {
return ordinal;
}
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite(int pass) {
TextureAtlasSprite[] sprites = type.getSprites();
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;
}
public EnumFlowerColor getColorFirst() {
return colorFirst;
}
public EnumFlowerColor getColorSecond() {
return colorSecond;
}
public CeramicBrickType getType() {
return type;
}
public void setType(CeramicBrickType type) {
this.type = type;
}
}
@@ -1,344 +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.api.genetics.EnumFlowerColor;
import binnie.botany.items.CeramicItems;
import binnie.botany.modules.ModuleCeramic;
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(ModuleCeramic.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.getType() == CeramicBrickType.VERTICAL_LARGE_BRICK) {
type3.setType(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(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.getType() != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color5 = type4.getColorFirst().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(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type = new CeramicBrickPair(stack2);
if (type.getType() != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color2 = type.getColorFirst().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(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.getType() != CeramicBrickType.SPLIT) {
return ItemStack.EMPTY;
}
int color3 = type2.getColorFirst().ordinal();
int color4 = type2.getColorSecond().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(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.isTwoColors()) {
return ItemStack.EMPTY;
}
int color3 = type2.getColorFirst().ordinal();
if (type2.getType() == CeramicBrickType.SPLIT) {
if (colors[1] != -1) {
return ItemStack.EMPTY;
}
colors[1] = color3;
} else {
if (type2.getType() != CeramicBrickType.CHEQUERED) {
return ItemStack.EMPTY;
}
if (colors[0] == -1) {
colors[0] = color3;
} else if (colors[0] != color3) {
return ItemStack.EMPTY;
}
}
int color4 = type2.getColorSecond().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();
private final String id;
@SideOnly(Side.CLIENT)
@Nullable
private 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.getType() == CeramicBrickType.LARGE_BRICK) {
type.setType(CeramicBrickType.VERTICAL_LARGE_BRICK);
return type.getStack(1);
}
if (type.getType() == CeramicBrickType.BRICK) {
type.setType(CeramicBrickType.VERTICAL_BRICK);
return type.getStack(1);
}
if (type.getType() == CeramicBrickType.STRIPE_BRICK) {
type.setType(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.getType() == CeramicBrickType.VERTICAL_BRICK) {
type.setType(ceramicType);
return type.getStack(1);
}
if (type.getType() == CeramicBrickType.STRIPE_BRICK) {
type.setType(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(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.getType() != CeramicBrickType.LARGE_BRICK) {
return ItemStack.EMPTY;
}
int color5 = type4.getColorFirst().ordinal();
int color6 = type4.getColorSecond().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() == ModuleCeramic.misc && stack.getItemDamage() == CeramicItems.MORTAR.ordinal();
}
@Override
public String getName() {
return id;
}
public String getId() {
return id;
}
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite[] getSprites() {
return sprites;
}
@SideOnly(Side.CLIENT)
public void setSprites(TextureAtlasSprite[] sprites) {
this.sprites = sprites;
}
}
@@ -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 +0,0 @@
package binnie.botany.core;
import binnie.botany.GardeningManager;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.genetics.FlowerRoot;
public class BotanyCore {
public static final int CHANCE_INTERPOLLINATION = 20;
public static IFlowerRoot getFlowerRoot() {
if (BotanyAPI.flowerRoot == null) {
BotanyAPI.flowerRoot = new FlowerRoot();
}
return BotanyAPI.flowerRoot;
}
public static IGardeningManager getGardening() {
if (BotanyAPI.gardening == null) {
BotanyAPI.gardening = new GardeningManager();
}
return BotanyAPI.gardening;
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.core;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,107 +0,0 @@
package binnie.botany.farming;
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.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.core.circuits.BinnieCircuit;
import binnie.core.util.I18N;
public class CircuitGarden extends BinnieCircuit {
private boolean isManual;
private final GardenLogic logic;
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);
isManual = manual;
logic = new GardenLogic(moisture, ph, isManual, fertilised, icon, I18N.localise(getUnlocalizedName()));
String info = I18N.localise("botany.moisture") + ": " + moisture.getLocalisedName(true) + TextFormatting.GRAY + ", ";
if (ph != null) {
info += I18N.localise("botany.ph") + ": " + ph.getLocalisedName(true) + TextFormatting.GRAY + ", ";
}
String fertilizedKey = fertilised ? "for.binnie.circuit.garden.fertilized" : "for.binnie.circuit.garden.unfertilized";
info += (fertilised ? TextFormatting.GREEN : TextFormatting.RED) + I18N.localise(fertilizedKey) + TextFormatting.GRAY;
addTooltipString(I18N.localise("for.binnie.circuit.garden.info", 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;
}
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 (manual) {
name += ".manual";
}
if (fertilised) {
name += ".fert";
}
return name;
}
public CircuitGarden setManual() {
isManual = true;
return this;
}
@Override
public boolean isCircuitable(Object tile) {
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) {
return;
}
logic.setManual(isManual);
housing.setFarmLogic(FarmDirection.values()[slot], logic);
}
@Override
public void onLoad(int slot, Object tile) {
onInsertion(slot, tile);
}
@Override
public void onRemoval(int slot, Object tile) {
IFarmHousing farmHousing = getCircuitable(tile);
if (farmHousing == null) {
return;
}
farmHousing.resetFarmLogic(FarmDirection.values()[slot]);
}
@Override
public void onTick(int slot, Object tile) {
// ignored
}
}
@@ -1,53 +0,0 @@
package binnie.botany.farming;
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 {
private boolean isManual;
@Override
public IFarmLogic setManual(boolean flag) {
isManual = flag;
return this;
}
protected final boolean isAirBlock(World world, BlockPos pos) {
return world.isAirBlock(pos);
}
protected final IBlockState getBlockState(World world, BlockPos pos) {
return world.getBlockState(pos);
}
protected final Block getBlock(World world, BlockPos pos) {
return getBlockState(world, pos).getBlock();
}
protected final int getBlockMeta(World world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
return blockState.getBlock().getMetaFromState(blockState);
}
protected final ItemStack getAsItemStack(World world, BlockPos position) {
return new ItemStack(getBlock(world, position), 1, getBlockMeta(world, position));
}
protected final boolean isWaterBlock(World world, BlockPos pos) {
return getBlock(world, pos) == Blocks.WATER;
}
protected final void setBlock(World world, BlockPos pos, Block block, int meta) {
world.setBlockState(pos, block.getStateFromMeta(meta), 2);
}
public boolean isManual() {
return isManual;
}
}
@@ -1,67 +0,0 @@
package binnie.botany.farming;
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.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.core.BotanyCore;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.tile.TileEntityFlower;
public class FarmableFlower implements IFarmable {
@Override
public boolean isSaplingAt(World world, BlockPos pos) {
return world.getBlockState(pos) == ModuleFlowers.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.isEmpty() && !seed.isEmpty()) {
world.setBlockState(pos, Blocks.AIR.getDefaultState(), 2);
return new FlowerCrop(pos, mature, seed);
}
}
return null;
}
@Override
public boolean isGermling(ItemStack itemstack) {
EnumFlowerStage stage = BotanyCore.getFlowerRoot().getType(itemstack);
return stage == EnumFlowerStage.FLOWER || stage == EnumFlowerStage.SEED;
}
@Override
public boolean isWindfall(ItemStack itemstack) {
return false;
}
@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());
return true;
}
}
@@ -1,24 +0,0 @@
package binnie.botany.farming;
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.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.core.BotanyCore;
public class FarmableVanillaFlower extends FarmableFlower {
@Override
public boolean isGermling(ItemStack itemstack) {
return BotanyCore.getFlowerRoot().getConversion(itemstack) != null;
}
@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());
}
}
@@ -1,31 +0,0 @@
package binnie.botany.farming;
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 {
private final NonNullList<ItemStack> drops = NonNullList.create();
private final 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;
}
}
@@ -1,393 +0,0 @@
package binnie.botany.farming;
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 net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.TextureMap;
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.util.NonNullList;
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.core.Binnie;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.core.BotanyCore;
import binnie.botany.modules.ModuleGardening;
import binnie.botany.tile.TileEntityFlower;
import binnie.core.liquid.ManagerLiquid;
public class GardenLogic extends FarmLogic {
private final List<IFarmable> farmables;
private final EnumMoisture moisture;
@Nullable
private final EnumAcidity acidity;
private final boolean fertilised;
private final String name;
private NonNullList<ItemStack> produce;
private ItemStack icon;
public GardenLogic(EnumMoisture moisture, @Nullable EnumAcidity acidity, boolean isManual, boolean isFertilised, ItemStack icon, String name) {
this.setManual(isManual);
this.moisture = moisture;
this.acidity = acidity;
this.fertilised = isFertilised;
this.icon = icon;
this.name = name;
produce = NonNullList.create();
farmables = new ArrayList<>();
farmables.add(new FarmableFlower());
farmables.add(new FarmableVanillaFlower());
}
@Override
public int getFertilizerConsumption() {
return fertilised ? 8 : 2;
}
@Override
public int getWaterConsumption(float hydrationModifier) {
return (int) (moisture.ordinal() * 40 * hydrationModifier);
}
@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.isFertiliser(EnumFertiliserType.ACID, itemstack) ||
gardening.isFertiliser(EnumFertiliserType.ALKALINE, itemstack);
}
@Override
public NonNullList<ItemStack> collect(World world, IFarmHousing farmHousing) {
NonNullList<ItemStack> products = produce;
produce = NonNullList.create();
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);
}
private boolean isWaste(ItemStack stack) {
return stack.getItem() == Item.getItemFromBlock(Blocks.DIRT);
}
private boolean maintainSoil(World world, BlockPos pos, FarmDirection direction, int extent, IFarmHousing housing) {
IGardeningManager gardening = BotanyCore.getGardening();
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)) {
continue;
}
}
if (getBlock(world, position.up()) == ModuleGardening.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 = getAvailableFertiliser(housing, EnumFertiliserType.ALKALINE);
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 = getAvailableFertiliser(housing, EnumFertiliserType.ACID);
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 (!isAirBlock(world, position) && !BlockUtil.isReplaceableBlock(getBlockState(world, position), world, position)) {
ItemStack block = getAsItemStack(world, position);
ItemStack loam = getAvailableLoam(housing);
if (isWaste(block) && !loam.isEmpty()) {
IBlockState blockState = Block.getBlockFromItem(block.getItem()).getStateFromMeta(block.getItemDamage());
Blocks.DIRT.getDrops(produce, world, position, blockState, 0);
setBlock(world, position, Blocks.AIR, 0);
return trySetSoil(world, position, loam, housing);
}
} 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);
}
}
}
}
}
return false;
}
private boolean maintainWater(World world, BlockPos pos, FarmDirection direction, int extent, IFarmHousing housing) {
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)) {
continue;
}
if (isWaterBlock(world, position)) {
continue;
}
boolean isEnclosed = true;
if (world.isAirBlock(position.east())) {
isEnclosed = false;
} else if (world.isAirBlock(position.west())) {
isEnclosed = false;
} else if (world.isAirBlock(position.south())) {
isEnclosed = false;
} else if (world.isAirBlock(position.north())) {
isEnclosed = false;
}
isEnclosed = (isEnclosed || moisture != EnumMoisture.DAMP);
if (isEnclosed) {
return trySetWater(world, position, housing);
}
}
return false;
}
private ItemStack getAvailableLoam(IFarmHousing housing) {
EnumMoisture[] moistures;
if (moisture == EnumMoisture.DAMP) {
moistures = new EnumMoisture[]{
EnumMoisture.DAMP,
EnumMoisture.NORMAL,
EnumMoisture.DRY
};
} else if (moisture == EnumMoisture.DRY) {
moistures = new EnumMoisture[]{
EnumMoisture.DRY,
EnumMoisture.DAMP,
EnumMoisture.DRY
};
} else {
moistures = new EnumMoisture[]{
EnumMoisture.DRY,
EnumMoisture.NORMAL,
EnumMoisture.DAMP
};
}
EnumAcidity[] acidities = {
EnumAcidity.NEUTRAL,
EnumAcidity.ACID,
EnumAcidity.ALKALINE
};
for (EnumMoisture moist : moistures) {
for (EnumAcidity acid : acidities) {
for (Block type : new Block[]{ModuleGardening.flowerbed, ModuleGardening.loam, ModuleGardening.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;
}
}
}
}
NonNullList<ItemStack> resources = NonNullList.create();
ItemStack resourceStack = new ItemStack(Blocks.DIRT);
resources.add(resourceStack);
if (housing.getFarmInventory().hasResources(resources)) {
return new ItemStack(Blocks.DIRT);
}
return ItemStack.EMPTY;
}
private boolean trySetSoil(World world, BlockPos position, IFarmHousing housing) {
return trySetSoil(world, position, getAvailableLoam(housing), housing);
}
private boolean trySetSoil(World world, BlockPos position, ItemStack loam, IFarmHousing housing) {
ItemStack copy = loam;
if (loam.isEmpty()) {
return false;
}
if (loam.getItem() == Item.getItemFromBlock(Blocks.DIRT)) {
loam = new ItemStack(ModuleGardening.soil, 1, 4);
}
setBlock(world, position, ((ItemBlock) loam.getItem()).getBlock(), loam.getItemDamage());
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(copy);
housing.getFarmInventory().removeResources(resources);
return true;
}
private boolean trySetWater(World world, BlockPos position, IFarmHousing housing) {
FluidStack water = Binnie.LIQUID.getFluidStack(ManagerLiquid.WATER, 1000);
if (moisture == EnumMoisture.DAMP) {
if (water == null || !housing.hasLiquid(water)) {
return false;
}
setBlock(world, position, Blocks.WATER, 0);
housing.removeLiquid(water);
return true;
}
if (moisture != EnumMoisture.DRY) {
return trySetSoil(world, position, housing);
}
ItemStack sand = new ItemStack(Blocks.SAND, 1);
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(sand);
if (!housing.getFarmInventory().hasResources(resources)) {
return false;
}
setBlock(world, position, Blocks.SAND, 0);
housing.getFarmInventory().removeResources(resources);
return true;
}
public void setIcon(ItemStack icon) {
this.icon = icon;
}
@Override
public boolean isAcceptedGermling(ItemStack itemstack) {
for (IFarmable farmable : farmables) {
if (farmable.isGermling(itemstack)) {
return true;
}
}
return false;
}
@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());
}
@Override
public void addSoil(ItemStack resource, IBlockState soilState, boolean hasMetaData) {
// all {@link IBlockSoil} are soil, and nothing else
}
@Override
public ResourceLocation getTextureMap() {
return TextureMap.LOCATION_BLOCKS_TEXTURE;
}
@Override
public String getName() {
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();
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);
}
}
}
return false;
}
private boolean trySetCrop(World world, BlockPos position, IFarmHousing housing) {
for (IFarmable farmable : farmables) {
if (!housing.plantGermling(farmable, world, position)) {
continue;
}
if (housing instanceof IOwnedTile) {
TileEntity tile = world.getTileEntity(position);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
IOwnedTile owned = (IOwnedTile) housing;
flower.setOwner(owned.getOwnerHandler().getOwner());
}
}
return true;
}
return false;
}
public ItemStack getAvailableFertiliser(IFarmHousing housing, EnumFertiliserType type) {
for (ItemStack stack : BotanyCore.getGardening().getFertilisers(type)) {
if (!stack.isEmpty()) {
NonNullList<ItemStack> resources = NonNullList.create();
resources.add(stack);
if (housing.getFarmInventory().hasResources(resources)) {
return stack;
}
}
}
return ItemStack.EMPTY;
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.farming;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,77 +0,0 @@
package binnie.botany.genetics;
import java.awt.Color;
import binnie.botany.api.genetics.IAlleleFlowerColor;
import binnie.core.util.I18N;
import forestry.api.genetics.IAlleleInteger;
public class AlleleFlowerColor implements IAlleleFlowerColor {
private final int color;
private final String uid;
private final boolean isDominant;
private final String name;
private final String unlocalizedName;
private final int colorWilted;
private final int id;
public AlleleFlowerColor(String uid, int id, Color color, Color colorWilted, String name, String unlocalizedName, boolean isDominant) {
this.color = color.getRGB();
this.uid = uid;
this.isDominant = isDominant;
this.name = name;
this.unlocalizedName = unlocalizedName;
this.colorWilted = colorWilted.getRGB();
this.id = id;
}
@Override
public int getValue() {
return color;
}
@Override
public String getUID() {
return uid;
}
@Override
public boolean isDominant() {
return isDominant;
}
@Override
public String getName() {
return name;
}
@Override
public String getAlleleName() {
return name;
}
@Override
public String getUnlocalizedName() {
return unlocalizedName;
}
@Override
public int getColor(boolean wilted) {
return wilted ? colorWilted : color;
}
@Override
public IAlleleInteger getAllele() {
return this;
}
@Override
public int getID() {
return id;
}
@Override
public String getColorName() {
return I18N.localise("botany.color." + getAlleleName());
}
}
@@ -1,30 +0,0 @@
package binnie.botany.genetics;
import binnie.botany.api.BotanyAPI;
import net.minecraft.entity.player.EntityPlayer;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
import forestry.core.genetics.BreedingTracker;
import binnie.botany.api.genetics.IBotanistTracker;
public class BotanistTracker extends BreedingTracker implements IBotanistTracker {
public BotanistTracker(String s) {
super(s, "NORMAL");
}
@Override
public void registerPickup(IIndividual individual) {
}
@Override
protected IBreedingTracker getBreedingTracker(EntityPlayer player) {
return BotanyAPI.flowerRoot.getBreedingTracker(player.world, player.getGameProfile());
}
@Override
protected String speciesRootUID() {
return "rootFlowers";
}
}
@@ -1,43 +0,0 @@
package binnie.botany.genetics;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlowerColor;
public final class ColorMix implements IColorMix {
private final IFlowerColor colorFirst;
private final IFlowerColor colorSecond;
private final IFlowerColor result;
private final int chance;
public ColorMix(IFlowerColor colorFirst, IFlowerColor colorSecond, IFlowerColor result, int chance) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
this.result = result;
this.chance = chance;
}
@Override
public IFlowerColor getColorFirst() {
return colorFirst;
}
@Override
public IFlowerColor getColorSecond() {
return colorSecond;
}
@Override
public boolean isMutation(IFlowerColor colorFirst, IFlowerColor colorSecond) {
return (colorFirst == this.colorFirst && colorSecond == this.colorSecond) || (colorFirst == this.colorSecond && colorSecond == this.colorFirst);
}
@Override
public int getChance() {
return chance;
}
@Override
public IFlowerColor getResult() {
return result;
}
}
@@ -1,113 +0,0 @@
package binnie.botany.genetics;
import java.util.Locale;
import net.minecraft.client.renderer.block.model.ModelBakery;
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 binnie.core.Constants;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IFlowerType;
public enum EnumFlowerType implements IFlowerType<EnumFlowerType> {
DANDELION,
POPPY,
ORCHID,
ALLIUM,
BLUET,
TULIP,
DAISY,
CORNFLOWER,
PANSY,
IRIS,
LAVENDER(2),
VIOLA,
DAFFODIL,
DAHLIA,
PEONY(2),
ROSE(2),
LILAC(2),
HYDRANGEA(2),
FOXGLOVE(2),
ZINNIA,
MUMS,
MARIGOLD,
GERANIUM,
AZALEA,
PRIMROSE,
ASTER,
CARNATION,
LILY,
YARROW,
Petunia,
AGAPANTHUS,
FUCHSIA,
DIANTHUS,
FORGET,
ANEMONE,
AQUILEGIA,
EDELWEISS,
SCABIOUS,
CONEFLOWER,
GAILLARDIA,
AURICULA,
CAMELLIA(2),
GOLDENROD(2),
ALTHEA(2),
PENSTEMON(2),
DELPHINIUM(2),
HOLLYHOCK(2);
public static EnumFlowerType[] VALUES = values();
public static int highestSection = 2;
private final int sections;
private ModelResourceLocation flower;
private ModelResourceLocation seed;
private ModelResourceLocation pollen;
EnumFlowerType() {
this(1);
}
EnumFlowerType(int sections) {
this.sections = sections;
}
@Override
@SideOnly(Side.CLIENT)
public void registerModels(Item item, IModelManager manager, EnumFlowerStage type) {
String pre = (sections == 1) ? "" : "double/";
flower = new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":flowers/" + pre + getName(), "inventory");
seed = new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":flowers/seed", "inventory");
pollen = new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":flowers/pollen", "inventory");
ModelBakery.registerItemVariants(item, pollen, seed, flower);
}
@Override
@SideOnly(Side.CLIENT)
public ModelResourceLocation getModel(EnumFlowerStage type, boolean flowered) {
if (type == EnumFlowerStage.SEED) {
return seed;
} else if (type == EnumFlowerStage.POLLEN) {
return pollen;
}
return flower;
}
@Override
public int getSections() {
return sections;
}
@Override
public String getName() {
return name().toLowerCase(Locale.ENGLISH);
}
}
@@ -1,269 +0,0 @@
package binnie.botany.genetics;
import javax.annotation.Nullable;
import java.util.List;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import forestry.api.arboriculture.EnumTreeChromosome;
import forestry.api.genetics.IChromosome;
import forestry.core.genetics.Chromosome;
import forestry.core.genetics.Individual;
import forestry.core.utils.Translator;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutation;
import binnie.botany.core.BotanyCore;
import binnie.core.util.I18N;
public class Flower extends Individual implements IFlower {
private final IFlowerGenome genome;
@Nullable
private IFlowerGenome mate;
private int age;
private boolean wilting;
private boolean flowered;
public Flower(NBTTagCompound compound) {
super(compound);
if (compound.hasKey("Age")) {
age = compound.getInteger("Age");
} else {
age = 0;
}
wilting = compound.hasKey("Wilt") && compound.getBoolean("Wilt");
if (compound.hasKey("Flowered")) {
flowered = compound.getBoolean("Flowered");
} else {
flowered = age > 0;
}
if (compound.hasKey("Genome")) {
genome = new FlowerGenome(compound.getCompoundTag("Genome"));
} else {
genome = BotanyCore.getFlowerRoot().templateAsGenome(BotanyCore.getFlowerRoot().getDefaultTemplate());
}
if (compound.hasKey("Mate")) {
mate = new FlowerGenome(compound.getCompoundTag("Mate"));
}
}
public Flower(IFlowerGenome genome, int age) {
this.genome = genome;
this.age = age;
wilting = false;
flowered = age > 0;
}
@Override
public String getDisplayName() {
IAlleleFlowerSpecies species = getGenome().getPrimary();
String name = species.getAlleleName();
if (age == 0) {
name += "";
}
return name;
}
@Override
public void addTooltip(List<String> list) {
IAlleleFlowerSpecies primary = genome.getPrimary();
IAlleleFlowerSpecies secondary = genome.getSecondary();
if (!isPureBred(EnumFlowerChromosome.SPECIES)) {
list.add(TextFormatting.BLUE + Translator.translateToLocal("for.bees.hybrid").replaceAll("%PRIMARY", primary.getAlleleName()).replaceAll("%SECONDARY", secondary.getAlleleName()));
}
list.add(TextFormatting.GOLD + I18N.localise("item.botany.flower.age", getAge()));
list.add(TextFormatting.GREEN + "T: " + getGenome().getPrimary().getTemperature() + " / " + getGenome().getToleranceTemperature());
list.add(TextFormatting.AQUA + "M: " + getGenome().getPrimary().getMoisture() + " / " + getGenome().getToleranceMoisture());
list.add(TextFormatting.AQUA + "pH: " + getGenome().getPrimary().getHumidity() + " / " + getGenome().getTolerancePH());
list.add(TextFormatting.GOLD + "Fert: " + getGenome().getFertility() + "x");
}
@Override
public String getIdent() {
return getGenome().getPrimary().getUID();
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound compound) {
super.writeToNBT(compound);
compound.setInteger("Age", age);
compound.setBoolean("Wilt", wilting);
compound.setBoolean("Flowered", flowered);
NBTTagCompound compoundGenome = new NBTTagCompound();
genome.writeToNBT(compoundGenome);
compound.setTag("Genome", compoundGenome);
if (mate != null) {
NBTTagCompound compundMate = new NBTTagCompound();
mate.writeToNBT(compundMate);
compound.setTag("Mate", compundMate);
}
return compound;
}
@Override
public IFlowerGenome getGenome() {
return genome;
}
@Override
public void mate(IFlower other) {
mate = new FlowerGenome(other.getGenome().getChromosomes());
}
@Override
@Nullable
public IFlowerGenome getMate() {
return mate;
}
@Override
public IFlower copy() {
NBTTagCompound compound = new NBTTagCompound();
writeToNBT(compound);
return new Flower(compound);
}
@Override
public int getAge() {
return age;
}
@Override
public void setAge(int i) {
age = i;
}
@Override
public void age() {
if (age < 15) {
age++;
}
}
@Override
public int getMaxAge() {
return getGenome().getLifespan();
}
@Override
public boolean isWilted() {
return wilting;
}
@Override
public void setWilted(boolean wilted) {
wilting = wilted;
}
@Override
public boolean hasFlowered() {
return flowered;
}
@Override
public void setFlowered(boolean flowered) {
this.flowered = flowered;
}
@Override
public void removeMate() {
mate = null;
}
@Override
public IFlower getOffspring(World world, BlockPos pos) {
if (mate != null) {
IChromosome[] chromosomes = new IChromosome[genome.getChromosomes().length];
IChromosome[] parentFirst = mutateSpecies(world, pos, genome, mate);
IChromosome[] parentSecond = mutateSpecies(world, pos, mate, genome);
for (int i = 0; i < parentFirst.length; ++i) {
if (parentFirst[i] != null && parentSecond[i] != null) {
chromosomes[i] = Chromosome.inheritChromosome(world.rand, parentFirst[i], parentSecond[i]);
}
}
return new Flower(new FlowerGenome(chromosomes), 0);
}
NBTTagCompound nbt = new NBTTagCompound();
writeToNBT(nbt);
return new Flower(nbt);
}
private IChromosome[] mutateSpecies(World world, BlockPos pos, IFlowerGenome genomeFirst, IFlowerGenome genomeSecond) {
IChromosome[] parentFirst = genomeFirst.getChromosomes();
IChromosome[] parentSecond = genomeSecond.getChromosomes();
IAlleleFlowerSpecies alleleFirst;
IAlleleFlowerSpecies alleleSecond;
IFlowerGenome genome0;
IFlowerGenome genome2;
if (world.rand.nextBoolean()) {
alleleFirst = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
alleleSecond = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
genome0 = genomeFirst;
genome2 = genomeSecond;
} else {
alleleFirst = (IAlleleFlowerSpecies) parentSecond[EnumTreeChromosome.SPECIES.ordinal()].getPrimaryAllele();
alleleSecond = (IAlleleFlowerSpecies) parentFirst[EnumTreeChromosome.SPECIES.ordinal()].getSecondaryAllele();
genome0 = genomeSecond;
genome2 = genomeFirst;
}
IFlowerColor colorFirst = genome0.getPrimaryColor();
IFlowerColor colorSecond = genome2.getPrimaryColor();
if (colorFirst != colorSecond) {
for (IColorMix mutation : BotanyCore.getFlowerRoot().getColorMixes(true)) {
if (mutation.isMutation(colorFirst, colorSecond) && world.rand.nextFloat() * 100.0f < mutation.getChance()) {
parentFirst[EnumFlowerChromosome.PRIMARY.ordinal()] = new Chromosome(mutation.getResult().getAllele());
}
}
}
colorFirst = genome0.getSecondaryColor();
colorSecond = genome2.getSecondaryColor();
if (colorFirst != colorSecond) {
for (IColorMix mutation : BotanyCore.getFlowerRoot().getColorMixes(true)) {
if (mutation.isMutation(colorFirst, colorSecond) && world.rand.nextFloat() * 100.0f < mutation.getChance()) {
parentFirst[EnumFlowerChromosome.SECONDARY.ordinal()] = new Chromosome(mutation.getResult().getAllele());
}
}
}
colorFirst = genome0.getStemColor();
colorSecond = genome2.getStemColor();
if (colorFirst != colorSecond) {
for (IColorMix mutation : BotanyCore.getFlowerRoot().getColorMixes(true)) {
if (mutation.isMutation(colorFirst, colorSecond) && world.rand.nextFloat() * 100.0f < mutation.getChance()) {
parentFirst[EnumFlowerChromosome.STEM.ordinal()] = new Chromosome(mutation.getResult().getAllele());
}
}
}
IChromosome[] template = null;
for (IFlowerMutation mutation2 : BotanyCore.getFlowerRoot().getMutations(true)) {
float chance = mutation2.getChance(world, pos, alleleFirst, alleleSecond, genome0, genome2);
if (chance > 0.0f && world.rand.nextFloat() * 100.0f < chance && template == null) {
template = BotanyCore.getFlowerRoot().templateAsChromosomes(mutation2.getTemplate());
}
}
if (template != null) {
parentFirst = template;
}
return parentFirst;
}
}
@@ -1,158 +0,0 @@
package binnie.botany.genetics;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.RenderItem;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlyzerPlugin;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IFlower;
import binnie.core.gui.geometry.Area;
import binnie.core.gui.renderer.RenderUtil;
import binnie.core.util.I18N;
// TODO write flower alyzer plugin
public class FlowerAlyzerPlugin implements IAlyzerPlugin {
public static final FlowerAlyzerPlugin INSTANCE = new FlowerAlyzerPlugin();
public static final int COLUMN_0 = 12;
public static final int COLUMN_1 = 90;
public static final int COLUMN_2 = 155;
private static final EnumFlowerChromosome[] firstPageChromosome = new EnumFlowerChromosome[]{
EnumFlowerChromosome.SPECIES,
EnumFlowerChromosome.SAPPINESS,
EnumFlowerChromosome.TERRITORY,
EnumFlowerChromosome.FERTILITY,
EnumFlowerChromosome.EFFECT,
EnumFlowerChromosome.LIFESPAN
};
private static final EnumFlowerChromosome[] secondPageColorChromosome = new EnumFlowerChromosome[]{
EnumFlowerChromosome.PRIMARY,
EnumFlowerChromosome.SECONDARY,
EnumFlowerChromosome.STEM,
};
private static final EnumFlowerChromosome[] secondPageToleranceChromosome = new EnumFlowerChromosome[]{
EnumFlowerChromosome.TEMPERATURE_TOLERANCE,
EnumFlowerChromosome.HUMIDITY_TOLERANCE,
EnumFlowerChromosome.PH_TOLERANCE
};
private int lastTopOffset;
private final int rowSize = 12;
private final int margin = 10;
private int guiLeft;
private int guiTop;
private final HashMap<String, ItemStack> iconStacks = new HashMap<>();
public FlowerAlyzerPlugin() {
for (FlowerDefinition def : FlowerDefinition.values()) {
iconStacks.put(def.getSpecies().getUID(), def.getMemberStack(EnumFlowerStage.FLOWER));
}
}
@SideOnly(Side.CLIENT)
public void drawLine(GuiScreen gui, int xOffset, String msg, int color) {
gui.mc.fontRenderer.drawString(msg, guiLeft + xOffset, guiTop + lastTopOffset + margin, color);
}
@SideOnly(Side.CLIENT)
public void drawChromosome(GuiScreen gui, EnumFlowerChromosome chromosome, IFlower flower) {
drawLine(gui, COLUMN_0, StringUtils.capitalize(chromosome.getName()), 0xEEEEEE);
drawLine(gui, COLUMN_1, I18N.localise(flower.getGenome().getActiveAllele(chromosome).getUnlocalizedName()), 0xEEEEEE);
drawLine(gui, COLUMN_2, I18N.localise(flower.getGenome().getInactiveAllele(chromosome).getUnlocalizedName()), 0xEEEEEE);
lastTopOffset += rowSize;
}
public void newLine() {
lastTopOffset += rowSize;
}
@SideOnly(Side.CLIENT)
@Override
public void drawAnalyticsPage1(GuiScreen gui, ItemStack itemStack) {
lastTopOffset = 10;
guiLeft = (gui.width - 246) / 2;
guiTop = (gui.height - 238) / 2;
IFlower flower = BotanyAPI.flowerRoot.getMember(itemStack);
if (flower == null) {
return;
}
ItemStack renderP = getIconStacks().get(flower.getGenome().getPrimary().getUID());
ItemStack renderS = getIconStacks().get(flower.getGenome().getSecondary().getUID());
gui.mc.fontRenderer.drawString("Active", guiLeft + 10 + COLUMN_1, guiTop + 10, 0xffffff);
gui.mc.fontRenderer.drawString("Inactive", guiLeft + 10 + COLUMN_2, guiTop + 10, 0xffffff);
if (renderP != null && renderS != null) {
RenderItem itemRender = Minecraft.getMinecraft().getRenderItem();
itemRender.renderItemAndEffectIntoGUI(renderP, guiLeft + 10 + COLUMN_1, guiTop + 10 + 12);
itemRender.renderItemOverlayIntoGUI(gui.mc.fontRenderer, renderP, guiLeft + 10 + COLUMN_1, guiTop + 10 + 12, null);
itemRender.renderItemAndEffectIntoGUI(renderS, guiLeft + 10 + COLUMN_2, guiTop + 10 + 12);
itemRender.renderItemOverlayIntoGUI(gui.mc.fontRenderer, renderS, guiLeft + 10 + COLUMN_1, guiTop + 10 + 12, null);
}
guiTop += rowSize * 3;
for (EnumFlowerChromosome chromosom : firstPageChromosome) {
drawChromosome(gui, chromosom, flower);
}
}
@SideOnly(Side.CLIENT)
@Override
public void drawAnalyticsPage2(GuiScreen gui, ItemStack itemStack) {
lastTopOffset = 0;
guiLeft = (gui.width - 246) / 2;
guiTop = (gui.height - 238) / 2;
IFlower f = BotanyAPI.flowerRoot.getMember(itemStack);
for (EnumFlowerChromosome chromosome : secondPageColorChromosome) {
drawChromosome(gui, chromosome, f);
RenderUtil.drawSolidRect(new Area(guiLeft + COLUMN_1, guiTop + lastTopOffset + margin, 50, 10), ((IAlleleInteger) f.getGenome().getActiveAllele(chromosome)).getValue());
RenderUtil.drawSolidRect(new Area(guiLeft + COLUMN_2, guiTop + lastTopOffset + margin, 50, 10), ((IAlleleInteger) f.getGenome().getInactiveAllele(chromosome)).getValue());
newLine();
}
for (EnumFlowerChromosome chromosome : secondPageToleranceChromosome) {
drawChromosome(gui, chromosome, f);
newLine();
}
}
@SideOnly(Side.CLIENT)
@Override
public void drawAnalyticsPage3(GuiScreen gui, ItemStack itemStack) {
//TODO soil
}
@Override
public Map<String, ItemStack> getIconStacks() {
return iconStacks;
}
@Override
public List<String> getHints() {
return Collections.EMPTY_LIST;
}
}
@@ -1,177 +0,0 @@
package binnie.botany.genetics;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesRoot;
import forestry.api.genetics.ISpeciesType;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IBotanistTracker;
import binnie.botany.core.BotanyCore;
import binnie.core.Binnie;
import binnie.core.api.genetics.IFieldKitPlugin;
import binnie.core.api.gui.IPoint;
import binnie.core.api.gui.ITexture;
import binnie.core.genetics.BreedingSystem;
import binnie.core.genetics.ForestryAllele;
import binnie.core.genetics.Tolerance;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.resource.textures.StandardTexture;
import binnie.core.texture.BinnieCoreTexture;
import binnie.core.util.I18N;
public class FlowerBreedingSystem extends BreedingSystem {
public FlowerBreedingSystem() {
iconUndiscovered = Binnie.RESOURCE.getUndiscoveredBeeSprite();
iconDiscovered = Binnie.RESOURCE.getDiscoveredBeeSprite();
}
@Override
public float getChance(IMutation mutation, EntityPlayer player, IAlleleSpecies firstSpecies, IAlleleSpecies secondSpecies) {
return mutation.getBaseChance();
}
@Override
public ISpeciesRoot getSpeciesRoot() {
return BotanyAPI.flowerRoot;
}
@Override
public int getColour() {
return 14563127;
}
@Override
public Class<? extends IBreedingTracker> getTrackerClass() {
return IBotanistTracker.class;
}
@Override
public String getAlleleName(IChromosomeType chromosome, IAllele allele) {
if (chromosome == EnumFlowerChromosome.FERTILITY) {
if (allele.getUID().contains("Low")) {
return I18N.localise("binniecore.allele.fertility.low");
}
if (allele.getUID().contains("Normal")) {
return I18N.localise("binniecore.allele.fertility.normal");
}
if (allele.getUID().contains("High")) {
return I18N.localise("binniecore.allele.fertility.high");
}
if (allele.getUID().contains("Maximum")) {
return I18N.localise("binniecore.allele.fertility.maximum");
}
}
return super.getAlleleName(chromosome, allele);
}
@Override
public boolean isDNAManipulable(ItemStack member) {
ISpeciesType type = getSpeciesRoot().getType(member);
return type != null && isDNAManipulable(type);
}
@Override
public boolean isDNAManipulable(ISpeciesType type) {
return type == EnumFlowerStage.POLLEN;
}
@Override
public IIndividual getConversion(ItemStack stack) {
return BotanyCore.getFlowerRoot().getConversion(stack);
}
@Override
public ISpeciesType[] getActiveTypes() {
return new ISpeciesType[]{EnumFlowerStage.FLOWER, EnumFlowerStage.POLLEN, EnumFlowerStage.SEED};
}
@Override
public void addExtraAlleles(IChromosomeType chromosome, TreeSet<IAllele> alleles) {
switch ((EnumFlowerChromosome) chromosome) {
case FERTILITY:
for (ForestryAllele.Fertility fertility : ForestryAllele.Fertility.values()) {
alleles.add(fertility.getAllele());
}
break;
case LIFESPAN:
for (ForestryAllele.Lifespan lifespan : ForestryAllele.Lifespan.values()) {
alleles.add(lifespan.getAllele());
}
break;
case HUMIDITY_TOLERANCE:
case PH_TOLERANCE:
case TEMPERATURE_TOLERANCE:
for (Tolerance tolerance : Tolerance.values()) {
alleles.add(tolerance.getAllele());
}
break;
case PRIMARY:
case SECONDARY:
case STEM:
for (EnumFlowerColor color : EnumFlowerColor.values()) {
alleles.add(color.getFlowerColorAllele());
}
break;
case SAPPINESS:
for (ForestryAllele.Sappiness sappiness : ForestryAllele.Sappiness.values()) {
alleles.add(sappiness.getAllele());
}
break;
case TERRITORY:
for (ForestryAllele.Territory territory : ForestryAllele.Territory.values()) {
alleles.add(territory.getAllele());
}
break;
}
}
@Override
public IFieldKitPlugin getFieldKitPlugin() {
return new FieldKitPlugin();
}
private static class FieldKitPlugin implements IFieldKitPlugin {
@Override
public Map<IChromosomeType, IPoint> getChromosomePickerPositions() {
Map<IChromosomeType, IPoint> positions = new HashMap<>();
positions.put(EnumFlowerChromosome.SPECIES, new Point(35, 81));
positions.put(EnumFlowerChromosome.PRIMARY, new Point(36, 28));
positions.put(EnumFlowerChromosome.SECONDARY, new Point(27, 13));
positions.put(EnumFlowerChromosome.FERTILITY, new Point(47, 15));
positions.put(EnumFlowerChromosome.TERRITORY, new Point(54, 31));
positions.put(EnumFlowerChromosome.EFFECT, new Point(15, 55));
positions.put(EnumFlowerChromosome.LIFESPAN, new Point(23, 38));
positions.put(EnumFlowerChromosome.TEMPERATURE_TOLERANCE, new Point(17, 77));
positions.put(EnumFlowerChromosome.HUMIDITY_TOLERANCE, new Point(52, 51));
positions.put(EnumFlowerChromosome.PH_TOLERANCE, new Point(54, 80));
positions.put(EnumFlowerChromosome.SAPPINESS, new Point(41, 42));
positions.put(EnumFlowerChromosome.STEM, new Point(37, 63));
return positions;
}
@Override
public ITexture getTypeTexture() {
return new StandardTexture(0, 96, 96, 96, BinnieCoreTexture.GUI_BREEDING);
}
}
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,36 +0,0 @@
package binnie.botany.genetics;
import java.awt.Color;
import binnie.botany.api.genetics.IAlleleFlowerColor;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IClassification;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.genetics.IFlowerFactory;
import binnie.botany.api.genetics.IFlowerMutationBuilder;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.genetics.allele.AlleleFlowerSpecies;
import binnie.botany.models.FlowerSpriteManager;
public class FlowerFactory implements IFlowerFactory {
@Override
public IAlleleFlowerSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean isDominant, IClassification branch, String binomial, IFlowerType flowerType) {
FlowerSpriteManager.initSprites(flowerType);
return new AlleleFlowerSpecies(uid, unlocalizedName, authority, unlocalizedDescription, isDominant, branch, binomial, flowerType);
}
@Override
public IFlowerMutationBuilder createMutation(IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IAllele[] result, int chance) {
FlowerMutation mutation = new FlowerMutation(allele0, allele1, result, chance);
BotanyAPI.flowerRoot.registerMutation(mutation);
return mutation;
}
@Override
public IAlleleFlowerColor createFlowerColorAllele(String uid, int id, Color color, Color colorWilted, String name, String unlocalizedName, boolean isDominant) {
return new AlleleFlowerColor(uid, id, color, colorWilted, name, unlocalizedName, isDominant);
}
}
@@ -1,143 +0,0 @@
package binnie.botany.genetics;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IAlleleFloat;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IChromosome;
import forestry.api.genetics.ISpeciesRoot;
import forestry.core.genetics.Genome;
import binnie.core.Binnie;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.core.BotanyCore;
public class FlowerGenome extends Genome implements IFlowerGenome {
public FlowerGenome(NBTTagCompound nbttagcompound) {
super(nbttagcompound);
}
public FlowerGenome(IChromosome[] chromosomes) {
super(chromosomes);
}
@Nullable
public static IAlleleFlowerSpecies getSpecies(ItemStack itemStack) {
if (!BotanyAPI.flowerRoot.isMember(itemStack)) {
return null;
}
IAlleleSpecies species = getSpeciesDirectly(BotanyAPI.flowerRoot, itemStack);
if (species instanceof IAlleleFlowerSpecies) {
return (IAlleleFlowerSpecies) species;
}
return (IAlleleFlowerSpecies) getActiveAllele(itemStack, EnumFlowerChromosome.SPECIES, BotanyAPI.flowerRoot);
}
@Override
public IAlleleFlowerSpecies getPrimary() {
return (IAlleleFlowerSpecies) getChromosomes()[EnumFlowerChromosome.SPECIES.ordinal()].getPrimaryAllele();
}
@Override
public IAlleleFlowerSpecies getSecondary() {
return (IAlleleFlowerSpecies) getChromosomes()[EnumFlowerChromosome.SPECIES.ordinal()].getSecondaryAllele();
}
@Override
public ISpeciesRoot getSpeciesRoot() {
return BotanyCore.getFlowerRoot();
}
@Override
public AlleleFlowerColor getPrimaryColor() {
return ((AlleleFlowerColor) getActiveAllele(EnumFlowerChromosome.PRIMARY));
}
@Override
public AlleleFlowerColor getSecondaryColor() {
return ((AlleleFlowerColor) getActiveAllele(EnumFlowerChromosome.SECONDARY));
}
@Override
public AlleleFlowerColor getStemColor() {
return ((AlleleFlowerColor) getActiveAllele(EnumFlowerChromosome.STEM));
}
@Override
public int getFertility() {
return ((IAlleleInteger) getActiveAllele(EnumFlowerChromosome.FERTILITY)).getValue();
}
@Override
public int getLifespan() {
return ((IAlleleInteger) getActiveAllele(EnumFlowerChromosome.LIFESPAN)).getValue() / 5;
}
@Override
public IFlowerType getType() {
return getPrimary().getType();
}
@Override
public EnumTolerance getToleranceTemperature() {
return ((IAlleleTolerance) getActiveAllele(EnumFlowerChromosome.TEMPERATURE_TOLERANCE)).getValue();
}
@Override
public EnumTolerance getToleranceMoisture() {
return ((IAlleleTolerance) getActiveAllele(EnumFlowerChromosome.HUMIDITY_TOLERANCE)).getValue();
}
@Override
public EnumTolerance getTolerancePH() {
return ((IAlleleTolerance) getActiveAllele(EnumFlowerChromosome.PH_TOLERANCE)).getValue();
}
@Override
public float getAgeChance() {
return 1.0f * (float) Math.sqrt(2.0f / getLifespan());
}
@Override
public float getSappiness() {
return ((IAlleleFloat) getActiveAllele(EnumFlowerChromosome.SAPPINESS)).getValue();
}
@Override
public boolean canTolerate(EnumAcidity acidity) {
int pH = acidity.ordinal();
int[] pHTol = Binnie.GENETICS.getTolerance(getTolerancePH());
int fPH = getPrimary().getPH().ordinal();
return pH >= fPH + pHTol[0] && pH <= fPH + pHTol[1];
}
@Override
public boolean canTolerate(EnumMoisture moist) {
int moisture = moist.ordinal();
int[] moistTol = Binnie.GENETICS.getTolerance(getToleranceMoisture());
int fMoisture = getPrimary().getMoisture().ordinal();
return moisture >= fMoisture + moistTol[0] && moisture <= fMoisture + moistTol[1];
}
@Override
public boolean canTolerate(EnumTemperature temperature) {
int temp = temperature.ordinal();
int[] tempTol = Binnie.GENETICS.getTolerance(getToleranceTemperature());
int fTemp = getPrimary().getTemperature().ordinal();
return temp >= fTemp + tempTol[0] && temp <= fTemp + tempTol[1];
}
}
@@ -1,41 +0,0 @@
package binnie.botany.genetics;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.core.ForestryAPI;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IMutation;
import forestry.core.genetics.mutations.Mutation;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutation;
import binnie.botany.api.genetics.IFlowerMutationBuilder;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.core.BotanyCore;
public class FlowerMutation extends Mutation implements IFlowerMutation, IFlowerMutationBuilder {
public FlowerMutation(IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IAllele[] template, int chance) {
super(allele0, allele1, template, chance);
}
@Override
public IFlowerRoot getRoot() {
return BotanyCore.getFlowerRoot();
}
@Override
public IMutation build() {
return this;
}
@Override
public float getChance(World world, BlockPos pos, IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IFlowerGenome genome0, IFlowerGenome genome1) {
float processedChance = getChance(world, pos, allele0, allele1, genome0, genome1, ForestryAPI.climateManager.getDefaultClimate(world, pos));
if (processedChance <= 0) {
return 0;
}
return processedChance;
}
}
@@ -1,348 +0,0 @@
package binnie.botany.genetics;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import binnie.botany.api.genetics.EnumFlowerColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlyzerPlugin;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesType;
import forestry.core.genetics.SpeciesRoot;
import forestry.core.genetics.alleles.AlleleHelper;
import forestry.core.genetics.alleles.EnumAllele;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IBotanistTracker;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerMutation;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.tile.TileEntityFlower;
public class FlowerRoot extends SpeciesRoot implements IFlowerRoot {
private static final String UID = "rootFlowers";
private static int flowerSpeciesCount = -1;
private static final ArrayList<IFlower> flowerTemplates = new ArrayList<>();
private static final ArrayList<IFlowerMutation> flowerMutations = new ArrayList<>();
private static final ArrayList<IColorMix> colourMixes = new ArrayList<>();
private final Map<ItemStack, IFlower> conversions;
public FlowerRoot() {
conversions = new HashMap<>();
}
@Override
public String getUID() {
return UID;
}
@Override
public int getSpeciesCount() {
if (FlowerRoot.flowerSpeciesCount < 0) {
FlowerRoot.flowerSpeciesCount = 0;
for (Map.Entry<String, IAllele> entry : AlleleManager.alleleRegistry.getRegisteredAlleles().entrySet()) {
if (entry.getValue() instanceof IAlleleFlowerSpecies && ((IAlleleFlowerSpecies) entry.getValue()).isCounted()) {
++FlowerRoot.flowerSpeciesCount;
}
}
}
return FlowerRoot.flowerSpeciesCount;
}
@Override
public boolean isMember(ItemStack stack) {
return !stack.isEmpty() && getType(stack) != null;
}
@Override
public boolean isMember(ItemStack stack, ISpeciesType type) {
return getType(stack) == type;
}
@Override
public boolean isMember(IIndividual individual) {
return individual instanceof IFlower;
}
@Override
public IAlyzerPlugin getAlyzerPlugin() {
return FlowerAlyzerPlugin.INSTANCE;
}
@Override
public ISpeciesType getIconType() {
return EnumFlowerStage.FLOWER;
}
@Override
@Nullable
public EnumFlowerStage getType(ItemStack stack) {
Item item = stack.getItem();
if (ModuleFlowers.flowerItem == item) {
return EnumFlowerStage.SEED;
} else if (ModuleFlowers.pollen == item) {
return EnumFlowerStage.POLLEN;
} else if (ModuleFlowers.seed == item) {
return EnumFlowerStage.SEED;
}
return null;
}
@Override
public ItemStack getMemberStack(IIndividual flower, ISpeciesType type) {
if (!isMember(flower)) {
return ItemStack.EMPTY;
}
Item flowerItem = ModuleFlowers.flowerItem;
if (type == EnumFlowerStage.SEED) {
flowerItem = ModuleFlowers.seed;
} else if (type == EnumFlowerStage.POLLEN) {
flowerItem = ModuleFlowers.pollen;
}
if (flowerItem != ModuleFlowers.flowerItem) {
((IFlower) flower).setAge(0);
}
NBTTagCompound nbttagcompound = new NBTTagCompound();
flower.writeToNBT(nbttagcompound);
ItemStack flowerStack = new ItemStack(flowerItem);
flowerStack.setTagCompound(nbttagcompound);
return flowerStack;
}
@Override
@Nullable
public IFlower getMember(ItemStack stack) {
if (!isMember(stack) || stack.getTagCompound() == null) {
return null;
}
return new Flower(stack.getTagCompound());
}
@Override
public IFlower getFlower(IFlowerGenome genome) {
return new Flower(genome, 2);
}
@Override
public IFlowerGenome templateAsGenome(IAllele[] template) {
return new FlowerGenome(templateAsChromosomes(template));
}
@Override
public IFlowerGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive) {
return new FlowerGenome(templateAsChromosomes(templateActive, templateInactive));
}
@Override
public IFlower templateAsIndividual(IAllele[] template) {
return new Flower(templateAsGenome(template), 2);
}
@Override
public IFlower templateAsIndividual(IAllele[] templateActive, IAllele[] templateInactive) {
return new Flower(templateAsGenome(templateActive, templateInactive), 2);
}
@Override
public ArrayList<IFlower> getIndividualTemplates() {
return FlowerRoot.flowerTemplates;
}
@Override
public void registerTemplate(IAllele[] template) {
registerTemplate(template[0].getUID(), template);
}
@Override
public void registerTemplate(String identifier, IAllele[] template) {
FlowerRoot.flowerTemplates.add(new Flower(templateAsGenome(template), 2));
if (!speciesTemplates.containsKey(identifier)) {
speciesTemplates.put(identifier, template);
}
}
@Override
public IAllele[] getTemplate(String identifier) {
return speciesTemplates.get(identifier);
}
@Override
public IAllele[] getDefaultTemplate() {
IAllele[] alleles = new IAllele[EnumFlowerChromosome.values().length];
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.SPECIES, FlowerDefinition.Poppy.getSpecies());
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.PRIMARY, EnumFlowerColor.Red.getFlowerColorAllele());
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.SECONDARY, EnumFlowerColor.Red.getFlowerColorAllele());
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.FERTILITY, EnumAllele.Fertility.NORMAL);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.TERRITORY, EnumAllele.Territory.AVERAGE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.EFFECT, ModuleFlowers.alleleEffectNone);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.LIFESPAN, EnumAllele.Lifespan.NORMAL);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.TEMPERATURE_TOLERANCE, EnumAllele.Tolerance.NONE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.HUMIDITY_TOLERANCE, EnumAllele.Tolerance.NONE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.PH_TOLERANCE, EnumAllele.Tolerance.NONE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.SAPPINESS, EnumAllele.Sappiness.AVERAGE);
AlleleHelper.getInstance().set(alleles, EnumFlowerChromosome.STEM, EnumFlowerColor.Green.getFlowerColorAllele());
return alleles;
}
@Override
public IAllele[] getRandomTemplate(Random rand) {
return speciesTemplates.values().toArray(new IAllele[0][])[rand.nextInt(speciesTemplates.values().size())];
}
@Override
public ArrayList<IFlowerMutation> getMutations(boolean shuffle) {
if (shuffle) {
Collections.shuffle(FlowerRoot.flowerMutations);
}
return FlowerRoot.flowerMutations;
}
@Override
public void registerMutation(IMutation mutation) {
if (AlleleManager.alleleRegistry.isBlacklisted(mutation.getTemplate()[0].getUID())) {
return;
}
if (AlleleManager.alleleRegistry.isBlacklisted(mutation.getAllele0().getUID())) {
return;
}
if (AlleleManager.alleleRegistry.isBlacklisted(mutation.getAllele1().getUID())) {
return;
}
FlowerRoot.flowerMutations.add((IFlowerMutation) mutation);
}
@Override
public IBotanistTracker getBreedingTracker(World world, @Nullable GameProfile player) {
String filename = "BotanistTracker." + ((player == null) ? "common" : player.getId());
BotanistTracker tracker = (BotanistTracker) world.loadData(BotanistTracker.class, filename);
if (tracker == null) {
tracker = new BotanistTracker(filename);
world.setData(filename, tracker);
}
return tracker;
}
@Override
public IIndividual getMember(NBTTagCompound compound) {
return new Flower(compound);
}
@Override
public Class<IFlower> getMemberClass() {
return IFlower.class;
}
@Override
public IChromosomeType[] getKaryotype() {
return EnumFlowerChromosome.values();
}
@Override
public IChromosomeType getSpeciesChromosomeType() {
return EnumFlowerChromosome.SPECIES;
}
@Override
public void addConversion(ItemStack itemstack, IAllele[] template) {
IFlower flower = getFlower(templateAsGenome(template));
conversions.put(itemstack, flower);
}
@Override
@Nullable
public IFlower getConversion(ItemStack itemstack) {
for (Map.Entry<ItemStack, IFlower> entry : conversions.entrySet()) {
if (entry.getKey().isItemEqual(itemstack)) {
return (IFlower) entry.getValue().copy();
}
}
return null;
}
@Override
public void registerColourMix(IColorMix colorMix) {
FlowerRoot.colourMixes.add(colorMix);
}
@Override
public Collection<IColorMix> getColorMixes(boolean shuffle) {
if (shuffle) {
Collections.shuffle(FlowerRoot.colourMixes);
}
return FlowerRoot.colourMixes;
}
public boolean plant(World world, BlockPos pos, IFlower flower, GameProfile owner) {
boolean set = world.setBlockState(pos, ModuleFlowers.flower.getDefaultState());
if (!set) {
return false;
}
TileEntity tile = world.getTileEntity(pos);
TileEntity below = world.getTileEntity(pos.down());
if (tile != null && tile instanceof TileEntityFlower) {
TileEntityFlower tileFlower = (TileEntityFlower) tile;
if (below instanceof TileEntityFlower) {
tileFlower.setSection(((TileEntityFlower) below).getSection());
} else {
tileFlower.create(flower, owner);
}
}
tryGrowSection(world, pos);
return true;
}
@Override
public void tryGrowSection(World world, BlockPos pos) {
if (world.isRemote) {
return;
}
TileEntity tileFlower = world.getTileEntity(pos);
if (tileFlower == null || !(tileFlower instanceof TileEntityFlower)) {
return;
}
IFlower flower = ((TileEntityFlower) tileFlower).getFlower();
int section = ((TileEntityFlower) tileFlower).getSection();
if (flower == null || section >= flower.getGenome().getPrimary().getType().getSections() - 1 || flower.getAge() <= 0) {
return;
}
world.setBlockState(pos.up(), ModuleFlowers.flower.getDefaultState());
TileEntity flowerAbove = world.getTileEntity(pos.up());
if (flowerAbove != null && flowerAbove instanceof TileEntityFlower) {
((TileEntityFlower) flowerAbove).setSection(section + 1);
}
}
@Override
public void onGrowFromSeed(World world, BlockPos pos) {
tryGrowSection(world, pos);
}
}
@@ -1,21 +0,0 @@
package binnie.botany.genetics;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.genetics.api.acclimatiser.IToleranceType;
import net.minecraft.item.ItemStack;
public class TolerancePh implements IToleranceType {
@Override
public float getEffect(ItemStack stack) {
IGardeningManager gardening = BotanyAPI.gardening;
if (gardening.isFertiliser(EnumFertiliserType.ACID, stack)) {
return -0.5f * gardening.getFertiliserStrength(stack);
}
if (gardening.isFertiliser(EnumFertiliserType.ALKALINE, stack)) {
return 0.5f * gardening.getFertiliserStrength(stack);
}
return 0;
}
}
@@ -1,45 +0,0 @@
package binnie.botany.genetics.allele;
import net.minecraft.world.World;
import forestry.api.genetics.IEffectData;
import binnie.botany.api.genetics.IAlleleFlowerEffect;
import binnie.botany.api.genetics.IFlowerGenome;
public class AlleleEffectNone implements IAlleleFlowerEffect {
@Override
public boolean isCombinable() {
return true;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
return storedData;
}
@Override
public String getUID() {
return "binnie.flowerEffectNone";
}
@Override
public boolean isDominant() {
return false;
}
@Override
public String getName() {
return "None";
}
@Override
public IEffectData doEffect(IFlowerGenome genome, IEffectData effect, World world, int x, int y, int z) {
return effect;
}
@Override
public String getUnlocalizedName() {
return getUID();
}
}
@@ -1,106 +0,0 @@
package binnie.botany.genetics.allele;
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.AlleleManager;
import forestry.api.genetics.IClassification;
import forestry.api.genetics.ISpeciesRoot;
import forestry.core.genetics.alleles.AlleleSpecies;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IAlleleFlowerSpeciesBuilder;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.core.BotanyCore;
public class AlleleFlowerSpecies extends AlleleSpecies implements IAlleleFlowerSpecies, IAlleleFlowerSpeciesBuilder {
private final IFlowerType flowerType;
private EnumAcidity acidity = EnumAcidity.NEUTRAL;
private EnumMoisture moisture = EnumMoisture.NORMAL;
public AlleleFlowerSpecies(
String uid,
String unlocalizedName,
String authority,
String unlocalizedDescription,
boolean isDominant,
IClassification branch,
String binomial,
IFlowerType flowerType) {
super(uid, unlocalizedName, authority, unlocalizedDescription, isDominant, branch, binomial);
this.flowerType = flowerType;
}
@Override
public IAlleleFlowerSpeciesBuilder setPH(EnumAcidity acidity) {
this.acidity = acidity;
return this;
}
@Override
public IAlleleFlowerSpeciesBuilder setMoisture(EnumMoisture moisture) {
this.moisture = moisture;
return this;
}
@Override
public IAlleleFlowerSpecies build() {
AlleleManager.alleleRegistry.registerAllele(this, EnumFlowerChromosome.SPECIES);
return this;
}
@Override
public ISpeciesRoot getRoot() {
return BotanyCore.getFlowerRoot();
}
@Override
public IFlowerType getType() {
return flowerType;
}
@Override
public EnumAcidity getPH() {
return acidity;
}
@Override
public EnumMoisture getMoisture() {
return moisture;
}
@Override
public int getSpriteColour(int renderPass) {
return 0;
}
@Override
public int getFlowerColor(EnumFlowerStage type, int renderPass) {
return 0;
}
@Override
@SideOnly(Side.CLIENT)
public ModelResourceLocation getFlowerModel(EnumFlowerStage type, boolean flowered) {
return flowerType.getModel(type, flowered);
}
@Override
@SideOnly(Side.CLIENT)
public void registerModels(Item item, IModelManager manager, EnumFlowerStage type) {
flowerType.registerModels(item, manager, type);
}
@Override
public int compareTo(IAlleleFlowerSpecies o) {
return 0;
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.genetics.allele;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,94 +0,0 @@
package binnie.botany.genetics.gui.analyst;
import binnie.core.api.gui.IArea;
import binnie.core.api.gui.ITitledWidget;
import binnie.core.gui.controls.core.Control;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleSpecies;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.gui.database.ControlColorDisplay;
import binnie.botany.models.FlowerSpriteManager;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.minecraft.control.ControlIconDisplay;
import binnie.core.gui.renderer.RenderUtil;
import binnie.core.util.I18N;
import binnie.genetics.api.analyst.AnalystConstants;
@SideOnly(Side.CLIENT)
public class AnalystPageAppearance extends Control implements ITitledWidget {
public AnalystPageAppearance(IWidget parent, IArea area, IFlower flower) {
super(parent, area);
setColor(3355443);
int y = 4;
IFlowerGenome genome = flower.getGenome();
IAlleleSpecies species = genome.getPrimary();
new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor());
y += 12;
ControlColorDisplay a = new ControlColorDisplay(this, getWidth() / 2 - 28, y, genome.getPrimaryColor());
a.addTooltip(I18N.localise(AnalystConstants.APPEARANCE_KEY + ".primary"));
ControlColorDisplay b = new ControlColorDisplay(this, getWidth() / 2 - 8, y, genome.getSecondaryColor());
b.addTooltip(I18N.localise(AnalystConstants.APPEARANCE_KEY + ".secondary"));
ControlColorDisplay c = new ControlColorDisplay(this, getWidth() / 2 + 12, y, genome.getStemColor());
c.addTooltip(I18N.localise(AnalystConstants.APPEARANCE_KEY + ".stem"));
y += 26;
IFlowerType type = genome.getType();
int sections = type.getSections();
int width = (sections > 1) ? 50 : 100;
new FlowerIconDisplay(this, width, y, sections, flower, type);
}
@Override
public String getTitle() {
return I18N.localise(AnalystConstants.APPEARANCE_KEY + ".title");
}
private static class FlowerIconDisplay extends ControlIconDisplay {
private final int width;
private final int sections;
private final IFlower flower;
private final IFlowerType type;
public FlowerIconDisplay(AnalystPageAppearance analystPageAppearance, int width, int y, int sections, IFlower flower, IFlowerType type) {
super(analystPageAppearance, (analystPageAppearance.getWidth() - width) / 2, y - ((sections == 1) ? 0 : 0));
this.width = width;
this.sections = sections;
this.flower = flower;
this.type = type;
}
@Override
@SideOnly(Side.CLIENT)
public void onRenderForeground(int guiWidth, int guiHeight) {
GlStateManager.pushMatrix();
float scale = width / 16.0f;
int dy = (sections > 1) ? 16 : 0;
GlStateManager.scale(scale, scale, 1.0f);
RenderUtil.setColour(flower.getGenome().getStemColor().getColor(false));
if (sections > 1) {
RenderUtil.drawSprite(Point.ZERO, FlowerSpriteManager.getStem(type, 1, true));
}
RenderUtil.drawSprite(new Point(0, dy), FlowerSpriteManager.getStem(type, 0, true));
RenderUtil.setColour(flower.getGenome().getPrimaryColor().getColor(false));
if (sections > 1) {
RenderUtil.drawSprite(Point.ZERO, FlowerSpriteManager.getPetal(type, 1, true));
}
RenderUtil.drawSprite(new Point(0, dy), FlowerSpriteManager.getPetal(type, 0, true));
RenderUtil.setColour(flower.getGenome().getSecondaryColor().getColor(false));
if (sections > 1) {
RenderUtil.drawSprite(Point.ZERO, FlowerSpriteManager.getVariant(type, 1, true));
}
RenderUtil.drawSprite(new Point(0, dy), FlowerSpriteManager.getVariant(type, 0, true));
GlStateManager.popMatrix();
}
}
}
@@ -1,154 +0,0 @@
package binnie.botany.genetics.gui.analyst;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.blocks.BlockSoil;
import binnie.botany.modules.ModuleGardening;
import binnie.core.api.gui.IArea;
import binnie.core.api.gui.ITitledWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.genetics.Tolerance;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.controls.ControlToleranceBar;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.geometry.Area;
import binnie.core.gui.geometry.TextJustification;
import binnie.core.gui.minecraft.control.ControlItemDisplay;
import binnie.core.util.I18N;
import binnie.genetics.api.analyst.AnalystConstants;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting;
public class AnalystPageSoil extends Control implements ITitledWidget {
public AnalystPageSoil(IWidget parent, IArea area, IFlower flower) {
super(parent, area);
setColor(6697728);
EnumMoisture moisture = flower.getGenome().getPrimary().getMoisture();
forestry.api.genetics.EnumTolerance moistureTol = flower.getGenome().getToleranceMoisture();
EnumAcidity pH = flower.getGenome().getPrimary().getPH();
forestry.api.genetics.EnumTolerance pHTol = flower.getGenome().getTolerancePH();
int y = 4;
new ControlTextCentered(this, y, TextFormatting.UNDERLINE + getTitle()).setColor(getColor());
y += 16;
new ControlText(this, new Area(4, y, getWidth() - 8, 14), I18N.localise(AnalystConstants.SOIL_KEY + ".tolerance.moisture"), TextJustification.MIDDLE_CENTER).setColor(getColor());
y += 12;
createMoisture(this, (getWidth() - 100) / 2, y, 100, 10, moisture, moistureTol);
y += 16;
new ControlText(this, new Area(4, y, getWidth() - 8, 14), I18N.localise(AnalystConstants.SOIL_KEY + ".tolerance.ph"), TextJustification.MIDDLE_CENTER).setColor(getColor());
y += 12;
createAcidity(this, (getWidth() - 100) / 2, y, 100, 10, pH, pHTol);
y += 16;
new ControlText(this, new Area(4, y, getWidth() - 8, 14), I18N.localise(AnalystConstants.SOIL_KEY + ".recommended"), TextJustification.MIDDLE_CENTER).setColor(getColor());
y += 12;
EnumMoisture recomMoisture = EnumMoisture.NORMAL;
boolean canTolNormal = Tolerance.canTolerate(moisture, EnumMoisture.NORMAL, moistureTol);
boolean canTolDamp = Tolerance.canTolerate(moisture, EnumMoisture.DAMP, moistureTol);
boolean canTolDry = Tolerance.canTolerate(moisture, EnumMoisture.DRY, moistureTol);
if (canTolNormal) {
if (canTolDamp && !canTolDry) {
recomMoisture = EnumMoisture.DAMP;
} else if (canTolDry && !canTolDamp) {
recomMoisture = EnumMoisture.DRY;
}
} else {
if (canTolDamp) {
recomMoisture = EnumMoisture.DAMP;
}
if (canTolDry) {
recomMoisture = EnumMoisture.DRY;
}
}
EnumAcidity recomPH = EnumAcidity.NEUTRAL;
boolean canTolNeutral = Tolerance.canTolerate(pH, EnumAcidity.NEUTRAL, pHTol);
boolean canTolAcid = Tolerance.canTolerate(pH, EnumAcidity.ACID, pHTol);
boolean canTolAlkaline = Tolerance.canTolerate(pH, EnumAcidity.ALKALINE, pHTol);
if (canTolNeutral) {
if (canTolAcid && !canTolAlkaline) {
recomPH = EnumAcidity.ACID;
} else if (canTolAlkaline && !canTolAcid) {
recomPH = EnumAcidity.ALKALINE;
}
} else {
if (canTolAcid) {
recomPH = EnumAcidity.ACID;
}
if (canTolAlkaline) {
recomPH = EnumAcidity.ALKALINE;
}
}
ItemStack stack = new ItemStack(ModuleGardening.soil, 1, BlockSoil.getMeta(recomPH, recomMoisture));
ControlItemDisplay recomSoil = new ControlItemDisplay(this, (getWidth() - 24) / 2, y, 24);
recomSoil.setItemStack(stack);
recomSoil.setTooltip();
y += 32;
new ControlText(this, new Area(4, y, getWidth() - 8, 14), I18N.localise(AnalystConstants.SOIL_KEY + ".other"), TextJustification.MIDDLE_CENTER).setColor(getColor());
y += 12;
List<ItemStack> stacks = new ArrayList<>();
for (EnumAcidity a : EnumSet.range(EnumAcidity.ACID, EnumAcidity.ALKALINE)) {
for (EnumMoisture b : EnumSet.range(EnumMoisture.DRY, EnumMoisture.DAMP)) {
if (Tolerance.canTolerate(pH, a, pHTol) && Tolerance.canTolerate(moisture, b, moistureTol) && (a != recomPH || b != recomMoisture)) {
stacks.add(new ItemStack(ModuleGardening.soil, 1, BlockSoil.getMeta(a, b)));
}
}
}
int soilListWidth = 17 * stacks.size() - 1;
int soilListX = (getWidth() - soilListWidth) / 2;
int t = 0;
for (ItemStack soilStack : stacks) {
ControlItemDisplay display = new ControlItemDisplay(this, soilListX + 17 * t++, y);
display.setItemStack(soilStack);
display.setTooltip();
}
}
protected void createMoisture(IWidget parent, int x, int y, int w, int h, EnumMoisture value, forestry.api.genetics.EnumTolerance tol) {
new MoistureBar(parent, x, y, w, h).setValues(value, tol);
}
protected void createAcidity(IWidget parent, int x, int y, int w, int h, EnumAcidity value, forestry.api.genetics.EnumTolerance tol) {
new AcidityBar(parent, x, y, w, h).setValues(value, tol);
}
@Override
public String getTitle() {
return I18N.localise(AnalystConstants.SOIL_KEY + ".title");
}
private static class MoistureBar extends ControlToleranceBar<EnumMoisture> {
public MoistureBar(IWidget parent, int x, int y, int w, int h) {
super(parent, x, y, w, h, EnumMoisture.class);
}
@Override
protected String getName(EnumMoisture value) {
return value.getLocalisedName(false);
}
@Override
protected int getColour(EnumMoisture value) {
return (new int[]{13434828, 6737151, 3368703})[value.ordinal()];
}
}
private static class AcidityBar extends ControlToleranceBar<EnumAcidity> {
public AcidityBar(IWidget parent, int x, int y, int w, int h) {
super(parent, x, y, w, h, EnumAcidity.class);
}
@Override
protected String getName(EnumAcidity value) {
return value.getLocalisedName(false);
}
@Override
protected int getColour(EnumAcidity value) {
return (new int[]{16711782, 65280, 26367})[value.ordinal()];
}
}
}
@@ -1,118 +0,0 @@
package binnie.botany.genetics.gui.analyst;
import java.util.List;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.core.Constants;
import binnie.core.api.gui.IArea;
import binnie.core.api.gui.ITitledWidget;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.util.I18N;
import binnie.core.util.TimeUtil;
import binnie.genetics.api.analyst.IAnalystManager;
import binnie.genetics.api.analyst.IAnalystPagePlugin;
import binnie.genetics.api.analyst.IBiologyPlugin;
import binnie.genetics.api.analyst.IClimatePlugin;
import binnie.genetics.api.analyst.AnalystConstants;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IIndividual;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class FlowerAnalystPagePlugin implements IAnalystPagePlugin<IFlower> {
@Override
public boolean handles(IIndividual individual) {
return individual instanceof IFlower;
}
@Override
@SideOnly(Side.CLIENT)
public void addAnalystPages(IFlower individual, IWidget parent, IArea pageSize, List<ITitledWidget> analystPages, IAnalystManager analystManager) {
analystPages.add(analystManager.createClimatePage(parent, pageSize, individual, new ClimatePlugin()));
analystPages.add(new AnalystPageSoil(parent, pageSize, individual));
analystPages.add(analystManager.createBiologyPage(parent, pageSize, individual, new BiologyPlugin()));
analystPages.add(new AnalystPageAppearance(parent, pageSize, individual));
}
private static class BiologyPlugin implements IBiologyPlugin<IFlower> {
@Override
@SideOnly(Side.CLIENT)
public int addBiologyPages(IFlower flower, IWidget parent, int y, IAnalystManager analystManager) {
y += 10;
int butterflySpawn2 = Math.round(Constants.SPAWN_KOEF / (flower.getGenome().getSappiness() * 0.2f));
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".mothSpawn", TimeUtil.getTimeString(butterflySpawn2)))
.setColor(parent.getColor());
y += 30;
int fertility = flower.getGenome().getFertility();
float chanceDispersal = 0.8f;
chanceDispersal += 0.2f * fertility;
if (chanceDispersal > 1.0f) {
chanceDispersal = 1.0f;
}
float chancePollinate = 0.6f;
chancePollinate += 0.25f * fertility;
if (chancePollinate > 1.0f) {
chancePollinate = 1.0f;
}
float maxAge = flower.getMaxAge();
float ageChance = flower.getGenome().getAgeChance();
float dispersalTime = Constants.SPAWN_KOEF / chanceDispersal;
float pollinateTime = Constants.SPAWN_KOEF / chancePollinate;
float lifespan2 = maxAge * 20.0f * 68.27f / ageChance;
float floweringLifespan = (maxAge - 1) * 20.0f * 68.27f / ageChance - Constants.SPAWN_KOEF;
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".averageLifespan"))
.setColor(parent.getColor());
y += 12;
new ControlTextCentered(parent, y, TextFormatting.BOLD + TimeUtil.getMCDayString(lifespan2))
.setColor(parent.getColor());
y += 22;
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".seedDispersal"))
.setColor(parent.getColor());
y += 12;
new ControlTextCentered(parent, y, TextFormatting.ITALIC + I18N.localise(AnalystConstants.BIOLOGY_KEY + ".perLifetime", (int) (floweringLifespan / dispersalTime)))
.setColor(parent.getColor());
y += 22;
new ControlTextCentered(parent, y, I18N.localise(AnalystConstants.BIOLOGY_KEY + ".pollination"))
.setColor(parent.getColor());
y += 12;
new ControlTextCentered(parent, y, TextFormatting.ITALIC + I18N.localise(AnalystConstants.BIOLOGY_KEY + ".perLifetime", (int) (floweringLifespan / pollinateTime)))
.setColor(parent.getColor());
y += 22;
return y;
}
}
private static class ClimatePlugin implements IClimatePlugin<IFlower> {
@Override
public EnumTolerance getTemperatureTolerance(IFlower flower) {
IFlowerGenome genome = flower.getGenome();
IAlleleTolerance tolerance = (IAlleleTolerance) genome.getActiveAllele(EnumFlowerChromosome.TEMPERATURE_TOLERANCE);
return tolerance.getValue();
}
@Override
public EnumTolerance getHumidityTolerance(IFlower flower) {
return EnumTolerance.BOTH_5;
}
@Override
public boolean showHumiditySection() {
return false;
}
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.genetics.gui.analyst;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.genetics;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,42 +0,0 @@
package binnie.botany.gui;
import binnie.design.gui.WindowDesigner;
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_MASTER,
TILEWORKER;
@Override
public Window getWindow(EntityPlayer player, World world, int x, int y, int z, Side side) {
Window window = null;
final TileEntity tileEntity = world.getTileEntity(new BlockPos(x, y, z));
IInventory inventory = null;
if (tileEntity instanceof IInventory) {
inventory = (IInventory) tileEntity;
}
switch (this) {
case DATABASE:
case DATABASE_MASTER: {
window = WindowBotanistDatabase.create(player, side, this != BotanyGUI.DATABASE);
break;
}
case TILEWORKER: {
window = WindowDesigner.create(player, inventory, side);
break;
}
}
return window;
}
}
@@ -1,48 +0,0 @@
package binnie.botany.gui.database;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.core.gui.Attribute;
import binnie.core.gui.ITooltip;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.Tooltip;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.controls.core.IControlValue;
import binnie.core.gui.renderer.RenderUtil;
public class ControlColorDisplay extends Control implements IControlValue<IFlowerColor>, ITooltip {
private IFlowerColor value;
public ControlColorDisplay(IWidget parent, int x, int y, IFlowerColor value) {
super(parent, x, y, 16, 16);
this.value = value;
addAttribute(Attribute.MOUSE_OVER);
}
@Override
public IFlowerColor getValue() {
return value;
}
@Override
public void setValue(IFlowerColor value) {
this.value = value;
}
@Override
@SideOnly(Side.CLIENT)
public void onRenderBackground(int guiWidth, int guiHeight) {
RenderUtil.drawSolidRect(getArea(), -1);
RenderUtil.drawSolidRect(getArea().inset(1), 0xff000000 + getValue().getColor(false));
}
@Override
@SideOnly(Side.CLIENT)
public void getTooltip(Tooltip tooltip, ITooltipFlag tooltipFlag) {
super.getTooltip(tooltip, tooltipFlag);
tooltip.add(value.getColorName());
}
}
@@ -1,25 +0,0 @@
package binnie.botany.gui.database;
import binnie.botany.api.genetics.IColorMix;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.listbox.ControlListBox;
public class ControlColorMixBox extends ControlListBox<IColorMix> {
private int index;
private final Type type;
public ControlColorMixBox(IWidget parent, int x, int y, int width, int height, Type type) {
super(parent, x, y, width, height, 12);
this.type = type;
}
@Override
public IWidget createOption(IColorMix value, int y) {
return new ControlColorMixItem(getContent(), value, y);
}
enum Type {
RESULTANT,
FURTHER,
}
}
@@ -1,23 +0,0 @@
package binnie.botany.gui.database;
import binnie.botany.api.genetics.IColorMix;
import binnie.core.gui.controls.listbox.ControlList;
import binnie.core.gui.controls.listbox.ControlOption;
public class ControlColorMixItem extends ControlOption<IColorMix> {
private final ControlColorDisplay itemWidget1;
private final ControlColorDisplay itemWidget2;
private final ControlColorDisplay itemWidget3;
private final ControlColorMixSymbol addSymbol;
private final ControlColorMixSymbol arrowSymbol;
public ControlColorMixItem(ControlList<IColorMix> controlList, IColorMix option, int y) {
super(controlList, option, y);
IColorMix value = getValue();
itemWidget1 = new ControlColorDisplay(this, 4, 4, value.getColorFirst());
itemWidget2 = new ControlColorDisplay(this, 44, 4, value.getColorSecond());
itemWidget3 = new ControlColorDisplay(this, 104, 4, value.getResult());
addSymbol = new ControlColorMixSymbol(this, 24, 4, 0, value);
arrowSymbol = new ControlColorMixSymbol(this, 64, 4, 1, value);
}
}
@@ -1,52 +0,0 @@
package binnie.botany.gui.database;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.genetics.IColorMix;
import binnie.core.gui.Attribute;
import binnie.core.gui.CraftGUI;
import binnie.core.gui.ITooltip;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.Tooltip;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.resource.textures.Texture;
import binnie.core.gui.resource.textures.CraftGUITextureSheet;
import binnie.core.gui.resource.textures.StandardTexture;
import binnie.core.util.I18N;
public class ControlColorMixSymbol extends Control implements ITooltip {
private static final Texture MUTATION_PLUS = new StandardTexture(2, 94, 16, 16, CraftGUITextureSheet.CONTROLS);
private static final Texture MUTATION_ARROW = new StandardTexture(20, 94, 32, 16, CraftGUITextureSheet.CONTROLS);
private final IColorMix value;
private final int type;
protected ControlColorMixSymbol(IWidget parent, int x, int y, int type, IColorMix value) {
super(parent, x, y, 16 + type * 16, 16);
this.value = value;
this.type = type;
addAttribute(Attribute.MOUSE_OVER);
}
@Override
@SideOnly(Side.CLIENT)
public void onRenderBackground(int guiWidth, int guiHeight) {
super.onRenderBackground(guiWidth, guiHeight);
if (type == 0) {
CraftGUI.RENDER.texture(ControlColorMixSymbol.MUTATION_PLUS, Point.ZERO);
} else {
CraftGUI.RENDER.texture(ControlColorMixSymbol.MUTATION_ARROW, Point.ZERO);
}
}
@Override
public void getTooltip(Tooltip tooltip, ITooltipFlag tooltipFlag) {
if (type == 1) {
float chance = value.getChance();
tooltip.add(I18N.localise(DatabaseConstants.BOTANY_CONTROL_KEY + ".color_mix_symbol.chance", chance));
}
}
}
@@ -1,32 +0,0 @@
package binnie.botany.gui.database;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.core.gui.Attribute;
import binnie.core.gui.CraftGUI;
import binnie.core.gui.controls.listbox.ControlList;
import binnie.core.gui.controls.listbox.ControlTextOption;
import binnie.core.gui.geometry.CraftGUIUtil;
import binnie.core.gui.geometry.Point;
@SideOnly(Side.CLIENT)
public class ControlColorOption extends ControlTextOption<IFlowerColor> {
private final ControlColorDisplay controlBee;
private final Point boxPosition;
public ControlColorOption(ControlList<IFlowerColor> controlList, IFlowerColor option, int y) {
super(controlList, option, option.getColorName(), y);
setSize(new Point(getSize().xPos(), 20));
controlBee = new ControlColorDisplay(this, 2, 2, option);
addAttribute(Attribute.MOUSE_OVER);
CraftGUIUtil.moveWidget(textWidget, new Point(22, 0));
textWidget.setSize(textWidget.getSize().sub(new Point(24, 0)));
int th = CraftGUI.RENDER.textHeight(textWidget.getValue(), textWidget.getSize().xPos());
int height = Math.max(20, th + 6);
setSize(new Point(this.getSize().xPos(), height));
textWidget.setSize(new Point(textWidget.getSize().xPos(), height));
boxPosition = new Point(2, (height - 18) / 2);
}
}
@@ -1,37 +0,0 @@
package binnie.botany.gui.database;
import java.util.ArrayList;
import java.util.List;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.core.BotanyCore;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.database.DatabaseTab;
import binnie.core.gui.database.PageAbstract;
import binnie.core.util.I18N;
public class PageColorMix extends PageAbstract<IFlowerColor> {
private final ControlText title;
private final ControlColorMixBox list;
public PageColorMix(IWidget parent, DatabaseTab tab) {
super(parent, tab);
title = new ControlTextCentered(this, 8, I18N.localise(DatabaseConstants.BOTANY_PAGES_KEY + ".color_further.title"));
list = new ControlColorMixBox(this, 4, 20, 136, 152, ControlColorMixBox.Type.FURTHER);
}
@Override
public void onValueChanged(IFlowerColor colour) {
List<IColorMix> mixes = new ArrayList<>();
for (IColorMix mix : BotanyCore.getFlowerRoot().getColorMixes(false)) {
if (mix.getColorFirst() == colour || mix.getColorSecond() == colour) {
mixes.add(mix);
}
}
list.setOptions(mixes);
}
}
@@ -1,37 +0,0 @@
package binnie.botany.gui.database;
import java.util.ArrayList;
import java.util.List;
import binnie.botany.api.genetics.IColorMix;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.core.BotanyCore;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.ControlTextCentered;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.database.DatabaseTab;
import binnie.core.gui.database.PageAbstract;
import binnie.core.util.I18N;
public class PageColorMixResultant extends PageAbstract<IFlowerColor> {
private final ControlText pageSpeciesFurtherTitle;
private final ControlColorMixBox pageSpeciesFurtherList;
public PageColorMixResultant(IWidget parent, DatabaseTab tab) {
super(parent, tab);
pageSpeciesFurtherTitle = new ControlTextCentered(this, 8, I18N.localise(DatabaseConstants.BOTANY_PAGES_KEY + ".species_further.title"));
pageSpeciesFurtherList = new ControlColorMixBox(this, 4, 20, 136, 152, ControlColorMixBox.Type.RESULTANT);
}
@Override
public void onValueChanged(IFlowerColor colour) {
List<IColorMix> mixes = new ArrayList<>();
for (IColorMix mix : BotanyCore.getFlowerRoot().getColorMixes(false)) {
if (mix.getResult() == colour) {
mixes.add(mix);
}
}
pageSpeciesFurtherList.setOptions(mixes);
}
}
@@ -1,104 +0,0 @@
package binnie.botany.gui.database;
import binnie.botany.api.BotanyAPI;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IIndividual;
import binnie.botany.api.genetics.EnumFlowerChromosome;
import binnie.botany.api.genetics.EnumFlowerStage;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.core.BotanyCore;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.ControlText;
import binnie.core.gui.controls.core.Control;
import binnie.core.gui.controls.scroll.ControlScrollableContent;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.database.DatabaseTab;
import binnie.core.gui.database.PageSpecies;
import binnie.core.gui.geometry.Area;
import binnie.core.gui.geometry.Point;
import binnie.core.gui.geometry.TextJustification;
import binnie.core.gui.minecraft.control.ControlItemDisplay;
import binnie.core.util.I18N;
public class PageSpeciesFlowerGenome extends PageSpecies {
public PageSpeciesFlowerGenome(IWidget parent, DatabaseTab tab) {
super(parent, tab);
}
@Override
public void onValueChanged(IAlleleSpecies species) {
deleteAllChildren();
IAllele[] template = BotanyAPI.flowerRoot.getTemplate(species.getUID());
if (template == null) {
return;
}
IFlower flower = BotanyAPI.flowerRoot.templateAsIndividual(template);
IFlowerGenome genome = flower.getGenome();
IAlleleFlowerSpecies flowerSpecies = genome.getPrimary();
int w = 144;
int h = 176;
new ControlText(this, new Area(0, 4, w, 16), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".title"), TextJustification.MIDDLE_CENTER);
ControlScrollableContent scrollable = new ControlScrollableContent(this, 4, 20, w - 8, h - 8 - 16, 12);
Control contents = new Control(scrollable, 0, 0, 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 th2 = 18;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".temp"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), flowerSpecies.getTemperature().getName(), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".moist"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), flowerSpecies.getMoisture().getLocalisedName(false), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".ph"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), flowerSpecies.getPH().getLocalisedName(false), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".fertility"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, 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 Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".lifespan"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".lifespan.value", lifespanValue), TextJustification.MIDDLE_LEFT);
y += th;
new ControlText(contents, new Area(0, y, w2, th), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".nectar"), TextJustification.MIDDLE_RIGHT);
new ControlText(contents, new Area(w2, y, w3, th), genome.getActiveAllele(EnumFlowerChromosome.SAPPINESS).getAlleleName(), TextJustification.MIDDLE_LEFT);
y += th;
int x = w2;
int tot = 0;
for (IIndividual vid : BotanyCore.getFlowerRoot().getIndividualTemplates()) {
if (vid.getGenome().getPrimary() == flowerSpecies) {
if (tot > 0 && tot % 3 == 0) {
x -= 54;
y += 18;
}
ItemStack stack = BotanyCore.getFlowerRoot().getMemberStack(vid, EnumFlowerStage.FLOWER);
ControlItemDisplay display = new ControlItemDisplay(contents, x, y);
display.setItemStack(stack);
++tot;
x += 18;
}
}
int numOfLines = 1 + (tot - 1) / 3;
new ControlText(contents, new Area(0, y - (numOfLines - 1) * 18, w2, 4 + 18 * numOfLines), I18N.localise(DatabaseConstants.BOTANY_GENOME_KEY + ".varieties"), TextJustification.MIDDLE_RIGHT);
y += th;
contents.setSize(new Point(contents.getSize().xPos(), y));
scrollable.setScrollableContent(contents);
}
}
@@ -1,95 +0,0 @@
package binnie.botany.gui.database;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import binnie.core.api.gui.IArea;
import binnie.core.gui.controls.page.ControlPage;
import binnie.core.gui.database.ModeWidgets;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.api.genetics.IFlowerColor;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleFlowers;
import binnie.core.api.gui.IWidget;
import binnie.core.gui.controls.listbox.ControlListBox;
import binnie.core.gui.database.DatabaseConstants;
import binnie.core.gui.database.DatabaseTab;
import binnie.core.gui.database.IDatabaseMode;
import binnie.core.gui.database.PageBranchOverview;
import binnie.core.gui.database.PageBranchSpecies;
import binnie.core.gui.database.PageBreeder;
import binnie.core.gui.database.PageSpeciesClassification;
import binnie.core.gui.database.PageSpeciesMutations;
import binnie.core.gui.database.PageSpeciesOverview;
import binnie.core.gui.database.PageSpeciesResultant;
import binnie.core.gui.database.WindowAbstractDatabase;
import binnie.core.gui.minecraft.Window;
import binnie.core.util.I18N;
public class WindowBotanistDatabase extends WindowAbstractDatabase {
public WindowBotanistDatabase(EntityPlayer player, Side side, boolean nei) {
super(player, side, nei, ModuleFlowers.flowerBreedingSystem, 130);
}
public static Window create(EntityPlayer player, Side side, boolean nei) {
return new WindowBotanistDatabase(player, side, nei);
}
@Override
@SideOnly(Side.CLIENT)
protected void addTabs() {
new PageSpeciesOverview(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "species.overview"));
new PageSpeciesFlowerGenome(getInfoPages(Mode.SPECIES), new DatabaseTab(Botany.instance, "genome.title"));
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 ModeWidgets(FlowerMode.Color, this, (area, modePage) -> {
FlowerColorControlListBox listBox = new FlowerColorControlListBox(modePage, area);
List<IFlowerColor> colors = Arrays.stream(EnumFlowerColor.values()).map(EnumFlowerColor::getFlowerColorAllele).collect(Collectors.toList());
listBox.setOptions(colors);
return listBox;
}));
new PageColorMixResultant(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.resultant"));
new PageColorMix(getInfoPages(FlowerMode.Color), new DatabaseTab(Botany.instance, "color.further"));
new PageBreeder(getInfoPages(Mode.BREEDER), getUsername(), new DatabaseTab(Botany.instance, "breeder"));
}
@Override
protected String getModId() {
return Botany.instance.getModId();
}
@Override
protected String getBackgroundTextureName() {
return "FlowerDatabase";
}
enum FlowerMode implements IDatabaseMode {
Color;
@Override
public String getName() {
return I18N.localise(DatabaseConstants.BOTANY_TAB_KEY + "." + name().toLowerCase());
}
}
@SideOnly(Side.CLIENT)
private static class FlowerColorControlListBox extends ControlListBox<IFlowerColor> {
public FlowerColorControlListBox(ControlPage<IDatabaseMode> modePage, IArea area) {
super(modePage, area.xPos(), area.yPos(), area.width(), area.height(), 12);
}
@Override
public IWidget createOption(IFlowerColor value, int y) {
return new ControlColorOption(getContent(), value, y);
}
}
}
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.gui.database;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,9 +0,0 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.gui;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -1,58 +0,0 @@
package binnie.botany.items;
import java.util.List;
import java.util.Locale;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.modules.ModuleGardening;
import binnie.core.item.IItemMiscProvider;
import binnie.core.util.I18N;
public enum BotanyItems implements IItemMiscProvider {
POWDER_ASH,
POWDER_PULP,
POWDER_MULCH,
POWDER_SULPHUR,
POWDER_FERTILISER,
POWDER_COMPOST,
MORTAR,
WEEDKILLER;
private final String name;
BotanyItems() {
name = name().toLowerCase(Locale.ENGLISH);
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(List<String> tooltip) {
if(this == MORTAR){
tooltip.add(I18N.localise("item.botany.mortar.tooltip"));
}
}
@Override
public String getDisplayName(ItemStack stack) {
return I18N.localise("item.botany." + name + ".name");
}
@Override
public String getModelPath() {
return name;
}
@Override
public ItemStack get(int size) {
return new ItemStack(ModuleGardening.misc, size, ordinal());
}
@Override
public boolean isActive() {
return true;
}
}
@@ -1,49 +0,0 @@
package binnie.botany.items;
import java.util.List;
import java.util.Locale;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.item.IItemMiscProvider;
import binnie.core.util.I18N;
public enum CeramicItems implements IItemMiscProvider {
MORTAR;
private final String name;
CeramicItems() {
name = name().toLowerCase(Locale.ENGLISH);
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(List<String> tooltip) {
// ignored
}
@Override
public String getDisplayName(ItemStack stack) {
return I18N.localise("item.botany." + name + ".name");
}
@Override
public String getModelPath() {
return name;
}
@Override
public ItemStack get(int size) {
return new ItemStack(ModuleCeramic.misc, size, ordinal());
}
@Override
public boolean isActive() {
return true;
}
}
@@ -1,64 +0,0 @@
package binnie.botany.items;
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();
private final int color;
private final 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.items;
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();
private final int color;
private final 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,26 +0,0 @@
package binnie.botany.items;
import net.minecraft.item.Item;
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;
public class ItemBotany extends Item implements IItemModelRegister {
public ItemBotany(String registryName) {
setRegistryName(registryName);
setUnlocalizedName(registryName);
setCreativeTab(CreativeTabBotany.INSTANCE);
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
manager.registerItemModel(item, 0);
}
}
@@ -1,39 +0,0 @@
package binnie.botany.items;
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.blocks.BlockCeramic;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.core.util.I18N;
public class ItemCeramic extends ItemBlock implements IColoredItem {
public ItemCeramic(BlockCeramic block) {
super(block);
setHasSubtypes(true);
}
@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());
}
}
Loaded 100 of 5561 files, more files were not shown because too many files have changed in this diff. Show more