Compare commits

...
730 Commits
Author SHA1 Message Date
boubou19 53d085d292 Cache more enum .values() (#67) 2026-08-11 02:54:09 +02:00
boubou19 4345981958 Cache enum .values() (#66) 2026-08-10 21:01:38 +02:00
__felix__andgithub-actions[bot] 1dd3f7342e fix gt loader check (#64)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-29 11:53:40 -04:00
Eldrinn-Elantey f88d1f8c96 Fix magic apiary GUI bypassing claim protection (#63) 2026-05-04 16:39:06 +02:00
Ranzu 59aa1ce79c Fix gui crop and localize Inventory title (#61) 2026-04-13 19:24:25 +02:00
Ranzu d571f64b14 Un-hide Hives (#62) 2026-04-13 17:32:48 +02:00
Martin Robertz f3cf6407cf update+gradle+deps+bs 2026-03-10 20:03:01 +01:00
EricC808andMartin Robertz e3460d5dbc Clarified tool tip for each blood frame to reflect actual use (#58)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
2026-03-09 23:32:27 -04:00
UltraProdigy d9a7759c49 Optimize Image & Workflow (#60) 2026-03-07 10:31:15 +01:00
Alexdoru 7c38b1101a cache frequent enum.values() calls (#59) 2026-03-04 16:28:06 +00:00
SST-03 9ce571f464 use AspectList.remove instead of AspectList.reduce to fix "sometimes drainer doesn't work with essentia import bus" (#56) 2026-02-02 20:38:45 +01:00
Martin Robertz f881470241 update 2025-11-05 18:15:32 +01:00
koolkrafter5 d4bd32c67b Add hint text for Tempus (#57) 2025-11-05 06:52:38 +00:00
Martin Robertz 60607bc521 update 2025-10-02 01:13:16 +02:00
Martin Robertz 2e7e1a3efc update 2025-06-08 10:51:18 +02:00
Nikolay S. 0bd57ed988 Add missing equals sign. (#55) 2025-06-08 05:31:53 +00:00
Martin Robertz eccceab233 update 2025-05-16 22:03:38 +02:00
Caedis e5d696f210 Replace Baubles with Baubles Expanded (#54) 2025-05-13 07:42:13 -05:00
Martin Robertz 0f59e8b4ef update 2025-03-22 12:32:24 +01:00
Yannick Marcotte-Gourde 7248bac5d0 Give Enchanted Earth some minimal hardness (#52) 2025-03-22 12:26:03 +01:00
Maya 81cb972fff update 2025-02-25 21:11:41 -06:00
FrostyFire1 9589da0f00 Fix hibeescus mana drain (#51) 2025-02-25 21:11:31 -06:00
Dream Master b5cf82b574 update 2025-01-02 13:32:42 +01:00
mM4riandMartin Robertz c4cb9a19c6 Fix crash for crumbling/transmuting effect if effect range is 0 (#49)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
2025-01-02 12:05:18 +01:00
glowredman 8fb3407357 Add Localizations (#50) 2025-01-02 12:03:06 +01:00
Martin Robertz 001f1b27f6 update 2024-09-12 08:22:10 +02:00
chochem 6429eea5d6 Merge pull request #48 from chochem/add-null-check
Add a couple of null checks
2024-09-11 18:27:58 +01:00
chochem 3ff6e91053 second null check 2024-09-11 18:07:25 +01:00
chochem cdf3046e61 sa 2024-09-11 17:59:35 +01:00
chochem 05476997e1 add null check to allow duplicate apatite removal 2024-09-11 17:58:27 +01:00
boubou19 c2cafd4a98 Merge pull request #47 from GTNewHorizons/rename
The renaming
2024-09-03 16:52:03 +02:00
NotAPenguin e9606af217 rename 2024-09-03 14:43:39 +02:00
Dream Master c3abd86907 update 2024-07-06 12:52:27 +07:00
Martin Robertz ddac6aeb67 Merge pull request #46 from Quantumlyy/patch-bee-speed-modifier
Patch production multiplier to account for difficulty and genome
2024-07-06 10:36:48 +07:00
Quantumlyy 31c130ebae adjust modifier calculations 2024-07-03 15:06:42 +02:00
Martin Robertz 77d5bcf6d1 update 2024-05-31 19:52:13 +02:00
Martin Robertz b43e100d6f Merge pull request #45 from ClassixX/master
Update MagicApiaryInventory.java
2024-05-31 19:51:01 +02:00
ClassixX 3483b613aa Update MagicApiaryInventory.java
Changed sidedness to match forestry apiary and fixed canExtractItem to return true for the product slots
2024-05-29 20:09:36 +02:00
Martin Robertz 9919f54cc8 update 2024-05-13 17:16:45 +02:00
Martin Robertz c4835b735a Merge pull request #44 from kappa-maintainer/master
Apply same GTNH coremod check to bee product
2024-05-13 12:10:56 +02:00
kappa-maintainer e035bdb914 Make BeeProductHelper checks gtnh 2024-05-13 09:54:31 +00:00
Martin Robertz dcaf57b506 update 2024-04-24 21:53:39 +02:00
Alastors 6b34a53afa Merge pull request #42 from GTNewHorizons/fixSucc 2024-04-24 15:24:15 -04:00
Alastors e990776988 fix the succ 2024-04-24 00:27:24 -04:00
Raven Szewczyk 53e83a0c1a [ci skip] upgraded build system 2024-02-04 20:00:02 +00:00
Martin Robertz 3c39529c6f update deps 2024-02-04 15:17:16 +01:00
Martin Robertz 774defd118 Merge pull request #38 from kamenskyi/patch-1
Update ru_RU.lang
2024-02-04 15:16:26 +01:00
kamenskyi 6b5b6b0efe Update ru_RU.lang
fix ru mistakes
2024-02-02 22:28:36 +03:00
Martin Robertz 41a0528d2a update bs+deps 2024-02-02 15:34:18 +01:00
Martin Robertz eb05b5c1eb Merge pull request #39 from AnrDaemon/fix-lang-refs
Fixed Thaumonomicon pages references
2024-02-02 05:21:36 +01:00
AnrDaemon 2f1bd92b33 Fixed thaumonomicon pages references 2024-02-02 02:43:02 +03:00
kamenskyi 3be904d27d Update ru_RU.lang
fix ru mistakes
2024-02-01 17:48:29 +03:00
kamenskyi 08b1b9b456 Update ru_RU.lang
fix
2024-01-30 12:59:27 +03:00
kamenskyi 6467ba4612 Update ru_RU.lang
fix ru mistakes, add blood mamic and botania
2024-01-30 12:43:43 +03:00
Martin Robertz 09dc0657ef update deps 2024-01-29 07:23:03 +01:00
Martin Robertz dcfa448af3 Merge pull request #37 from Quantumlyy/drainer-energistics
Add Thaumic Energistics support to the Apimancers drainer
2024-01-28 19:55:12 +01:00
Martin Robertz 786cb01b94 Merge pull request #35 from kamenskyi/add_ru_lang_file
Update ru_RU.lang
2024-01-28 18:38:11 +01:00
Quantumlyy f6f4a988af move theapi init to postinit 2024-01-28 18:13:39 +01:00
kamenskyi 5a823658ea Update ru_RU.lang
fix ru mistakes
2024-01-28 20:04:58 +03:00
Quantumlyy 8770492524 register drainer with ThEApi 2024-01-28 18:00:38 +01:00
Martin Robertz 322203ac6a Merge branch 'master' into drainer-energistics 2024-01-28 11:34:14 +01:00
Quantumlyy 1e5c8db826 sa 2024-01-28 11:30:17 +01:00
Quantumlyy ef47b1863a call normal updateentity 2024-01-28 11:18:16 +01:00
Martin Robertz c3dac80d44 update deps 2024-01-28 11:12:31 +01:00
Quantumlyy f2beaae45c this should make it work with TE now 2024-01-28 11:03:49 +01:00
Martin Robertz 3a4e4dce04 Merge pull request #34 from Quantumlyy/bring-closer-to-forestry
Add Apimancers Drainer
2024-01-28 09:39:48 +01:00
Alastors 99c3cb68eb minor cleanup 2024-01-28 02:49:57 -05:00
Alastors 38bc8a151c fixing the block side 2024-01-28 02:38:26 -05:00
Quantumlyy a64bd5f437 check that block side is not top 2024-01-27 11:36:09 +01:00
Quantumlyy fb43f46bb8 fix: check for gtnh coremod to determine drainer functionality 2024-01-27 11:22:20 +01:00
Quantumlyy 9d2c667c35 the grand rename 2024-01-21 21:01:57 +01:00
Quantumlyy 67dfeb7daa requested changes 2024-01-21 20:55:21 +01:00
Quantumlyy e2080bc542 sa 2024-01-21 20:55:01 +01:00
Quantumlyy b0116884f1 GTu no transitive 2024-01-21 20:47:26 +01:00
Quantumlyy a9948fcf26 sa 2024-01-21 20:37:50 +01:00
Quantumlyy 828231c3c4 Merge branch 'bring-closer-to-forestry' of https://github.com/Quantumlyy/MagicBees into bring-closer-to-forestry 2024-01-21 20:35:45 +01:00
Quantumlyy aed51fbd9a add infusion recipe 2024-01-21 20:35:40 +01:00
Alastors 9bae32761c Update build.gradle 2024-01-21 14:33:30 -05:00
Alastors 25c04cedcb Update dependencies.gradle 2024-01-21 14:32:54 -05:00
Martin Robertz cfe1cad9e8 Merge branch 'master' into bring-closer-to-forestry 2024-01-12 19:01:54 +01:00
Martin Robertz 766a440429 update bs+deps 2024-01-12 18:58:10 +01:00
Raven Szewczyk 428bfb04f8 [ci skip] upgraded build system 2024-01-08 21:27:14 +00:00
Quantumlyy 9fb5e3d8fb reword 2023-12-31 15:08:34 +01:00
Quantumlyy 3da4083bba localize 2023-12-31 15:04:53 +01:00
Quantumlyy 9d36165259 cursed shit 2023-12-31 15:03:38 +01:00
Nejc Drobnič 573c089b96 Merge pull request #1 from GTNewHorizons/dev
update
2023-12-31 14:46:55 +01:00
Martin Robertz b82ce5e15f update 2023-12-31 14:44:27 +01:00
Martin Robertz 4f5358bea6 Update Config.java 2023-12-24 21:15:17 +01:00
Martin Robertz df0761c9af Update dependencies.gradle 2023-12-24 21:02:53 +01:00
Martin Robertz b5165b3e58 Update Config.java 2023-12-24 21:00:38 +01:00
kamenskyi 12f8ed9435 Update ru_RU.lang
add ru lang file
2023-12-24 21:06:26 +03:00
Quantumlyy edf3ff7423 add prod multiplier based on industrial apiary speed 2023-12-14 07:39:02 +01:00
Quantumlyy 06571c1eb4 check for queen in industrial apiary 2023-12-13 22:41:09 +01:00
Quantumlyy 4823e44793 add some scanner data 2023-12-13 12:04:15 +01:00
Quantumlyy f55a9f7643 address review 2023-12-13 09:58:59 +01:00
Quantumlyy 65b698face perform standard check alongside gt check 2023-12-13 09:43:43 +01:00
Quantumlyy 123ff12302 implement alternative housing checker for industrial apiary 2023-12-13 09:19:05 +01:00
Quantumlyy 6e6cbbab48 rename phialing cabinet to apiamancers drainer 2023-12-13 08:56:47 +01:00
Quantumlyy b965d50bbc oops 2023-12-13 08:32:34 +01:00
Quantumlyy fb98d686fb create method for detecting if housing is present 2023-12-13 08:32:13 +01:00
Quantumlyy ff20b5f600 change housing detection 2023-12-13 07:31:10 +01:00
Quantumlyy 2ade3e5705 use instanceof 2023-12-13 07:09:14 +01:00
Quantumlyy b7a928bb06 debug 2023-12-13 06:59:25 +01:00
Quantumlyy ec4491994c add bee ageing 2023-12-12 21:30:11 +01:00
Quantumlyy 89acb72f0b add textures 2023-12-12 19:29:38 +01:00
Quantumlyy fc9ebd66d9 add phialing cabinet research 2023-12-12 13:10:10 +01:00
Quantumlyy 4c64395e21 tweak default config values 2023-12-12 11:46:22 +01:00
Quantumlyy 121fe1c0a9 sa 2023-12-12 10:40:48 +01:00
Quantumlyy 906b97064e remove queen aging 2023-12-12 10:36:47 +01:00
Quantumlyy ae736770fb age queen for every essentia generated 2023-12-12 10:35:42 +01:00
Quantumlyy 27ea81cd09 handle null aspect 2023-12-12 09:35:26 +01:00
Quantumlyy aa25a5086d sa 2023-12-10 19:14:04 +01:00
Quantumlyy ac68e40b9f add lang strings for phialing cabinet and essentia bee 2023-12-10 10:34:30 +01:00
Quantumlyy 2935df3409 fix multiplication by 0 issue 2023-12-10 00:17:30 +01:00
Quantumlyy 98c0810820 sa 2023-12-09 23:21:54 +01:00
Quantumlyy af2d06aa7b take into account the production multiplier 2023-12-09 23:18:00 +01:00
Quantumlyy e88eb1756c lower potential operations if the cabinet is full 2023-12-09 23:04:10 +01:00
Quantumlyy b19979e88b revert container slots 2023-12-09 19:48:11 +01:00
Quantumlyy 974e459311 oops 2023-12-09 18:31:40 +01:00
Quantumlyy f366dcdfc6 finish up cabinet logic 2023-12-09 18:26:17 +01:00
Quantumlyy e7e5292526 read and write nbt 2023-12-09 08:57:32 +01:00
Quantumlyy c79503d669 remove stubs 2023-12-09 01:45:11 +01:00
Quantumlyy 6529e7245d correctly check for the species 2023-12-09 00:53:21 +01:00
Quantumlyy 29e72ed7fc make phialing cabinet capacity configurable 2023-12-08 23:31:35 +01:00
Quantumlyy 02c7fc7613 sa 2023-12-08 23:23:30 +01:00
Quantumlyy 7416d21f6f use config for phialing cabinet values 2023-12-08 23:22:19 +01:00
Quantumlyy d3ad57a622 sa 2023-12-08 23:15:21 +01:00
Quantumlyy 0578441707 check for beehousing instead of apiary 2023-12-08 15:09:44 +01:00
Quantumlyy 07a987151e differentiate essentia based on first inserted 2023-12-08 15:05:59 +01:00
Quantumlyy c23401e45c add tc essentia bee 2023-12-08 11:43:11 +01:00
Quantumlyy e03d4da989 add basics for phialing cabinet 2023-12-08 11:36:56 +01:00
Quantumlyy 4c47f77214 why was that there? 2023-12-07 22:48:48 +01:00
Quantumlyy bdd76306bb revert slot move 2023-12-07 22:40:49 +01:00
Quantumlyy ae246d87eb extract MagicApiaryInventory into file 2023-12-07 21:40:37 +01:00
Quantumlyy c8aaeba7cb edit frame and product slots 2023-12-07 19:08:06 +01:00
Quantumlyy 7345669405 remove pointless arithmetic 2023-12-07 18:06:22 +01:00
Quantumlyy 5e912b69bd remove unused methods 2023-12-07 18:00:36 +01:00
Quantumlyy 481c22a19d use apiary inventory and beelistener 2023-12-07 16:49:09 +01:00
Martin Robertz 4103ce72e5 sa 2023-12-06 12:42:02 +01:00
Martin Robertz 116e3610e6 fix wci 2023-12-06 12:36:23 +01:00
Martin Robertz 702a02e943 update gradle+deps 2023-12-06 12:18:58 +01:00
Alastors b200f3006a Merge pull request #33 from GTNewHorizons/ethereal-shard-dupe-fix 2023-12-06 02:42:13 -05:00
Alastors 322b8d0944 Fix star imports
it's always the damn star imports
2023-12-06 02:34:07 -05:00
Alastors b5e1046904 clearing repositories 2023-12-06 02:10:10 -05:00
Alastors f0f51be20e Update NodeHelper.java 2023-12-06 02:08:55 -05:00
Alastors c3b0378096 forgot to update the buildscript 2023-12-06 01:55:48 -05:00
Alastors baf9f915e5 actually got the bug this time 2023-12-06 01:53:56 -05:00
Alastors 0d97d836a3 fixing the ethereal shard dupe 2023-12-06 00:08:11 -05:00
Martin Robertz f777cf976d Merge pull request #31 from hacatu/master
Buffed magic, resiliant, and basic blood frames
2023-09-13 08:54:44 +02:00
Gabriel Eiseman bd6887c598 Base blood frame should be +2 like magic frame 2023-08-28 11:35:12 -04:00
Gabriel Eiseman acf2525801 Buffed magic, resiliant, and basic blood frames 2023-08-25 12:29:35 -04:00
Martin Robertz 054bf8f329 update bs+deps 2023-07-18 20:43:00 +02:00
Martin Robertz 418a322378 Merge pull request #30 from hacatu/master
Fix Additive Production
2023-07-18 20:41:16 +02:00
hacatuandJakub dcf47bb393 Fix comment
Co-authored-by: Jakub <53441451+kuba6000@users.noreply.github.com>
2023-07-18 16:00:35 +00:00
hacatuandJakub 5ca5c11fc9 Update magic apiary
Co-authored-by: Jakub <53441451+kuba6000@users.noreply.github.com>
2023-07-18 15:45:18 +00:00
Gabriel Eiseman 991c4fff5e Fully normalize positive frames to -1 2023-07-18 09:44:01 -04:00
Gabriel Eiseman 137784f76d Nerf the actual production modifiers for frames and the magic apiary 2023-07-17 12:48:39 -04:00
Gabriel Eiseman bde910d708 Nerf the actual production modifiers for frames and the magic apiary 2023-07-17 12:42:29 -04:00
Gabriel Eiseman befd485d39 Fixed blood magic oblivion-like frames to actually prevent production 2023-07-14 17:55:48 -04:00
Gabriel Eiseman e56e056c5d Fixed production modifiers to be additive 2023-07-14 16:05:06 -04:00
Martin Robertz ce4f1880ca Merge pull request #28 from GTNewHorizons/fix
Fix
2023-05-03 21:49:17 +02:00
kuba6000 520d2e09e1 fix 2023-05-03 21:42:34 +02:00
Martin Robertz 870eafbbe4 update dep 2023-05-03 21:24:41 +02:00
Martin Robertz d9ef30fe32 Merge pull request #27 from GTNewHorizons/TconNuggetREmoval
Tcon nugget r emoval
2023-05-03 21:19:58 +02:00
Runakai1 0112a7f104 Spotless 2023-05-03 15:34:38 +02:00
Runakai1 9724d519e8 Tcon Nugget Conversion 2023-05-03 14:54:32 +02:00
Martin Robertz 3d562d0052 Merge pull request #20 from GTNewHorizons/Blood-Frames
Addition of Blood Magic Frames
2023-04-30 20:14:21 +02:00
Alexander Anishin 9f17d8ceff Added configuration for new modules 2023-04-30 20:36:44 +03:00
Alexander Anishin 614acf5114 Moved ring code to optional module 2023-04-30 20:13:07 +03:00
Alexander Anishin b338d97517 Fixed multipler issue with blood frames 2023-04-30 20:10:34 +03:00
Alastors 2870e06387 Actual Final PR of this 2023-04-30 10:16:06 -04:00
Martin Robertz 96514b1aff Merge pull request #25 from GTNewHorizons/Blood-Frames-spotless-fixes
Spotless apply for branch Blood-Frames for #20
2023-04-30 12:11:40 +02:00
GitHub GTNH Actions f85900d9a8 spotlessApply 2023-04-30 10:10:49 +00:00
Martin Robertz 66b1f3e075 Merge branch 'master' into Blood-Frames 2023-04-30 12:06:03 +02:00
Martin Robertz e053b019af Merge pull request #19 from Cardinalstars/master
Collector's Bee Ring feature
2023-04-30 11:42:59 +02:00
Alastors 5dfa179c87 Final Pull on this PR
There of course will need to be further balancing in the future, but I have handled this PR to the absolute best of my ability, and as I have little to no experience with BM within GTNH as a whole, I have no true ability to balance the passive LP cost by myself, as such I think we should let this out as it is, and balance as we get responses out in the wild.
2023-04-29 22:01:36 -04:00
Alastors 966e4ba2f2 WE'VE FINALLY FIXED IT 100%
@kuba6000 @firenoo holy christ guys, we've actually finally fixed this piece of crap, it took 2 grueling days, but we actually fixed the thing.
2023-04-29 19:34:52 -04:00
Alastors 1cbe881ae3 firenoo fix 2023-04-29 18:49:47 -04:00
Alastors b0b38a472a small update to BloodBase 2023-04-29 18:31:27 -04:00
Alastors 5f56b46e00 Kuba requested changes, what am I doing wrong? 2023-04-29 18:25:31 -04:00
Alastors 83b0bfc504 I actually fixed it this time 2023-04-29 16:34:34 -04:00
Alastors fe56288c72 I forgot to spotless 2023-04-29 15:47:00 -04:00
Alastors ff25ec619c Everything works again 2023-04-29 15:35:23 -04:00
Alastors c4ef06b027 Revert "Revert "Add recipes and research nodes""
This reverts commit fa10e888dc.
2023-04-29 15:12:06 -04:00
Alastors 0b6c1cc345 Revert "Adding back the textures and lang file"
This reverts commit 02afe5dbc8.
2023-04-29 15:12:04 -04:00
Alastors 0efc169ef7 Revert "Remove comments + add helper"
This reverts commit d83a0cc775.
2023-04-29 15:11:52 -04:00
Alastors d83a0cc775 Remove comments + add helper 2023-04-29 15:08:00 -04:00
Alastors 02afe5dbc8 Adding back the textures and lang file 2023-04-29 15:02:18 -04:00
rjnasers 951f5a1ad5 Forgot Spotless 2023-04-29 13:21:23 -05:00
rjnasers 1cbc997be3 Adding fix that should make calls only once per second and acts the same. After testing it seems to work, but if somewhere an effect is implemented very weird it might not. 2023-04-29 13:20:38 -05:00
Alexander Anishin f3d3a0a2df Code refactoring 2023-04-29 13:11:51 +03:00
Alastors fa10e888dc Revert "Add recipes and research nodes"
This reverts commit 1e0c7d3c5e.
2023-04-29 02:34:54 -04:00
Alastors fdc1301b43 Revert "fix the glitch"
This reverts commit 3afee4f553.
2023-04-29 02:26:52 -04:00
Alastors 756b186db4 Revert "fix?"
This reverts commit 80c1c4d5da.
2023-04-29 02:26:50 -04:00
Alastors 639c53a01d Revert "Gonna be annoyed if this works"
This reverts commit bc963b0d7e.
2023-04-29 02:26:48 -04:00
Alastors 309a9c0818 Revert "work?"
This reverts commit c3fcb6fc28.
2023-04-29 02:26:46 -04:00
Alastors 2c547e3851 Revert "please fix"
This reverts commit 9f1642fd5b.
2023-04-29 02:26:42 -04:00
Alastors 79d0283901 Revert "Update Config.java"
This reverts commit 17768a1300.
2023-04-29 02:26:40 -04:00
Alastors 918ec20739 Revert "Update BloodHelper.java"
This reverts commit 5b4aaf50f4.
2023-04-29 02:26:38 -04:00
Alastors 2ea0a44429 Revert "Update Config.java"
This reverts commit 98fd7c1e19.
2023-04-29 02:26:36 -04:00
Alastors 8f919fc688 Revert "Update Config.java"
This reverts commit c209ef59fb.
2023-04-29 02:26:33 -04:00
Alastors c47b50b617 Revert "Update Config.java"
This reverts commit c31726001b.
2023-04-29 02:26:19 -04:00
Alastors 764fda0985 Revert "Update Config.java"
This reverts commit 806c326b62.
2023-04-29 02:26:17 -04:00
Alastors 8412246e3e Revert "Update Config.java"
This reverts commit d612f8c520.
2023-04-29 02:26:13 -04:00
Alastors 1391dd3ed6 Revert "Update BloodHelper.java"
This reverts commit a64ae86853.
2023-04-29 02:26:10 -04:00
Alastors cf6536c17f Revert "please fucking work"
This reverts commit 66c5bdf2ca.
2023-04-29 02:26:08 -04:00
Alastors fddc31a8f5 Revert "a"
This reverts commit 5e5a80fb5c.
2023-04-29 02:26:06 -04:00
Alastors 840771f5f4 Revert "b"
This reverts commit b76b77d4a3.
2023-04-29 02:26:03 -04:00
Alastors b76b77d4a3 b 2023-04-29 02:20:36 -04:00
Alastors 5e5a80fb5c a 2023-04-29 02:17:33 -04:00
Alastors 66c5bdf2ca please fucking work 2023-04-29 02:13:36 -04:00
Alastors a64ae86853 Update BloodHelper.java 2023-04-29 02:10:01 -04:00
Alastors d612f8c520 Update Config.java 2023-04-29 01:55:44 -04:00
Alastors 806c326b62 Update Config.java 2023-04-29 01:53:15 -04:00
Alastors c31726001b Update Config.java 2023-04-29 01:48:41 -04:00
Alastors c209ef59fb Update Config.java 2023-04-29 01:40:29 -04:00
Alastors 98fd7c1e19 Update Config.java 2023-04-29 01:29:49 -04:00
Alastors 5b4aaf50f4 Update BloodHelper.java 2023-04-29 01:23:41 -04:00
Alastors 17768a1300 Update Config.java 2023-04-29 01:20:13 -04:00
Alastors 9f1642fd5b please fix 2023-04-29 00:49:28 -04:00
Alastors c3fcb6fc28 work? 2023-04-29 00:26:53 -04:00
Alastors bc963b0d7e Gonna be annoyed if this works 2023-04-29 00:22:10 -04:00
Alastors 80c1c4d5da fix? 2023-04-29 00:18:36 -04:00
Alastors 3afee4f553 fix the glitch 2023-04-29 00:13:15 -04:00
Alastors 1e0c7d3c5e Add recipes and research nodes 2023-04-29 00:07:09 -04:00
Alastors 9b21be0eb5 Added Recipes 2023-04-28 13:19:31 -04:00
Alastors 3a0d9352b1 I fucking forgot spotless again 2023-04-28 12:10:59 -04:00
Alastors 108a11c119 Fix? 2023-04-28 12:04:41 -04:00
Martin Robertz e90b40159c derp 2023-04-28 17:56:14 +02:00
Martin Robertz 61398d3139 update dep file 2023-04-28 17:52:05 +02:00
Martin Robertz e1d289bc48 update bs+sa 2023-04-28 17:50:21 +02:00
Alastors 75db1329ea Update Config.java 2023-04-28 11:03:33 -04:00
Alastors 32ffe03aa3 Update Config.java 2023-04-28 10:55:02 -04:00
Alastors 138e8d9c40 Please work 2023-04-28 01:51:07 -04:00
Alastors 6c6b690d57 Update dependencies.gradle 2023-04-28 01:36:51 -04:00
Alastors 726831399d Update dependencies.gradle 2023-04-28 01:30:54 -04:00
Alastors 87ec6c63eb I swear to god if this fixes it 2023-04-28 01:19:22 -04:00
Alastors ef4359835a Should work this time 2023-04-28 01:13:14 -04:00
Alastors b9292af3d9 SpOtLeSsChEcK fAiLEd 2023-04-27 23:40:46 -04:00
Alastors 77936b6dab Finally fixed the optional dependency 2023-04-27 23:35:19 -04:00
rjnasers e24a94f0ba PR comment fixes. 2023-04-27 21:40:15 -05:00
Alastors 1d4a52c3af You gonna work this time? 2023-04-27 22:17:38 -04:00
Alastors c7c47b9a1b fer fecks sake spotless 2023-04-27 22:11:12 -04:00
Alastors e12eda73fc Addition of Blood Magic Frames
Adds the replacement for the Blood Frame from BM, which is soon to be deleted from BM because of glitches, likewise this adds a new frame, The Maddening Frame of Frenzy, both use LP, both need a recipe to be decided on a later date, both need their lp tweaked, the updated LP is currently proposed to be switched to 25k
2023-04-27 22:01:03 -04:00
rjnasers 2b1e179eeb Updating gui 2023-04-27 13:54:13 -05:00
rjnasers dbc4b23821 Updating image 2023-04-27 13:26:27 -05:00
rjnasers f5dc54e1fb Fixing Deps. 2023-04-27 13:09:27 -05:00
rjnasers 500adb0357 Fixing some comment. 2023-04-27 12:48:59 -05:00
rjnasers 7df6221e0b Adding comments and final formatting. 2023-04-26 16:45:06 -05:00
rjnasers 2d78a84df1 Apply spotless and fixing keeping item on death 2023-04-26 16:20:41 -05:00
rjnasers 729908b1b0 Fully Fleshed out Functionality and GUI. Having some small issues with the paritcleFX, but not huge deal right now. Would be nice to have, but crashes make people even sadder. 2023-04-26 15:11:53 -05:00
rjnasers e5cea4e3dd Fixing InventoryBeeRing and adding some minor functionality to ItemBeeRing 2023-04-23 20:39:53 -05:00
rjnasers c17c2f3746 Changes to InventoryBeeRing.java mostly. 2023-04-22 13:44:40 -05:00
rjnasers 951df8a632 Basic bee ring start. 2023-04-22 11:28:20 -05:00
Runakai1 bdb7a53b96 Merge pull request #18 from GTNewHorizons/beeeeeez
Implement accelerated effect on Rejuvenating bee effect + Fix
2023-04-12 15:43:45 +02:00
Runakai1 e5f0fc2368 Spotless 2023-04-12 14:10:24 +02:00
Jakub 702cffe458 Writing code and commiting on the phone be like 2023-04-12 13:30:04 +02:00
Jakub 72b71021de Fix 2023-04-12 13:20:53 +02:00
kuba6000 0149c34d1d Keep as int 2023-04-10 20:29:17 +02:00
kuba6000 caca6a6329 Sanity check 2023-04-10 20:29:06 +02:00
kuba6000 6bd5cc24d3 Implement accelerated effect on Rejuvenating bee effect 2023-04-10 20:23:52 +02:00
kuba6000 4bef945c4e Prevent overflow 2023-04-10 20:21:47 +02:00
Martin Robertz 6fe4436226 Merge pull request #17 from GTNewHorizons/SilBee
Change Silicon Specialty
2023-04-10 15:31:05 +02:00
Runakai1 0f7363c756 Forgot something 2023-04-10 13:46:06 +02:00
Runakai1 afa16af645 Change Silicon Specialty
Changes the Chance from 16->30% (Specialty combs have half the shown chance and since silicon is easy, there is no need to gate it behind 16%) and made it output raw silicon instead of galacticraft silicon
2023-04-10 13:45:01 +02:00
Raven Szewczyk 4ce1caa37e [ci skip] upgraded build system 2023-01-31 09:54:13 +00:00
Jason Mitchell e565d86ed9 [ci skip] Add git-blame-ignore-revs for spotlessApply 2023-01-29 10:24:49 -08:00
Jason Mitchell f1069a91f1 [ci skip] spotlessApply with the new settings 2023-01-29 10:24:49 -08:00
Jason Mitchell 32411450d3 [ci skip] Update buildscript to RetroFuturaGradle 2023-01-29 10:24:14 -08:00
Martin Robertz 49ef624bd4 Merge pull request #16 from GTNewHorizons/yeet_version_checker
update buildscript and remove update checker
2023-01-18 19:47:25 +01:00
Alexdoru 189d305a31 remove version checker 2023-01-18 14:16:53 +01:00
Alexdoru 97a45e8e0a update buildscript 2023-01-18 13:59:18 +01:00
boubou19 8c72b75e0e Merge pull request #15 from GTNewHorizons/interface
Interface IAlleleBeeAcceleratableEffect moved to Forestry
2022-10-13 16:48:19 +02:00
kuba6000 2cca9de690 Interface IAlleleBeeAcceleratableEffect moved to Forestry 2022-10-13 16:14:39 +02:00
kuba6000 6523fb0a1d Remove GT dep 2022-10-13 16:13:28 +02:00
kuba6000 8833aab1f1 Bump Forestry 2022-10-13 16:13:28 +02:00
Martin Robertz 7e9a54ced2 Merge pull request #14 from GTNewHorizons/effects
Implement acceleratable empowering bee effect
2022-10-13 10:09:08 +02:00
kuba6000 14a712260b Spotless 2022-10-12 21:09:45 +02:00
kuba6000 d993c90c3e Buildscript 2022-10-12 21:09:18 +02:00
kuba6000 e73f5a841e dep 2022-10-12 21:06:52 +02:00
kuba6000 9fcf50b61a Update AlleleEffectEmpowering.java 2022-10-12 21:03:29 +02:00
kuba6000 337d8692c6 Implement acceleratable empowering effect 2022-10-12 20:51:36 +02:00
kuba6000 8cf54bb10f Add GT5 dep 2022-10-12 20:03:23 +02:00
Martin Robertz 854ae94be6 Merge pull request #13 from ChromicRedBrick/Fix-duplicate-key
Fix localization keys
2022-10-04 16:53:29 +02:00
ChromicRedBrickandKiwi aea52904d4 Fix duplicate keys
Co-Authored-By: Kiwi <42833050+Kiwi233@users.noreply.github.com>
2022-10-04 19:39:08 +08:00
Martin Robertz 4704d4c18c Merge pull request #12 from Kiwi233/1.7.10-krypt
Update zh_CN.lang
2022-09-24 12:34:28 +02:00
[Kiwi233] 2abb28bd8e Update zh_CN.lang 2022-09-24 14:23:22 +08:00
boubou19 011a5767a7 Merge pull request #11 from GTNewHorizons/feature/checks
Some safety checks
2022-08-03 08:46:47 +02:00
repo_alt 9fa67a8426 Some safety checks 2022-08-03 10:33:33 +04:00
Jason Mitchell fb65570ce9 [ci skip] Migrate github actions to GTNH-Actions-Workflows 2022-07-16 10:49:26 -07:00
Martin Robertz 0901392f11 Merge pull request #10 from GTNewHorizons/QuickBeeDropFix
20% instead of 0.00001% (lmao)
2022-04-27 23:19:18 +02:00
ScriptedPiky 1359133050 20% instead of 0.00001% (lmao)
Why was this even a thing is beyond me
Fixes: https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/10225
2022-04-27 13:12:54 -07:00
Martin Robertz b12577b506 Merge pull request #9 from GTNewHorizons/maven
Maven
2022-03-15 20:00:17 +01:00
bombcar b787d693b9 Maven 2022-03-15 13:36:46 -05:00
Martin Robertz 1f19dc2f5e Merge pull request #8 from GTNewHorizons/fix/ultramine
help suboptimal asm code to not generate GuiContainer in frame info
2022-03-14 07:22:18 +01:00
Glease 4e638db2a7 help suboptimal asm code to not generate GuiContainer in frame info 2022-03-13 20:51:11 +08:00
Martin Robertz db7d6ab7a2 Merge pull request #7 from GTNewHorizons/fix/build
fix the build
2022-03-13 02:51:13 +01:00
Martin Robertz 1db58409ec Update dependencies.gradle 2022-03-13 02:48:54 +01:00
Martin Robertz ff9e54760a Update dependencies.gradle 2022-03-13 02:48:22 +01:00
Glease a15b899913 fix the build 2022-03-13 09:46:38 +08:00
Martin Robertz 68a2880877 Update dependencies.gradle 2022-03-13 02:45:45 +01:00
Martin Robertz 913c4e5d00 Update dependencies.gradle 2022-03-13 02:41:49 +01:00
Martin Robertz 51f161c2e8 Update dependencies.gradle 2022-03-13 02:39:53 +01:00
Martin Robertz a49128337b Update dependencies.gradle 2022-03-13 02:35:30 +01:00
Martin Robertz 4903f97de6 Update build.gradle 2022-03-13 02:31:11 +01:00
Martin Robertz f87a689045 Update dependencies.gradle 2022-03-13 02:30:48 +01:00
Johann Bernhardt 987d7c2b11 Merge pull request #6 from GTNewHorizons/unified-build-script
Migrated to unified build script
2022-01-07 23:58:10 +01:00
Johann Bernhardt 3550fe23d4 Migrated to unified build script 2022-01-07 23:14:30 +01:00
Martin Robertz 237abd6cef Merge pull request #5 from alkcorp/1.7.10-krypt
Allows Backpack to accept wildcard items.
2021-10-07 19:45:58 +02:00
Alkalus 5e86d62433 Allows Backpack to accept wildcard items. 2021-10-07 18:40:01 +01:00
DreamMasterXXL 4c71e42dd6 bump version 2021-08-17 08:57:23 +02:00
Martin Robertz de793aa5fc Update build.gradle 2021-08-14 15:47:50 +02:00
Martin Robertz 58439c0936 Update build.gradle 2021-08-14 15:47:01 +02:00
Martin Robertz ef76ab40e3 Update gradle.properties 2021-08-14 15:43:26 +02:00
Martin Robertz d2a3b91fe0 Merge pull request #4 from D-Cysteine/1.7.10-krypt
Update to latest Forestry API
2021-08-14 15:41:30 +02:00
D-Cysteine a370c61948 Update to latest Forestry API 2021-08-12 20:54:58 -06:00
DreamMasterXXL 04ea5e8862 bump version 2020-12-03 20:37:56 +01:00
Martin Robertz b411fec0c1 Merge pull request #3 from KiloJoel/magnetFix
items go lower and don't move when close
2020-11-22 21:20:48 +01:00
KiloJoel 82368a06bf items go lower and don't move when close 2020-11-22 20:08:47 +00:00
DreamMasterXXL 58a9fa9e0f update(MB)bump version 2020-09-20 22:00:47 +02:00
Martin Robertz bcb38e8718 Merge pull request #2 from TataTawa/patch-1
Update Config.java
2020-07-27 08:58:55 +02:00
TataTawa 59d2f6bdb0 Update Config.java
Aromatic Lump Swarmer now possible for the slot of Swarmer and has the swarm chance of aromaticLumpSwarmerRate , it is a bug since Magic Bees 2.0.0
2020-07-27 03:15:21 +00:00
DreamMasterXXL 989bb6f917 bump version 2020-05-31 10:39:11 +02:00
Martin Robertz 9c044ffc9a Merge pull request #1 from Kiwi233/1.7.10-krypt
Update zh_CN.lang
2020-05-30 08:29:13 +02:00
[Kiwi233] ce32e21597 Update zh_CN.lang 2020-05-30 09:19:58 +08:00
Dream-Master 2375121778 rename version id 2020-03-08 18:56:14 +01:00
Dream-Master 5e2543027d fix broken gradle properties 2020-03-08 18:13:40 +01:00
Dream-Master 74afd10913 Merge remote-tracking branch 'TataTawa/1.7.10-krypt' into 1.7.10-krypt
# Conflicts:
#	.gitignore
#	gradle.properties
2020-03-08 18:10:13 +01:00
Dream-Master 1ef16b4dba Update gradle
not working
add libs
add gitignore
2020-03-08 18:03:01 +01:00
TataTawa c1cc32b2f6 Merge pull request #1 from ForestryMC/mc-1.7.10
[1.7.10] Thaumcraft/Thermal compat updates and fixes (#68)
2019-12-30 11:02:38 +08:00
KryptonCaptain 451f183e83 Add config for node max size
Nexus bees can be limited in their influence, if you so choose
2019-08-24 11:03:36 +10:00
KryptonCaptain bff3c669bf git stuff 2018-08-08 11:31:14 +10:00
KryptonCaptain 6c28a687ab [1.7.10] Thaumcraft/Thermal compat updates and fixes (#68)
* quick fixes 1

Fix for Brainy producing a deprecated Thaumcraft item

* quick fixes 2

Added TE signalum and lumium bees
Investigating why Amped/Rocking spawn Blizz instead of respective TE mobs

* More Thaumcraft compat

Fixed only some hives having aspects assigned
Removed the [MB] tag from research. This hasn't been needed since TC3, when addons didn't have their own tabs
Added Void metal scoop and grafter for the eldritch-inclined apiarists
Added uncommon rarity to Thaumium scoop/grafter for consistant tool look
2018-06-15 16:22:12 +02:00
KryptonCaptain 918334e5bf More Thaumcraft compat
Fixed only some hives having aspects assigned
Removed the [MB] tag from research. This hasn't been needed since TC3, when addons didn't have their own tabs
Added Void metal scoop and grafter for the eldritch-inclined apiarists
Added uncommon rarity to Thaumium scoop/grafter for consistant tool look
2018-06-11 19:36:19 +10:00
KryptonCaptain afee91a925 quick fixes 2
Added TE signalum and lumium bees
Investigating why Amped/Rocking spawn Blizz instead of respective TE mobs
2017-09-20 13:54:41 +10:00
KryptonCaptain 9196bee240 quick fixes 1
Fix for Brainy producing a deprecated Thaumcraft item
2017-09-15 22:53:42 +10:00
Elec332 824e72ac82 Fixed missing import from @rmunn 's fix 2017-08-24 00:14:43 +02:00
Elec332 fe7824eef4 build stuff 2017-08-23 10:55:26 +02:00
Robin Munn c796902c91 Fix nodes growing without limit (#33)
With this patch, aura node growth from Nexus bees will be properly
capped at 256 points per aspect, as originally intended, instead of
aspect nodes growing without any limit.
2017-08-20 12:43:13 -07:00
mezz d13d5ec3dd Merge pull request #25 from rmunn/mc-1.7.10
Fix #23: Allow Valiant bees to sometimes drop from hives
2017-07-20 20:27:45 -07:00
Robin Munn 90186aa9be Allow Valiant bees to sometimes drop from hives
Fixes #23.
2017-07-20 21:58:48 +07:00
Robin Munn 155d638647 Fix frequency of rare bee products (#18)
Due to a bug from 2015, many bee products with production chances under
10% were produced 10 times as often as they should have been. For
example, diamond shards were supposed to have a rarity of 6%, but the
bug caused them to have a rarity of 60% instead. This fixes that bug.
2017-07-13 21:04:50 -07:00
Gigabit101 130b7c6836 Added config to disable magnet sounds, Fixed effect jar not dropping inv (#144)
* Added config to disable magnet sounds

* version bump

* Fixed effect jar not dropping inv closes #108
2016-05-02 11:58:03 -07:00
Jason McRay a2ab168d69 Changed oredict entry for Emerald, Diamond and Apatite shards (#142)
Changed oredict for Emerald, Diamond and Apatite shards to nuggets
2016-04-30 12:57:49 -07:00
MysteriousAges 7987c846aa Merge branch 'master' of github.com:MagicBees/MagicBees 2016-02-19 16:29:08 -06:00
MysteriousAges 11eb9e4fb1 Version bump. 2016-02-19 16:28:53 -06:00
MysteriousAges 0569b81126 Merge pull request #127 from MagicBees/gradle-magic
Use gradle magic instead of libs folder
2016-02-19 13:27:41 -06:00
MysteriousAges 264385c778 Version bump. 2016-02-18 21:43:27 -06:00
mezz 93c8fb9dd0 Use gradle magic instead of libs folder 2016-02-11 19:53:23 -08:00
MysteriousAges 36e3209167 Bump remote version check. 2016-01-27 14:39:14 -06:00
MysteriousAges 5c81c964b1 Fixing incorrect EE3 item name for integration. 2016-01-27 14:36:42 -06:00
MysteriousAges dce77fb246 Version bump 2016-01-26 14:09:33 -06:00
MysteriousAges c9fe22c399 Fixing FML Warning for no version param in the @Mod on MagicBees. 2016-01-26 13:10:30 -06:00
MysteriousAges e314a79e24 Fixes AM2 missing product crash. Fixes #81 and #123 2016-01-26 13:01:42 -06:00
MysteriousAges a46274fc6d Bump remote check version. 2016-01-25 14:17:30 -06:00
MysteriousAges 275f03ccba Fixed error in TileEntityVisAuraProvider that prevented the booster from working correctly. Fixes #120. 2016-01-24 16:43:32 -06:00
MysteriousAges 7fa6eb8953 Fixed Shift-click item stacks not moving Princess/Queens and drones into apiary slots. Closes #102 2016-01-24 15:16:49 -06:00
MysteriousAges e6ae553eb8 Fixed problem with Redstone Arsenal items being queried too late. Closes #122. 2016-01-23 19:54:09 -06:00
MysteriousAges 8f5e4127f0 Switching to baubles deobf jar to allow debugging 2016-01-23 19:53:16 -06:00
MysteriousAges 1e082e087f Removing Blood Magic hooks 2016-01-23 17:40:37 -06:00
MysteriousAges 8952663d40 Update BM jar version. 2016-01-22 17:41:43 -06:00
MysteriousAges 2e82ba2bf1 Updating Botania version to match with PR for recipe fix.
Fix missing WoodenDeviceType entry to fix #121
2016-01-19 01:12:52 -06:00
MysteriousAges 9597ebb658 Merge pull request #115 from EXTER7/master
Change Botania related recipes to support Botania r1.8-238
2016-01-13 01:10:11 -06:00
EXTER 5615d2a75b Added more Mana Powders to Botania recipes. 2016-01-12 19:51:42 -04:00
MysteriousAges 3a3bc29155 Merge pull request #113 from MagicBees/api_update
Use new bee API for species and mutations. For Forestry 4.2.1
2016-01-12 17:23:41 -06:00
MysteriousAges c1043bb588 Merge pull request #112 from 3TUSK/zh_CN
Update zh_CN.lang
2016-01-12 17:23:12 -06:00
EXTER e555aeaec2 Changed Botania related recipes to support Botania r1.8-238 2015-12-06 15:44:11 -04:00
mezz ab5b7c7532 Use new bee API for species and mutations. For Forestry 4.2.1 (future) 2015-11-22 09:15:51 -08:00
Urey.X 80a078d2ed Update zh_CN.lang 2015-11-13 20:38:42 -05:00
MysteriousAges ab70d8aec2 Fixing Enchanted Earth ticking things at the top of the world. Thanks @TTFTCUTS. 2015-10-27 13:29:09 -05:00
MysteriousAges e8002e069a Fixed missing import. 2015-10-27 13:26:53 -05:00
MysteriousAges 90e5cf801b Merge pull request #110 from Hexicube/patch-1
Fix for bee name changes in resource packs
2015-10-26 22:13:59 -05:00
Hexicube e5a26e1b88 Fixed bracing
Top kek dev :D
2015-10-26 22:07:42 +00:00
Hexicube 72e8fb4c24 Fix for bee name changes in resource packs
StatCollector includes language files from resource packs, and should be used over LanguageRegistry which only includes language files from mod jars.
2015-10-14 05:58:11 +01:00
mezz a76d0d1c29 Update Forestry version, fix flower providers' growFlowers 2015-10-11 06:46:06 -07:00
MysteriousAges 167b1f5257 Merge branch 'forestry4.0'
Conflicts:
	src/main/java/magicbees/bees/allele/effect/AlleleEffectEmpowering.java
2015-10-04 14:50:28 -07:00
MysteriousAges 01cfec7169 Merge branch 'master' into HEAD
Conflicts:
	src/main/java/magicbees/bees/allele/effect/AlleleEffectEmpowering.java
2015-10-04 14:38:44 -07:00
MysteriousAges 3fde6fb08c Adding sanity checking to Node Empowering effect. Fixes #107 2015-10-04 14:29:44 -07:00
MysteriousAges eacb9f2609 Adding error check to Beegonia to prevent Extra Bees from throwing NoSuchMethodError and crashing. Fixes #105. 2015-10-02 22:40:43 -07:00
mezz 3f43cc52c1 Update Forestry version requirement 2015-10-02 15:18:18 -07:00
mezz f1086f3095 Update for Forestry 4.0 2015-10-01 21:54:43 -07:00
MysteriousAges 2503c94b83 Preventing mysterious Magnet from picking up player's own shot projectiles. Doesn't _really_ fix #96, but it's the best I can do without special-casing to hell and back again. |: 2015-09-29 17:35:44 -07:00
MysteriousAges af44fb9d89 Disable TE/TF bees when mod is not present. 2015-09-27 17:25:06 -07:00
MysteriousAges 8569a43f87 Added new bees. What is wrong with me. 2015-09-26 19:13:54 -07:00
MysteriousAges bd8fa92266 Adding a null check in AlleleEffectSpawnMobWeighted. Preferred syntax to PR from #87. 2015-09-26 16:06:54 -07:00
MysteriousAges 4d2ea94b76 Refactored mod helper handling to use an interface and automatically grab all of them after registration.
Added placeholder effect allele so if any 'oddness' happens when mods are added/removed or compat switched on/off bees won't lose their effects or crash the world.
Removed classes no longer used (BlockPlanks, BlockSlab). cya cya cya
Added alleles for Blitz & Basalz spawning in anticipation of the relevant bees.
2015-09-26 02:23:02 -07:00
MysteriousAges 8d65e675d1 Collapsing TE & TF helpers into ThermalModsHelper.
Moving Thermal * item refs from Config into helper.
2015-09-26 00:48:19 -07:00
MysteriousAges 8beb50fcf8 Adding regular product for Void bee. 2015-09-24 18:14:58 -07:00
MysteriousAges 800799e85c Reset version to 2.3.6 (never actually released, herpderp.)
Added Void metal bee.
Moved EffectData into effect package.
Changed Aura Node flower provider to correctly identify all varities of node.
2015-09-24 18:04:12 -07:00
MysteriousAges 66c0f02a6e Merge branch 'master' of github.com:MagicBees/MagicBees 2015-09-18 15:27:51 -07:00
MysteriousAges aa2ef7f24d Updating Botania version.
Fixing bugs with the Hibeescus: -Mana bar not showing -Bee stack not dropping on flower break
Fixing Forestry NEI plugin crash.
2015-09-18 15:16:58 -07:00
MysteriousAges 4326da4013 Merge pull request #97 from Vexatos/patch-3
Update de_DE.lang
2015-09-09 19:09:39 -07:00
MysteriousAges 3d61472a7e Fixing blood magic integration. Closes #90 2015-09-07 12:30:44 -07:00
Vexatos 97d50f0405 Update de_DE.lang 2015-09-07 19:12:33 +02:00
Vexatos ab8a16b26d Update de_DE.lang 2015-09-07 19:11:18 +02:00
MysteriousAges ce8fb0323d Bumping version check file to 2.3.5 2015-09-05 15:53:01 -07:00
MysteriousAges 89975c8718 Adding Baubles compat for Mysterious Magnet in the amulet slot, cleaning up code to make it more readable. Closes #59. 2015-09-05 15:49:39 -07:00
MysteriousAges 7ae7af2238 Version bump. 2015-09-04 18:03:24 -07:00
MysteriousAges 0bdbcdb2f8 Adding products & mutations for TC4 high end bees. 2015-09-04 17:47:12 -07:00
MysteriousAges 354f2ef71b Adding node effect bees. 2015-09-04 15:40:00 -07:00
MysteriousAges 4c93eb6bf4 Update to forestry 3.6 API.
Adds Aura node Recharge effect.
2015-09-03 16:17:05 -07:00
MysteriousAges 922a8fffd6 Refactoring HiveDescription to remove static initializer; attaching data via constructors instead. 2015-09-02 13:47:27 -07:00
MysteriousAges ae15b9e77f Fix for hive spawns that should spawn regardless of climate. Closes #95 2015-09-02 13:32:38 -07:00
MysteriousAges 03068d7ddb Moving to Forestry 3.6; updating deprecated methods to new versions. 2015-08-25 17:31:25 -07:00
MysteriousAges a1a4506a14 Correcting Cobalt bee mutations. Closes #91. 2015-08-25 16:53:53 -07:00
MysteriousAges 4f7370b521 Adding Enchanted Earth. 2015-08-22 15:04:39 -07:00
MysteriousAges 25a17fcbfd Bumping remote version check number. 2015-08-17 00:09:33 -07:00
MysteriousAges 9a3fb6ba16 Update version check file. 2015-07-23 11:50:54 -07:00
MysteriousAges 07fde529a4 Changing Manasteel scoop & grafter to use sticks instead of livingwood twigs to avoid recipe conflicts with Botania items. Closes #82 2015-07-22 12:52:28 -07:00
MysteriousAges aad6b1fa13 Removing isPassive override on Beegonia. Closes #83 2015-07-22 12:49:23 -07:00
MysteriousAges 651aa82045 Tweak to floral bees' production rates. Moar flowers plz 2015-07-09 16:38:37 -07:00
MysteriousAges c078d1a24c Adding loc strings for new features in Extra Bees. 2015-07-08 19:48:05 -07:00
MysteriousAges e87af0d409 Fixing Blood Magic bees for products & mutations. 2015-07-08 19:32:42 -07:00
MysteriousAges fde41046d6 Fixing issue where Botania bees are not correctly disabled when Botania compat should be disabled. 2015-07-08 13:06:09 -07:00
MysteriousAges 77d2833e7e Fix error in Silicon bees' name.
Bumping revision version in gradle.properties
2015-07-04 11:19:47 -07:00
MysteriousAges cc4ac2a389 Merge pull request #79 from MagicBees/ae2MatBees
Ae2 mat bees
2015-07-03 19:05:16 -07:00
MysteriousAges fa5c8aa264 Adding bees for AE2 materials. Closes #72
You're welcome, @FireBall1725 =D
2015-07-03 19:03:13 -07:00
MysteriousAges 7ee2bc991e Merge branch 'master' into ae2MatBees 2015-07-03 16:00:05 -07:00
MysteriousAges 5f78df9fe8 Implementing ISidedInventory on the Magic Apiary, 'cause I forgot. :x 2015-07-03 15:48:06 -07:00
MysteriousAges 7124041129 Added BigBad Bee mutation.
Closes #71
2015-07-03 14:50:34 -07:00
MysteriousAges dc7c54f85a Bumping Blood Magic & Botania versions. 2015-07-03 14:10:30 -07:00
MysteriousAges d0ce872a13 Adding safeguard to Hibeescus pickup logic to prevent single-frame dupe issue.
Closes #76
2015-07-03 13:38:59 -07:00
MysteriousAges fcdf5bd5b3 Adding new entries for Botania pages that were previously piggybacked on existing entries.
Closes #74
2015-07-03 13:34:12 -07:00
MysteriousAges 7a77dca7c7 Add AE2 Helper 2015-07-03 12:45:23 -07:00
MysteriousAges 3fad743f61 Some work on AE2 bees. 2015-07-03 12:38:31 -07:00
MysteriousAges 787a20c0da Merge pull request #75 from Vexatos/patch-2
Update de_DE.lang
2015-07-03 12:36:55 -07:00
Vexatos b326e366b6 Update de_DE.lang 2015-06-27 17:27:25 +02:00
MysteriousAges be652f2fd8 Tweaking Thaumcraft bee species products again. Closes #67. 2015-06-21 22:29:57 -07:00
MysteriousAges 6c61749d35 Merge branch 'master' of github.com:MagicBees/MagicBees 2015-06-19 23:49:22 -07:00
MysteriousAges a0cf62c2a0 Tweak to Doctoral Bees sprite. 2015-06-19 23:48:59 -07:00
mezz 0f644270cc Add Forestry Dev jar as a runtime dependency 2015-06-19 21:18:36 -07:00
mezz fbbc0c5050 Use Forestry API jar instead of Dev jar (woo!) 2015-06-19 20:47:13 -07:00
MysteriousAges 71686766a9 Spalling! 2015-06-19 14:19:12 -07:00
MysteriousAges 8e7767d4ba Adding Osmium bees using Ore Dictionary queries for products.
Add compatability for non-TCons Cobalt to Cobalt bee.
2015-06-19 14:02:44 -07:00
MysteriousAges e5f296cf83 Merge branch 'master' of github.com:MagicBees/MagicBees 2015-06-19 11:25:43 -07:00
MysteriousAges e0432846d5 Removing references to Forestry classes outside the API. Oops. 2015-06-19 11:25:29 -07:00
MysteriousAges e9c1e5cf8c Sorting out problems with initialization order of item fetching, mod helper setup and bee alles & species setup.
Closes #70
2015-06-19 11:10:36 -07:00
MysteriousAges 12dd21e35a Merge pull request #69 from Vexatos/patch-1
Update de_DE.lang
2015-06-18 22:52:48 -07:00
MysteriousAges 8ef17ecbc9 Removed reference to internal Forestry method. (Bad Myst! Go to your corner.) 2015-06-18 13:05:37 -07:00
Vexatos bab96ead6b Update en_US.lang 2015-06-13 10:50:37 +02:00
Vexatos 07ca48aa43 Update en_US.lang 2015-06-13 10:50:13 +02:00
Vexatos 0715532170 Update de_DE.lang 2015-06-13 10:49:33 +02:00
MysteriousAges b43137e399 Merge pull request #61 from 3TUSK/patch-1
Update zh_CN.lang
2015-05-20 00:30:25 -07:00
MysteriousAges 707266cad7 Moving some helper block & item grabbing to postInit; GameRegistry seems more reliable there. Should close #58 #64 2015-05-20 00:27:58 -07:00
MysteriousAges 7a028787c5 Merge branch 'master' of github.com:MagicBees/MagicBees
Conflicts:
	src/main/java/magicbees/main/utils/MoonPhase.java
2015-05-19 23:12:09 -07:00
MysteriousAges 1c5d255f58 Adding alternate localization scheme for moon phase sensitive mutations. Closes #54. 2015-05-19 23:11:14 -07:00
MysteriousAges 4f41f39f92 Adding alternate localization scheme for moon phase sensitive mutations. Closes #54. 2015-05-19 23:09:10 -07:00
MysteriousAges 7e930f44be Tweaking Deep hive spawn rates & locations. Closes #55. 2015-05-19 19:19:18 -07:00
MysteriousAges 23b595e250 Update Forestry's honey fluid name. Fixes #65 2015-05-19 19:11:11 -07:00
MysteriousAges 0c9b6df7b2 Updating localization. 2015-05-12 00:59:02 -07:00
Urey.X. cddddca223 Update zh_CN.lang
To catch up latest version...
2015-05-10 16:52:02 -04:00
MysteriousAges c62db23f79 Adding config values for Hibeescus.
Adding redstone sensitivity to Hibeescus to not pick up princesses/queens when it has a signal.
Adding extra information to Hibeescus lexicon entry.
2015-05-08 15:44:27 -07:00
MysteriousAges 223aba18a4 Adding the Hibeescus to Botania integration.
Fixing "missing" loc strings for Vis Apiary Booster.
Fixing order of petals within some Botania petal recipes.
2015-05-08 14:47:40 -07:00
MysteriousAges 2e4a7d7bb1 Fixing Vazbee creation recipe. 2015-05-02 12:31:58 -07:00
MysteriousAges 913433b0c7 Fixing error with Vis booster's research prerequisite.
Incrementing revision number.
2015-04-29 13:56:23 -07:00
MysteriousAges 3b28e2499e Updating latest version 1.7 2015-04-28 17:58:15 -07:00
MysteriousAges 090a6a2fc3 Fix NPE in SpeciesRecipeManaInfusion - outputCache not properly initalized the first time. :| Closes #50
Adding products to Big Bad Bee.
2015-04-26 14:06:20 -07:00
MysteriousAges 0a28b3fe63 Refactoring Configs to exploit the runtime config changing options in Forge. 2015-04-25 11:33:46 -07:00
MysteriousAges b1a3223fbe Cleaning up more warnings and unused code. 2015-04-25 01:27:49 -07:00
MysteriousAges be12564bcc Renaming fluid textures (2/2; Windows is goofy.) 2015-04-25 00:56:50 -07:00
MysteriousAges e56afa8feb Renaming fluid textures (1/2) 2015-04-25 00:56:24 -07:00
MysteriousAges a74b2da532 Removing defunct TC research.xml
Adding Thermal Foundation fluids to capsules.
2015-04-25 00:50:15 -07:00
MysteriousAges ec00af6c09 Fixing Free Bees Forever non-feature of Hiveacynth. Closes #48 2015-04-24 23:26:13 -07:00
MysteriousAges 43acadef2c Fixing fluid icon registration. Turns out I was trying to save processing but Minecraft is too stupid. Closes #31 2015-04-24 23:24:44 -07:00
MysteriousAges 25df457b18 Renaming ethanol texture to Captital Ethanol. 2015-04-24 23:13:49 -07:00
MysteriousAges 07942d4218 Adding a reference to the Tempus thaumcraft aspect in the API. Closes #44 2015-04-24 21:45:04 -07:00
MysteriousAges 079c572a1a Cleaning up some more warnings.
Fixed error in mob spawn logic.
Howling bee effect.
2015-04-24 21:36:48 -07:00
MysteriousAges 975a63afef Cleaning up some warnings hanging around. (Damn you, type erasure.)
Adding descriptions to a bunch of bees missing them.
2015-04-24 20:22:28 -07:00
MysteriousAges 21b26e491c Turns out there was a reason .setGenomeTemplate existed not in the constructor. Idiot. -_- 2015-04-24 19:59:14 -07:00
MysteriousAges 546ad5fc00 Breaking bee product setup out into separate file. 2015-04-24 18:37:11 -07:00
MysteriousAges 88fa3d6837 Refactoring BeeSpecies a bit. It's cleanup time. -_- 2015-04-24 17:34:06 -07:00
MysteriousAges 83f82decd8 Added Botania Transmutation effect for Alfheim bees.
Refactored the Aura provider code to not depend on Thaumcraft & allow for other modes of providing aura to bees.
Added Mana Apiary Booster.
Added Botania lexicon integration for Alfheim bee, Mana apiary booster.
2015-04-24 14:45:21 -07:00
MysteriousAges 549433e445 Fixing old Loc glitch in Beealyzer for flower providers.
Tweaking TransmutationEffectController's constructor to accept "normal" looking parameter list.
Fixed swapped parameters in SpeciesRecipeElvenTrade.
Adding genomes for Aelfheim bees... still a bit bland. |:
2015-04-24 00:19:02 -07:00
MysteriousAges a6c235aa5a Refactoring Transmutation effect somewhat to allow for greater flexibitily. 2015-04-22 21:22:54 -07:00
MysteriousAges 99c40a99a9 Adding Mutations.
Adding a species' primary or secondary colour to be -1, and if so, shifting it based on client time. (might make it world time later...)
2015-04-22 20:47:31 -07:00
MysteriousAges 30509d4180 Additional assholery. 2015-04-22 18:05:09 -07:00
MysteriousAges fe8c118f7f New Mutations.
Also, I'm an asshole. =D
2015-04-22 18:03:38 -07:00
MysteriousAges e14a3c6a62 WHY ARE YOU STILL THERE GET OUT. 2015-04-22 15:34:26 -07:00
MysteriousAges 83c5e49a28 Adding sme bee products to Botanic line bees. 2015-04-21 16:30:49 -07:00
MysteriousAges 2e42dd5be3 Adding Ignoble trait to Hiveacynth Princesses; Config option for rate of Pristine princesses. 2015-04-21 15:57:19 -07:00
MysteriousAges 00d01c55ad Fixing Extra Bees species names. Closes #42 2015-04-21 15:41:26 -07:00
MysteriousAges 7afda32063 Breaking effect alleles and flower providers into their own namespace.
Cleaned up effect & flower provider alleles.
Added basic genome template for Botanical, Blossoming, Floral bees.
Added FlowerProviderBotania to grow Mystical Flowers.
2015-04-21 14:31:34 -07:00
MysteriousAges eeb6cb356d Adding Crafting & Lexicon entries for Manasteel Grafter & Scoop. 2015-04-21 13:36:51 -07:00
MysteriousAges 61fdd7ad09 Adding Manasteel Grafter & Scoop.
Extrated grafter superclass from Thaumium Grafter so manasteel version can also do the thing with Thaumcraft trees.
2015-04-21 12:49:24 -07:00
MysteriousAges 319682ae2b Cleaning up crashy statements that rely on API classes being present. 2015-04-20 23:24:20 -07:00
MysteriousAges c8f20bd513 Merge pull request #40 from ibmibmibm/master
Update zh_TW.lang

Thanks for your work! (:
2015-04-20 21:42:33 -07:00
MysteriousAges 6f6823b6d2 Adding Botania lexicon entries & crafting recipes for Beegonia & Hiveacynth. 2015-04-20 21:37:49 -07:00
MysteriousAges a65c593c9a Adding Hiveacynth, with several configuration options. 2015-04-20 19:54:00 -07:00
MysteriousAges 55840ac08e Adding Beegonia subtile. 2015-04-20 17:36:55 -07:00
MysteriousAges a7076ce817 Add back the version checker; pings Github now.
Fix NPE on init.
2015-04-19 23:43:37 -07:00
MysteriousAges e5e6474ff9 Adding version check file. 2015-04-19 22:15:48 -07:00
MysteriousAges 1703e8a862 Update load order dependencies. 2015-04-19 15:27:09 -07:00
MysteriousAges b16524e919 Start on Botania integration. 2015-04-19 15:26:40 -07:00
MysteriousAges d8cd023876 Adding BotaniaHelper for future reasons. 2015-04-19 14:17:09 -07:00
MysteriousAges d64ec3caa2 Merge branch 'master' of github.com:MagicBees/MagicBees
Conflicts:
	src/api/java/thaumcraft/api
2015-04-19 13:57:39 -07:00
MysteriousAges 515e0e1751 Once more, with feeling. 2015-04-19 13:56:38 -07:00
MysteriousAges cc9bbefa3f Update README.md 2015-04-19 13:19:46 -07:00
MysteriousAges 18c7790abd Moving Thaumcraft api submodule to the "correct" location.
Adding Blood Magic deobf jar to libs folder for ease of building.
Adding Botania deobf jar to libs folder for ease of building.
rev++
2015-04-19 13:14:29 -07:00
Shen-Ta Hsieh ccbfa4995d Update zh_TW.lang 2015-04-18 16:58:13 +08:00
MysteriousAges 54faf63bab Moved postInit block/item queries for mods to init to try avoiding bee mutation NPEs. 2015-04-13 17:49:26 -07:00
MysteriousAges e14bbe254a Changed bee init to Mod init, from post. Fixes #17. 2015-04-13 09:16:31 -07:00
MysteriousAges 50d914e846 Changed tool registration on Thaumium grafter & scoop. Fixes #34 2015-04-13 09:10:42 -07:00
MysteriousAges 3b8dec5425 Cleaning up misplaced modname references.
Incrementing build number.
2015-04-12 15:42:47 -07:00
MysteriousAges a332d3f2e5 Removing Forestry interfaces from @Optional. Fixes #35 2015-04-12 15:24:35 -07:00
MysteriousAges d921717965 Merge branch 'thaumicApiary-dev'
Conflicts:
	gradle.properties
2015-04-12 14:45:19 -07:00
MysteriousAges 55f9e58297 Converted Russian loc file to UTF-8 from something else. Fixes #33 2015-03-31 14:15:20 -07:00
MysteriousAges 7930108032 Bump version number for release build. 2015-03-29 21:24:49 -07:00
mezz 0fd8b319de Fix apiary not retaining AuraCharge state 2015-03-28 02:51:41 -07:00
MysteriousAges 051cc96514 Research notes for Vis Aura provider, TC crafting & garbage.
Apiary logic tweaks.
2015-03-27 22:35:33 -07:00
MysteriousAges 40fdbb29c6 Finalize Vis Apiary Booster crafting recipe.
Better IMagicApiaryAuraProvider search algorithm.
Reformat ThaumcraftHelper; removed old method, Add enums for wooden & metal TC devices.
2015-03-27 16:31:15 -07:00
MysteriousAges 52798c8175 Vis aura provider rendering!
Rename EfectJarRenderer to RendererEffectJar.
2015-03-26 22:19:40 -07:00
MysteriousAges a5fed5c9b7 Change Apiary to query chunks for IAuraProvider directly without going through the world object. 2015-03-26 13:57:29 -07:00
MysteriousAges 07624a3a4c Change HiveType to check spawn location to see if occupant bees can actually work in the biome, and not spawn if they cannot. 2015-03-26 13:05:15 -07:00
MysteriousAges dc4cd3331c Removing unnessecary try/catch from thaumium tools; moving to item init. 2015-03-24 16:18:10 -07:00
MysteriousAges 6ea6f1e017 Adding temporary crafting recipes for Magic Apiary & vis aura converter. 2015-03-21 21:26:51 -07:00
MysteriousAges cb7b515626 Added network event for updating bit flags.
Magic Apiary pulls charges from Aura Providers.
2015-03-21 20:45:36 -07:00
MysteriousAges 46cb2cb95a Add VisAuraProvider. Placeholder texture, placeholder name, placeholder EVERYTHING.
Add crude search mechanism for Aura Providers to Magic Apiary.
2015-03-21 18:20:45 -07:00
MysteriousAges cc987d6ac8 Renaming Thaumic Apiary to Magic Apiary. 2015-03-20 16:52:42 -07:00
MysteriousAges 4f39132e4e Adjusting lifebar locations in Apiary GUI. 2015-03-19 14:02:43 -07:00
MysteriousAges 4938c29e8c Deleting reference package. Not needed.
Moving Apiary config location - not Thaumcraft specific.
Adding ItemStackUtils - generic item stack/inventory functions.
Thaumic Apiary has baseline functionality. Bees work in it.
2015-03-19 13:51:41 -07:00
MysteriousAges cbb0b15dee Adding network packet stuff. 2015-03-18 23:53:22 -07:00
MysteriousAges b881283492 Updating GUI texture. 2015-03-18 23:52:55 -07:00
MysteriousAges 5d4b84727d Work on Thaumic Apiary. Creating Packet Handler for sending network events (ie queen item stack changes)
Tweaking textures on thaumic apiary again
Adding MORE crap to gitignore
build.gradle missing a runDir argument, apparently.
2015-03-17 23:03:48 -07:00
MysteriousAges ad9135590d Starting to flesh out Thaumic Apiary. 2015-03-15 01:06:14 -07:00
MysteriousAges 5cd884929f Moving the thaumcraft submodule to a place where Eclipse won't bitch me out about it. @_@
Added the 'mods/' folder to gitignore. Don't need that stuff in the repo, kthxbai
2015-03-15 00:45:43 -07:00
MysteriousAges 7bd5e7ac54 Refactoring Effect Jar code a bit. 2015-03-14 15:39:05 -07:00
MysteriousAges 8cda9b9f43 Hazardifying Thaumic Apiary GUI. 2015-03-14 15:38:37 -07:00
MysteriousAges 444303d06d Hazardifying apiary textures.
Deleting unused greatwood & silverwood plank textures.
2015-03-14 15:22:07 -07:00
MysteriousAges b3ca22fd1f Administrative cleanup stuff. Whee. 2015-03-14 15:11:35 -07:00
MysteriousAges 1f8f324c56 Kicking Thaumcraft API out into submodule. You'll have to update submodules to build from now on. (Easier than trying to keep a damned jar up to date manually)
Brushing up build.gradle and creating gradle.properties to manage mod version & version dependencies.
Disabling mod version check for now - Dropbox file has been inaccessible for the better part of a year. (Thanks, dropbox.)
Nuking build version in VersionInfo.java - not used for anything; not useful.
2015-03-14 15:06:01 -07:00
MysteriousAges 3d1cdfa9af Adding BS files to gitignore. 2015-03-14 14:00:07 -07:00
MysteriousAges 1275abc1c4 Cleaning up Config.java some. 2015-03-14 13:59:24 -07:00
Arkandos 3347afb0c3 Update imports to unstable forestry 2015-01-16 22:59:06 +01:00
Arkandos 016049ef67 Merge my branch into the main one, initial work on the thaumic apiary
Might have messed something up. Not quite sure
2015-01-16 22:06:02 +01:00
mezz 33b0af6682 Close #27 Use Forestry API for hive generation 2015-01-13 23:55:31 -08:00
mezz 8bf47d8f5f Update to latest unstable forestry 2015-01-13 23:55:30 -08:00
mezz e9c91cda37 Make config fields start lowercase 2015-01-13 23:55:30 -08:00
mezz f645076eeb Make config options consistently static 2015-01-13 23:55:30 -08:00
mezz 8ccb8f4d75 Merge pull request #28 from Adaptivity/UpdateruRUlang
Update ru_RU.lang
2015-01-10 10:27:27 -08:00
Adaptivity 142637151a Update ru_RU.lang 2015-01-10 17:56:46 +03:00
mezz 469867bc1f Close #22 have Apatite bees require block of Apatite instead of the ore 2015-01-10 00:55:52 -08:00
mezz 712679d8ac Fix #25 Broken Thaumcraft research 2015-01-10 00:49:05 -08:00
mezz 8eb8363b31 missed one 2015-01-10 00:16:21 -08:00
mezz cd758dfec2 Fix #18 Bees not delivering notes in Escritoire 2015-01-10 00:05:04 -08:00
mezz 629cd06ef6 Fix #24 Game does not load if Thaumcraft not installed 2015-01-09 23:13:32 -08:00
mezz 8e11456ea3 Fix #19 Transmuting Effect Causes Server Crash 2015-01-09 22:45:03 -08:00
mezz 2c5e6ca041 Fix #4 Placing a bee into the jar gui causes a crash 2015-01-09 00:21:55 -08:00
mezz a739206e01 Fix typo in Mysterious magnet 2015-01-08 23:46:54 -08:00
mezz 9b9926b340 Update dependencies (Forge, Forestry, Thaumcraft, BloodMagic) 2015-01-08 23:42:46 -08:00
mezz dac7c0ddef Autoformat: spaces to tabs, remove unused imports 2015-01-08 21:48:13 -08:00
mezz a6d1a9f1a4 Create Readme
Based on the forum post http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1287405-magic-bees-magic-themed-bees-for-forestry-the
2015-01-08 18:57:26 -08:00
Arkandos 98a5e73ddf Update the changelog 2014-10-24 19:30:01 +02:00
Arkandos f68b47473f Merged in Astrologers/magic-bees (pull request #4)
new zh_CN.lang
2014-10-24 12:54:47 +02:00
Astrologers a0df95b36c new zh_CN.lang 2014-10-24 18:28:50 +09:00
Arkandos 6ff6b72580 Merged in marcin212/magic-bees (pull request #3)
probably fix: #21 #20 #17.
2014-10-18 17:03:37 +02:00
marcin212 2f5cbb7d3c Fixed issue #23 Infernal Hive not spawning (+1 squashed commits)
Squashed commits:

[ca7be80] probably fix #21 #20 #17.
2014-10-18 16:49:29 +02:00
Arkandos 250e5c159f More bugfixes
Fixed some derps on my side.
Also added a configoption to set thaumcraft sapling droprate
2014-10-09 12:00:15 +02:00
Arkandos 0c5f27e192 Bugfixes
Fixes #14 & #16
2014-09-23 00:30:12 +02:00
Arkandos a6c439c078 Started work on Thaumic Apiary
Also some bugfixes
2014-09-16 20:30:30 +02:00
Arkandos 300a22efab Merged in Vexatos/magic-bees-1/Vexatos/updated-de_delang-1408802455071 (pull request #2)
Updated de_DE.lang
2014-08-23 16:25:28 +02:00
Vexatos fdf89303e4 Updated de_DE.lang 2014-08-23 14:01:07 +00:00
Arkandos ffe3f9d33e Updated to Tarig0s Language files 2014-08-23 01:34:02 +02:00
Arkandos 0e0eaac495 Fixes.
Upped forge to latest.
Now requires Forestry 3.
Hopefully fixed Thaumcraft and ExtraBees integration
2014-08-23 00:33:46 +02:00
Arkandos e9c423579b Seems good. Merging
Merged in Tarig0/magic-bees-1/Tarig0/add-forestry-maven-repo-1408309659498 (pull request #1)

Add forestry maven repo
2014-08-17 23:15:49 +02:00
Tarig0 1be990eb0e Add forestry maven repo 2014-08-17 21:07:42 +00:00
Arkandos 87a918b7c6 Centrifuge fixes
Released version 2.1.18
2014-08-17 19:51:35 +02:00
Arkandos 580f1f4e12 Bugfixes and Modularization
Fixed several crashes due to ThermalExpansion splitting into Thermal
Foundation.
Also added config options to disable modinteraction with other mods.
2014-08-11 14:09:15 +02:00
Arkandos 2b0b729ad0 Started work on BloodMagic bees
Created 2 very basic, BM bees.
Also fixed a crash when trying to get nuggets from an ingot.
Also removed some unneeded nuggets.
2014-08-04 01:28:57 +02:00
Arkandos f5a6ca61ba Started work on Bloodmagic Bees
Implemented BloodMagicHelper to interface with bloodmagic
2014-08-02 18:55:38 +02:00
Arkandos 44ecbbdc45 Implemented config gui
Just implemented a simple config gui. Will try to refine this later
2014-08-01 19:28:34 +02:00
Arkandos d3c6ad5433 1.7.10 Port
Initial 1.7.10 Port. Everything seems to be working, but can't be tested
without access to Thaumcraft.
Got rid of Forestrys Item/BlockInterfaces and created my own.
Started to use @Optional.Interface
Implemented @Pahimar s LogHelper to deal with log4j
Changed localization system to use the vanilla one
2014-08-01 04:05:49 +02:00
MysteriousAges 5b053dd990 Merged in Vexatos/magic-bees-1/Vexatos/en_usxml-edited-removed-german-species-n-1398711730720 (pull request #6)
en_US.xml edited, removed German species names
2014-04-28 12:11:40 -07:00
Vexatos e416d09dde en_US.xml edited, removed German species names 2014-04-28 19:03:16 +00:00
MysteriousAges 723506d04f Merged in Vexatos/magic-bees (pull request #5)
Update de_DE.xml, removed duped entry from en_US
2014-04-28 11:55:37 -07:00
Vexatos c352b42fc1 Update de_DE.xml, removed duped entry from en_US 2014-04-22 10:18:50 +02:00
MysteriousAges 95275e57d6 Merged in Minalien/magic-bees (pull request #4)
Upgraded to 1.7.2.
2014-04-08 16:48:24 -07:00
Ken 'Minalien' Murray 02659b2816 Upgraded to 1.7.2. List of currently-known issues are in CURRENT_ISSUES.txt file. 2014-04-08 12:39:01 -07:00
MysteriousAges 02655f092e Tagging MB with license info 2014-01-24 03:00:08 +00:00
MysteriousAges 03bc6c0d83 Fixing WorldGeneratorHandler.java 'cause oops. 2014-01-21 14:00:32 -08:00
MysteriousAges 85f8ab960d Tidying up from merge some
Switching hivegen to respect isGenMineableReplaceable for crazy mods like underground biomes.
2014-01-18 12:44:14 -08:00
MysteriousAges 2146249b9c Cleaning up code from TE merge 2014-01-16 13:51:51 -08:00
MysteriousAges a4ebd6d859 Merged in jadedcat/magic-bees-jc (pull request #3)
Thermal Expansion and Redstone Arsenal Bees
2014-01-16 12:35:07 -08:00
jadedcat 6c79dfb104 Thermal Expansion and Redstone Arsenal Bees 2014-01-16 14:31:09 -06:00
MysteriousAges 9233d45b33 Revert "Merged in kieranmenor/magic-bees (pull request #1)"
This reverts commit 7082436190, reversing
changes made to fb8873b781.
2014-01-16 12:13:00 -08:00
MysteriousAges 7082436190 Merged in kieranmenor/magic-bees (pull request #1)
Conflicts:
	magicbees_src/magicbees/world/feature/FeatureHive.java
2014-01-15 18:45:50 -08:00
MysteriousAges fb8873b781 Build. 2014-01-12 17:11:25 -08:00
MysteriousAges 12c1b3b5c3 (Possibly) fixing busted AM2 mob spawns. 2013-12-27 13:35:59 -08:00
MysteriousAges ecaa9babf7 TCons renamed their aluminum ore. -_- 2013-12-27 13:35:40 -08:00
MysteriousAges 16086558e4 Fixes to fluids. 2013-12-18 15:34:35 -08:00
MysteriousAges cc4390ec21 Fluid name updates 2013-12-18 13:44:42 -08:00
MysteriousAges 0cb6505fd4 build nonsense 2013-12-18 12:53:07 -08:00
MysteriousAges 52128123ef Shadow on tempus aspect
Config option to switch off otherworld hives spawning in magic biomes.
2013-12-17 11:41:23 -08:00
MysteriousAges 6136a59a15 Tweaks and things. 2013-11-02 13:24:45 -07:00
MysteriousAges 0886fd1389 Build script updates
Changing recipe of Dimensional Singularity to make it less painful.
2013-10-20 23:15:49 -07:00
MysteriousAges ea409d34de Hive frames are not enchantable. (Enchants never did anything anyway.)
Adjusting hive spawn code.
2013-10-10 23:39:04 -07:00
Kieran Menor 1f7fe61afe Rewrote most of the hive spawn logic. Spawn chances for each hive are defined in HiveType.initHiveData() for each biome type.
It builds. Not tested in Minecraft due to lack of 1.6.2 setup.
2013-10-08 02:17:54 +02:00
MysteriousAges 1cb45e24c5 Build script changes for jenkins. 2013-10-06 22:28:56 -07:00
MysteriousAges 7ab175d8b6 Block update message. Guessing 0 people are going to see this, but whatever. 2013-10-06 21:18:50 -07:00
MysteriousAges 31ff948c6d Cleaning up some old commented crap. 2013-10-06 12:26:24 -07:00
MysteriousAges fa2590d41e Fixes. 2013-09-29 19:41:16 -07:00
MysteriousAges 0e77348285 Shit. It's going into the repo. 2013-09-25 21:21:03 -07:00
MysteriousAges 608656be73 Refactoring resource locations to reference CommonProxy.DOMAIN.
Adding the Mysterious Magnet.
2013-09-17 19:40:26 -07:00
MysteriousAges 58c56623af Fixing indentation. (Remind me to not use Eclipse to edit these.) 2013-09-16 10:05:40 -07:00
MysteriousAges f05c12b2ee Holy shit, all the research!
Also, some new stuff. @_@
2013-09-16 00:30:40 -07:00
MysteriousAges 4b802d4727 + Mutating essence
Renaming other essences to shorter forms
2013-09-15 20:47:56 -07:00
MysteriousAges ffd6f2ca94 TC4 & AM2 integration progress! <3 2013-09-12 19:33:08 -07:00
MysteriousAges c309c20268 Seriously Thaumcraft? WTF.
Fixing logic error in Railcraft transmutation effect logic.
2013-09-10 15:24:52 -07:00
MysteriousAges 3d75e97b20 Shit, I did it again.
Cleaning up old TC3 stuff, preparing to try integrating TC4.
Cleaning up helper stuff so it is more consistent & straightforward.
2013-09-09 23:23:00 -07:00
MysteriousAges e23ebd1011 Pulling forward some changes to 1.5 2013-09-04 21:07:04 -07:00
MysteriousAges 707a9bd64e Fixing disable check. 2013-09-04 21:02:36 -07:00
MysteriousAges 6c567e247a Deactivating TC3 integration.
Fixing bad animated textures.
2013-09-04 20:44:03 -07:00
MysteriousAges 132d9b47f0 Merge branch '1.5' of bitbucket.org:MysteriousAges/magic-bees into 1.5 2013-09-04 16:23:20 -07:00
MysteriousAges 5090aa76ea Stuff! (It's in the changelogs.) 2013-09-02 17:32:59 -07:00
MysteriousAges 61e6b82bc3 Mutations for Crumbling & Mutable. 2013-08-28 23:44:38 -07:00
MysteriousAges 533d7d55a8 Crumbling, Transmuting bees & their (crappy) effects. 2013-08-28 17:46:38 -07:00
MysteriousAges 7513ba1255 Fixing mutation rate on Iron bees. 2013-08-26 11:35:53 -07:00
MysteriousAges a560085ac9 Liquid references renaming to Fluid. Should wrap up 1.6 port. 2013-08-25 20:43:00 -07:00
MysteriousAges f9ceeba358 Porting to 1.6. 2013-08-25 19:56:55 -07:00
MysteriousAges c5d59a4505 Moving model texture dir 2013-08-25 18:50:01 -07:00
MysteriousAges 0a6f6eda09 Begin port to 1.6 2013-08-25 18:48:41 -07:00
MysteriousAges ca8b206912 Lang changes.
Effect data fix.
2013-08-18 23:25:33 -07:00
MysteriousAges 3aea0376bc Changelog. 2013-08-02 23:01:22 -07:00
MysteriousAges 7751c01463 Bugs. 2013-08-02 22:58:06 -07:00
MysteriousAges 5699937179 Changing localization method for capsules; adding a %s instead of concatenating the strings in code.
Updates for Lang files.
2013-08-02 13:56:35 -07:00
MysteriousAges abb7e64613 Update langs 2013-07-26 01:31:33 -07:00
MysteriousAges f31d3b9b09 Adding Tinker's Construct metal bees (Aluminum, Ardite, Cobalt, Manyullyn) 2013-07-26 01:25:51 -07:00
MysteriousAges a7515baf69 New logo file for "Magic Bees". 2013-07-19 16:01:18 -07:00
MysteriousAges 888f86d8bb Fixing derp in build script 2013-07-19 15:36:34 -07:00
MysteriousAges 3989430408 3 new essences: Time, armor & oblivion
Crafting recipes for the essences
Recipes for essences -> remaining frames; removed all "no TC" recipes for frames.
Thaumcraft recipe cost reduction on frames
2013-07-19 15:34:54 -07:00
MysteriousAges 99a88cf9bc Fixing hard-coded value in ForestryHelper that effed over mutations into Cultivated.
Updating for whitespace issues in en_US, updating de_DE.
2013-07-17 10:49:04 -07:00
MysteriousAges 6c50d89353 Fixes for new version. 2013-07-16 23:08:57 -07:00
MysteriousAges dbc6acb9c9 Wither/Slow effects respect api armor
Nugget production adjustments
2013-06-17 16:46:05 -07:00
MysteriousAges ff476ad969 Updating langs 2013-06-14 13:41:07 -07:00
MysteriousAges e20ab2dfb9 Updating to Forestry 2.2.8.0
fixing some shit.
2013-06-14 13:30:00 -07:00
MysteriousAges c3210c0883 Uncomment ru_RU localization. 2013-06-10 02:59:44 -07:00
MysteriousAges c2c21301a6 Tweaks to hivegen; still needs more work.
Changing references to "biofuel" to "ethanol"
2013-06-10 01:01:30 -07:00
MysteriousAges 91777b1960 Fixing inconsistent whitespace in lang files. 2013-06-09 23:06:46 -07:00
MysteriousAges 532042393b Fixing inconsistent whitespace in lang files. 2013-06-09 23:05:01 -07:00
MysteriousAges c89c9b0d33 2.0.0 release, some balance tweaks 2013-06-06 15:39:36 -07:00
MysteriousAges 0b000d68b9 Updates to ru_RU localization
Oblivion bee branch
Adding permanent vanilla crafting recipes for Gentle & Metabolic frames.
Mutations for base element bees
2013-06-05 00:11:40 -07:00
MysteriousAges 2f286e8e2c Loc updates. 2013-06-04 23:13:42 -07:00
MysteriousAges 406132babc Adding Wither Skull crafting, sort of.
Loc string fixes
Escritoire work

... I really need to commit more often. :x
2013-06-04 13:26:44 -07:00
MysteriousAges b7a071d887 Fixing bad XML tags 2013-05-31 18:38:46 -07:00
MysteriousAges 37e8965a3c Finishing up Worldgen, added new initial mutations (still several left to go) 2013-05-31 15:09:15 -07:00
MysteriousAges b7714a1435 Moving files around. 2013-05-31 03:33:19 -07:00
MysteriousAges c9bffd18d8 New Forestry API update
Hive gen work.
2013-05-29 17:49:54 -07:00
MysteriousAges 48b9d59f33 Hives, retrogen, worldgen, loc fixes, and assloads of refactoring. 2013-05-29 11:15:25 -07:00
MysteriousAges f7fcf5ed9d Lemming, you are a fiend. 2013-05-28 16:54:28 -07:00
MysteriousAges a95036aa2e Texture changes. 2013-05-28 02:09:29 -07:00
MysteriousAges 10da83f082 Removing PSDs. 2013-05-23 21:11:28 -07:00
MysteriousAges bc596ee3a6 More things! 2013-05-23 21:07:49 -07:00
MysteriousAges 6ae6a8afc0 Refactor ALL THE FUCKNIG THINGS 2013-05-23 21:07:28 -07:00
MysteriousAges bde2baab2d Removing net.mysteriousages.utils 2013-05-23 21:05:19 -07:00
MysteriousAges f33e48ead9 Hive textures! 2013-05-22 20:42:06 -07:00
MysteriousAges 6152508a0b Cleaning up extra function from merge. 2013-05-22 00:45:16 -07:00
MysteriousAges f3ceac50cd Merge branch '1.4.7_ForestryUpdate'
Conflicts:
	thaumicbees_src/thaumicbees/bees/Allele.java
2013-05-22 00:44:29 -07:00
MysteriousAges 98a38a1f6e Forestry 2.2.4 API break updates. 2013-05-22 00:42:49 -07:00
MysteriousAges 7aba3f5f53 Some refactoring; work on some initial hive blocks. 2013-05-19 14:53:27 -07:00
MysteriousAges 66c1a89c32 Fixing render issue with jar. 2013-05-15 10:41:48 -07:00
MysteriousAges 5f9b122d77 Some polishing, registering all the items with Forge because RG asked for it. *worry* 2013-05-13 13:11:34 -07:00
MysteriousAges 71d203bffc Version++ 2013-05-06 00:24:52 -07:00
MysteriousAges 092c076dba Work on the Effect jar, which is finally done! \o/ 2013-05-06 00:24:06 -07:00
MysteriousAges ebb8298c9d Merge branch 'master' into EffectJar
Conflicts:
	thaumicbees_src/thaumicbees/main/Config.java
	thaumicbees_src/thaumicbees/main/ThaumicBees.java
2013-05-01 12:06:48 -07:00
MysteriousAges ab2f6a64d5 Bee mutation swapping around. 2013-05-01 12:02:26 -07:00
MysteriousAges 62b7d28020 Adding Apatite bees.
Mutation class supports block requirements beneath the apiary. Can use blockId/blockId & meta/ore dictionary entry.
Added Ars Magica recipe for Concentrated compound.
2013-04-28 22:11:56 -07:00
MysteriousAges e5ae2527a9 Many Ars Magica bees! 2013-04-25 20:38:45 -07:00
MysteriousAges aca8b2dcb1 Fixing some texture misses, eliminating dead/useless code that throws errors and dead/useless code that does not throw errors
Starting Ars Magica integration.
New Skulking family sprite. Enjoy nightmares.
2013-04-24 15:43:23 -07:00
MysteriousAges 88ec668999 *tableflip* 2013-04-22 16:03:27 -07:00
MysteriousAges 9729d75252 Work on Effect jar;
Fixing TC3 integration on 1.5
2013-04-21 15:38:52 -07:00
MysteriousAges fc2f40d100 Fixing caps on Fuel.png & Oil.png 2013-04-19 12:10:29 -07:00
MysteriousAges ce0424b468 Fixing caps on "fuel.png" & "oil.png" 2013-04-19 12:10:07 -07:00
MysteriousAges 940846d069 ++ version 2013-04-15 02:28:45 -07:00
MysteriousAges b2d18fbb64 Moon dial
Creative tab
2013-04-15 02:27:33 -07:00
MysteriousAges 96389b5329 Port to 1.5.1! Woooo! 2013-04-15 00:17:50 -07:00
MysteriousAges 61afb3a0bc Changelog & last loc string 2013-04-12 01:30:10 -07:00
MysteriousAges bf57ac3491 Lang & changelog. Version ++. 2013-04-11 23:10:40 -07:00
MysteriousAges e8421f40fe New bees, EE3 "integration". Nuggets, Frames. 2013-04-11 23:08:17 -07:00
MysteriousAges b8d12b1f9a Lots of new bees, pulling out most dependencies on Thaumcraft 3 into helper; making it possible to run without. 2013-04-11 02:40:25 -07:00
MysteriousAges 1476470054 More work on Bee Jar. 2013-04-02 20:02:09 -07:00
MysteriousAges 89fb41b814 Flammability configuration option; start of effect jar 2013-03-28 09:21:00 -07:00
MysteriousAges f44591b47d Removing Apiary junk FOREVERZ. (Not really; moved to branch.)
Purify + Node growth? Fuck you. You die here.
2013-03-26 00:00:58 -07:00
MysteriousAges fd82a0ef72 Fixing things, and adding balance to grafter. 2013-03-24 13:34:17 -07:00
MysteriousAges cbbf2558fd Merge branch 'master' of bitbucket.org:MysteriousAges/thaumicbees 2013-03-13 19:53:53 -07:00
MysteriousAges 76f541bc3f Exdending length of come bee effects
Adding hunger-inducing to grafter
Adding Greatwood & Silverwood log planks
Fixing more Version Info shit.
2013-03-13 19:53:39 -07:00
MysteriousAges 7f95da0f6c Implementing some functions for Apiary. I think it might get shelved for now... 2013-03-13 17:39:54 -07:00
MysteriousAges 3798f1f771 Version really should be the ant variable. 2013-03-06 20:59:55 -08:00
MysteriousAges 721a60c994 Holy fuck that was a mess. 2013-03-06 20:44:06 -08:00
MysteriousAges 4a03a5f48c Revert "Merge branch 'machineDev' of https://bitbucket.org/MysteriousAges/thaumicbees into machineDev"
This reverts commit c6720b7417, reversing
changes made to 575c799587.
2013-03-06 19:44:01 -08:00
MysteriousAges c6720b7417 Merge branch 'machineDev' of https://bitbucket.org/MysteriousAges/thaumicbees into machineDev 2013-03-06 19:36:14 -08:00
MysteriousAges 575c799587 Revert "Revert "Merge from master.""
This reverts commit 2c324174e4.
2013-03-06 19:33:09 -08:00
MysteriousAges 2c324174e4 Revert "Merge from master."
This reverts commit e92d9c131e.
2013-03-06 19:30:43 -08:00
MysteriousAges 28f5a15f0a Merge branch 'master' of https://github.com/MysteriousAges/ThaumicBees-Loc 2013-03-06 16:48:31 -08:00
MysteriousAges 9bed2d3749 Fixing problems with grafter not enchanting; version checking. 2013-03-06 13:42:57 -08:00
MysteriousAges 1a394ce858 Changelog. 2013-03-05 18:09:50 -08:00
MysteriousAges 5d3bd8bde2 Adjusting version info to match format Version checking supports. Better fix would be to add support in version checking. 2013-03-05 18:08:53 -08:00
MysteriousAges 5279a6e64a Update to 1.4.3 2013-03-05 01:06:29 -08:00
MysteriousAges 2c2306b223 Adding aspects for Extra Bees items
Adding support for remote version checking! Wahoo!
2013-03-05 00:57:31 -08:00
MysteriousAges 8aaa24c3c1 Adding new keys. 2013-03-04 14:08:42 -08:00
MysteriousAges e32c05ab3e Merge branch 'machineDev'
Conflicts:
	thaumicbees_src/thaumicbees/main/Config.java

Deleting block classes from this branch, because GO AWAY.
2013-03-04 13:18:15 -08:00
MysteriousAges f21bd467c2 Uncommenting blocks in Config. 2013-03-04 13:10:21 -08:00
MysteriousAges d3e93188c0 Edits to build.xml & mod info. 2013-03-04 13:09:50 -08:00
MysteriousAges e92d9c131e Merge from master. 2013-03-04 13:04:21 -08:00
MysteriousAges 1bee56adf3 Die, build.number. You don't need to be tracked. 2013-03-04 13:03:15 -08:00
MysteriousAges 85a2723ef8 Checkin before moving Apiary stuff to branch. 2013-03-04 13:02:15 -08:00
MysteriousAges 29069e7e9f Grafter & Scoop~! 2013-03-03 23:50:29 -08:00
MysteriousAges c8be483bf0 Merge branch 'master' of bitbucket.org:MysteriousAges/thaumicbees
Conflicts:
	thaumicbees_src/thaumicbees/main/Config.java
2013-02-27 19:29:18 -08:00
MysteriousAges 92ace4e9a3 Scoop work. 2013-02-27 17:49:32 -08:00
MysteriousAges aed979a19f dev 2013-02-26 17:56:57 -08:00
MysteriousAges 0fa9a6ed23 New capsule, more refactoring. More research. More config options for capsule stack size 2013-02-22 16:14:17 -08:00
MysteriousAges b3660ecf58 Removing build number from repo. 2013-02-18 12:37:37 -08:00
MysteriousAges 5eb787352b Planks & Refactoring. 2013-02-18 12:13:31 -08:00
MysteriousAges a7774e1fca Loc problems getting fixed. 2013-02-15 13:00:30 -08:00
MysteriousAges 596ae798ec Initial commit. en_US only. 2013-02-12 17:34:33 -08:00
MysteriousAges 902812e015 Starting Localization! Yaaaaaaaaaay 2013-02-12 17:21:29 -08:00
MysteriousAges 0b510e8426 Tweaking the flux & purify bee effect
Commenting out Magic Apiary blocks for a release version.
2013-02-12 13:40:18 -08:00
MysteriousAges d4c5d1e356 Forestry API break not public yet. 2013-02-12 13:13:37 -08:00
MysteriousAges 5a2f360e50 Another FC build.
*Heavily refactored bee code. Much cleaner now I think.
*Temporal bee branch complete, now with more Doctor Who!
2013-02-09 14:12:43 -08:00
MysteriousAges 84ad8b0d7b Lots of work... None of it actually on machines. 2013-02-06 00:33:51 -08:00
MysteriousAges 6a26bec4e1 Fucktons of refactoring.
*Moving ItemManager & BlockManager functionality into Config object.
*New CraftingManager to hold all the crafting stuff
*Shuffling some classes around in packages and whatnot.
*Switching to use the ItemInterface provided by Thaumcraft's API rather than reading configs.
*New texture stuff for a magic apiary.
2013-02-05 01:16:01 -08:00
MysteriousAges 827199b518 :P 2013-02-03 23:44:12 -08:00
MysteriousAges ead879a913 Fixing error with Node Required mutations without specific type
Tweaking scholarly genome (temp. tolerance both 1 -> both 2)
Tweaking Aura Growth/pull bee effect
2013-02-03 17:07:44 -08:00
MysteriousAges 47a2962bd6 Fixing problems with @SideOnly functions again. 2013-01-30 13:22:26 -08:00
MysteriousAges 105a8d47a0 Tweaking Research for "Stark hint" - indicating more research is required.
Adding extra mutation to Vis bee with extra chance.
2013-01-29 18:43:34 -08:00
MysteriousAges ad16a3b999 Adding Weather aspect to the list of Fluxes the Flux bee doesn't generate. (Because it looks like an internal TC thing.) 2013-01-28 21:04:50 -08:00
MysteriousAges 63bb014de8 Bugfixes:
* Re-enabled capsules being added to the liquid dictionary.
* Discovered cause of items being added to creative tabs twice, and killed it.
2013-01-28 14:22:40 -08:00
MysteriousAges dc40994271 Refinements, bug fixes, the Node bee & effect. 2013-01-28 02:20:09 -08:00
MysteriousAges efc2309222 *Vis, Purify & Flux flower provider finalizing
*Solid Flux -> Essentia bottle crafting
*Reseach adjustments
*Apiary Frame adjustments
*Putting try/catch around Backpack init to provide a more useful error message
*Spelling corrections in research.xml, fixed overflow on Metabolic Frame description.
2013-01-27 15:05:15 -08:00
MysteriousAges eafc34cb54 Updating to Forestry 2.0 API & whatnot.
*Hive Frames
*Fixed problems with Ghastly bee
*Better Thaumcraft Integration & fix for NBT Bee recipes
2013-01-26 13:42:39 -08:00
MysteriousAges 4125bbf647 Fixes to make a good build. 2013-01-19 16:00:45 -08:00
MysteriousAges bb5319f177 Many things.
*Added Moon phase influence for mutations
*New branch - Skulking
*Partial new branch - Vis (Aware only)
*Split TC Compat stuff into different package (Hopefully the only place I'll have to update stuff when TC3 API is out)
*Enhancing configs to add items to Thaumaturge's backpack & disable auto-adding of items to other backpacks
*New drops, legit way to craft Bottle o' Enchanting
*Removing BeeClassification - Bulit in stuff FTW.
2013-01-19 03:29:47 -08:00
409 changed files with 24804 additions and 3522 deletions

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
# This is the universal Text Editor Configuration
# for all GTNewHorizons projects
# See: https://editorconfig.org/
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.{bat,ini}]
end_of_line = crlf
[*.{dtd,json,info,mcmeta,md,sh,svg,xml,xsd,xsl,yaml,yml}]
indent_size = 2
+2
View File
@@ -0,0 +1,2 @@
# Ignore spotlessApply reformat
f1069a91f1b2ea9469775696c097dd6fb484e6e8
+44
View File
@@ -0,0 +1,44 @@
* text eol=lf
*.[jJ][aA][rR] binary
*.[pP][nN][gG] binary
*.[jJ][pP][gG] binary
*.[jJ][pP][eE][gG] binary
*.[gG][iI][fF] binary
*.[tT][iI][fF] binary
*.[tT][iI][fF][fF] binary
*.[iI][cC][oO] binary
*.[sS][vV][gG] text
*.[eE][pP][sS] binary
*.[xX][cC][fF] binary
*.[kK][aA][rR] binary
*.[mM]4[aA] binary
*.[mM][iI][dD] binary
*.[mM][iI][dD][iI] binary
*.[mM][pP]3 binary
*.[oO][gG][gG] binary
*.[rR][aA] binary
*.7[zZ] binary
*.[gG][zZ] binary
*.[tT][aA][rR] binary
*.[tT][gG][zZ] binary
*.[zZ][iI][pP] binary
*.[tT][cC][nN] binary
*.[sS][oO] binary
*.[dD][lL][lL] binary
*.[dD][yY][lL][iI][bB] binary
*.[pP][sS][dD] binary
*.[tT][tT][fF] binary
*.[oO][tT][fF] binary
*.[pP][aA][tT][cC][hH] -text
*.[bB][aA][tT] text eol=crlf
*.[cC][mM][dD] text eol=crlf
*.[pP][sS]1 text eol=crlf
*[aA][uU][tT][oO][gG][eE][nN][eE][rR][aA][tT][eE][dD]* binary
+13
View File
@@ -0,0 +1,13 @@
name: Build and test
on:
pull_request:
branches: [ master, main ]
push:
branches: [ master, main ]
jobs:
build-and-test:
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/build-and-test.yml@master
secrets: inherit
+17
View File
@@ -0,0 +1,17 @@
name: Optimize images
on:
pull_request:
branches: [ master, main, release/** ]
paths:
- "**/*.png"
push:
branches: [ master, main, release/** ]
paths:
- "**/*.png"
jobs:
optimize-images:
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/optimize-images.yml@master
secrets: inherit
+14
View File
@@ -0,0 +1,14 @@
name: Release tagged build
on:
push:
tags: [ '*' ]
permissions:
contents: write
jobs:
release-tags:
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/release-tags.yml@master
secrets: inherit
+32
View File
@@ -0,0 +1,32 @@
.gradle
.settings
/.idea/
/run/
/build/
/eclipse/
.classpath
.project
/bin/
/config/
/crash-reports/
/logs/
options.txt
/saves/
usernamecache.json
banned-ips.json
banned-players.json
eula.txt
ops.json
server.properties
servers.dat
usercache.json
whitelist.json
/out/
*.iml
*.ipr
*.iws
src/main/resources/mixins.*.json
*.bat
*.DS_Store
!gradlew.bat
layout.json
+3
View File
@@ -0,0 +1,3 @@
# Any Github changes require admin approval
/.github/** @GTNewHorizons/admin
+4
View File
@@ -0,0 +1,4 @@
Copyright © 2013 MysteriousAges
This work is free. You can redistribute it and/or modify it under the
terms of the Do What The Fuck You Want To Public License, Version 2,
as published by Sam Hocevar. See http://www.wtfpl.net/ for more details.
+13
View File
@@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+25
View File
@@ -0,0 +1,25 @@
# MagicBees
Magic Bees is an addon for Forestry that adds several new bee species with a magical theme. Breeding them will help you brew potions, or give you extra ways to make resources for other magic-themed mods such as Thaumcraft and Ars Magica.
## Installation
Magic Bees depends on Forestry, which is required. You may [download Forestry here](http://www.curse.com/mc-mods/minecraft/forestry).
Minecraft Forge is also needed to run Forestry. Magic Bees will usually work with whichever version of Forge Forestry requires.
To install, simply download the mod from [CurseForge](http://minecraft.curseforge.com/mc-mods/65764-magic-bees) and place in the mods folder of your Minecraft instance.
## Compatability
Adding the following mods will result in additional features being unlocked:
* [Extra Bees](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1284348-1-7-10-1-6-4-forestry-binnies-mods-1-8-0-2-0-dev) - Mutations to get the Thaumic Bees species will use Extra Bees species in some cases. If Thaumcraft is installed, TB will add aspects to Extra Bees items. You will also get access to Thaumic Bees alleles though the genetic machines.
* [Thaumcraft](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1292130-thaumcraft-4-2-3-0-updated-2015-1-5) - Adds several tools related to Thaumcraft & Forestry, as well as adding Thaumcraft aspects to many Forestry items and blocks.
* [Equivalent Exchange 3](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1286564-equivalent-exchange-3-0-1-142) - Adds the Minium Bee, which produces Minium Shards. More features to come in the future.
* [Ars Magica](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1286036-ars-magica-v5-52-014-updated-august-2-1-5-2) - Adds 13 bee species that interact with Ars Magica, or produce AM items.
* [Tinker's Construct](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2218638-tinkers-construct) - Adds 3 new bee species to help produce some of the higher tier metals. The Aluminum bee will also help with producing some lower-tier alloys as well.
## License
MagicBees is licesed under the WTFPL ( http://www.wtfpl.net/ )
Seriously, do whatever. Just don't ask us to support it if we didn't distribute it. =D
We didn't distribute it if you downloaded it from a site other than CurseForge, or from a modpack that does not use CurseForge as their source.
+5
View File
@@ -0,0 +1,5 @@
//version: 1707058017
plugins {
id 'com.gtnewhorizons.gtnhconvention'
}
+275
View File
@@ -0,0 +1,275 @@
2.1.22
+ Added configoption to change thaumcraft saplingdroprate using thaumiumgrafter
* First 1.7.10 update on CurseForge! Woohoo!
* Updated chinese translation courtesy of Astrologers
* Fixed texturebugs with thaumium scoop and grafter
* Fixed backpack issues. Hopefully fixed for real this time
2.1.21
* Bumped forestry requirement to 3.0.0.174 (Might work with lower versions, untested)
* Fixed issue with Thaumic tools not having icons/localized names
2.1.20
* Fixes crash due to not registrering backpack correctly
* Fixes crash when breeding metal bees
* Fixed a missing configoption
* Started work on ThaumicApiary
2.1.19
* Updated to Forestry 3. This is now required.
* Updated Thaumcraft integration to work in 1.7.10
* Updated ExtraBees integration
* Changed all language files to the .lang format
2.1.18
* A few critical bugfixes to stop centrifuge crashes.
2.1.13
Updated to 1.7.2.
2.1.12
Changing hive gen to use isGenMineableReplaceable, which should make Deep hives spawn in Underground Biomes stone.
Fixing logic error in handling world gen/retrogen
2.1.11
Thermal Expansion & Redstone Arsenal bees, courtesy of jadedcat.
Adding missing loc string for Blinding speed allele
2.1.10
Changing Aluminum bees to use changed ore dictionary entries. mDiyo Houuuuuuuuuuuuuuuuuse!
Updating AM2 mob-spawning bees to use newer names.
2.1.9
Adding configuration option to not spawn special hives in Magic Biomes for people who hate fun, and specialness.
Adding a shadow to the Tempus aspect for Vazkii.
Possibly fixing issues with fluid containers.
2.1.8
Fixing inconcistent recipes between Thaumonomicon & actual crafting
Added missing centrifuge recipe for the Transmuting combs. This is the source of Unstable Propolis.
2.1.7
Some non-bee bug removals.
Magnets are ... a bit expensive. >_>;
2.1.6
How about not crashing because I forgot a colour tuple? >.>
Presenting a new bee species: You can't see it though, because it's invisible. >_>
2.1.5
Behold! The Mysterious Magnet! It attracts items to it, and thus, you, from great distances! (well, greater than your arms anyhow.)
Updating TC4 API for when it releases.
2.1.4
Some cleanup of Helper code
Hammering out rest of Transmutation effect, and exposing parts of it in an API so other people can hook into it if they want.
Have some Ars Magica 2 integration.
Also, have some Thaumcraft 4 integration!
2.1.3
Added a new mini bee branch: Polymorphic. It is said Unusual bees can have some unusual effects on the world if they are advanced...
Altered mutation to get Minium bees to fit into the Polymorphic branch.
Crumbling effect ages the area around the hive.
Added an IMC Handler to allow other mods to send an IMC message with key 'addCrumblePair" and a value containing two NBT tags
'source' and 'target' for ItemStacks of the source block and target block. Blocks added on a first-come-first-serve basis.
Only one entry per source block is accepted. Several vanilla defaults are provided, can be overridden using IMC.
Changing humidity tolerance of Sorcerous bees to be actually useful.
Fixed issues with the bee effects rendering (the little bee icons that shoot out of the bee machine while they work) for custom effects.
2.1.2
Fixed issue with mob spawning effects incorrectly checking for effect data variables.
Updating localization files (RU, DE)
2.1.1
Reworking some language entries & code to enable string formatting in capsule names.
Localization file updates.
Tinker's Construct bees (Ardite, Cobalt, Manyullyn) and Aluminum bees.
2.1.0
Added new permanent methods for crafting all frames. These will be available even when Thaumcraft is installed.
Removed temporary frame recipes which used to be available when Thaumcraft was not installed.
Lowered the cost of creating several frames through Thaumcraft. These should still be a viable option with the new recipes.
Fixed issue with foundation-requiring mutations in Forestry Alvearies. (Will likely not work with Extra Bees Alveary blocks)
2.0.5
Fixed hard-coded value in a subroutine that should not have been hard-coded.
2.0.4
Fixed backwards mutation logic.
2.0.3
Adjusting Thaumcraft research notes to reflect recent (Hah!) changes.
2.0.2
Fixed Escritoire/Mutation Notes for bees which require a Thaumcraft Node.
Fixing colour data for Temporal Combs.
Adjusting the production rates on some nugget-producing bees.
Withering bee species now requires arid rather than normal humidity, to conform with the rest of the Infernal line.
Withering and Slow Effects should now correctly be reduced while wearing Apiarist's Armor or other protective gear.
2.0.1
Modifying mutation class to allow block-requiring mutations to work in Alvearies/other multiblock hive structures.
Tweaking hive gen
Fixing mistakes in bee genome templates
Updating Biofuel capsule to use the Ethanol liquid in Forestry
2.0.0
Enabling Retrogen of hives in case you missed them initially.
Tearing out all old mutations, rewriting from the ground up. Maybe these will be less frustrating. ;)
Adding subroutines to make MB species actually worthwhile to check out in the Escritoire. If you get stuck on a mutation, throw it into the table and try out the minigame!
New bee species (Too many to list. Have fun finding them!)
New hives
Added zh_CN localization by crafteverywhere
Added de_DE localization by philip98 and Vexatos
Added ru_RU localization by CrazyTechno and VeryBigBro
=========== Old Thaumic Bees Changelog ================
1.4.7b
Fix for creative mode crash when a certain config option is enabled.
1.4.7a
Update for Forestry Beta.
1.4.7
Added the Bee Collector's Jar.
Created an alternate recipe for the Temporal Frame that is always active.
Adjusted TC3 alternate recipe for the Temporal Frame.
Fixed an issue with the "Pick Block" function on the Greatwood & Silverwood planks. Should also stop NEI from providing incorrect block info on them.
Fixed the Node flower growing flowers.
Adding Apatite bees.
1.4.6
Ars Magica integration! 13 new bee species to help you research & cast spells.
Changing mutations around, because I'm still not happy with them. (Again.)
Many icon & texture fixes. (derp!)
1.4.5a
Repaired Thaumcraft 3 integration for 3.0.4a.
Fixed Biofuel capsules being shown as "Empty x Capsule"
Fixed missing texture for oil & fuel capsules
1.4.5
Added the Jade Moon Dial - tells you what moon phase it currently is for breeding purposes.
Added a creative menu tab for certain Thaumic Bees items - misc resources, capsules, tools.
1.4.4b
Ported to 1.5! Wooo!
1.4.4a
Fixed an isuse that caused GregTech to crash.
1.4.4
Made greatwood & silverwood planks fireproof by default - added a config option to toggle it.
Added Nuggets - Iron, Copper, Tin, Silver, Lead. Should craft into 1st ore dictionary ingot of appropriate type.
Added Shards - Diamond, Emerald.
Added 15 new bees. Have fun~ <3
Added Equivalent Exchange 3 compatability! (It's 1 thing, don't get terribly excited.)
New frame type! Search Strongholds for them.
1.4.3c
Thaumium Grafter now doubles your chance to get Greatwood & Silverwood saplings.
Thaumium Grafter now takes extra damage when trying to break Greatwood & Silverwood leaves.
Thaumium Grafter now has a balancing feature when repairing.
Extra... uh. "Enhancements". =D
1.4.3b
Greatwood & Silverwood planks support BuildCraft facades.
Tweaking Aura cost for Repair on Thaumium Grafters and other balance.
Turns out I can't get the version crap to work properly. More fixes.
1.4.3a
Changed Version info embedded in mod to match format supported by Version checking. Will need to make this more robust in the future.
Fixed bug with Thaumium Grafter not being enchantable.
1.4.3
Added automatic version-checking for ThaumicBees! From this version on, when a new version becomes available, it will notify you in-game. Notifications can be switched off via a config file option.
Fixed missing aspects on Extra Bees combs.
1.4.2
Added Void Capsules - hold up to 8 buckets of liquid with one! It's a waterproof bag of holding! Plus stacking.
Fix: Added Greatwood & Silverwood slabs to the ore dictionary so they should work as normal.
Added Thaumium Scoop - 30 uses, can be enchanted with Repair.
Added Thaumium Grafter - 15 uses, can be enchanted with Repair.
1.4.1
Added Greatwood and Silverwood planks. Since Greatwood and Silverwood are tougher than other trees, you'll need some extra machinery. To obtain these, jam a log of the appropriate tree into a Forestry carpenter and provide a half bucket of water.
Added slabs for the new planks also.
1.4.0a
Fixed some issues with the Node bee's effect.
1.4.0
New branch of bees containing 3 new species. A new type of frame!
Thaumaturge's Backpack now require Amber rather than Gold Nuggets.
Due to popular complaint, the Bees & Magic node now requires Unified Thaumic Field Theory to unlock.
Moving all kinds of string contstants out of code into Localization files.
Also fixed crazy aspects showing up on things that shouldn't have those aspects.
ACTUALLY fixed issue with untyped node mutations failing.
1.3.0d
Fixed an issue with mutations requiring a non-specific type of node to fail.
1.3.0c
Discovered a function call that will crash dedicated servers. If you are running ThuamicBees on a server, please update to this revision.
1.3.0b
Fixed a problem with capsules not being registered with the Forge Liquid Dictionary. You should be able to use them just about everywhere, now.
Fixed the issue with certain items appearing twice in Creative Mode tabs.
1.3.0a
Some bug fixes, including uncommenting some mutation-related code, research tweaking.
Added the last bee for a long while, probably. Good luck getting it.
Common TB crashes stemming from Forestry issues should now be reported a little better, especially the backpack registration & item texture file related things. Errors should appear in your log, so make sure you read the log before you report the error here. It could be something silly on your end that is causing the crash.
1.3.0
3 new species of bee: Vis, Pure, and Flux! Each requires an aura node nearby, and may have some side-effects...
New Thaumcraft research! Open up your Thaumanomicon to see it.
New Apiary Frames! They run off magic, confers bees with bonuses, and may have an impact outside of your apiary...
1.2.705B - Replaced 1.2.705
Fixed issue with bad Mutation class, allowing pure bees to turn into any bee that involves them in a mutation.
Also ACTUALLY fixed issue with Extra Bees loading after ThaumicBees on *nix-based systems.
1.2.705
*Stealth update: Fixed an issue with TB loading before Extra Bees, resulting in some Null Pointers getting passed and choked on. If you get this issue, please re-download 1.2.705. No other changes were made in this version.
*8 new species of bees, including "Praecantatio", which, like the other Elemental bees, may contain Vis shards in its propolis. Some of the new species may also have extra evil involved, so be ready for anything.
*Extra integration with Extra Bees! Mutations for some of the new bees. If Extra Bees is present, their mutations will require EB species rather than the base Forestry species.
*Changed the "Charmed" mutation to avoid conflicting with Extra Bees. (Binnie already had one there, so mine got moved.)
*New bee branch, similar to Extra Bees's mob spawning bees.
*One new bee from a new branch, the rest of which will come once Azanor releases the Thaumcraft API.
1.1.702-67 - Replaced 1.1.702-62
Additional Magic Capsules, featuring ExtraBees liquids, and RailCraft Creosote & Steam. (Yes, steam capsules. It's magic. That's how. :P)
Tagged additional Forestry items with Thaumcraft aspects.
1.1.702-62
Added Magic Capsules!
Compatible with BuildCraft and Forestry liquids, they function almost the same way as refactory capsules, except that they can store 2 buckets' worth of liquid. As such, you cannot right-click with them to scoop up water or lava, but you can use them in bottlers, carpenters, Railcraft's Iron Tanks, Thermal Expansion's liquid transposers, and other things that support the Forge Liquid Dictionary. They can be useful for storing larger amounts of liquids in chests and things. I am also able to add other liquids to them in the future, and liquids from mods that are not present will not appear in the Creative inventory or the NEI listings.
1.0.701-56
Update to Forestry 1.7.0.1/1.7.0.2
Added all kinds of backpack integration for Thaumcraft, including a new Thaumaturge's Backpack and Woven variety. These will suck up shards, Thaumcraft resources such as quicksilver, amber, zombie brains, research fragments and other goodies. Other TC items such as marker blocks, warded stone, candles, logs, leaves and plants also can fall into Forestry's default backpacks as appropriate. (I may have missed some other obvious items.)
1.0.70-53
Update to Forestry 1.7.0.0
1.0.0-50
-Added Thaumcraft aspects to some Forestry items, notably combs and bees. (Finally, something to use those extra drones for!)
-Added another Swarmer inducer item - craftable via carpenter using liquid honey, Royal Jelly, Pollen and Enchanting Drops from Arcane bees. 8 times more effective than Royal Jelly alone!
-Added carpenter recipe for candles using magic wax. Same patterns as with beeswax.
1.0.0-48
-Support for Forestry 1.6.5.5+
-Extra alles for bee mutations!
-Thaumcraft aspects associated with some Forestry items!
1.0.0-35
-Bugfix version to account for launcher jars located outside of expected folder. Replaced 1.0.0-34
1.0.0-34
-Initial Release
+14
View File
@@ -0,0 +1,14 @@
// Add your dependencies here
dependencies {
api('com.github.GTNewHorizons:ForestryMC:4.11.8:dev')
compileOnly('com.github.GTNewHorizons:BloodMagic:1.8.14:dev')
compileOnly('com.github.GTNewHorizons:ThaumicHorizons:1.8.11:dev')
compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.11-GTNH:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:Botania:1.13.16-GTNH:api') {transitive = false}
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.347:dev')
compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.7.34-GTNH:dev')
}
+238
View File
@@ -0,0 +1,238 @@
# ExampleMod tag to use as Blowdryer (Spotless, etc.) settings version, leave empty to disable.
# LOCAL to test local config updates.
gtnh.settings.blowdryerTag = 0.2.0
# Human-readable mod name, available for mcmod.info population.
modName = Magic Bees
# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
# Conventionally lowercase.
modId = MagicBees
# Root package of the mod, used to find various classes in other properties,
# mcmod.info substitution, enabling assertions in run tasks, etc.
modGroup = magicbees
# Whether to use modGroup as the maven publishing group.
# When false, com.github.GTNewHorizons is used.
useModGroupForPublishing = false
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
autoUpdateBuildScript = false
# Version of Minecraft to target
minecraftVersion = 1.7.10
# Version of Minecraft Forge to target
forgeVersion = 10.13.4.1614
# Specify an MCP channel for dependency deobfuscation and the deobfParams task.
channel = stable
# Specify an MCP mappings version for dependency deobfuscation and the deobfParams task.
mappingsVersion = 12
# Defines other MCP mappings for dependency deobfuscation.
remoteMappings = https\://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/
# Select a default username for testing your mod. You can always override this per-run by running
# `./gradlew runClient --username=AnotherPlayer`, or configuring this command in your IDE.
developmentEnvironmentUserName = Developer
# Enables modern Java syntax support. Valid values:
# - false: No modern syntax, Java 8 only
# - jabel: Jabel syntax-only support, compiles to J8 bytecode
# - jvmDowngrader: Full modern Java via JVM Downgrader (syntax + stdlib APIs)
# - modern: Native modern Java bytecode, no downgrading
enableModernJavaSyntax = false
# If set, ignores the above setting and compiles with the given toolchain. This may cause unexpected issues,
# and should *not* be used in most situations. -1 disables this.
# forceToolchainVersion = -1
# Target JVM version for JVM Downgrader bytecode downgrading.
# Only used when enableModernJavaSyntax = jvmDowngrader
# downgradeTargetVersion = 8
# Comma-separated list of Java versions for multi-release jar support (JVM Downgrader only).
# Classes will be available in META-INF/versions/N/ for each version N in this list.
# Default: "21,25" (J25+ gets native classes, J21-24 gets partial downgrade, J8-20 gets full downgrade).
# jvmDowngraderMultiReleaseVersions = 21,25
# Specifies how JVM Downgrader API stubs are provided. Options:
# - shade: Shade minimized stubs into the jar
# - gtnhlib: GTNHLib provides stubs at runtime (adds version constraint)
# - external: Another dependency provides stubs (no constraint, no warning)
# - (empty): Warning reminding you to configure stubs
# Note: 'shade' option requires you to verify license compliance, see: https://github.com/unimined/JvmDowngrader/blob/main/LICENSE.md
# jvmDowngraderStubsProvider =
# Enables injecting missing generics into the decompiled source code for a better coding experience.
# Turns most publicly visible List, Map, etc. into proper List<E>, Map<K, V> types.
enableGenericInjection = false
# Generate a class with a String field for the mod version named as defined below.
# If generateGradleTokenClass is empty or not missing, no such class will be generated.
# If gradleTokenVersion is empty or missing, the field will not be present in the class.
generateGradleTokenClass = magicbees.Tags
# Name of the token containing the project's current version to generate/replace.
gradleTokenVersion = VERSION
# [DEPRECATED] Mod ID replacement token.
gradleTokenModId =
# [DEPRECATED] Mod name replacement token.
gradleTokenModName =
# [DEPRECATED] Mod Group replacement token.
gradleTokenGroupName =
# [DEPRECATED]
# Multiple source files can be defined here by providing a comma-separated list: Class1.java,Class2.java,Class3.java
# public static final String VERSION = "GRADLETOKEN_VERSION";
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
# version in @Mod([...], version = VERSION, [...]).
# Leave these properties empty to skip individual token replacements.
replaceGradleTokenInFile =
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
# leave this property empty.
# Example value: (apiPackage = api) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.api
apiPackage = api
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
# There can be multiple files in a space-separated list.
# Example value: mymodid_at.cfg nei_at.cfg
accessTransformersFile =
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
# Mixin classes will have access to "main" classes, but not the other way around.
separateMixinSourceSet =
# Adds some debug arguments like verbose output and class export.
usesMixinDebug = false
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
mixinPlugin =
# Specify the package that contains all of your Mixins. The package must exist or
# the build will fail. If you have a package property defined in your mixins.<modid>.json,
# it must match with this or the build will fail.
mixinsPackage =
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
# This parameter is for legacy compatibility only
# Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin
coreModClass =
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
containsMixinsAndOrCoreModOnly = false
# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins.
forceEnableMixins = false
# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated into your jar. It is your
# responsibility to check the license and request permission for distribution if required.
usesShadowedDependencies = false
# If disabled, won't remove unused classes from shadowed dependencies. Some libraries use reflection to access
# their own classes, making the minimization unreliable.
minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
# Adds CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
includeWellKnownRepositories = true
# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
# list of strings, with the acceptable keys being(case does not matter):
# cursemaven
# modrinth
excludeWellKnownRepositories =
# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven.
# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables.
# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle.
usesMavenPublishing = true
# Maven repository to publish the mod to.
# mavenPublishUrl = https\://nexus.gtnewhorizons.com/repository/releases/
# Publishing to Modrinth requires you to set the MODRINTH_TOKEN environment variable to your current Modrinth API token.
#
# The project's ID on Modrinth. Can be either the slug or the ID.
# Leave this empty if you don't want to publish to Modrinth.
modrinthProjectId =
# The project's relations on Modrinth. You can use this to refer to other projects on Modrinth.
# Syntax: scope1-type1:name1;scope2-type2:name2;...
# Where scope can be one of [required, optional, incompatible, embedded],
# type can be one of [project, version],
# and the name is the Modrinth project or version slug/id of the other mod.
# Example: required-project:fplib;optional-project:gasstation;incompatible-project:gregtech
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
modrinthRelations =
# Publishing to CurseForge requires you to set the CURSEFORGE_TOKEN environment variable to one of your CurseForge API tokens.
#
# The project's numeric ID on CurseForge. You can find this in the About Project box.
# Leave this empty if you don't want to publish on CurseForge.
curseForgeProjectId =
# The project's relations on CurseForge. You can use this to refer to other projects on CurseForge.
# Syntax: type1:name1;type2:name2;...
# Where type can be one of [requiredDependency, embeddedLibrary, optionalDependency, tool, incompatible],
# and the name is the CurseForge project slug of the other mod.
# Example: requiredDependency:railcraft;embeddedLibrary:cofhlib;incompatible:buildcraft
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
curseForgeRelations =
# Optional parameter to customize the produced artifacts. Use this to preserve artifact naming when migrating older
# projects. New projects should not use this parameter.
customArchiveBaseName = magicbees
# Optional parameter to customize the default working directory used by the runClient* tasks. Relative to the project directory.
# runClientWorkingDirectory = run/client
# Optional parameter to customize the default working directory used by the runServer* tasks. Relative to the project directory.
# runServerWorkingDirectory = run/server
# Optional parameter to have the build automatically fail if an illegal version is used.
# This can be useful if you e.g. only want to allow versions in the form of '1.1.xxx'.
# The check is ONLY performed if the version is a git tag.
# Note: the specified string must be escaped, so e.g. 1\\.1\\.\\d+ instead of 1\.1\.\d+
# versionPattern =
# Uncomment to prevent the source code from being published.
# noPublishedSources = true
# Uncomment this to disable Spotless checks.
# This should only be uncommented to keep it easier to sync with upstream/other forks.
# That is, if there is no other active fork/upstream, NEVER change this.
# disableSpotless = true
# Uncomment this to disable Checkstyle checks (currently wildcard import check).
# disableCheckstyle = true
# Override the IDEA build type. Valid values are: "" (leave blank, do not override), "idea" (force use native IDEA build), "gradle"
# (force use delegated build).
# This is meant to be set in $HOME/.gradle/gradle.properties.
# e.g. add "systemProp.org.gradle.project.ideaOverrideBuildType=idea" will override the build type to be native build.
# WARNING: If you do use this option, it will overwrite whatever you have in your existing projects. This might not be what you want!
# Usually there is no need to uncomment this here as other developers do not necessarily use the same build type as you.
# ideaOverrideBuildType = idea
# Whether IDEA should run spotless checks when pressing the Build button.
# This is meant to be set in $HOME/.gradle/gradle.properties.
# ideaCheckSpotlessOnBuild = true
# Non-GTNH properties
org.gradle.configuration-cache = true
org.gradle.parallel = true
+12
View File
@@ -0,0 +1,12 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d4fd992c9557644e637ebe98263e0ae7/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/59a9771cad43219260d9aac9a8ec4d6a/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/3689d0bcdd77ac01674ba3c9dbbe94d0/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/8e1d9ee5d0f13e442218f6884a306da1/redirect
toolchainVersion=25
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored Executable
+248
View File
@@ -0,0 +1,248 @@
#!/bin/sh
#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/b631911858264c0b6e4d6603d677ff5218766cee/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
Vendored
+93
View File
@@ -0,0 +1,93 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+4
View File
@@ -0,0 +1,4 @@
// Add any additional repositories for your dependencies here
repositories {
}
+23
View File
@@ -0,0 +1,23 @@
pluginManagement {
repositories {
maven {
// RetroFuturaGradle
name "GTNH Maven"
url "https://nexus.gtnewhorizons.com/repository/public/"
mavenContent {
includeGroup("com.gtnewhorizons")
includeGroupByRegex("com\\.gtnewhorizons\\..+")
}
}
gradlePluginPortal()
mavenCentral()
mavenLocal()
}
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.24'
}
@@ -0,0 +1,13 @@
package magicbees.api;
import magicbees.api.bees.ITransmutationEffectController;
public class MagicBeesAPI {
// Use this object during or after the Mod.Init phase to add your logic to the Transmutation bee effect.
public static ITransmutationEffectController transmutationEffectController;
// This is a reference to the Tempus aspect. Initialized after MagicBees's post init phase.
// Ensure it is not null, and cast it to thaumcraft.api.aspects.Aspect.
public static Object thaumcraftAspectTempus;
}
@@ -0,0 +1,7 @@
package magicbees.api.bees;
public enum AuraChargeType {
MUTATION,
DEATH,
PRODUCTION,;
}
@@ -0,0 +1,42 @@
package magicbees.api.bees;
/**
* Allows a tile entity to provide a Magic Apiary with 'aura' to boost bee production, mutation rate, or decrease bee
* lifespan.
*
* @author MysteriousAges
*/
public interface IMagicApiaryAuraProvider {
/**
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
* internal charge by one. If there are no charges remaining, it should return false.
*
* @return True if a charge is given; false otherwise.
*/
boolean getMutationCharge();
/**
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
* internal charge by one. If there are no charges remaining, it should return false.
*
* @return True if a charge is given; false otherwise.
*/
boolean getDeathRateCharge();
/**
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
* internal charge by one. If there are no charges remaining, it should return false.
*
* @return True if a charge is given; false otherwise.
*/
boolean getProductionCharge();
/**
* Requests a mutation charge from the aura provider. If true is returned, the aura provider should decrement its
* internal charge by one. If there are no charges remaining, it should return false.
*
* @return True if a charge is given; false otherwise.
*/
boolean getCharge(AuraChargeType auraChargeType);
}
@@ -0,0 +1,12 @@
package magicbees.api.bees;
/**
* Manages adding custom ITransmutationEffectLogic instances into the bee effect system.
*
* @author MysteriousAges
*
*/
public interface ITransmutationEffectController {
public void addEffectLogic(ITransmutationEffectLogic logic);
}
@@ -0,0 +1,31 @@
package magicbees.api.bees;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
/**
* Class to control plugin logic for the Transmutation bee effect. Turns blocks into other blocks based on biome, time
* of day, or whatever is deemed appropriate at the time.
*
* @author MysteriousAges
*
*/
public interface ITransmutationEffectLogic {
/**
* Allows an external mod to add transmutation logic to the Transmuting bee effect. Called from a list of
* ITransmutationEffectLogic until one returns true. You can implement more than one transmutation effect in a
* single implementation of the interface. Function checks for a series of conditions based on block ID/meta, or
* biome information, or world information.
*
* @param world World object
* @param biome Biome information for current coordinates
* @param sourceBlock ItemStack representing the block at current coordinates
* @param x Current X coordinate to attempt a transmute
* @param y Current Y coordinate to attempt a transmute
* @param z Current Z coordinate to attempt a transmute
* @return true if a block was changed.
*/
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z);
}
+323
View File
@@ -0,0 +1,323 @@
package magicbees.bees;
import net.minecraft.potion.Potion;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.IAlleleBeeEffect;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IAlleleFlowers;
import forestry.api.genetics.IAlleleRegistry;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IFlowerProvider;
import magicbees.api.MagicBeesAPI;
import magicbees.bees.allele.effect.AlleleEffectCrumbling;
import magicbees.bees.allele.effect.AlleleEffectCure;
import magicbees.bees.allele.effect.AlleleEffectEmpowering;
import magicbees.bees.allele.effect.AlleleEffectNodeConversion;
import magicbees.bees.allele.effect.AlleleEffectNodeRepair;
import magicbees.bees.allele.effect.AlleleEffectPlaceholder;
import magicbees.bees.allele.effect.AlleleEffectPotion;
import magicbees.bees.allele.effect.AlleleEffectRecharge;
import magicbees.bees.allele.effect.AlleleEffectSpawnMob;
import magicbees.bees.allele.effect.AlleleEffectSpawnMobWeighted;
import magicbees.bees.allele.effect.AlleleEffectSpawnWisp;
import magicbees.bees.allele.effect.AlleleEffectTransmuting;
import magicbees.bees.allele.effect.TransmutationEffectController;
import magicbees.bees.allele.effect.TransmutationEffectLBotaniaLiving;
import magicbees.bees.allele.effect.TransmutationEffectRailcraft;
import magicbees.bees.allele.effect.TransmutationEffectVanilla;
import magicbees.bees.allele.flowerProvider.FlowerProviderArsMagicaFlower;
import magicbees.bees.allele.flowerProvider.FlowerProviderAuraNode;
import magicbees.bees.allele.flowerProvider.FlowerProviderBookshelf;
import magicbees.bees.allele.flowerProvider.FlowerProviderBotania;
import magicbees.bees.allele.flowerProvider.FlowerProviderThaumcraftFlower;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.compat.ArsMagicaHelper;
import magicbees.main.utils.compat.BotaniaHelper;
import magicbees.main.utils.compat.ThaumcraftHelper;
import magicbees.main.utils.compat.ThermalModsHelper;
import thaumcraft.api.nodes.NodeType;
public class Allele implements IAllele {
private static final String FLOWER_ARS_MAGICA_PLANT = "flowerArsMagicaPlant";
private static final String FLOWER_BOTANIA = "flowerBotania";
private static final String EFFECT_TE_BLIZZY = "TEBlizzy";
private static final String EFFECT_TE_BLITZ = "TEBlitz";
private static final String EFFECT_TE_BASALZ = "TEBasalz";
private static final String EFFECT_AM_WISP = "AMWisp";
private static final String EFFECT_MANA_DRAIN = "ManaDrain";
private static final String EFFECT_DREAMING = "Dreaming";
private static final String EFFECT_WISPY = "Wispy";
private static final String EFFECT_BATTY = "Batty";
private static final String EFFECT_BRAINY = "Brainy";
private static final String EFFECT_NODE_RAVENING = "NodeRavening";
private static final String EFFECT_NODE_PURIFYING = "NodePurifying";
private static final String EFFECT_NODE_TAINTING = "NodeTainting";
private static final String EFFECT_NODE_REPAIR = "NodeRepair";
private static final String EFFECT_NODE_EMPOWER = "NodeEmpower";
private static final String EFFECT_VIS_RECHARGE = "VisRecharge";
private static final String FLOWERS_AURA_NODE = "AuraNode";
private static final String FLOWERS_THAUMCRAFT_PLANT = "ThaumcraftPlant";
public static AlleleFloat speedBlinding;
public static IAlleleBeeEffect forestryBaseEffect;
public static IAlleleFlowers flowerBookshelf;
public static IAlleleFlowers flowerThaumcraft;
public static IAlleleFlowers flowerArsMagica;
public static IAlleleFlowers flowerAuraNode;
public static IAlleleFlowers flowerBotania;
public static IAlleleEffect effectCleansing;
public static IAlleleEffect effectDigSpeed;
public static IAlleleEffect effectMoveSpeed;
public static IAlleleEffect effectSlowSpeed;
public static IAlleleEffect effectWithering;
public static IAlleleEffect effectVisRecharge;
public static IAlleleEffect effectNodeEmpower;
public static IAlleleEffect effectNodeRepair;
public static IAlleleEffect effectNodeConversionTaint;
public static IAlleleEffect effectNodeConversionPure;
public static IAlleleEffect effectNodeConversionHungry;
public static IAlleleEffect effectTransmuting;
public static IAlleleEffect effectCrumbling;
public static IAlleleEffect effectInvisibility;
public static IAlleleEffect effectDreaming;
public static IAlleleEffect spawnWolf;
public static IAlleleEffect spawnBats;
public static IAlleleEffect spawnCow;
public static IAlleleEffect spawnChicken;
public static IAlleleEffect spawnPig;
public static IAlleleEffect spawnSheep;
public static IAlleleEffect spawnCat;
public static IAlleleEffect spawnHorse;
public static IAlleleEffect spawnGhast;
public static IAlleleEffect spawnSpider;
public static IAlleleEffect spawnBlaze;
public static IAlleleEffect spawnBrainyZombie;
public static IAlleleEffect spawnWisp;
public static IAlleleEffect spawnBlizz;
public static IAlleleEffect spawnBlitz;
public static IAlleleEffect spawnBasalz;
public static IAlleleEffect spawnManaDrainer;
public static IAlleleEffect spawnWispOrHecate;
public static void setupAdditionalAlleles() {
forestryBaseEffect = (IAlleleBeeEffect) getBaseAllele("effectNone");
IFlowerProvider vanillaFlowers = ((IAlleleFlowers) getBaseAllele("flowersVanilla")).getProvider();
speedBlinding = new AlleleFloat("speedBlinding", 2f, false, EnumBeeChromosome.SPEED);
flowerBookshelf = new AlleleFlower("Bookshelf", new FlowerProviderBookshelf(), true);
effectCleansing = new AlleleEffectCure("Curative", false);
effectDigSpeed = new AlleleEffectPotion("DigSpeed", Potion.digSpeed, 15, false);
effectMoveSpeed = new AlleleEffectPotion("MoveSpeed", Potion.moveSpeed, 10, false);
effectSlowSpeed = new AlleleEffectPotion("SlowSpeed", Potion.moveSlowdown, 3, false).setMalicious();
effectWithering = new AlleleEffectPotion("Withering", Potion.wither, 10, false).setMalicious();
TransmutationEffectController controller = new TransmutationEffectController(
new TransmutationEffectRailcraft(),
new TransmutationEffectVanilla());
MagicBeesAPI.transmutationEffectController = controller;
effectTransmuting = new AlleleEffectTransmuting("Transmuting", true, controller, 200);
effectCrumbling = new AlleleEffectCrumbling("Crumbling", true);
effectInvisibility = new AlleleEffectPotion("Invisibility", Potion.invisibility, 10, false);
spawnGhast = new AlleleEffectSpawnMob("Ghastly", false, "Ghast", "mob.ghast.moan").setThrottle(2060)
.setChanceToSpawn(10).setMaxMobsInSpawnZone(1);
spawnSpider = new AlleleEffectSpawnMob("Spidery", false, "Spider", "mob.spider.step").setThrottle(400)
.setChanceToSpawn(70).setMaxMobsInSpawnZone(4);
spawnBlaze = new AlleleEffectSpawnMob("Ablaze", false, "Blaze", "mob.blaze.breathe").setThrottle(800)
.setChanceToSpawn(60).setMaxMobsInSpawnZone(2);
spawnWolf = new AlleleEffectSpawnMob("Canine", false, "Wolf", "mob.wolf.panting").setThrottle(650)
.setChanceToSpawn(40).setMaxMobsInSpawnZone(2);
spawnPig = new AlleleEffectSpawnMob("Porcine", true, "Pig", "mob.pig.say").setThrottle(350)
.setMaxMobsInSpawnZone(4);
spawnCow = new AlleleEffectSpawnMob("Bovine", true, "Cow", "mob.cow.say").setThrottle(640)
.setMaxMobsInSpawnZone(3);
spawnChicken = new AlleleEffectSpawnMob("Chicken", true, "Chicken", "mob.chicken.hurt").setThrottle(20)
.setMaxMobsInSpawnZone(20);
spawnSheep = new AlleleEffectSpawnMob("Sheep", false, "Sheep", "mob.sheep.say").setThrottle(450)
.setMaxMobsInSpawnZone(5);
spawnCat = new AlleleEffectSpawnMob("Catty", false, "Ozelot", "mob.cat.meow").setThrottle(702)
.setChanceToSpawn(60).setMaxMobsInSpawnZone(2);
spawnHorse = new AlleleEffectSpawnMob("Horse", false, "EntityHorse", "mob.horse.idle").setThrottle(450)
.setChanceToSpawn(59).setMaxMobsInSpawnZone(2);
if (ThaumcraftHelper.isActive()) {
flowerThaumcraft = new AlleleFlower(FLOWERS_THAUMCRAFT_PLANT, new FlowerProviderThaumcraftFlower(), false);
flowerAuraNode = new AlleleFlower(FLOWERS_AURA_NODE, new FlowerProviderAuraNode(), true);
effectVisRecharge = new AlleleEffectRecharge(EFFECT_VIS_RECHARGE, false);
effectNodeEmpower = new AlleleEffectEmpowering(EFFECT_NODE_EMPOWER, false);
effectNodeRepair = new AlleleEffectNodeRepair(EFFECT_NODE_REPAIR, false);
effectNodeConversionTaint = new AlleleEffectNodeConversion(
EFFECT_NODE_TAINTING,
NodeType.TAINTED,
false,
250);
effectNodeConversionPure = new AlleleEffectNodeConversion(EFFECT_NODE_PURIFYING, NodeType.PURE, false, 250);
effectNodeConversionHungry = new AlleleEffectNodeConversion(
EFFECT_NODE_RAVENING,
NodeType.HUNGRY,
false,
2);
spawnBrainyZombie = new AlleleEffectSpawnMob(
EFFECT_BRAINY,
false,
ThaumcraftHelper.Entity.BRAINY_ZOMBIE.entityID).setAggrosPlayerOnSpawn().setThrottle(800)
.setSpawnsOnPlayerNear(null).setMaxMobsInSpawnZone(2);
spawnBats = new AlleleEffectSpawnMob(EFFECT_BATTY, false, ThaumcraftHelper.Entity.FIREBAT.entityID)
.setThrottle(300).setSpawnsOnPlayerNear("Bat");
spawnWisp = new AlleleEffectSpawnWisp(
EFFECT_WISPY,
false,
ThaumcraftHelper.Entity.WISP.entityID,
"thaumcraft.wisplive").setThrottle(1800).setChanceToSpawn(79);
} else {
spawnBats = new AlleleEffectSpawnMob(EFFECT_BATTY, false, "Bat").setThrottle(150);
flowerThaumcraft = new AlleleFlower(FLOWERS_THAUMCRAFT_PLANT, vanillaFlowers, false);
flowerAuraNode = new AlleleFlower(FLOWERS_AURA_NODE, vanillaFlowers, true);
Allele.effectVisRecharge = new AlleleEffectRecharge(EFFECT_VIS_RECHARGE, false);
effectNodeEmpower = new AlleleEffectPlaceholder(EFFECT_NODE_EMPOWER, false);
effectNodeRepair = new AlleleEffectPlaceholder(EFFECT_NODE_REPAIR, false);
effectNodeConversionTaint = new AlleleEffectPlaceholder(EFFECT_NODE_TAINTING, false);
effectNodeConversionPure = new AlleleEffectPlaceholder(EFFECT_NODE_PURIFYING, false);
effectNodeConversionHungry = new AlleleEffectPlaceholder(EFFECT_NODE_RAVENING, false);
spawnBrainyZombie = new AlleleEffectPlaceholder(EFFECT_BRAINY, false);
spawnWisp = new AlleleEffectPlaceholder(EFFECT_WISPY, false);
}
if (BotaniaHelper.isActive()) {
flowerBotania = new AlleleFlower(FLOWER_BOTANIA, new FlowerProviderBotania(), true);
effectDreaming = new AlleleEffectTransmuting(
EFFECT_DREAMING,
false,
new TransmutationEffectController(new TransmutationEffectLBotaniaLiving()),
100);
} else {
flowerBotania = new AlleleFlower(FLOWER_BOTANIA, vanillaFlowers, true);
effectDreaming = new AlleleEffectPlaceholder(EFFECT_DREAMING, false);
}
if (ArsMagicaHelper.isActive()) {
flowerArsMagica = new AlleleFlower(FLOWER_ARS_MAGICA_PLANT, new FlowerProviderArsMagicaFlower(), false);
spawnManaDrainer = new AlleleEffectSpawnMobWeighted(
EFFECT_MANA_DRAIN,
true,
20,
new String[] { ArsMagicaHelper.Name + ".MobManaCreeper", ArsMagicaHelper.Name + ".ManaVortex" },
new int[] { 60, 2 });
spawnWispOrHecate = new AlleleEffectSpawnMobWeighted(
EFFECT_AM_WISP,
true,
20,
new String[] { ArsMagicaHelper.Name + ".MobWisp", ArsMagicaHelper.Name + ".MobHecate" },
new int[] { 40, 3 });
} else {
flowerArsMagica = new AlleleFlower(FLOWER_ARS_MAGICA_PLANT, vanillaFlowers, false);
spawnManaDrainer = new AlleleEffectPlaceholder(EFFECT_MANA_DRAIN, true);
spawnWispOrHecate = new AlleleEffectPlaceholder(EFFECT_AM_WISP, true);
}
// TODO TE spawning
if (ThermalModsHelper.isActive()) {
spawnBlizz = new AlleleEffectSpawnMob(
EFFECT_TE_BLIZZY,
true,
ThermalModsHelper.Entity.BLIZZ.entityID,
ThermalModsHelper.Entity.BLIZZ.soundName).setThrottle(100).setChanceToSpawn(80);
spawnBlitz = new AlleleEffectSpawnMob(
EFFECT_TE_BLITZ,
true,
ThermalModsHelper.Entity.BLITZ.entityID,
ThermalModsHelper.Entity.BLITZ.soundName).setThrottle(100).setChanceToSpawn(80);
spawnBasalz = new AlleleEffectSpawnMob(
EFFECT_TE_BASALZ,
true,
ThermalModsHelper.Entity.BASALZ.entityID,
ThermalModsHelper.Entity.BASALZ.soundName).setThrottle(100).setChanceToSpawn(80);
} else {
spawnBlizz = new AlleleEffectPlaceholder(EFFECT_TE_BLIZZY, true);
spawnBlitz = new AlleleEffectPlaceholder(EFFECT_TE_BLITZ, true);
spawnBasalz = new AlleleEffectPlaceholder(EFFECT_TE_BASALZ, true);
}
}
public static void registerDeprecatedAlleleReplacements() {
IAlleleRegistry registry = AlleleManager.alleleRegistry;
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodeAttract", effectNodeEmpower);
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodePurify", effectNodeConversionPure);
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodeFlux", effectNodeConversionTaint);
registry.registerDeprecatedAlleleReplacement("magicbees.effectNodeCharge", effectNodeEmpower);
registry.registerDeprecatedAlleleReplacement(
"magicbees.speciesTCAttractive",
BeeSpecies.TC_EMPOWERING.getSpecies());
registry.registerDeprecatedAlleleReplacement(
"magicbees.speciesBMBloodyBMBloody",
BeeSpecies.EARTHY.getSpecies());
registry.registerDeprecatedAlleleReplacement(
"magicbees.speciesBMBloodyBMBound",
BeeSpecies.ARCANE.getSpecies());
}
public static IAlleleBeeSpecies getBaseSpecies(String name) {
return (IAlleleBeeSpecies) AlleleManager.alleleRegistry
.getAllele((new StringBuilder()).append("forestry.species").append(name).toString());
}
public static IAlleleBeeSpecies getExtraSpecies(String name) {
return (IAlleleBeeSpecies) AlleleManager.alleleRegistry
.getAllele((new StringBuilder()).append("extrabees.species.").append(name.toLowerCase()).toString());
}
public static IAllele getBaseAllele(String name) {
return AlleleManager.alleleRegistry.getAllele("forestry." + name);
}
public static IAllele getAllele(String name) {
return AlleleManager.alleleRegistry.getAllele(name);
}
private String uid;
private boolean dominant;
public Allele(String id, boolean isDominant, IChromosomeType... chromosomeTypes) {
this.uid = "magicbees." + id;
this.dominant = isDominant;
AlleleManager.alleleRegistry.registerAllele(this, chromosomeTypes);
}
@Override
public String getUID() {
return this.uid;
}
@Override
public boolean isDominant() {
return this.dominant;
}
@Override
public String getName() {
return LocalizationManager.getLocalizedString(getUID());
}
@Override
public String getUnlocalizedName() {
return this.uid;
}
}
@@ -0,0 +1,85 @@
package magicbees.bees;
import java.util.List;
import net.minecraft.entity.Entity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChunkCoordinates;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.IAlleleBeeEffect;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IEffectData;
public abstract class AlleleEffect extends Allele implements IAlleleBeeEffect {
protected int throttle;
protected boolean combinable;
public AlleleEffect(String id, boolean isDominant, int timeout) {
super("effect" + id, isDominant, EnumBeeChromosome.EFFECT);
this.throttle = timeout;
combinable = false;
}
@Override
public boolean isCombinable() {
return combinable;
}
public AlleleEffect setIsCombinable(boolean canCombine) {
combinable = canCombine;
return this;
}
@Override
public abstract IEffectData validateStorage(IEffectData storedData);
@Override
public final IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
int count = storedData.getInteger(0);
if (count >= this.throttle) {
storedData = this.doEffectThrottled(genome, storedData, housing);
} else {
storedData.setInteger(0, count + 1);
}
return storedData;
}
/**
* @param genome
* @param storedData
* @param housing
* @return
*/
protected abstract IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
@Override
public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
return Allele.forestryBaseEffect.doFX(genome, storedData, housing);
}
@SuppressWarnings("unchecked")
protected <T extends Entity> List<T> getEntitiesWithinRange(IBeeGenome genome, IBeeHousing housing,
Class<T> entityClass) {
// Get the size of the affected area
int[] area = genome.getTerritory();
ChunkCoordinates coords = housing.getCoordinates();
// Calculate offset
int[] min = new int[3];
int[] max = new int[3];
min[0] = coords.posX - area[0] / 2;
max[0] = coords.posX + area[0] / 2;
min[1] = coords.posY - area[1] / 2;
max[1] = coords.posY + area[1] / 2;
min[2] = coords.posZ - area[2] / 2;
max[2] = coords.posZ + area[2] / 2;
AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(min[0], min[1], min[2], max[0], max[1], max[2]);
return (List<T>) housing.getWorld().getEntitiesWithinAABB(entityClass, bounds);
}
}
@@ -0,0 +1,19 @@
package magicbees.bees;
import forestry.api.genetics.IAlleleFloat;
import forestry.api.genetics.IChromosomeType;
public class AlleleFloat extends Allele implements IAlleleFloat {
private float value;
public AlleleFloat(String id, float val, boolean isDominant, IChromosomeType... chromosomeTypes) {
super(id, isDominant, chromosomeTypes);
this.value = val;
}
@Override
public float getValue() {
return this.value;
}
}
@@ -0,0 +1,25 @@
package magicbees.bees;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.genetics.IAlleleFlowers;
import forestry.api.genetics.IFlowerProvider;
public class AlleleFlower extends Allele implements IAlleleFlowers {
private IFlowerProvider provider;
public AlleleFlower(String uid, IFlowerProvider flowerProvider, boolean isDominant) {
super("flower" + uid, isDominant, EnumBeeChromosome.FLOWER_PROVIDER);
this.provider = flowerProvider;
}
@Override
public IFlowerProvider getProvider() {
return this.provider;
}
@Override
public String getName() {
return this.provider.getDescription();
}
}
@@ -0,0 +1,34 @@
package magicbees.bees;
import magicbees.api.bees.AuraChargeType;
public enum AuraCharge {
MUTATION(AuraChargeType.MUTATION, 850, 11),
DEATH(AuraChargeType.DEATH, 400, 5),
PRODUCTION(AuraChargeType.PRODUCTION, 300, 3),;
public final AuraChargeType type;
public final int duration;
/** The number of ticks to count between draining vis from the environment **/
public final int tickRate;
public final int flag;
AuraCharge(AuraChargeType chargeType, int duration, int tickRate) {
this.type = chargeType;
this.duration = duration;
this.tickRate = tickRate;
flag = 1 << ordinal();
}
public static AuraCharge fromChargeType(AuraChargeType type) {
for (AuraCharge charge : values()) {
if (type == charge.type) {
return charge;
}
}
return null;
}
}
@@ -0,0 +1,111 @@
package magicbees.bees;
import java.util.ArrayList;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IClassification;
import magicbees.main.utils.LocalizationManager;
public enum BeeClassification implements IClassification {
VEILED("Veiled", "Velatapis"),
ARCANE("Arcane", "Arcanapis"),
SUPERNATURAL("Supernatural", "Occultapis"),
SCHOLARLY("Scholarly", "Doctapis"),
SKULKING("Skulking", "Malevolenapis"),
MAGICAL("Magic", "Magicapis"),
TIME("Time", "Tempestivapis"),
SOUL("Soul", "Animapis"),
ABOMINABLE("Abominable", "Detestabilapis"),
EXTRINSIC("Extrinsic", "Extrarapis"),
METALLIC("Metallic", "Metalliapis"),
GEM("Gem", "Lapidapis"),
TRANSMUTING("Transmuting", "Transmutapis"),
THAUMIC("Thaumic", "Thaumiapis"),
FLESHY("Fleshy", "Carnosapis"),
ALCHEMICAL("Alchemical", "Alchimiapis"),
ESSENTIAL("Essential", "Essentiapis"),
THERMAL("Thermal", "Thermametallic"),
ADORABLE("Adorable", "Amabilis"),
BLOODY("Bloody", "Sanguis"),
BOTANICAL("Botanical", "Botanica"),;
private String uID;
private String latin;
private ArrayList<IAlleleSpecies> species;
private IClassification parent;
private EnumClassLevel level;
private BeeClassification(String name, String scientific) {
this.uID = "classification." + name.toLowerCase();
this.latin = scientific;
this.level = EnumClassLevel.GENUS;
this.species = new ArrayList<IAlleleSpecies>();
this.parent = AlleleManager.alleleRegistry.getClassification("family.apidae");
AlleleManager.alleleRegistry.registerClassification(this);
}
@Override
public EnumClassLevel getLevel() {
return this.level;
}
@Override
public String getUID() {
return this.uID;
}
@Override
public String getName() {
return LocalizationManager.getLocalizedString(getUID());
}
@Override
public String getScientific() {
return this.latin;
}
@Override
public String getDescription() {
return LocalizationManager.getLocalizedString(getUID() + ".description");
}
@Override
public IClassification[] getMemberGroups() {
return null;
}
@Override
public void addMemberGroup(IClassification group) {}
@Override
public IAlleleSpecies[] getMemberSpecies() {
return this.species.toArray(new IAlleleSpecies[this.species.size()]);
}
@Override
public void addMemberSpecies(IAlleleSpecies species) {
if (!this.species.contains(species)) {
this.species.add(species);
}
}
@Override
public IClassification getParent() {
return this.parent;
}
@Override
public void setParent(IClassification parent) {
this.parent = parent;
}
}
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,24 @@
package magicbees.bees;
import java.awt.Color;
import forestry.api.apiculture.IBeeIconColourProvider;
public enum BeeIconColourProvider implements IBeeIconColourProvider {
RAINBOW {
@Override
public int getIconColour(int renderPass) {
if (renderPass == 0) {
int hue = (int) (System.currentTimeMillis() >> 2) % 360;
return Color.getHSBColor(hue / 360f, 0.75f, 0.80f).getRGB();
} else if (renderPass == 1) {
int hue = (int) (System.currentTimeMillis() >> 3) % 360;
hue += 60;
hue = hue % 360;
return Color.getHSBColor(hue / 360f, 0.5f, 0.6f).getRGB();
}
return 0xffffff;
}
}
}
@@ -0,0 +1,50 @@
package magicbees.bees;
import java.util.Locale;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IBeeIconProvider;
import magicbees.main.CommonProxy;
public enum BeeIconProvider implements IBeeIconProvider {
SKULKING(CommonProxy.DOMAIN + ":bees/skulking/"),
DOCTORAL(CommonProxy.DOMAIN + ":bees/doctoral/");
@SideOnly(Side.CLIENT)
private IIcon[][] icons;
private final String iconPath;
BeeIconProvider(String iconPath) {
this.iconPath = iconPath;
}
@Override
public void registerIcons(IIconRegister itemMap) {
this.icons = new IIcon[EnumBeeType.VALUES.length][3];
IIcon body1 = itemMap.registerIcon(iconPath + "body1");
for (int i = 0; i < EnumBeeType.VALUES.length; i++) {
EnumBeeType beeType = EnumBeeType.VALUES[i];
if (beeType == EnumBeeType.NONE) continue;
String beeTypeIconPath = iconPath + beeType.toString().toLowerCase(Locale.ENGLISH);
icons[i][0] = itemMap.registerIcon(beeTypeIconPath + ".outline");
icons[i][1] = (beeType != EnumBeeType.LARVAE) ? body1 : itemMap.registerIcon(beeTypeIconPath + ".body");
icons[i][2] = itemMap.registerIcon(beeTypeIconPath + ".body2");
}
}
@Override
public IIcon getIcon(EnumBeeType type, int renderPass) {
return icons[type.ordinal()][Math.min(renderPass, 2)];
}
}
@@ -0,0 +1,112 @@
package magicbees.bees;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.api.apiculture.IBee;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeRoot;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import magicbees.block.types.HiveType;
import magicbees.item.types.DropType;
import magicbees.main.Config;
import magicbees.main.utils.Tuple;
import magicbees.main.utils.compat.ExtraBeesHelper;
public class BeeManager {
public static IBeeRoot beeRoot;
private static List<Tuple<IAlleleBeeSpecies, Double>> worldgenSpeciesWeights = new ArrayList<Tuple<IAlleleBeeSpecies, Double>>();
private static double worldgenSpeciesWeightsTotal = 0;
public static void getBeeRoot() {
beeRoot = (IBeeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootBees");
}
public static void setupAlleles() {
Allele.setupAdditionalAlleles();
BeeSpecies.setupBeeSpecies();
Allele.registerDeprecatedAlleleReplacements();
}
public static void lateBeeInit() {
BeeMutation.setupMutations();
BeeProductHelper.initBaseProducts();
BeeProductHelper.initOreDictSProducts();
HiveType.initHiveData();
beeRoot.setResearchSuitability(Config.drops.getStackForType(DropType.INTELLECT), 0.5f);
}
public static ItemStack getDefaultItemStackForSpecies(IAlleleBeeSpecies beeSpecies, EnumBeeType type) {
IBee bee = getBeeFromSpecies(beeSpecies, false);
return BeeManager.beeRoot.getMemberStack(bee, type.ordinal());
}
public static IBee getBeeFromSpecies(IAlleleBeeSpecies beeSpecies, boolean applyRainResist) {
IAllele[] speciesTemplate = BeeManager.beeRoot.getTemplate(beeSpecies.getUID());
if (applyRainResist) {
speciesTemplate = BeeGenomeManager.addRainResist(speciesTemplate);
}
IBeeGenome genome = BeeManager.beeRoot.templateAsGenome(speciesTemplate);
return BeeManager.beeRoot.getBee(null, genome);
}
public static IAlleleBeeSpecies getRandomWorldgenSpecies(Random r) {
Collections.shuffle(worldgenSpeciesWeights);
double value = r.nextDouble() * worldgenSpeciesWeightsTotal;
IAlleleBeeSpecies species = Allele.getBaseSpecies("Forest");
for (Tuple<IAlleleBeeSpecies, Double> t : worldgenSpeciesWeights) {
value -= t.right.doubleValue();
if (value <= 0.0) {
species = t.left;
break;
}
}
return species;
}
public static void addWorldgenSpeciesWeight(IAlleleBeeSpecies species, double d) {
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(species, d));
worldgenSpeciesWeightsTotal += d;
}
public static void populateSpeciesListRarity() {
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Forest"), 20.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Meadows"), 20.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Tropical"), 10.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Modest"), 16.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Wintry"), 10.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getBaseSpecies("Ended"), 0.5));
if (ExtraBeesHelper.isActive()) {
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getExtraSpecies("Water"), 12.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getExtraSpecies("Rock"), 16.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(Allele.getExtraSpecies("Basalt"), 10.0));
}
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.MYSTICAL.getSpecies(), 20.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.UNUSUAL.getSpecies(), 20.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.SORCEROUS.getSpecies(), 13.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.ATTUNED.getSpecies(), 6.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.INFERNAL.getSpecies(), 10.0));
worldgenSpeciesWeights.add(new Tuple<IAlleleBeeSpecies, Double>(BeeSpecies.OBLIVION.getSpecies(), 1.0));
for (Tuple<IAlleleBeeSpecies, Double> t : worldgenSpeciesWeights) {
worldgenSpeciesWeightsTotal += t.right.doubleValue();
}
}
}
@@ -0,0 +1,804 @@
package magicbees.bees;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeDictionary.Type;
import net.minecraftforge.oredict.OreDictionary;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.api.apiculture.IBeeMutationCustom;
import forestry.api.apiculture.IBeeMutationFactory;
import magicbees.main.utils.LogHelper;
import magicbees.main.utils.MoonPhase;
import magicbees.main.utils.compat.AppliedEnergisticsHelper;
import magicbees.main.utils.compat.ArsMagicaHelper;
import magicbees.main.utils.compat.BotaniaHelper;
import magicbees.main.utils.compat.EquivalentExchangeHelper;
import magicbees.main.utils.compat.ExtraBeesHelper;
import magicbees.main.utils.compat.ForestryHelper;
import magicbees.main.utils.compat.RedstoneArsenalHelper;
import magicbees.main.utils.compat.ThaumcraftHelper;
import magicbees.main.utils.compat.ThermalModsHelper;
public class BeeMutation {
private static IBeeMutationFactory beeMutationFactory = forestry.api.apiculture.BeeManager.beeMutationFactory;
public static void setupMutations() {
IAlleleBeeSpecies baseA, baseB;
IBeeMutationCustom mutation;
// Forestry + These -> Common
BeeSpecies[] magicMundane = new BeeSpecies[] { BeeSpecies.MYSTICAL, BeeSpecies.SORCEROUS, BeeSpecies.UNUSUAL,
BeeSpecies.ATTUNED };
String[] forestryMundane = new String[] { "Forest", "Meadows", "Modest", "Wintry", "Tropical", "Marshy" };
String[] binnieMundane = new String[] { "marble", "rock", "water", "basalt" };
for (BeeSpecies species : magicMundane) {
for (String str : forestryMundane) {
beeMutationFactory.createMutation(
species.getSpecies(),
Allele.getBaseSpecies(str),
ForestryHelper.getTemplateForestryForSpecies("Common"),
15);
}
if (ExtraBeesHelper.isActive()) {
for (String str : binnieMundane) {
LogHelper.info("Registering " + str);
try {
beeMutationFactory.createMutation(
species.getSpecies(),
Allele.getExtraSpecies(str),
ForestryHelper.getTemplateForestryForSpecies("Common"),
15);
} catch (Exception e) {
LogHelper.info("Unable to register! This mutation will not be available.");
}
}
}
beeMutationFactory.createMutation(
species.getSpecies(),
Allele.getBaseSpecies("Common"),
ForestryHelper.getTemplateForestryForSpecies("Cultivated"),
12);
beeMutationFactory.createMutation(
species.getSpecies(),
Allele.getBaseSpecies("Cultivated"),
BeeSpecies.ELDRITCH.getGenome(),
12);
}
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Cultivated"),
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.ESOTERIC.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.ESOTERIC.getSpecies(),
BeeSpecies.MYSTERIOUS.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.ESOTERIC.getSpecies(),
BeeSpecies.MYSTERIOUS.getSpecies(),
BeeSpecies.ARCANE.getGenome(),
8).addMutationCondition(
new MoonPhaseMutationBonus(MoonPhase.WAXING_CRESCENT, MoonPhase.WAXING_GIBBOUS, 1.2f));
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Cultivated"),
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.CHARMED.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.CHARMED.getSpecies(),
BeeSpecies.ENCHANTED.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.CHARMED.getSpecies(),
BeeSpecies.ENCHANTED.getSpecies(),
BeeSpecies.SUPERNATURAL.getGenome(),
8).addMutationCondition(
new MoonPhaseMutationBonus(MoonPhase.WANING_GIBBOUS, MoonPhase.WANING_CRESCENT, 1.2f));
beeMutationFactory.createMutation(
BeeSpecies.ARCANE.getSpecies(),
BeeSpecies.SUPERNATURAL.getSpecies(),
BeeSpecies.ETHEREAL.getGenome(),
7);
beeMutationFactory.createMutation(
BeeSpecies.SUPERNATURAL.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.WINDY.getGenome(),
14).requireResource("treeLeaves");
beeMutationFactory.createMutation(
BeeSpecies.SUPERNATURAL.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.WATERY.getGenome(),
14).requireResource(Blocks.water, 0);
beeMutationFactory.createMutation(
BeeSpecies.SUPERNATURAL.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.EARTHY.getGenome(),
14).requireResource(Blocks.brick_block, 0);
beeMutationFactory.createMutation(
BeeSpecies.SUPERNATURAL.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.FIREY.getGenome(),
14).requireResource(Blocks.lava, 0);
beeMutationFactory.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.ATTUNED.getSpecies(),
BeeSpecies.AWARE.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.AWARE.getSpecies(),
BeeSpecies.SPIRIT.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.ATTUNED.getSpecies(),
BeeSpecies.AWARE.getSpecies(),
BeeSpecies.SPIRIT.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.AWARE.getSpecies(),
BeeSpecies.SPIRIT.getSpecies(),
BeeSpecies.SOUL.getGenome(),
7);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Monastic"),
BeeSpecies.ARCANE.getSpecies(),
BeeSpecies.PUPIL.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.ARCANE.getSpecies(),
BeeSpecies.PUPIL.getSpecies(),
BeeSpecies.SCHOLARLY.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.PUPIL.getSpecies(),
BeeSpecies.SCHOLARLY.getSpecies(),
BeeSpecies.SAVANT.getGenome(),
6);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.TIMELY.getGenome(),
8);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
BeeSpecies.TIMELY.getSpecies(),
BeeSpecies.LORDLY.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.TIMELY.getSpecies(),
BeeSpecies.LORDLY.getSpecies(),
BeeSpecies.DOCTORAL.getGenome(),
7);
beeMutationFactory.createMutation(
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.HATEFUL.getGenome(),
9).restrictBiomeType(BiomeDictionary.Type.NETHER);
beeMutationFactory.createMutation(
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.HATEFUL.getSpecies(),
BeeSpecies.SPITEFUL.getGenome(),
7).restrictBiomeType(BiomeDictionary.Type.NETHER);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Demonic"),
BeeSpecies.SPITEFUL.getSpecies(),
BeeSpecies.WITHERING.getGenome(),
6).restrictBiomeType(BiomeDictionary.Type.NETHER);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Modest"),
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.SKULKING.getGenome(),
12);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Tropical"),
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.SPIDERY.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.BATTY.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.GHASTLY.getGenome(),
9);
beeMutationFactory.createMutation(
BeeSpecies.GHASTLY.getSpecies(),
BeeSpecies.HATEFUL.getSpecies(),
BeeSpecies.SMOULDERING.getGenome(),
7).restrictBiomeType(BiomeDictionary.Type.NETHER);
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.MYSTERIOUS.getSpecies(),
BeeSpecies.BIGBAD.getGenome(),
7).addMutationCondition(new MoonPhaseMutationRestriction(MoonPhase.FULL));
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Common"),
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.CHICKEN.getGenome(),
12).restrictBiomeType(Type.FOREST);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Common"),
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.BEEF.getGenome(),
12).restrictBiomeType(Type.PLAINS);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Common"),
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.PORK.getGenome(),
12).restrictBiomeType(Type.MOUNTAIN);
beeMutationFactory.createMutation(
BeeSpecies.PORK.getSpecies(),
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.SHEEPISH.getGenome(),
13).restrictBiomeType(Type.PLAINS);
beeMutationFactory.createMutation(
BeeSpecies.BEEF.getSpecies(),
BeeSpecies.SHEEPISH.getSpecies(),
BeeSpecies.HORSE.getGenome(),
12).restrictBiomeType(Type.PLAINS);
beeMutationFactory.createMutation(
BeeSpecies.CHICKEN.getSpecies(),
BeeSpecies.SPIDERY.getSpecies(),
BeeSpecies.CATTY.getGenome(),
15).restrictBiomeType(Type.JUNGLE);
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.BATTY.getGenome(),
9);
if (ThaumcraftHelper.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.PUPIL.getSpecies(),
BeeSpecies.BRAINY.getGenome(),
9);
} else {
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.MUTABLE.getSpecies(),
BeeSpecies.BRAINY.getGenome(),
14);
}
beeMutationFactory.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.OBLIVION.getSpecies(),
BeeSpecies.NAMELESS.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.OBLIVION.getSpecies(),
BeeSpecies.NAMELESS.getSpecies(),
BeeSpecies.ABANDONED.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.NAMELESS.getSpecies(),
BeeSpecies.ABANDONED.getSpecies(),
BeeSpecies.FORLORN.getGenome(),
6);
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
BeeSpecies.ABANDONED.getSpecies(),
BeeSpecies.DRACONIC.getGenome(),
6).restrictBiomeType(BiomeDictionary.Type.END);
beeMutationFactory.createMutation(
BeeSpecies.UNUSUAL.getSpecies(),
BeeSpecies.ELDRITCH.getSpecies(),
BeeSpecies.MUTABLE.getGenome(),
12);
beeMutationFactory.createMutation(
BeeSpecies.UNUSUAL.getSpecies(),
BeeSpecies.MUTABLE.getSpecies(),
BeeSpecies.TRANSMUTING.getGenome(),
9);
beeMutationFactory.createMutation(
BeeSpecies.UNUSUAL.getSpecies(),
BeeSpecies.MUTABLE.getSpecies(),
BeeSpecies.CRUMBLING.getGenome(),
9);
beeMutationFactory.createMutation(
BeeSpecies.MYSTICAL.getSpecies(),
BeeSpecies.MUTABLE.getSpecies(),
BeeSpecies.INVISIBLE.getGenome(),
15);
if (BeeSpecies.COPPER.isActive()) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Industrious"),
Allele.getBaseSpecies("Meadows"),
BeeSpecies.COPPER.getGenome(),
12).requireResource("blockCopper");
}
if (BeeSpecies.TIN.isActive()) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Industrious"),
Allele.getBaseSpecies("Forest"),
BeeSpecies.TIN.getGenome(),
12).requireResource("blockTin");
}
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Common"),
Allele.getBaseSpecies("Industrious"),
BeeSpecies.IRON.getGenome(),
12).requireResource(Blocks.iron_block, 0);
if (BeeSpecies.LEAD.isActive()) {
baseA = (BeeSpecies.TIN.isActive()) ? BeeSpecies.TIN.getSpecies()
: (BeeSpecies.COPPER.isActive()) ? BeeSpecies.COPPER.getSpecies() : BeeSpecies.IRON.getSpecies();
mutation = beeMutationFactory
.createMutation(baseA, Allele.getBaseSpecies("Common"), BeeSpecies.LEAD.getGenome(), 10);
if (OreDictionary.getOres("blockLead").size() > 0) {
mutation.requireResource("blockLead");
}
}
if (BeeSpecies.SILVER.isActive()) {
mutation = beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
Allele.getBaseSpecies("Modest"),
BeeSpecies.SILVER.getGenome(),
8);
if (OreDictionary.getOres("blockSilver").size() > 0) {
mutation.requireResource("blockSilver");
}
}
baseA = (BeeSpecies.EE_MINIUM.isActive()) ? BeeSpecies.EE_MINIUM.getSpecies()
: Allele.getBaseSpecies("Imperial");
baseB = (BeeSpecies.LEAD.isActive()) ? BeeSpecies.LEAD.getSpecies() : BeeSpecies.IRON.getSpecies();
beeMutationFactory.createMutation(baseA, baseB, BeeSpecies.GOLD.getGenome(), 8)
.requireResource(Blocks.gold_block, 0);
if (BeeSpecies.ALUMINUM.isActive()) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Industrious"),
Allele.getBaseSpecies("Cultivated"),
BeeSpecies.ALUMINUM.getGenome(),
10).requireResource("blockAluminum");
}
if (BeeSpecies.ARDITE.isActive()) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Industrious"),
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.ARDITE.getGenome(),
9).requireResource("blockArdite");
}
if (BeeSpecies.COBALT.isActive()) {
boolean hasTConCobalt = OreDictionary.getOres("nuggetCobalt").size() > 0
&& OreDictionary.getOres("blockCobalt").size() > 0;
boolean hasNaturalCobalt = OreDictionary.getOres("nuggetNaturalCobalt").size() > 0
&& OreDictionary.getOres("blockNaturalCobalt").size() > 0;
if (hasTConCobalt) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.COBALT.getGenome(),
11).requireResource("blockCobalt");
}
if (hasNaturalCobalt) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.COBALT.getGenome(),
11).requireResource("blockNaturalCobalt");
}
if (!(hasTConCobalt || hasNaturalCobalt)) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Imperial"),
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.COBALT.getGenome(),
7);
}
}
if (BeeSpecies.MANYULLYN.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.ARDITE.getSpecies(),
BeeSpecies.COBALT.getSpecies(),
BeeSpecies.MANYULLYN.getGenome(),
9).requireResource("blockManyullyn");
}
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Austere"),
BeeSpecies.GOLD.getSpecies(),
BeeSpecies.DIAMOND.getGenome(),
7).requireResource("blockDiamond");
baseA = (BeeSpecies.SILVER.isActive()) ? BeeSpecies.SILVER.getSpecies() : Allele.getBaseSpecies("Imperial");
beeMutationFactory.createMutation(Allele.getBaseSpecies("Austere"), baseA, BeeSpecies.EMERALD.getGenome(), 6)
.requireResource("blockEmerald");
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Rural"),
BeeSpecies.COPPER.getSpecies(),
BeeSpecies.APATITE.getGenome(),
12).requireResource("blockApatite");
if (BeeSpecies.SILICON.isActive()) {
baseA = (BeeSpecies.AE_SKYSTONE.isActive()) ? BeeSpecies.AE_SKYSTONE.getSpecies()
: BeeSpecies.EARTHY.getSpecies();
beeMutationFactory.createMutation(baseA, BeeSpecies.IRON.getSpecies(), BeeSpecies.SILICON.getGenome(), 17);
}
if (BeeSpecies.CERTUS.isActive()) {
baseA = (BeeSpecies.SILICON.isActive()) ? BeeSpecies.SILICON.getSpecies() : BeeSpecies.IRON.getSpecies();
baseB = (BeeSpecies.AE_SKYSTONE.isActive()) ? BeeSpecies.AE_SKYSTONE.getSpecies()
: BeeSpecies.EARTHY.getSpecies();
beeMutationFactory.createMutation(baseA, baseB, BeeSpecies.CERTUS.getGenome(), 13);
}
if (BeeSpecies.FLUIX.isActive()) {
if (BeeSpecies.CERTUS.isActive()) {
baseA = BeeSpecies.CERTUS.getSpecies();
} else if (BeeSpecies.SILICON.isActive()) {
baseA = BeeSpecies.SILICON.getSpecies();
} else {
baseA = BeeSpecies.IRON.getSpecies();
}
baseB = (BeeSpecies.AE_SKYSTONE.isActive()) ? BeeSpecies.AE_SKYSTONE.getSpecies()
: BeeSpecies.EARTHY.getSpecies();
beeMutationFactory.createMutation(baseA, baseB, BeeSpecies.FLUIX.getGenome(), 17);
}
if (ThaumcraftHelper.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.TC_AIR.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.AIR.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.FIREY.getSpecies(),
BeeSpecies.FIREY.getSpecies(),
BeeSpecies.TC_FIRE.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.FIRE.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.WATERY.getSpecies(),
BeeSpecies.WATERY.getSpecies(),
BeeSpecies.TC_WATER.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.WATER.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.TC_EARTH.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.EARTH.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.ARCANE.getSpecies(),
BeeSpecies.TC_ORDER.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.ORDER.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.SUPERNATURAL.getSpecies(),
BeeSpecies.TC_CHAOS.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.CHAOS.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.TC_ORDER.getSpecies(),
BeeSpecies.TC_CHAOS.getSpecies(),
BeeSpecies.TC_ESSENTIA.getGenome(),
8).requireResource(ThaumcraftHelper.crystal, ThaumcraftHelper.ShardType.CHAOS.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.TC_VIS.getGenome(),
9).addMutationCondition(
new MoonPhaseMutationRestriction(MoonPhase.WAXING_HALF, MoonPhase.WANING_HALF));
beeMutationFactory.createMutation(
BeeSpecies.ATTUNED.getSpecies(),
BeeSpecies.TC_VIS.getSpecies(),
BeeSpecies.TC_REJUVENATING.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.TC_VIS.getSpecies(),
BeeSpecies.TC_REJUVENATING.getSpecies(),
BeeSpecies.TC_EMPOWERING.getGenome(),
6).addMutationCondition(new MoonPhaseMutationBonus(MoonPhase.FULL, 1.322f));
beeMutationFactory
.createMutation(
BeeSpecies.TC_REJUVENATING.getSpecies(),
BeeSpecies.TC_EMPOWERING.getSpecies(),
BeeSpecies.TC_NEXUS.getGenome(),
10)
.restrictBiomeType(Type.MAGICAL)
.requireResource(ThaumcraftHelper.airy, ThaumcraftHelper.AiryBlockType.NODE.ordinal());
beeMutationFactory.createMutation(
BeeSpecies.TRANSMUTING.getSpecies(),
BeeSpecies.TC_EMPOWERING.getSpecies(),
BeeSpecies.TC_TAINT.getGenome(),
11).addMutationCondition(new MoonPhaseMutationRestriction(MoonPhase.NEW));
beeMutationFactory
.createMutation(
BeeSpecies.TRANSMUTING.getSpecies(),
BeeSpecies.TC_REJUVENATING.getSpecies(),
BeeSpecies.TC_PURE.getGenome(),
8)
.restrictBiomeType(Type.MAGICAL)
.addMutationCondition(new MoonPhaseMutationRestriction(MoonPhase.NEW));
beeMutationFactory.createMutation(
BeeSpecies.BIGBAD.getSpecies(),
BeeSpecies.TC_VIS.getSpecies(),
BeeSpecies.TC_HUNGRY.getGenome(),
20);
beeMutationFactory
.createMutation(
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.GHASTLY.getSpecies(),
BeeSpecies.TC_WISPY.getGenome(),
9)
.addMutationCondition(
new MoonPhaseMutationRestriction(MoonPhase.WANING_CRESCENT, MoonPhase.WAXING_CRESCENT));
beeMutationFactory.createMutation(
BeeSpecies.IRON.getSpecies(),
BeeSpecies.TC_TAINT.getSpecies(),
BeeSpecies.TC_VOID.getGenome(),
5).restrictBiomeType(Type.MAGICAL).requireNight();
}
if (ArsMagicaHelper.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.ARCANE.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.AM_ESSENCE.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.ARCANE.getSpecies(),
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.AM_QUINTESSENCE.getGenome(),
7);
beeMutationFactory.createMutation(
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.AM_AIR.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.AM_EARTH.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.FIREY.getSpecies(),
BeeSpecies.AM_FIRE.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.WATERY.getSpecies(),
BeeSpecies.AM_WATER.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.ETHEREAL.getSpecies(),
BeeSpecies.AM_ARCANE.getGenome(),
10);
beeMutationFactory.createMutation(
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.AM_AIR.getSpecies(),
BeeSpecies.AM_LIGHTNING.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.AM_EARTH.getSpecies(),
BeeSpecies.AM_PLANT.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.WATERY.getSpecies(),
BeeSpecies.AM_WATER.getSpecies(),
BeeSpecies.AM_ICE.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.AM_ESSENCE.getSpecies(),
BeeSpecies.AM_VORTEX.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
BeeSpecies.GHASTLY.getSpecies(),
BeeSpecies.AM_WIGHT.getGenome(),
8);
}
if (EquivalentExchangeHelper.isActive()) {
beeMutationFactory.createMutation(
Allele.getBaseSpecies("Frugal"),
BeeSpecies.MUTABLE.getSpecies(),
BeeSpecies.EE_MINIUM.getGenome(),
8);
}
if (RedstoneArsenalHelper.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.TE_ELECTRUM.getSpecies(),
BeeSpecies.TE_DESTABILIZED.getSpecies(),
BeeSpecies.RSA_FLUXED.getGenome(),
10).requireResource("blockElectrumFlux");
}
if (ThermalModsHelper.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.TIN.getSpecies(),
BeeSpecies.COPPER.getSpecies(),
BeeSpecies.TE_BRONZE.getGenome(),
12).requireResource("blockBronze");
beeMutationFactory.createMutation(
BeeSpecies.GOLD.getSpecies(),
BeeSpecies.SILVER.getSpecies(),
BeeSpecies.TE_ELECTRUM.getGenome(),
10).requireResource("blockElectrum");
beeMutationFactory.createMutation(
BeeSpecies.IRON.getSpecies(),
BeeSpecies.ESOTERIC.getSpecies(),
BeeSpecies.TE_NICKEL.getGenome(),
14).requireResource("blockNickel");
beeMutationFactory.createMutation(
BeeSpecies.IRON.getSpecies(),
BeeSpecies.TE_NICKEL.getSpecies(),
BeeSpecies.TE_INVAR.getGenome(),
14).requireResource("blockInvar");
beeMutationFactory.createMutation(
BeeSpecies.TE_NICKEL.getSpecies(),
BeeSpecies.TE_INVAR.getSpecies(),
BeeSpecies.TE_PLATINUM.getGenome(),
10).requireResource("blockPlatinum");
beeMutationFactory.createMutation(
BeeSpecies.TIN.getSpecies(),
BeeSpecies.COPPER.getSpecies(),
BeeSpecies.TE_BRONZE.getGenome(),
12).requireResource("blockBronze");
beeMutationFactory.createMutation(
BeeSpecies.SPITEFUL.getSpecies(),
BeeSpecies.TIN.getSpecies(),
BeeSpecies.TE_COAL.getGenome(),
12).requireResource(Blocks.coal_ore, 0);
beeMutationFactory.createMutation(
BeeSpecies.SPITEFUL.getSpecies(),
Allele.getBaseSpecies("Industrious"),
BeeSpecies.TE_DESTABILIZED.getGenome(),
12).requireResource(Blocks.redstone_ore, 0);
beeMutationFactory.createMutation(
BeeSpecies.SMOULDERING.getSpecies(),
BeeSpecies.INFERNAL.getSpecies(),
BeeSpecies.TE_LUX.getGenome(),
12).requireResource(Blocks.glowstone, 0);
beeMutationFactory.createMutation(
BeeSpecies.SMOULDERING.getSpecies(),
Allele.getBaseSpecies("Austere"),
BeeSpecies.TE_DANTE.getGenome(),
12).restrictBiomeType(BiomeDictionary.Type.NETHER);
beeMutationFactory.createMutation(
BeeSpecies.TE_DANTE.getSpecies(),
BeeSpecies.TE_COAL.getSpecies(),
BeeSpecies.TE_PYRO.getGenome(),
8).restrictBiomeType(BiomeDictionary.Type.NETHER);
beeMutationFactory.createMutation(
BeeSpecies.SKULKING.getSpecies(),
Allele.getBaseSpecies("Wintry"),
BeeSpecies.TE_BLIZZY.getGenome(),
12);
beeMutationFactory.createMutation(
BeeSpecies.TE_BLIZZY.getSpecies(),
Allele.getBaseSpecies("Icy"),
BeeSpecies.TE_GELID.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.SMOULDERING.getSpecies(),
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.TE_SHOCKING.getGenome(),
13);
beeMutationFactory.createMutation(
BeeSpecies.TE_SHOCKING.getSpecies(),
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.TE_AMPED.getGenome(),
8);
beeMutationFactory.createMutation(
BeeSpecies.SMOULDERING.getSpecies(),
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.TE_GROUNDED.getGenome(),
12);
beeMutationFactory.createMutation(
BeeSpecies.TE_GROUNDED.getSpecies(),
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.TE_ROCKING.getGenome(),
9);
beeMutationFactory.createMutation(
BeeSpecies.TE_PLATINUM.getSpecies(),
BeeSpecies.OBLIVION.getSpecies(),
BeeSpecies.TE_WINSOME.getGenome(),
12);
beeMutationFactory.createMutation(
BeeSpecies.TE_WINSOME.getSpecies(),
BeeSpecies.TE_COAL.getSpecies(),
BeeSpecies.TE_ENDEARING.getGenome(),
8).requireResource("blockEnderium");
beeMutationFactory.createMutation(
BeeSpecies.COPPER.getSpecies(),
BeeSpecies.TE_DESTABILIZED.getSpecies(),
BeeSpecies.TE_SIGNALUS.getGenome(),
8).requireResource("blockSignalum");
beeMutationFactory.createMutation(
BeeSpecies.TIN.getSpecies(),
BeeSpecies.TE_LUX.getSpecies(),
BeeSpecies.TE_LUMIUS.getGenome(),
8).requireResource("blockLumium");
}
if (BotaniaHelper.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.ELDRITCH.getSpecies(),
Allele.getBaseSpecies("Forest"),
BeeSpecies.BOT_ROOTED.getGenome(),
15).requireResource(BotaniaHelper.blockLivingWood, 0);
beeMutationFactory.createMutation(
BeeSpecies.BOT_ROOTED.getSpecies(),
BeeSpecies.WATERY.getSpecies(),
BeeSpecies.BOT_SOMNOLENT.getGenome(),
16).requireNight();
beeMutationFactory.createMutation(
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.BOT_SOMNOLENT.getSpecies(),
BeeSpecies.BOT_DREAMING.getGenome(),
8).requireNight();
beeMutationFactory.createMutation(
BeeSpecies.BOT_BOTANIC.getSpecies(),
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.BOT_BLOSSOM.getGenome(),
12);
beeMutationFactory.createMutation(
BeeSpecies.BOT_BOTANIC.getSpecies(),
BeeSpecies.BOT_BLOSSOM.getSpecies(),
BeeSpecies.BOT_FLORAL.getGenome(),
8);
}
if (AppliedEnergisticsHelper.isActive()) {
if (BeeSpecies.AE_SKYSTONE.isActive()) {
beeMutationFactory.createMutation(
BeeSpecies.EARTHY.getSpecies(),
BeeSpecies.WINDY.getSpecies(),
BeeSpecies.AE_SKYSTONE.getGenome(),
20).requireResource(AppliedEnergisticsHelper.skystone, 0);
}
}
}
}
@@ -0,0 +1,611 @@
package magicbees.bees;
import static magicbees.bees.BeeSpecies.ABANDONED;
import static magicbees.bees.BeeSpecies.AE_SKYSTONE;
import static magicbees.bees.BeeSpecies.ALUMINUM;
import static magicbees.bees.BeeSpecies.AM_AIR;
import static magicbees.bees.BeeSpecies.AM_ARCANE;
import static magicbees.bees.BeeSpecies.AM_EARTH;
import static magicbees.bees.BeeSpecies.AM_ESSENCE;
import static magicbees.bees.BeeSpecies.AM_FIRE;
import static magicbees.bees.BeeSpecies.AM_ICE;
import static magicbees.bees.BeeSpecies.AM_LIGHTNING;
import static magicbees.bees.BeeSpecies.AM_PLANT;
import static magicbees.bees.BeeSpecies.AM_QUINTESSENCE;
import static magicbees.bees.BeeSpecies.AM_VORTEX;
import static magicbees.bees.BeeSpecies.AM_WATER;
import static magicbees.bees.BeeSpecies.AM_WIGHT;
import static magicbees.bees.BeeSpecies.APATITE;
import static magicbees.bees.BeeSpecies.ARCANE;
import static magicbees.bees.BeeSpecies.ARDITE;
import static magicbees.bees.BeeSpecies.ATTUNED;
import static magicbees.bees.BeeSpecies.AWARE;
import static magicbees.bees.BeeSpecies.BATTY;
import static magicbees.bees.BeeSpecies.BEEF;
import static magicbees.bees.BeeSpecies.BIGBAD;
import static magicbees.bees.BeeSpecies.BOT_ALFHEIM;
import static magicbees.bees.BeeSpecies.BOT_BLOSSOM;
import static magicbees.bees.BeeSpecies.BOT_BOTANIC;
import static magicbees.bees.BeeSpecies.BOT_DREAMING;
import static magicbees.bees.BeeSpecies.BOT_FLORAL;
import static magicbees.bees.BeeSpecies.BOT_ROOTED;
import static magicbees.bees.BeeSpecies.BOT_SOMNOLENT;
import static magicbees.bees.BeeSpecies.BOT_VAZBEE;
import static magicbees.bees.BeeSpecies.BRAINY;
import static magicbees.bees.BeeSpecies.CATTY;
import static magicbees.bees.BeeSpecies.CERTUS;
import static magicbees.bees.BeeSpecies.CHARMED;
import static magicbees.bees.BeeSpecies.CHICKEN;
import static magicbees.bees.BeeSpecies.COBALT;
import static magicbees.bees.BeeSpecies.COPPER;
import static magicbees.bees.BeeSpecies.CRUMBLING;
import static magicbees.bees.BeeSpecies.DIAMOND;
import static magicbees.bees.BeeSpecies.DOCTORAL;
import static magicbees.bees.BeeSpecies.DRACONIC;
import static magicbees.bees.BeeSpecies.EARTHY;
import static magicbees.bees.BeeSpecies.EE_MINIUM;
import static magicbees.bees.BeeSpecies.ELDRITCH;
import static magicbees.bees.BeeSpecies.EMERALD;
import static magicbees.bees.BeeSpecies.ENCHANTED;
import static magicbees.bees.BeeSpecies.ESOTERIC;
import static magicbees.bees.BeeSpecies.ETHEREAL;
import static magicbees.bees.BeeSpecies.FIREY;
import static magicbees.bees.BeeSpecies.FLUIX;
import static magicbees.bees.BeeSpecies.FORLORN;
import static magicbees.bees.BeeSpecies.GHASTLY;
import static magicbees.bees.BeeSpecies.GOLD;
import static magicbees.bees.BeeSpecies.HATEFUL;
import static magicbees.bees.BeeSpecies.HORSE;
import static magicbees.bees.BeeSpecies.INFERNAL;
import static magicbees.bees.BeeSpecies.INVISIBLE;
import static magicbees.bees.BeeSpecies.IRON;
import static magicbees.bees.BeeSpecies.LEAD;
import static magicbees.bees.BeeSpecies.LORDLY;
import static magicbees.bees.BeeSpecies.MANYULLYN;
import static magicbees.bees.BeeSpecies.MUTABLE;
import static magicbees.bees.BeeSpecies.MYSTERIOUS;
import static magicbees.bees.BeeSpecies.MYSTICAL;
import static magicbees.bees.BeeSpecies.NAMELESS;
import static magicbees.bees.BeeSpecies.OBLIVION;
import static magicbees.bees.BeeSpecies.PORK;
import static magicbees.bees.BeeSpecies.PUPIL;
import static magicbees.bees.BeeSpecies.RSA_FLUXED;
import static magicbees.bees.BeeSpecies.SAVANT;
import static magicbees.bees.BeeSpecies.SCHOLARLY;
import static magicbees.bees.BeeSpecies.SHEEPISH;
import static magicbees.bees.BeeSpecies.SILICON;
import static magicbees.bees.BeeSpecies.SILVER;
import static magicbees.bees.BeeSpecies.SKULKING;
import static magicbees.bees.BeeSpecies.SMOULDERING;
import static magicbees.bees.BeeSpecies.SORCEROUS;
import static magicbees.bees.BeeSpecies.SOUL;
import static magicbees.bees.BeeSpecies.SPIDERY;
import static magicbees.bees.BeeSpecies.SPIRIT;
import static magicbees.bees.BeeSpecies.SPITEFUL;
import static magicbees.bees.BeeSpecies.SUPERNATURAL;
import static magicbees.bees.BeeSpecies.TC_AIR;
import static magicbees.bees.BeeSpecies.TC_CHAOS;
import static magicbees.bees.BeeSpecies.TC_EARTH;
import static magicbees.bees.BeeSpecies.TC_EMPOWERING;
import static magicbees.bees.BeeSpecies.TC_FIRE;
import static magicbees.bees.BeeSpecies.TC_HUNGRY;
import static magicbees.bees.BeeSpecies.TC_NEXUS;
import static magicbees.bees.BeeSpecies.TC_ORDER;
import static magicbees.bees.BeeSpecies.TC_PURE;
import static magicbees.bees.BeeSpecies.TC_REJUVENATING;
import static magicbees.bees.BeeSpecies.TC_TAINT;
import static magicbees.bees.BeeSpecies.TC_VIS;
import static magicbees.bees.BeeSpecies.TC_VOID;
import static magicbees.bees.BeeSpecies.TC_WATER;
import static magicbees.bees.BeeSpecies.TC_WISPY;
import static magicbees.bees.BeeSpecies.TE_AMPED;
import static magicbees.bees.BeeSpecies.TE_BLIZZY;
import static magicbees.bees.BeeSpecies.TE_BRONZE;
import static magicbees.bees.BeeSpecies.TE_COAL;
import static magicbees.bees.BeeSpecies.TE_DANTE;
import static magicbees.bees.BeeSpecies.TE_DESTABILIZED;
import static magicbees.bees.BeeSpecies.TE_ELECTRUM;
import static magicbees.bees.BeeSpecies.TE_ENDEARING;
import static magicbees.bees.BeeSpecies.TE_GELID;
import static magicbees.bees.BeeSpecies.TE_GROUNDED;
import static magicbees.bees.BeeSpecies.TE_INVAR;
import static magicbees.bees.BeeSpecies.TE_LUMIUS;
import static magicbees.bees.BeeSpecies.TE_LUX;
import static magicbees.bees.BeeSpecies.TE_NICKEL;
import static magicbees.bees.BeeSpecies.TE_PLATINUM;
import static magicbees.bees.BeeSpecies.TE_PYRO;
import static magicbees.bees.BeeSpecies.TE_ROCKING;
import static magicbees.bees.BeeSpecies.TE_SHOCKING;
import static magicbees.bees.BeeSpecies.TE_SIGNALUS;
import static magicbees.bees.BeeSpecies.TE_WINSOME;
import static magicbees.bees.BeeSpecies.TIMELY;
import static magicbees.bees.BeeSpecies.TIN;
import static magicbees.bees.BeeSpecies.TRANSMUTING;
import static magicbees.bees.BeeSpecies.UNUSUAL;
import static magicbees.bees.BeeSpecies.WATERY;
import static magicbees.bees.BeeSpecies.WINDY;
import static magicbees.bees.BeeSpecies.WITHERING;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import gregtech.api.enums.Materials;
import magicbees.item.types.CombType;
import magicbees.item.types.DropType;
import magicbees.item.types.NuggetType;
import magicbees.item.types.PollenType;
import magicbees.item.types.PropolisType;
import magicbees.item.types.ResourceType;
import magicbees.main.Config;
import magicbees.main.utils.LogHelper;
import magicbees.main.utils.compat.AppliedEnergisticsHelper;
import magicbees.main.utils.compat.ArsMagicaHelper;
import magicbees.main.utils.compat.BotaniaHelper;
import magicbees.main.utils.compat.BotaniaHelper.PastureSeed;
import magicbees.main.utils.compat.EquivalentExchangeHelper;
import magicbees.main.utils.compat.ForestryHelper;
import magicbees.main.utils.compat.RedstoneArsenalHelper;
import magicbees.main.utils.compat.ThaumcraftHelper;
import magicbees.main.utils.compat.ThermalModsHelper;
public class BeeProductHelper {
public static void initBaseProducts() {
MYSTICAL.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
SORCEROUS.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
UNUSUAL.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
ATTUNED.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
ELDRITCH.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.15f);
ESOTERIC.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.18f);
MYSTERIOUS.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.20f);
ARCANE.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.25f)
.addSpecialty(Config.drops.getStackForType(DropType.ENCHANTED, 1), 0.09f);
CHARMED.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.18f);
ENCHANTED.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.20f);
SUPERNATURAL.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.25f)
.addSpecialty(Config.pollen.getStackForType(PollenType.UNUSUAL), 0.08f);
ETHEREAL.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.10f);
WINDY.addProduct(Config.combs.getStackForType(CombType.AIRY), 0.25f);
FIREY.addProduct(Config.combs.getStackForType(CombType.FIREY), 0.25f);
EARTHY.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.25f);
WATERY.addProduct(Config.combs.getStackForType(CombType.WATERY), 0.25f)
.addSpecialty(new ItemStack(Blocks.ice), 0.025f);
PUPIL.addProduct(Config.combs.getStackForType(CombType.PAPERY), 0.20f);
SCHOLARLY.addProduct(Config.combs.getStackForType(CombType.PAPERY), 0.25f);
SAVANT.addProduct(Config.combs.getStackForType(CombType.PAPERY), 0.40f);
AWARE.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.18f);
SPIRIT.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.22f)
.addSpecialty(Config.combs.getStackForType(CombType.SOUL), 0.16f);
SOUL.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.28f)
.addSpecialty(Config.combs.getStackForType(CombType.SOUL), 0.20f);
SKULKING.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f);
GHASTLY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.08f)
.addSpecialty(new ItemStack(Items.ghast_tear), 0.099f);
SPIDERY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.13f)
.addProduct(new ItemStack(Items.string), 0.08f).addSpecialty(new ItemStack(Items.spider_eye), 0.08f);
SMOULDERING.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.10f)
.addSpecialty(new ItemStack(Items.blaze_rod), 0.05f);
BRAINY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addProduct(new ItemStack(Items.rotten_flesh), 0.06f);
BIGBAD.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.18f)
.addProduct(new ItemStack(Items.beef), 0.12f).addProduct(new ItemStack(Items.chicken), 0.12f)
.addSpecialty(new ItemStack(Items.melon), 0.20f);
BATTY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addSpecialty(new ItemStack(Items.string), 0.20f);
CHICKEN.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.23f)
.addSpecialty(new ItemStack(Items.feather), 0.08f).addSpecialty(new ItemStack(Items.egg), 0.08f);
BEEF.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
.addSpecialty(new ItemStack(Items.leather), 0.165f);
PORK.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addSpecialty(new ItemStack(Items.carrot), 0.165f);
SHEEPISH.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
.addSpecialty(new ItemStack(Blocks.wool), 0.16f).addSpecialty(new ItemStack(Items.wheat), 0.24f);
HORSE.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
.addSpecialty(new ItemStack(Items.leather), 0.24f).addSpecialty(new ItemStack(Items.apple), 0.38f);
CATTY.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.25f)
.addSpecialty(new ItemStack(Items.fish), 0.24f);
TIMELY.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.16f);
LORDLY.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.19f);
DOCTORAL.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.24f)
.addSpecialty(new ItemStack(Config.jellyBaby), 0.078f);
INFERNAL.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.12f);
HATEFUL.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.18f);
SPITEFUL.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.24f);
WITHERING.addSpecialty(Config.miscResources.getStackForType(ResourceType.SKULL_CHIP), 0.15f);
OBLIVION.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.14f);
NAMELESS.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.19f);
ABANDONED.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.24f);
FORLORN.addProduct(Config.combs.getStackForType(CombType.FORGOTTEN), 0.30f);
DRACONIC.addSpecialty(Config.miscResources.getStackForType(ResourceType.DRAGON_DUST), 0.15f);
IRON.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addSpecialty(Config.nuggets.getStackForType(NuggetType.IRON), 0.18f);
GOLD.addProduct(ForestryHelper.itemHoneycomb, 0.10f).addSpecialty(new ItemStack(Items.gold_nugget, 1), 0.16f);
DIAMOND.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addSpecialty(Config.nuggets.getStackForType(NuggetType.DIAMOND), 0.06f);
EMERALD.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addSpecialty(Config.nuggets.getStackForType(NuggetType.EMERALD), 0.04f);
COPPER.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addSpecialty(Config.nuggets.getStackForType(NuggetType.COPPER), 0.20f);
TIN.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addSpecialty(Config.nuggets.getStackForType(NuggetType.TIN), 0.20f);
APATITE.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addSpecialty(Config.nuggets.getStackForType(NuggetType.APATITE), 0.10f);
MUTABLE.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 0.30f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.10f);
TRANSMUTING.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.30f)
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.SILKY.ordinal()), 0.05f)
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.SIMMERING.ordinal()), 0.05f);
CRUMBLING.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.30f)
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.POWDERY.ordinal()), 0.10f)
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.COCOA.ordinal()), 0.15f);
INVISIBLE.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.35f);
}
public static void initOreDictSProducts() {
boolean isGTNHCoreModLoaded = Config.isGTNHCoreModLoaded;
SILVER.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetSilver").size() > 0) {
SILVER.addSpecialty(
isGTNHCoreModLoaded ? Materials.Silver.getNuggets(1) : OreDictionary.getOres("nuggetSilver").get(0),
0.16f);
} else {
SILVER.setInactive();
}
LEAD.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetLead").size() > 0) {
LEAD.addSpecialty(
isGTNHCoreModLoaded ? Materials.Lead.getNuggets(1) : OreDictionary.getOres("nuggetLead").get(0),
0.17f);
} else {
LEAD.setInactive();
}
// Oil berry alu bee
ALUMINUM.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetAluminum").size() > 0) {
ALUMINUM.addSpecialty(OreDictionary.getOres("nuggetAluminum").get(0), 0.20f);
} else {
ALUMINUM.setInactive();
}
TE_PLATINUM.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetPlatinum").size() > 0) {
TE_PLATINUM.addSpecialty(
isGTNHCoreModLoaded ? Materials.Platinum.getNuggets(1)
: OreDictionary.getOres("nuggetPlatinum").get(0),
0.18f);
} else {
TE_PLATINUM.setInactive();
}
TE_NICKEL.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetNickel").size() > 0) {
TE_NICKEL.addSpecialty(
isGTNHCoreModLoaded ? Materials.Nickel.getNuggets(1) : OreDictionary.getOres("nuggetNickel").get(0),
0.18f);
} else {
TE_NICKEL.setInactive();
}
ARDITE.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetArdite").size() > 0) {
ARDITE.addSpecialty(
isGTNHCoreModLoaded ? Materials.Ardite.getNuggets(1) : OreDictionary.getOres("nuggetArdite").get(0),
0.18f);
} else {
ARDITE.setInactive();
}
COBALT.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetCobalt").size() > 0) {
COBALT.addSpecialty(
isGTNHCoreModLoaded ? Materials.Cobalt.getNuggets(1) : OreDictionary.getOres("nuggetCobalt").get(0),
0.18f);
} else {
COBALT.setInactive();
}
TE_BRONZE.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetBronze").size() > 0) {
TE_BRONZE.addSpecialty(
isGTNHCoreModLoaded ? Materials.Bronze.getNuggets(1) : OreDictionary.getOres("nuggetBronze").get(0),
0.18f);
} else {
TE_BRONZE.setInactive();
}
TE_INVAR.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetInvar").size() > 0) {
TE_INVAR.addSpecialty(
isGTNHCoreModLoaded ? Materials.Invar.getNuggets(1) : OreDictionary.getOres("nuggetInvar").get(0),
0.18f);
} else {
TE_INVAR.setInactive();
}
TE_ELECTRUM.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetElectrum").size() > 0) {
TE_ELECTRUM.addSpecialty(
isGTNHCoreModLoaded ? Materials.Electrum.getNuggets(1)
: OreDictionary.getOres("nuggetElectrum").get(0),
0.18f);
} else {
TE_ELECTRUM.setInactive();
}
MANYULLYN.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("nuggetManyullyn").size() > 0) {
MANYULLYN.addSpecialty(
isGTNHCoreModLoaded ? Materials.Manyullyn.getNuggets(1)
: OreDictionary.getOres("nuggetManyullyn").get(0),
0.18f);
} else {
MANYULLYN.setInactive();
}
CERTUS.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("crystalCertusQuartz").size() > 0) {
CERTUS.addSpecialty(OreDictionary.getOres("crystalCertusQuartz").get(0), 0.08f);
} else {
CERTUS.setInactive();
}
SILICON.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("dustSilicon").size() > 0) {
SILICON.addSpecialty(OreDictionary.getOres("dustSilicon").get(0), 0.30f);
} else {
SILICON.setInactive();
}
FLUIX.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (OreDictionary.getOres("crystalFluix").size() > 0) {
FLUIX.addSpecialty(OreDictionary.getOres("crystalFluix").get(0), 0.06f);
} else {
FLUIX.setInactive();
}
}
public static void initThaumcraftProducts() {
TC_AIR.addProduct(Config.combs.getStackForType(CombType.TC_AIR), 0.20f);
TC_FIRE.addProduct(Config.combs.getStackForType(CombType.TC_FIRE), 0.20f);
TC_WATER.addProduct(Config.combs.getStackForType(CombType.TC_WATER), 0.20f);
TC_EARTH.addProduct(Config.combs.getStackForType(CombType.TC_EARTH), 0.20f);
TC_ORDER.addProduct(Config.combs.getStackForType(CombType.TC_ORDER), 0.20f);
TC_CHAOS.addProduct(Config.combs.getStackForType(CombType.TC_CHAOS), 0.20f);
TC_VIS.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.10f);
TC_REJUVENATING.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.18f);
TC_EMPOWERING.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.14f);
TC_EMPOWERING.addSpecialty(
new ItemStack(ForestryHelper.pollen, 1, ForestryHelper.Pollen.CRYSTALLINE.ordinal()),
0.02f);
TC_NEXUS.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.25f);
TC_NEXUS.addProduct(Config.combs.getStackForType(CombType.TEMPORAL), 0.12f);
TC_NEXUS.addSpecialty(
new ItemStack(ForestryHelper.pollen, 1, ForestryHelper.Pollen.CRYSTALLINE.ordinal()),
0.02f);
TC_TAINT.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.18f);
TC_TAINT.addProduct(
new ItemStack(ForestryHelper.craftingResource, 1, ForestryHelper.Propolis.STICKY.ordinal()),
0.213f);
TC_PURE.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.16f);
TC_PURE.addSpecialty(Config.combs.getStackForType(CombType.SOUL), 0.19f);
TC_HUNGRY.addProduct(Config.combs.getStackForType(CombType.INTELLECT), 0.28f);
TC_HUNGRY.addSpecialty(Config.combs.getStackForType(CombType.TEMPORAL), 0.195f);
TC_WISPY.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.SILKY.ordinal()), 0.22f)
.addSpecialty(
new ItemStack(
ForestryHelper.craftingResource,
1,
ForestryHelper.CraftingMaterial.SILK_WISP.ordinal()),
0.04f);
TC_VOID.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (ThaumcraftHelper.isActive()) {
SCHOLARLY.addSpecialty(Config.miscResources.getStackForType(ResourceType.LORE_FRAGMENT), 0.02f);
SAVANT.addSpecialty(Config.miscResources.getStackForType(ResourceType.LORE_FRAGMENT), 0.05f);
TC_AIR.addSpecialty(Config.propolis.getStackForType(PropolisType.AIR), 0.18f);
TC_FIRE.addSpecialty(Config.propolis.getStackForType(PropolisType.FIRE), 0.18f);
TC_WATER.addSpecialty(Config.propolis.getStackForType(PropolisType.WATER), 0.18f);
TC_EARTH.addSpecialty(Config.propolis.getStackForType(PropolisType.EARTH), 0.18f);
TC_ORDER.addSpecialty(Config.propolis.getStackForType(PropolisType.ORDER), 0.18f);
TC_CHAOS.addSpecialty(Config.propolis.getStackForType(PropolisType.CHAOS), 0.18f);
BATTY.addSpecialty(new ItemStack(Items.gunpowder), 0.04f);
BRAINY.addSpecialty(new ItemStack(ThaumcraftHelper.zombieBrain, 1), 0.02f);
CHICKEN.addSpecialty(new ItemStack(ThaumcraftHelper.nuggetChicken, 1), 0.09f);
BEEF.addSpecialty(new ItemStack(ThaumcraftHelper.nuggetBeef, 1), 0.09f);
PORK.addSpecialty(new ItemStack(ThaumcraftHelper.nuggetPork, 1), 0.09f);
TC_VOID.addSpecialty(
new ItemStack(ThaumcraftHelper.nuggetMetal, 1, ThaumcraftHelper.NuggetType.VOID_METAL.ordinal()),
0.155f);
}
}
public static void initEquivalentExchange3Species() {
EE_MINIUM.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.16f);
if (EquivalentExchangeHelper.isActive()) {
EE_MINIUM.addSpecialty(new ItemStack(EquivalentExchangeHelper.minuimShard), 0.06f);
}
}
public static void initArsMagicaSpecies() {
AM_ESSENCE.addProduct(Config.combs.getStackForType(CombType.AM_ESSENCE), 0.12f);
AM_QUINTESSENCE.addProduct(Config.combs.getStackForType(CombType.AM_ESSENCE), 0.23f);
AM_EARTH.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_AIR.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_FIRE.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_WATER.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_LIGHTNING.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_PLANT.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_ICE.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.12f);
AM_ARCANE.addProduct(Config.combs.getStackForType(CombType.AM_POTENT), 0.19f);
AM_VORTEX.addProduct(Config.combs.getStackForType(CombType.AM_ESSENCE), 0.10f);
AM_WIGHT.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.30f)
.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f);
if (ArsMagicaHelper.isActive()) {
AM_QUINTESSENCE.addSpecialty(
new ItemStack(
ArsMagicaHelper.itemResource,
1,
ArsMagicaHelper.ResourceType.ARCANE_COMPOUND.ordinal()),
0.05f);
AM_EARTH.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.EARTH.ordinal()),
0.07f);
AM_AIR.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.AIR.ordinal()),
0.07f);
AM_FIRE.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.FIRE.ordinal()),
0.07f);
AM_WATER.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.WATER.ordinal()),
0.07f);
AM_LIGHTNING.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.LIGHTNING.ordinal()),
0.07f);
AM_PLANT.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.PLANT.ordinal()),
0.07f);
AM_ICE.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.ICE.ordinal()),
0.07f);
AM_ARCANE.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.ARCANE.ordinal()),
0.11f);
AM_VORTEX.addSpecialty(
new ItemStack(ArsMagicaHelper.essence, 1, ArsMagicaHelper.EssenceType.EARTH.ordinal()),
0.15f);
AM_WIGHT.addSpecialty(
new ItemStack(
ArsMagicaHelper.itemResource,
1,
ArsMagicaHelper.ResourceType.ARCANE_COMPOUND.ordinal()),
0.11f);
}
}
public static void initThermalExpansionProducts() {
TE_DANTE.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.10f)
.addSpecialty(new ItemStack(Items.blaze_powder), 0.05f);
TE_PYRO.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.MOLTEN), 0.10f)
.addSpecialty(new ItemStack(Items.blaze_powder), 0.05f);
TE_DESTABILIZED.addProduct(Config.combs.getStackForType(CombType.TE_DESTABILIZED), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f)
.addSpecialty(new ItemStack(Items.redstone), 0.05f);
TE_LUX.addProduct(Config.combs.getStackForType(CombType.TE_LUX), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f)
.addSpecialty(new ItemStack(Items.glowstone_dust), 0.05f);
TE_WINSOME.addProduct(Config.combs.getStackForType(CombType.FURTIVE), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.TE_ENDEARING), 0.05f)
.addSpecialty(new ItemStack(Items.ender_pearl), 0.05f);
TE_ENDEARING
.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.MYSTERIOUS.ordinal()), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.TE_ENDEARING), 0.05f);
TE_COAL.addProduct(ForestryHelper.itemHoneycomb, 0.10f)
.addProduct(Config.combs.getStackForType(CombType.TE_CARBON), 0.05f)
.addSpecialty(new ItemStack(Items.coal), 0.05f);
TE_BLIZZY.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.FROZEN.ordinal()), 0.10f);
TE_GELID.addProduct(new ItemStack(ForestryHelper.beeComb, 1, ForestryHelper.Comb.FROZEN.ordinal()), 0.10f);
TE_SHOCKING.addProduct(Config.combs.getStackForType(CombType.AIRY), 0.16f);
TE_AMPED.addProduct(Config.combs.getStackForType(CombType.AIRY), 0.29f);
TE_GROUNDED.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.16f);
TE_ROCKING.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.29f);
TE_SIGNALUS.addProduct(Config.combs.getStackForType(CombType.TE_DESTABILIZED), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f);
TE_LUMIUS.addProduct(Config.combs.getStackForType(CombType.TE_LUX), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.OCCULT), 0.10f);
if (ThermalModsHelper.isActive()) {
LogHelper.info("Thermal Expansion bees active");
TE_BLIZZY.addSpecialty(ThermalModsHelper.dustBlizz, 0.09f);
TE_GELID.addSpecialty(ThermalModsHelper.dustCryotheum, 0.09f);
TE_DANTE.addSpecialty(ThermalModsHelper.dustSulfur, 0.09f);
TE_PYRO.addSpecialty(ThermalModsHelper.dustPyrotheum, 0.09f);
TE_SHOCKING.addSpecialty(ThermalModsHelper.dustBlitz, 0.09f);
TE_AMPED.addSpecialty(ThermalModsHelper.dustAerotheum, 0.09f);
TE_GROUNDED.addSpecialty(ThermalModsHelper.dustBasalz, 0.09f);
TE_ROCKING.addSpecialty(ThermalModsHelper.dustPetrotheum, 0.09f);
TE_WINSOME.addSpecialty(ThermalModsHelper.dustPlatinum, 0.09f);
TE_ENDEARING.addSpecialty(ThermalModsHelper.enderiumNugget, 0.09f);
TE_SIGNALUS.addSpecialty(ThermalModsHelper.signalumNugget, 0.09f);
TE_LUMIUS.addSpecialty(ThermalModsHelper.lumiumNugget, 0.09f);
}
}
public static void initRedstoneArsenelProducts() {
RSA_FLUXED.addProduct(ForestryHelper.itemHoneycomb, 0.10f);
if (RedstoneArsenalHelper.isActive()) {
RSA_FLUXED.addSpecialty(RedstoneArsenalHelper.fluxNugget, 0.09f);
}
}
public static void initBotaniaProducts() {
BOT_ROOTED.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.10f);
BOT_BOTANIC.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.10f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.05f);
BOT_BLOSSOM.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.20f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.05f);
BOT_FLORAL.addProduct(Config.combs.getStackForType(CombType.MUNDANE), 0.25f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.05f);
BOT_VAZBEE.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.05f)
.addProduct(new ItemStack(Items.dye, 1, 9), 0.20f).addProduct(new ItemStack(Blocks.wool, 1, 9), 0.02f)
.addProduct(new ItemStack(Blocks.red_flower, 1, 7), 0.06f)
.addProduct(Config.combs.getStackForType(CombType.TRANSMUTED), 0.15f);
BOT_SOMNOLENT.addProduct(Config.combs.getStackForType(CombType.WATERY), 0.08f)
.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.15f);
BOT_DREAMING.addProduct(Config.combs.getStackForType(CombType.WATERY), 0.16f)
.addProduct(Config.combs.getStackForType(CombType.SOUL), 0.33f);
BOT_ALFHEIM.addProduct(Config.combs.getStackForType(CombType.OTHERWORLDLY), 0.28f);
if (BotaniaHelper.isActive()) {
for (int i = 0; i < 16; ++i) {
ItemStack petal = new ItemStack(BotaniaHelper.itemPetal, 1, i);
BOT_BOTANIC.addSpecialty(petal, 0.01f);
BOT_BLOSSOM.addSpecialty(petal, 0.04f);
BOT_FLORAL.addSpecialty(petal, 0.16f);
}
for (PastureSeed type : PastureSeed.values()) {
BOT_VAZBEE.addSpecialty(new ItemStack(BotaniaHelper.itemPastureSeed, 1, type.ordinal()), 0.04f);
}
}
}
public static void initAppEngProducts() {
AE_SKYSTONE.addProduct(Config.combs.getStackForType(CombType.EARTHY), 0.19f);
if (AppliedEnergisticsHelper.skystone != null) {
AE_SKYSTONE.addSpecialty(new ItemStack(AppliedEnergisticsHelper.skystone), 0.02f);
} else {
AE_SKYSTONE.setInactive();
}
}
}
@@ -0,0 +1,788 @@
package magicbees.bees;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.EnumBeeChromosome;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.api.apiculture.IAlleleBeeSpeciesCustom;
import forestry.api.apiculture.IBeeFactory;
import forestry.api.apiculture.IBeeIconColourProvider;
import forestry.api.apiculture.IBeeIconProvider;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IClassification;
import magicbees.main.utils.compat.AppliedEnergisticsHelper;
import magicbees.main.utils.compat.ArsMagicaHelper;
import magicbees.main.utils.compat.BotaniaHelper;
import magicbees.main.utils.compat.EquivalentExchangeHelper;
import magicbees.main.utils.compat.RedstoneArsenalHelper;
import magicbees.main.utils.compat.ThaumcraftHelper;
import magicbees.main.utils.compat.ThermalModsHelper;
public enum BeeSpecies {
MYSTICAL("Mystical", "mysticum", BeeClassification.VEILED, 0xAFFFB7, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false, true),
SORCEROUS("Sorcerous", "fascinatio", BeeClassification.VEILED, 0xEA9A9A, EnumTemperature.HOT, EnumHumidity.ARID,
false, false, true),
UNUSUAL("Unusual", "inusitatus", BeeClassification.VEILED, 0x72D361, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false, true),
ATTUNED("Attuned", "similis", BeeClassification.VEILED, 0x0086A8, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false, true),
ELDRITCH("Eldritch", "prodigiosus", BeeClassification.VEILED, 0x8D75A0, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
ESOTERIC("Esoteric", "secretiore", BeeClassification.ARCANE, 0x001099, BodyColours.ARCANE, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
MYSTERIOUS("Mysterious", "mysticus", BeeClassification.ARCANE, 0x762bc2, BodyColours.ARCANE, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
ARCANE("Arcane", "arcanus", BeeClassification.ARCANE, 0xd242df, BodyColours.ARCANE, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, true, true),
CHARMED("Charmed", "larvatus", BeeClassification.SUPERNATURAL, 0x48EEEC, BodyColours.ARCANE, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
ENCHANTED("Enchanted", "cantatus", BeeClassification.SUPERNATURAL, 0x18e726, BodyColours.ARCANE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
SUPERNATURAL("Supernatural", "coeleste", BeeClassification.SUPERNATURAL, 0x005614, BodyColours.ARCANE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
ETHEREAL("Ethereal", "diaphanum", BeeClassification.MAGICAL, 0xBA3B3B, 0xEFF8FF, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
WATERY("Watery", "aquatilis", BeeClassification.MAGICAL, 0x313C5E, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
EARTHY("Earthen", "fictili", BeeClassification.MAGICAL, 0x78822D, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
FIREY("Firey", "ardens", BeeClassification.MAGICAL, 0xD35119, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
true),
WINDY("Windy", "ventosum", BeeClassification.MAGICAL, 0xFFFDBA, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
true),
PUPIL("Pupil", "disciplina", BeeClassification.SCHOLARLY, 0xFFFF00, EnumTemperature.NORMAL, EnumHumidity.ARID,
false, true),
SCHOLARLY("Scholarly", "studiosis", BeeClassification.SCHOLARLY, 0x6E0000, EnumTemperature.NORMAL,
EnumHumidity.ARID, false, false),
SAVANT("Savant", "philologus", BeeClassification.SCHOLARLY, 0xFFA042, EnumTemperature.NORMAL, EnumHumidity.ARID,
true, false),
AWARE("Aware", "sensibilis", BeeClassification.MAGICAL, 0x5E95B5, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false),
SPIRIT("Spirit", "larva", BeeClassification.SOUL, 0xb2964b, EnumTemperature.WARM, EnumHumidity.NORMAL, false, true),
SOUL("Soul", "anima", BeeClassification.SOUL, 0x7d591b, EnumTemperature.HELLISH, EnumHumidity.NORMAL, true, false),
SKULKING("Skulking", "malevolens", BeeClassification.SKULKING, 0x524827, BodyColours.SKULKING,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
GHASTLY("Ghastly", "pallens", BeeClassification.SKULKING, 0xccccee, 0xbf877c, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
SPIDERY("Spidery", "araneolus", BeeClassification.SKULKING, 0x0888888, 0x222222, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
SMOULDERING("Smouldering", "flagrantia", BeeClassification.SKULKING, 0xFFC747, 0xEA8344, EnumTemperature.HELLISH,
EnumHumidity.NORMAL, false, false),
BRAINY("TCBrainy", "cerebrum", BeeClassification.SKULKING, 0x83FF70, BodyColours.SKULKING, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
BIGBAD("BigBad", "magnumalum", BeeClassification.SKULKING, 0xA9344B, 0x453536, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false, true, true, true),
CHICKEN("TCChicken", "pullus", BeeClassification.FLESHY, 0xFF0000, 0xD3D3D3, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
BEEF("TCBeef", "bubulae", BeeClassification.FLESHY, 0xB7B7B7, 0x3F3024, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
PORK("TCPork", "porcina", BeeClassification.FLESHY, 0xF1AEAC, 0xDF847B, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
BATTY("TCBatty", "chiroptera", BeeClassification.FLESHY, 0x5B482B, 0x271B0F, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
SHEEPISH("Sheepish", "balans", BeeClassification.FLESHY, 0xF7F7F7, 0xCACACA, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
HORSE("Horse", "equus", BeeClassification.FLESHY, 0x906330, 0x7B4E1B, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
CATTY("Catty", "feline", BeeClassification.FLESHY, 0xECE684, 0x563C24, EnumTemperature.HOT, EnumHumidity.NORMAL,
false, true),
TIMELY("Timely", "gallifreis", BeeClassification.TIME, 0xC6AF86, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
true),
LORDLY("Lordly", "rassilonis", BeeClassification.TIME, 0xC6AF86, 0x8E0213, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
DOCTORAL("Doctoral", "medicus qui", BeeClassification.TIME, 0xDDE5FC, 0x4B6E8C, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
INFERNAL("Infernal", "infernales", BeeClassification.ABOMINABLE, 0xFF1C1C, BodyColours.ABOMINABLE,
EnumTemperature.HELLISH, EnumHumidity.ARID, false, true),
HATEFUL("Hateful", "odibilis", BeeClassification.ABOMINABLE, 0xDB00DB, BodyColours.ABOMINABLE,
EnumTemperature.HELLISH, EnumHumidity.ARID, false, false),
SPITEFUL("Spiteful", "maligna", BeeClassification.ABOMINABLE, 0x5FCC00, BodyColours.ABOMINABLE,
EnumTemperature.HELLISH, EnumHumidity.ARID, true, false),
WITHERING("Withering", "vietus", BeeClassification.ABOMINABLE, 0x5B5B5B, BodyColours.ABOMINABLE,
EnumTemperature.HELLISH, EnumHumidity.ARID, true, false),
OBLIVION("Oblivion", "oblivioni", BeeClassification.EXTRINSIC, 0xD5C3E5, BodyColours.EXTRINSIC,
EnumTemperature.COLD, EnumHumidity.NORMAL, false, false),
NAMELESS("Nameless", "sine nomine", BeeClassification.EXTRINSIC, 0x8ca7cb, BodyColours.EXTRINSIC,
EnumTemperature.COLD, EnumHumidity.NORMAL, false, true),
ABANDONED("Abandoned", "reliquit", BeeClassification.EXTRINSIC, 0xc5cb8c, BodyColours.EXTRINSIC,
EnumTemperature.COLD, EnumHumidity.NORMAL, false, true),
FORLORN("Forlorn", "perditus", BeeClassification.EXTRINSIC, 0xcba88c, BodyColours.EXTRINSIC, EnumTemperature.COLD,
EnumHumidity.NORMAL, true, false),
DRACONIC("Draconic", "draconic", BeeClassification.EXTRINSIC, 0x9f56ad, 0x5a3b62, EnumTemperature.COLD,
EnumHumidity.NORMAL, true, false),
IRON("Iron", "ferrus", BeeClassification.METALLIC, 0x686868, 0xE9E9E9, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
GOLD("Gold", "aurum", BeeClassification.METALLIC, 0x684B01, 0xFFFF0B, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
true, false),
COPPER("Copper", "aercus", BeeClassification.METALLIC, 0x684B01, 0xFFC81A, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
TIN("Tin", "stannum", BeeClassification.METALLIC, 0x3E596D, 0xA6BACB, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, true),
SILVER("Silver", "argenteus", BeeClassification.METALLIC, 0x747C81, 0x96BFC4, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
LEAD("Lead", "plumbeus", BeeClassification.METALLIC, 0x96BFC4, 0x91A9F3, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
ALUMINUM("Aluminum", "aluminium", BeeClassification.METALLIC, 0xEDEDED, 0x767676, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
ARDITE("Ardite", "aurantiaco", BeeClassification.METALLIC, 0x720000, 0xFF9E00, EnumTemperature.HOT,
EnumHumidity.ARID, false, false),
COBALT("Cobalt", "caeruleo", BeeClassification.METALLIC, 0x03265F, 0x59AAEF, EnumTemperature.HOT, EnumHumidity.ARID,
false, false),
MANYULLYN("Manyullyn", "manahmanah", BeeClassification.METALLIC, 0x481D6D, 0xBD92F1, EnumTemperature.HOT,
EnumHumidity.ARID, true, false),
DIAMOND("Diamond", "diamond", BeeClassification.GEM, 0x209581, 0x8DF5E3, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, true, false),
EMERALD("Emerald", "prasinus", BeeClassification.GEM, 0x005300, 0x17DD62, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, true, false),
APATITE("Apatite", "apatite", BeeClassification.GEM, 0x2EA7EC, 0x001D51, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
SILICON("Silicon", "siliconisque", BeeClassification.GEM, 0xADA2A7, 0x736675, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
CERTUS("Certus", "alia cristallum", BeeClassification.GEM, 0x93C7FF, 0xA6B8C7, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
FLUIX("Fluix", "alien cristallum", BeeClassification.GEM, 0xFC639E, 0x534797, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
MUTABLE("Mutable", "mutable", BeeClassification.TRANSMUTING, 0xDBB24C, 0xE0D5A6, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
TRANSMUTING("Transmuting", "transmuting", BeeClassification.TRANSMUTING, 0xDBB24C, 0xA2D2D8, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
CRUMBLING("Crumbling", "crumbling", BeeClassification.TRANSMUTING, 0xDBB24C, 0xDBA4A4, EnumTemperature.HOT,
EnumHumidity.ARID, false, false),
INVISIBLE("Invisible", "invisible", BeeClassification.VEILED, 0xffccff, 0xffffff, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
// --------- Thaumcraft Bees ---------------------------------------------------------------------------------------
TC_AIR("TCAir", "aether", BeeClassification.THAUMIC, 0xD9D636, BodyColours.THAUMCRAFT_SHARD, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, true, true),
TC_FIRE("TCFire", "praefervidus", BeeClassification.THAUMIC, 0xE50B0B, BodyColours.THAUMCRAFT_SHARD,
EnumTemperature.HOT, EnumHumidity.ARID, true, true),
TC_WATER("TCWater", "umidus", BeeClassification.THAUMIC, 0x36CFD9, BodyColours.THAUMCRAFT_SHARD,
EnumTemperature.NORMAL, EnumHumidity.DAMP, true, true),
TC_EARTH("TCEarth", "sordida", BeeClassification.THAUMIC, 0x005100, BodyColours.THAUMCRAFT_SHARD,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
TC_ORDER("TCOrder", "ordinatus", BeeClassification.THAUMIC, 0xaa32fc, BodyColours.THAUMCRAFT_SHARD,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
TC_CHAOS("TCChaos", "tenebrarum", BeeClassification.THAUMIC, 0xCCCCCC, BodyColours.THAUMCRAFT_SHARD,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
TC_ESSENTIA("TCEssentia", "defaultium essentia apis", BeeClassification.THAUMIC, 0xCCCCCC,
BodyColours.THAUMCRAFT_SHARD, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
TC_VIS("TCVis", "arcanus saecula", BeeClassification.THAUMIC, 0x004c99, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
TC_REJUVENATING("TCRejuvenating", "arcanus vitae", BeeClassification.THAUMIC, 0x91D0D9, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
TC_EMPOWERING("TCEmpowering", "tractus", BeeClassification.THAUMIC, 0x96FFBC, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
TC_NEXUS("TCNexus", "nexi", BeeClassification.THAUMIC, 0x15AFAF, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
TC_TAINT("TCFlux", "arcanus labe", BeeClassification.THAUMIC, 0x91376A, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
TC_PURE("TCPure", "arcanus puritatem", BeeClassification.THAUMIC, 0xE23F65, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
TC_HUNGRY("TCHungry", "omnique", BeeClassification.THAUMIC, 0xDCA5E2, BodyColours.THAUMCRAFT_NODE,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
TC_WISPY("TCWispy", "umbrabilis", BeeClassification.THAUMIC, 0x9cb8d5, BodyColours.SKULKING, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
TC_VOID("TCVoid", "obscurus", BeeClassification.METALLIC, 0x180A29, 0x4B2A74, EnumTemperature.ICY,
EnumHumidity.NORMAL, false, false),
// --------- Equivalent Exchange Bees -----------------------------------------------------------------------------
EE_MINIUM("EEMinium", "mutabilis", BeeClassification.ALCHEMICAL, 0xac0921, 0x3a030b, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
// --------- Ars Magica Bees --------------------------------------------------------------------------------------
AM_ESSENCE("AMEssence", "essentia", BeeClassification.ESSENTIAL, 0x86BBC5, BodyColours.ARSMAGICA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
AM_QUINTESSENCE("AMQuintessence", "cor essentia", BeeClassification.ESSENTIAL, 0xE3A45B, BodyColours.ARSMAGICA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, true),
AM_EARTH("AMEarth", "magica terra", BeeClassification.ESSENTIAL, 0xAA875E, BodyColours.ARSMAGICA,
EnumTemperature.WARM, EnumHumidity.ARID, false, false),
AM_AIR("AMAir", "magica aer", BeeClassification.ESSENTIAL, 0xD5EB9D, BodyColours.ARSMAGICA, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
AM_FIRE("AMFire", "magica ignis", BeeClassification.ESSENTIAL, 0x93451E, BodyColours.ARSMAGICA, EnumTemperature.HOT,
EnumHumidity.ARID, false, false),
AM_WATER("AMWater", "magica aqua", BeeClassification.ESSENTIAL, 0x3B7D8C, BodyColours.ARSMAGICA,
EnumTemperature.NORMAL, EnumHumidity.DAMP, false, false),
AM_LIGHTNING("AMLightning", "magica fulgur", BeeClassification.ESSENTIAL, 0xEBEFA1, BodyColours.ARSMAGICA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
AM_PLANT("AMPlant", "magica herba", BeeClassification.ESSENTIAL, 0x49B549, BodyColours.ARSMAGICA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
AM_ICE("AMIce", "magica glacium", BeeClassification.ESSENTIAL, 0x86BAC6, BodyColours.ARSMAGICA,
EnumTemperature.COLD, EnumHumidity.NORMAL, false, false),
AM_ARCANE("AMArcane", "magica arcanum", BeeClassification.ESSENTIAL, 0x76184D, BodyColours.ARSMAGICA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
AM_VORTEX("AMVortex", "gurges", BeeClassification.ESSENTIAL, 0x71BBE2, 0x0B35A8, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, true),
AM_WIGHT("AMWight", "vectem", BeeClassification.ESSENTIAL, 0xB50000, 0x4C4837, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
// ---------------------Thermal Expansion Bees---------------------------
TE_BLIZZY("TEBlizzy", "blizzard", BeeClassification.ABOMINABLE, 0x0073C4, EnumTemperature.COLD, EnumHumidity.NORMAL,
false, false),
TE_GELID("TEGelid", "cyro", BeeClassification.ABOMINABLE, 0x4AAFF7, EnumTemperature.COLD, EnumHumidity.NORMAL, true,
true),
TE_DANTE("TEDante", "inferno", BeeClassification.ABOMINABLE, 0xF7AC4A, EnumTemperature.HELLISH, EnumHumidity.ARID,
false, false),
TE_PYRO("TEPyro", "pyromania", BeeClassification.ABOMINABLE, 0xFA930C, EnumTemperature.HELLISH, EnumHumidity.ARID,
true, true),
TE_SHOCKING("TEShocking", "horrendum", BeeClassification.ABOMINABLE, 0xC5FF26, 0xF8EE00, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
TE_AMPED("TEAmped", "concitatus", BeeClassification.ABOMINABLE, 0x8AFFFF, 0xECE670, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, true, false),
TE_GROUNDED("TEGrounded", "tellus", BeeClassification.ABOMINABLE, 0xCEC1C1, 0x826767, EnumTemperature.HOT,
EnumHumidity.ARID, false, true),
TE_ROCKING("TERocking", "saxsous", BeeClassification.ABOMINABLE, 0x980000, 0xAB9D9B, EnumTemperature.HOT,
EnumHumidity.ARID, true, true),
TE_ELECTRUM("TEElectrum", "electrum", BeeClassification.THERMAL, 0xEAF79E, EnumTemperature.HOT, EnumHumidity.ARID,
false, false),
TE_PLATINUM("TEPlatinum", "platina", BeeClassification.THERMAL, 0x9EE7F7, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
TE_NICKEL("TENickel", "nickel", BeeClassification.THERMAL, 0xB4C989, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false),
TE_INVAR("TEInvar", "invar", BeeClassification.THERMAL, 0xCDE3A1, EnumTemperature.HOT, EnumHumidity.ARID, false,
false),
TE_BRONZE("TEBronze", "pyropus", BeeClassification.THERMAL, 0xB56D07, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false),
TE_COAL("TECoal", "carbonis", BeeClassification.THERMAL, 0x2E2D2D, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
false, false),
TE_DESTABILIZED("TEDestabilized", "electric", BeeClassification.THERMAL, 0x5E0203, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
TE_LUX("TELux", "lux", BeeClassification.THERMAL, 0xF1FA89, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false,
false),
TE_WINSOME("TEWinsome", "cuniculus", BeeClassification.ADORABLE, 0x096B67, EnumTemperature.COLD,
EnumHumidity.NORMAL, false, false),
TE_ENDEARING("TEEndearing", "cognito", BeeClassification.ADORABLE, 0x069E97, EnumTemperature.COLD,
EnumHumidity.NORMAL, true, true),
TE_SIGNALUS("TESignalus", "scelerisque", BeeClassification.THERMAL, 0x5E0203, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, true, true),
TE_LUMIUS("TELumius", "lucidum", BeeClassification.THERMAL, 0xF1FA89, EnumTemperature.NORMAL, EnumHumidity.NORMAL,
true, true),
// --------------------Redstone Arsenal Bees-----------------------------
RSA_FLUXED("RSAFluxed", "Thermametallic electroflux", BeeClassification.THERMAL, 0x9E060D, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
// ----------------------Botania Bees---------------------------------------
BOT_ROOTED("BotRooted", "truncus", BeeClassification.BOTANICAL, 0x00A800, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
BOT_BOTANIC("BotBotanic", "botanica", BeeClassification.BOTANICAL, 0x94C661, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
BOT_BLOSSOM("BotBlossom", "viridis", BeeClassification.BOTANICAL, 0xA4C193, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
BOT_FLORAL("BotFloral", "florens", BeeClassification.BOTANICAL, 0x29D81A, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, true),
BOT_VAZBEE("BotVazbee", "vazbii", BeeClassification.BOTANICAL, 0xff6b9c, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
BOT_SOMNOLENT("BotSomnolent", "soporatus", BeeClassification.BOTANICAL, 0x2978C6, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false, true, true, true),
BOT_DREAMING("BotDreaming", "somnior", BeeClassification.BOTANICAL, 0x123456, BodyColours.BOTANIA,
EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false, true, true, true),
BOT_ALFHEIM("BotAlfheim", "alfheimis", BeeClassification.BOTANICAL, -1, -1, EnumTemperature.NORMAL,
EnumHumidity.NORMAL, false, false),
// -------------------Applied Energistics 2 Bees---------------------------
AE_SKYSTONE("AESkystone", "terra astris", BeeClassification.TRANSMUTING, 0x4B8381, 0x252929, EnumTemperature.HOT,
EnumHumidity.ARID, false, true),;
// For body colours used by more than one bee.
private class BodyColours {
static final int DEFAULT = 0xFF7C26;
static final int ARCANE = 0xFF9D60;
static final int ABOMINABLE = 0x960F00;
static final int EXTRINSIC = 0xF696FF;
static final int SKULKING = 0xe15236;
static final int THAUMCRAFT_SHARD = 0x999999;
static final int THAUMCRAFT_NODE = 0x675ED1;
static final int ARSMAGICA = 0xE3A55B;
static final int BOTANIA = 0xFFB2BB;
}
public static void setupBeeSpecies() {
MYSTICAL.registerGenomeTemplate(BeeGenomeManager.getTemplateMystical());
SORCEROUS.registerGenomeTemplate(BeeGenomeManager.getTemplateSorcerous());
UNUSUAL.registerGenomeTemplate(BeeGenomeManager.getTemplateUnusual());
ATTUNED.registerGenomeTemplate(BeeGenomeManager.getTemplateAttuned());
ELDRITCH.registerGenomeTemplate(BeeGenomeManager.getTemplateEldritch());
ESOTERIC.registerGenomeTemplate(BeeGenomeManager.getTemplateEsoteric());
MYSTERIOUS.registerGenomeTemplate(BeeGenomeManager.getTemplateMysterious());
ARCANE.registerGenomeTemplate(BeeGenomeManager.getTemplateArcane());
CHARMED.registerGenomeTemplate(BeeGenomeManager.getTemplateCharmed());
ENCHANTED.registerGenomeTemplate(BeeGenomeManager.getTemplateEnchanted());
SUPERNATURAL.registerGenomeTemplate(BeeGenomeManager.getTemplateSupernatural());
ETHEREAL.registerGenomeTemplate(BeeGenomeManager.getTemplateEthereal());
WATERY.registerGenomeTemplate(BeeGenomeManager.getTemplateWatery());
EARTHY.registerGenomeTemplate(BeeGenomeManager.getTemplateEarthy());
FIREY.registerGenomeTemplate(BeeGenomeManager.getTemplateFirey());
WINDY.registerGenomeTemplate(BeeGenomeManager.getTemplateWindy());
PUPIL.registerGenomeTemplate(BeeGenomeManager.getTemplatePupil());
SCHOLARLY.registerGenomeTemplate(BeeGenomeManager.getTemplateScholarly());
SAVANT.registerGenomeTemplate(BeeGenomeManager.getTemplateSavant());
AWARE.registerGenomeTemplate(BeeGenomeManager.getTemplateAware());
SPIRIT.registerGenomeTemplate(BeeGenomeManager.getTemplateSpirit());
SOUL.registerGenomeTemplate(BeeGenomeManager.getTemplateSoul());
SKULKING.registerGenomeTemplate(BeeGenomeManager.getTemplateSkulking());
GHASTLY.registerGenomeTemplate(BeeGenomeManager.getTemplateGhastly());
SPIDERY.registerGenomeTemplate(BeeGenomeManager.getTemplateSpidery());
SMOULDERING.registerGenomeTemplate(BeeGenomeManager.getTemplateSmouldering());
BIGBAD.registerGenomeTemplate(BeeGenomeManager.getTemplateBigbad());
CHICKEN.registerGenomeTemplate(BeeGenomeManager.getTemplateChicken());
BEEF.registerGenomeTemplate(BeeGenomeManager.getTemplateBeef());
PORK.registerGenomeTemplate(BeeGenomeManager.getTemplatePork());
SHEEPISH.registerGenomeTemplate(BeeGenomeManager.getTemplateSheepish());
HORSE.registerGenomeTemplate(BeeGenomeManager.getTemplateHorse());
CATTY.registerGenomeTemplate(BeeGenomeManager.getTemplateCatty());
TIMELY.registerGenomeTemplate(BeeGenomeManager.getTemplateTimely());
LORDLY.registerGenomeTemplate(BeeGenomeManager.getTemplateLordly());
DOCTORAL.registerGenomeTemplate(BeeGenomeManager.getTemplateDoctoral());
INFERNAL.registerGenomeTemplate(BeeGenomeManager.getTemplateInfernal());
HATEFUL.registerGenomeTemplate(BeeGenomeManager.getTemplateHateful());
SPITEFUL.registerGenomeTemplate(BeeGenomeManager.getTemplateSpiteful());
WITHERING.registerGenomeTemplate(BeeGenomeManager.getTemplateWithering());
OBLIVION.registerGenomeTemplate(BeeGenomeManager.getTemplateOblivion());
NAMELESS.registerGenomeTemplate(BeeGenomeManager.getTemplateNameless());
ABANDONED.registerGenomeTemplate(BeeGenomeManager.getTemplateAbandoned());
FORLORN.registerGenomeTemplate(BeeGenomeManager.getTemplateForlorn());
DRACONIC.registerGenomeTemplate(BeeGenomeManager.getTemplateDraconic());
IRON.registerGenomeTemplate(BeeGenomeManager.getTemplateIron());
GOLD.registerGenomeTemplate(BeeGenomeManager.getTemplateGold());
COPPER.registerGenomeTemplate(BeeGenomeManager.getTemplateCopper());
TIN.registerGenomeTemplate(BeeGenomeManager.getTemplateTin());
SILVER.registerGenomeTemplate(BeeGenomeManager.getTemplateSilver());
LEAD.registerGenomeTemplate(BeeGenomeManager.getTemplateLead());
ALUMINUM.registerGenomeTemplate(BeeGenomeManager.getTemplateAluminum());
ARDITE.registerGenomeTemplate(BeeGenomeManager.getTemplateArdite());
COBALT.registerGenomeTemplate(BeeGenomeManager.getTemplateCobalt());
MANYULLYN.registerGenomeTemplate(BeeGenomeManager.getTemplateManyullyn());
DIAMOND.registerGenomeTemplate(BeeGenomeManager.getTemplateDiamond());
EMERALD.registerGenomeTemplate(BeeGenomeManager.getTemplateEmerald());
APATITE.registerGenomeTemplate(BeeGenomeManager.getTemplateApatite());
SILICON.registerGenomeTemplate(BeeGenomeManager.getTemplateSilicon());
FLUIX.registerGenomeTemplate(BeeGenomeManager.getTemplateFluix());
CERTUS.registerGenomeTemplate(BeeGenomeManager.getTemplateCertus());
MUTABLE.registerGenomeTemplate(BeeGenomeManager.getTemplateMutable());
TRANSMUTING.registerGenomeTemplate(BeeGenomeManager.getTemplateTransmuting());
CRUMBLING.registerGenomeTemplate(BeeGenomeManager.getTemplateCrumbling());
INVISIBLE.registerGenomeTemplate(BeeGenomeManager.getTemplateInvisible());
TC_AIR.registerGenomeTemplate(BeeGenomeManager.getTemplateTCAir());
TC_FIRE.registerGenomeTemplate(BeeGenomeManager.getTemplateTCFire());
TC_WATER.registerGenomeTemplate(BeeGenomeManager.getTemplateTCWater());
TC_EARTH.registerGenomeTemplate(BeeGenomeManager.getTemplateTCEarth());
TC_ORDER.registerGenomeTemplate(BeeGenomeManager.getTemplateTCOrder());
TC_CHAOS.registerGenomeTemplate(BeeGenomeManager.getTemplateTCChaos());
TC_ESSENTIA.registerGenomeTemplate(BeeGenomeManager.getTemplateTCEssentia());
TC_VIS.registerGenomeTemplate(BeeGenomeManager.getTemplateTCVis());
TC_REJUVENATING.registerGenomeTemplate(BeeGenomeManager.getTemplateTCRejuvinating());
TC_EMPOWERING.registerGenomeTemplate(BeeGenomeManager.getTemplateTCEmpowering());
TC_NEXUS.registerGenomeTemplate(BeeGenomeManager.getTemplateTCNexus());
TC_TAINT.registerGenomeTemplate(BeeGenomeManager.getTemplateTCTaint());
TC_PURE.registerGenomeTemplate(BeeGenomeManager.getTemplateTCPure());
TC_HUNGRY.registerGenomeTemplate(BeeGenomeManager.getTemplateTCHungry());
BRAINY.registerGenomeTemplate(BeeGenomeManager.getTemplateBrainy());
TC_WISPY.registerGenomeTemplate(BeeGenomeManager.getTemplateTCWispy());
BATTY.registerGenomeTemplate(BeeGenomeManager.getTemplateBatty());
TC_VOID.registerGenomeTemplate(BeeGenomeManager.getTemplaceTCVoid());
EE_MINIUM.registerGenomeTemplate(BeeGenomeManager.getTemplateEEMinium());
AM_ESSENCE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMEssence());
AM_QUINTESSENCE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMQuintessence());
AM_EARTH.registerGenomeTemplate(BeeGenomeManager.getTemplateAMEarth());
AM_AIR.registerGenomeTemplate(BeeGenomeManager.getTemplateAMAir());
AM_FIRE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMFire());
AM_WATER.registerGenomeTemplate(BeeGenomeManager.getTemplateAMWater());
AM_LIGHTNING.registerGenomeTemplate(BeeGenomeManager.getTemplateAMLightning());
AM_PLANT.registerGenomeTemplate(BeeGenomeManager.getTemplateAMPlant());
AM_ICE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMIce());
AM_ARCANE.registerGenomeTemplate(BeeGenomeManager.getTemplateAMArcane());
AM_VORTEX.registerGenomeTemplate(BeeGenomeManager.getTemplateAMVortex());
AM_WIGHT.registerGenomeTemplate(BeeGenomeManager.getTemplateAMWight());
TE_BLIZZY.registerGenomeTemplate(BeeGenomeManager.getTemplateTEBlizzy());
TE_GELID.registerGenomeTemplate(BeeGenomeManager.getTemplateTEGelid());
TE_DANTE.registerGenomeTemplate(BeeGenomeManager.getTemplateTEDante());
TE_PYRO.registerGenomeTemplate(BeeGenomeManager.getTemplateTEPyro());
TE_SHOCKING.registerGenomeTemplate(BeeGenomeManager.getTemplateTEShocking());
TE_AMPED.registerGenomeTemplate(BeeGenomeManager.getTemplateTEAmped());
TE_GROUNDED.registerGenomeTemplate(BeeGenomeManager.getTemplateTEGrounded());
TE_ROCKING.registerGenomeTemplate(BeeGenomeManager.getTemplateTERocking());
TE_ELECTRUM.registerGenomeTemplate(BeeGenomeManager.getTemplateTEElectrum());
TE_PLATINUM.registerGenomeTemplate(BeeGenomeManager.getTemplateTEPlatinum());
TE_NICKEL.registerGenomeTemplate(BeeGenomeManager.getTemplateTENickel());
TE_INVAR.registerGenomeTemplate(BeeGenomeManager.getTemplateTEInvar());
TE_BRONZE.registerGenomeTemplate(BeeGenomeManager.getTemplateTEBronze());
TE_COAL.registerGenomeTemplate(BeeGenomeManager.getTemplateTECoal());
TE_DESTABILIZED.registerGenomeTemplate(BeeGenomeManager.getTemplateTEDestabilized());
TE_LUX.registerGenomeTemplate(BeeGenomeManager.getTemplateTELux());
TE_WINSOME.registerGenomeTemplate(BeeGenomeManager.getTemplateTEWinsome());
TE_ENDEARING.registerGenomeTemplate(BeeGenomeManager.getTemplateTEEndearing());
TE_SIGNALUS.registerGenomeTemplate(BeeGenomeManager.getTemplateTESignalus());
TE_LUMIUS.registerGenomeTemplate(BeeGenomeManager.getTemplateTELumius());
RSA_FLUXED.registerGenomeTemplate(BeeGenomeManager.getTemplateRSAFluxed());
BOT_ROOTED.registerGenomeTemplate(BeeGenomeManager.getTemplateBotRooted());
BOT_BOTANIC.registerGenomeTemplate(BeeGenomeManager.getTemplateBotBotanic());
BOT_BLOSSOM.registerGenomeTemplate(BeeGenomeManager.getTemplateBotBlossom());
BOT_FLORAL.registerGenomeTemplate(BeeGenomeManager.getTemplateBotFloral());
BOT_VAZBEE.registerGenomeTemplate(BeeGenomeManager.getTemplateBotVazbee());
BOT_SOMNOLENT.registerGenomeTemplate(BeeGenomeManager.getTemplateBotSomnolent());
BOT_DREAMING.registerGenomeTemplate(BeeGenomeManager.getTemplateBotDreaming());
BOT_ALFHEIM.registerGenomeTemplate(BeeGenomeManager.getTemplateBotAelfheim());
AE_SKYSTONE.registerGenomeTemplate(BeeGenomeManager.getTemplateAESkystone());
BeeProductHelper.initThaumcraftProducts();
if (!ThaumcraftHelper.isActive()) {
TC_CHAOS.setInactive();
TC_AIR.setInactive();
TC_FIRE.setInactive();
TC_WATER.setInactive();
TC_EARTH.setInactive();
TC_ORDER.setInactive();
TC_ESSENTIA.setInactive();
TC_VIS.setInactive();
TC_REJUVENATING.setInactive();
TC_EMPOWERING.setInactive();
TC_NEXUS.setInactive();
TC_TAINT.setInactive();
TC_PURE.setInactive();
TC_HUNGRY.setInactive();
BRAINY.setInactive();
TC_WISPY.setInactive();
TC_VOID.setInactive();
}
BeeProductHelper.initEquivalentExchange3Species();
if (!EquivalentExchangeHelper.isActive()) {
EE_MINIUM.setInactive();
}
BeeProductHelper.initArsMagicaSpecies();
if (!ArsMagicaHelper.isActive()) {
AM_ESSENCE.setInactive();
AM_QUINTESSENCE.setInactive();
AM_EARTH.setInactive();
AM_AIR.setInactive();
AM_FIRE.setInactive();
AM_WATER.setInactive();
AM_LIGHTNING.setInactive();
AM_PLANT.setInactive();
AM_ICE.setInactive();
AM_ARCANE.setInactive();
AM_VORTEX.setInactive();
AM_WIGHT.setInactive();
}
BeeProductHelper.initThermalExpansionProducts();
if (!ThermalModsHelper.isActive()) {
TE_BLIZZY.setInactive();
TE_GELID.setInactive();
TE_DANTE.setInactive();
TE_PYRO.setInactive();
TE_SHOCKING.setInactive();
TE_AMPED.setInactive();
TE_GROUNDED.setInactive();
TE_ROCKING.setInactive();
TE_DESTABILIZED.setInactive();
TE_COAL.setInactive();
TE_LUX.setInactive();
TE_WINSOME.setInactive();
TE_ENDEARING.setInactive();
TE_SIGNALUS.setInactive();
TE_LUMIUS.setInactive();
}
BeeProductHelper.initRedstoneArsenelProducts();
if (!RedstoneArsenalHelper.isActive()) {
RSA_FLUXED.setInactive();
}
BeeProductHelper.initBotaniaProducts();
if (!BotaniaHelper.isActive()) {
BOT_ROOTED.setInactive();
BOT_BLOSSOM.setInactive();
BOT_BOTANIC.setInactive();
BOT_FLORAL.setInactive();
BOT_VAZBEE.setInactive();
BOT_SOMNOLENT.setInactive();
BOT_DREAMING.setInactive();
BOT_ALFHEIM.setInactive();
}
BeeProductHelper.initAppEngProducts();
if (!AppliedEnergisticsHelper.isActive()) {
AE_SKYSTONE.setInactive();
}
for (BeeSpecies beeSpecies : BeeSpecies.values()) {
if (beeSpecies.isActive()) {
beeSpecies.setupCustomIconProvider();
}
}
}
private static final String authority = "MysteriousAges";
private final IAlleleBeeSpeciesCustom species;
private final EnumTemperature temperature;
private final EnumHumidity humidity;
private boolean active = true;
private IAllele genomeTemplate[];
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour,
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect,
boolean isSpeciesDominant) {
this(
speciesName,
genusName,
classification,
firstColour,
BodyColours.DEFAULT,
preferredTemp,
preferredHumidity,
hasGlowEffect,
true,
true,
isSpeciesDominant,
false);
}
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour,
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect,
boolean isSpeciesDominant) {
this(
speciesName,
genusName,
classification,
firstColour,
secondColour,
preferredTemp,
preferredHumidity,
hasGlowEffect,
true,
true,
isSpeciesDominant,
false);
}
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour,
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean isSecret, boolean hasGlowEffect,
boolean isSpeciesDominant) {
this(
speciesName,
genusName,
classification,
firstColour,
secondColour,
preferredTemp,
preferredHumidity,
hasGlowEffect,
isSecret,
true,
isSpeciesDominant,
false);
}
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour,
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean isSecret, boolean hasGlowEffect,
boolean isSpeciesDominant) {
this(
speciesName,
genusName,
classification,
firstColour,
BodyColours.DEFAULT,
preferredTemp,
preferredHumidity,
hasGlowEffect,
isSecret,
true,
isSpeciesDominant,
false);
}
BeeSpecies(String speciesName, String genusName, IClassification classification, int firstColour, int secondColour,
EnumTemperature preferredTemp, EnumHumidity preferredHumidity, boolean hasGlowEffect,
boolean isSpeciesSecret, boolean isSpeciesCounted, boolean isSpeciesDominant, boolean isSpeciesNocturnal) {
String uid = "magicbees.species" + speciesName;
this.temperature = preferredTemp;
this.humidity = preferredHumidity;
IBeeFactory beeFactory = forestry.api.apiculture.BeeManager.beeFactory;
this.species = beeFactory.createSpecies(
uid,
isSpeciesDominant,
authority,
uid,
uid + ".description",
classification,
genusName,
firstColour,
secondColour);
this.species.setTemperature(preferredTemp);
this.species.setHumidity(preferredHumidity);
if (isSpeciesNocturnal) {
this.species.setNocturnal();
}
if (hasGlowEffect) {
this.species.setHasEffect();
}
if (isSpeciesSecret) {
this.species.setIsSecret();
}
if (!isSpeciesCounted) {
this.species.setIsNotCounted();
}
classification.addMemberSpecies(species);
}
public IAllele[] getGenome() {
return genomeTemplate;
}
public IAlleleBeeSpecies getSpecies() {
return species;
}
public BeeSpecies addProduct(ItemStack produce, float chance) {
species.addProduct(produce, chance);
return this;
}
public BeeSpecies addSpecialty(ItemStack produce, float chance) {
species.addSpecialty(produce, chance);
return this;
}
public ItemStack getBeeItem(EnumBeeType beeType) {
return BeeManager.beeRoot.getMemberStack(
BeeManager.beeRoot.getBee(null, BeeManager.beeRoot.templateAsGenome(genomeTemplate)),
beeType.ordinal());
}
public BeeSpecies setInactive() {
this.active = false;
AlleleManager.alleleRegistry.blacklistAllele(species.getUID());
return this;
}
public boolean isActive() {
return active;
}
public void registerGenomeTemplate(IAllele[] genome) {
genomeTemplate = genome;
BeeManager.beeRoot.registerTemplate(species.getUID(), genome);
}
private void setupCustomIconProvider() {
IBeeIconProvider iconProvider = getCustomIconProvider();
if (iconProvider != null) {
this.species.setCustomBeeIconProvider(iconProvider);
}
IBeeIconColourProvider iconColourProvider = getCustomIconColourProvider();
if (iconColourProvider != null) {
this.species.setCustomBeeIconColourProvider(iconColourProvider);
}
}
private IBeeIconProvider getCustomIconProvider() {
switch (this) {
case SKULKING:
case GHASTLY:
case SPIDERY:
case SMOULDERING:
case BIGBAD:
case BATTY:
case SHEEPISH:
case HORSE:
case CATTY:
case BRAINY:
case TC_WISPY:
case AM_VORTEX:
case AM_WIGHT:
case TE_BLIZZY:
case TE_GELID:
case TE_DANTE:
case TE_PYRO:
case TE_SHOCKING:
case TE_AMPED:
case TE_GROUNDED:
case TE_ROCKING:
return BeeIconProvider.SKULKING;
case DOCTORAL:
return BeeIconProvider.DOCTORAL;
default:
return null;
}
}
private IBeeIconColourProvider getCustomIconColourProvider() {
switch (this) {
case BOT_ALFHEIM:
return BeeIconColourProvider.RAINBOW;
}
return null;
}
public boolean canWorkInTemperature(EnumTemperature temp) {
IAlleleTolerance tolerance = (IAlleleTolerance) genomeTemplate[EnumBeeChromosome.TEMPERATURE_TOLERANCE
.ordinal()];
return AlleleManager.climateHelper.isWithinLimits(
temp,
EnumHumidity.NORMAL,
temperature,
tolerance.getValue(),
EnumHumidity.NORMAL,
EnumTolerance.NONE);
}
public boolean canWorkInHumidity(EnumHumidity humid) {
IAlleleTolerance tolerance = (IAlleleTolerance) genomeTemplate[EnumBeeChromosome.HUMIDITY_TOLERANCE.ordinal()];
return AlleleManager.climateHelper.isWithinLimits(
EnumTemperature.NORMAL,
humid,
EnumTemperature.NORMAL,
EnumTolerance.NONE,
humidity,
tolerance.getValue());
}
}
@@ -0,0 +1,187 @@
package magicbees.bees;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.BiomeDictionary;
import forestry.api.apiculture.hives.HiveManager;
import forestry.api.apiculture.hives.IHiveDescription;
import forestry.api.apiculture.hives.IHiveGen;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import magicbees.block.types.HiveType;
import magicbees.main.Config;
import magicbees.main.utils.BlockUtil;
import magicbees.main.utils.LogHelper;
import magicbees.world.feature.FeatureOreVein;
import magicbees.world.feature.HiveGenNether;
import magicbees.world.feature.HiveGenOblivion;
import magicbees.world.feature.HiveGenUnderground;
public enum HiveDescription implements IHiveDescription {
CURIOUS(HiveType.CURIOUS, 3.0f, HiveManager.genHelper.tree(), false, BiomeDictionary.Type.FOREST,
BiomeDictionary.Type.PLAINS, BiomeDictionary.Type.HILLS),
UNUSUAL(HiveType.UNUSUAL, 1.0f, HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass), false,
BiomeDictionary.Type.PLAINS, BiomeDictionary.Type.MOUNTAIN, BiomeDictionary.Type.HILLS,
BiomeDictionary.Type.RIVER),
RESONANT(HiveType.RESONANT, 0.9f, HiveManager.genHelper.ground(Blocks.sand, Blocks.sandstone), false,
BiomeDictionary.Type.SANDY, BiomeDictionary.Type.MESA, BiomeDictionary.Type.HOT,
BiomeDictionary.Type.MAGICAL),
DEEP(HiveType.DEEP, 5.0f, new HiveGenUnderground(10, 15, 5), true, BiomeDictionary.Type.HILLS,
BiomeDictionary.Type.MOUNTAIN, BiomeDictionary.Type.MAGICAL) {
@Override
public void postGen(World world, int x, int y, int z) {
super.postGen(world, x, y, z);
Random random = world.rand;
FeatureOreVein.redstoneGen.generateVein(world, random, x + 1, y, z, 5);
FeatureOreVein.redstoneGen.generateVein(world, random, x - 1, y, z, 5);
FeatureOreVein.redstoneGen.generateVein(world, random, x, y + 1, z, 5);
FeatureOreVein.redstoneGen.generateVein(world, random, x, y - 1, z, 5);
FeatureOreVein.redstoneGen.generateVein(world, random, x, y, z + 1, 5);
FeatureOreVein.redstoneGen.generateVein(world, random, x, y, z - 1, 5);
}
},
INFERNAL(HiveType.INFERNAL, 50.0f, new HiveGenNether(0, 175, 6), true, BiomeDictionary.Type.NETHER) {
@Override
public void postGen(World world, int x, int y, int z) {
super.postGen(world, x, y, z);
Random random = world.rand;
FeatureOreVein.netherQuartzGen.generateVein(world, random, x + 1, y, z, 4);
FeatureOreVein.netherQuartzGen.generateVein(world, random, x - 1, y, z, 4);
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y + 1, z, 4);
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y - 1, z, 4);
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y, z + 1, 4);
FeatureOreVein.netherQuartzGen.generateVein(world, random, x, y, z - 1, 4);
}
},
INFERNAL_OVERWORLD(HiveType.INFERNAL, 0.95f, new HiveGenUnderground(5, 13, 6), true, BiomeDictionary.Type.MAGICAL,
BiomeDictionary.Type.HOT) {
@Override
public void postGen(World world, int x, int y, int z) {
super.postGen(world, x, y, z);
Random random = world.rand;
FeatureOreVein.glowstoneGen.generateVein(world, random, x + 1, y, z, world.rand.nextInt(4) + 1);
FeatureOreVein.glowstoneGen.generateVein(world, random, x - 1, y, z, world.rand.nextInt(4) + 1);
if (BlockUtil.canBlockReplaceAt(world, x, y + 1, z, Blocks.stone)) {
world.setBlock(x, y + 1, z, Blocks.glowstone, 0, 3);
}
if (BlockUtil.canBlockReplaceAt(world, x, y - 1, z, Blocks.stone)) {
world.setBlock(x, y - 1, z, Blocks.glowstone, 0, 3);
}
FeatureOreVein.glowstoneGen.generateVein(world, random, x, y, z + 1, world.rand.nextInt(4) + 1);
FeatureOreVein.glowstoneGen.generateVein(world, random, x, y, z - 1, world.rand.nextInt(4) + 1);
}
},
OBLIVION(HiveType.OBLIVION, 20.0f, new HiveGenOblivion(), true, BiomeDictionary.Type.END) {
@Override
public void postGen(World world, int x, int y, int z) {
super.postGen(world, x, y, z);
int obsidianSpikeHeight = world.rand.nextInt(8) + 3;
for (int i = 1; i < obsidianSpikeHeight && y - i > 0; ++i) {
world.setBlock(x, y - i, z, Blocks.obsidian, 0, 2);
}
}
},
OBLIVION_OVERWORLD(HiveType.OBLIVION, 0.87f, new HiveGenUnderground(5, 5, 5), true, BiomeDictionary.Type.MAGICAL,
BiomeDictionary.Type.COLD) {
@Override
public void postGen(World world, int x, int y, int z) {
super.postGen(world, x, y, z);
Random random = world.rand;
FeatureOreVein.endStoneGen.generateVein(world, random, x + 1, y, z, world.rand.nextInt(6) + 1);
FeatureOreVein.endStoneGen.generateVein(world, random, x - 1, y, z, world.rand.nextInt(6) + 1);
FeatureOreVein.endStoneGen.generateVein(world, random, x, y + 1, z, world.rand.nextInt(3) + 1);
FeatureOreVein.endStoneGen.generateVein(world, random, x, y - 1, z, world.rand.nextInt(3) + 1);
FeatureOreVein.endStoneGen.generateVein(world, random, x, y, z + 1, world.rand.nextInt(6) + 1);
FeatureOreVein.endStoneGen.generateVein(world, random, x, y, z - 1, world.rand.nextInt(6) + 1);
}
};
private static boolean logSpawns = Config.logHiveSpawns;
private final HiveType hiveType;
private final float genChance;
private final List<BiomeDictionary.Type> biomes = new ArrayList<BiomeDictionary.Type>();
private final IHiveGen hiveGen;
private final boolean spawnsIgnoreClimate;
private HiveDescription(HiveType type, float chance, IHiveGen genType, boolean ignoreClimate,
BiomeDictionary.Type... goodBiomeTypes) {
hiveType = type;
genChance = chance;
hiveGen = genType;
spawnsIgnoreClimate = ignoreClimate;
for (BiomeDictionary.Type biomeType : goodBiomeTypes) {
biomes.add(biomeType);
}
}
@Override
public IHiveGen getHiveGen() {
return hiveGen;
}
@Override
public Block getBlock() {
return Config.hive;
}
@Override
public int getMeta() {
return hiveType.ordinal();
}
@Override
public boolean isGoodBiome(BiomeGenBase biome) {
BiomeDictionary.Type[] types = BiomeDictionary.getTypesForBiome(biome);
for (BiomeDictionary.Type type : types) {
if (biomes.contains(type)) {
return true;
}
}
return false;
}
@Override
public boolean isGoodHumidity(EnumHumidity humidity) {
return spawnsIgnoreClimate || hiveType.getOccupant().canWorkInHumidity(humidity);
}
@Override
public boolean isGoodTemperature(EnumTemperature temperature) {
return spawnsIgnoreClimate || hiveType.getOccupant().canWorkInTemperature(temperature);
}
@Override
public float getGenChance() {
return genChance;
}
@Override
public void postGen(World world, int x, int y, int z) {
if (logSpawns) {
LogHelper.info(
"Spawned " + this.toString()
.toLowerCase(Locale.ENGLISH) + " hive at: X " + x + ", Y: " + y + ", Z: " + z);
}
}
}
@@ -0,0 +1,69 @@
package magicbees.bees;
import java.util.ArrayList;
import java.util.Collection;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import forestry.api.apiculture.EnumBeeType;
import forestry.api.apiculture.IBee;
import forestry.api.apiculture.IHiveDrop;
import forestry.api.genetics.IAllele;
public class HiveDrop implements IHiveDrop {
private IAllele[] template;
private int chance;
private ItemStack[] bonus;
private float ignoblePercent = 0f;
public HiveDrop(IAllele[] beeTemplate, ItemStack[] bonusDrops, int dropChance) {
this.template = beeTemplate;
this.bonus = bonusDrops;
this.chance = dropChance;
}
public HiveDrop setIgnoblePercentage(float f) {
this.ignoblePercent = f;
return this;
}
private IBee getBee(World w) {
IBee bee = BeeManager.beeRoot.getBee(w, BeeManager.beeRoot.templateAsGenome(this.template));
if (w.rand.nextFloat() < this.ignoblePercent) {
bee.setIsNatural(false);
}
return bee;
}
@Override
public ItemStack getPrincess(World world, int x, int y, int z, int fortune) {
return BeeManager.beeRoot.getMemberStack(getBee(world), EnumBeeType.PRINCESS.ordinal());
}
@Override
public Collection<ItemStack> getDrones(World world, int x, int y, int z, int fortune) {
ArrayList<ItemStack> value = new ArrayList<ItemStack>(1);
value.add(BeeManager.beeRoot.getMemberStack(getBee(world), EnumBeeType.DRONE.ordinal()));
return value;
}
@Override
public Collection<ItemStack> getAdditional(World world, int x, int y, int z, int fortune) {
ArrayList<ItemStack> value = new ArrayList<ItemStack>(bonus.length);
for (int i = 0; i < bonus.length; ++i) {
value.add(bonus[i].copy());
}
return value;
}
@Override
public int getChance(World world, int x, int y, int z) {
return this.chance;
}
}
@@ -0,0 +1,171 @@
package magicbees.bees;
import java.util.ArrayList;
import java.util.Collection;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.common.util.Constants;
import forestry.api.apiculture.IBee;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeekeepingMode;
import forestry.api.apiculture.IHiveFrame;
import forestry.apiculture.inventory.IApiaryInventory;
import magicbees.main.utils.ItemStackUtils;
import magicbees.tileentity.TileEntityMagicApiary;
public class MagicApiaryInventory implements IApiaryInventory {
public static final int SLOT_QUEEN = 0;
public static final int SLOT_DRONE = 1;
public static final int SLOT_FRAME_START = 2;
public static final int SLOT_FRAME_COUNT = 3;
public static final int SLOT_PRODUCTS_START = 5;
public static final int SLOT_PRODUCTS_COUNT = 7;
private final TileEntityMagicApiary magicApiary;
private final ItemStack[] items;
public MagicApiaryInventory(TileEntityMagicApiary magicApiary) {
this.magicApiary = magicApiary;
this.items = new ItemStack[12];
}
@Override
public ItemStack getQueen() {
return magicApiary.getStackInSlot(SLOT_QUEEN);
}
@Override
public ItemStack getDrone() {
return magicApiary.getStackInSlot(SLOT_DRONE);
}
@Override
public void setQueen(ItemStack itemstack) {
magicApiary.setInventorySlotContents(SLOT_QUEEN, itemstack);
}
@Override
public void setDrone(ItemStack itemstack) {
magicApiary.setInventorySlotContents(SLOT_DRONE, itemstack);
}
@Override
public boolean addProduct(ItemStack product, boolean all) {
int countAdded = ItemStackUtils
.addItemToInventory(magicApiary, product, SLOT_PRODUCTS_START, SLOT_PRODUCTS_COUNT);
if (all) {
return countAdded == product.stackSize;
}
return countAdded > 0;
}
public int getSizeInventory() {
return items.length;
}
public ItemStack getStackInSlot(int i) {
return items[i];
}
public void setInventorySlotContents(int i, ItemStack itemStack) {
items[i] = itemStack;
if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) {
itemStack.stackSize = getInventoryStackLimit();
}
}
public int[] getAccessibleSlotsFromSide(int side) {
int[] slots = new int[SLOT_PRODUCTS_COUNT + 2];
slots[0] = SLOT_QUEEN;
slots[1] = SLOT_DRONE;
for (int i = 0, slot = SLOT_PRODUCTS_START; i < SLOT_PRODUCTS_COUNT; ++i, ++slot) {
slots[i + 2] = slot;
}
return slots;
}
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
if (slot == SLOT_QUEEN && BeeManager.beeRoot.isMember(itemStack) && !BeeManager.beeRoot.isDrone(itemStack)) {
return true;
} else if (slot == SLOT_DRONE && BeeManager.beeRoot.isDrone(itemStack)) {
return true;
}
return slot == SLOT_DRONE && BeeManager.beeRoot.isDrone(itemStack);
}
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
return slot >= SLOT_PRODUCTS_START && slot <= SLOT_PRODUCTS_START + SLOT_PRODUCTS_COUNT;
}
public int getInventoryStackLimit() {
return 64;
}
public Collection<IHiveFrame> getFrames() {
Collection<IHiveFrame> hiveFrames = new ArrayList<IHiveFrame>(SLOT_FRAME_COUNT);
for (int i = SLOT_FRAME_START; i < SLOT_FRAME_START + SLOT_FRAME_COUNT; i++) {
ItemStack stackInSlot = magicApiary.getStackInSlot(i);
if (stackInSlot == null) {
continue;
}
Item itemInSlot = stackInSlot.getItem();
if (itemInSlot instanceof IHiveFrame) {
hiveFrames.add((IHiveFrame) itemInSlot);
}
}
return hiveFrames;
}
public void wearOutFrames(IBeeHousing beeHousing, int amount) {
IBeekeepingMode beekeepingMode = BeeManager.beeRoot.getBeekeepingMode(magicApiary.getWorldObj());
int wear = Math.round(amount * beekeepingMode.getWearModifier());
for (int i = MagicApiaryInventory.SLOT_FRAME_START; i
< MagicApiaryInventory.SLOT_FRAME_START + MagicApiaryInventory.SLOT_FRAME_COUNT; i++) {
ItemStack hiveFrameStack = magicApiary.getStackInSlot(i);
if (hiveFrameStack == null) {
continue;
}
Item hiveFrameItem = hiveFrameStack.getItem();
if (!(hiveFrameItem instanceof IHiveFrame)) {
continue;
}
IHiveFrame hiveFrame = (IHiveFrame) hiveFrameItem;
ItemStack queenStack = magicApiary.getBeeInventory().getQueen();
IBee queen = BeeManager.beeRoot.getMember(queenStack);
ItemStack usedFrame = hiveFrame.frameUsed(magicApiary, hiveFrameStack, queen, wear);
magicApiary.setInventorySlotContents(i, usedFrame);
}
}
public void writeToNBT(NBTTagCompound compound) {
NBTTagList itemsNBT = new NBTTagList();
for (int i = 0; i < items.length; i++) {
ItemStack itemStack = items[i];
if (itemStack != null) {
NBTTagCompound item = new NBTTagCompound();
item.setByte("Slot", (byte) i);
itemStack.writeToNBT(item);
itemsNBT.appendTag(item);
}
}
compound.setTag("Items", itemsNBT);
}
public void readFromNBT(NBTTagCompound compound) {
NBTTagList items = compound.getTagList("Items", Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < items.tagCount(); i++) {
NBTTagCompound item = items.getCompoundTagAt(i);
int slot = item.getByte("Slot");
if (slot >= 0 && slot < getSizeInventory()) {
setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(item));
}
}
}
}
@@ -0,0 +1,53 @@
package magicbees.bees;
import net.minecraft.world.World;
import forestry.api.core.IClimateProvider;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IGenome;
import forestry.api.genetics.IMutationCondition;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.MoonPhase;
// There is a bonus to this mutation during moon phases...
public class MoonPhaseMutationBonus implements IMutationCondition {
private final MoonPhase moonPhaseStart;
private final MoonPhase moonPhaseEnd;
private final float mutationBonus;
public MoonPhaseMutationBonus(MoonPhase phase, float bonus) {
this.moonPhaseStart = phase;
this.moonPhaseEnd = phase;
this.mutationBonus = bonus;
}
public MoonPhaseMutationBonus(MoonPhase start, MoonPhase end, float bonus) {
this.moonPhaseStart = start;
this.moonPhaseEnd = end;
this.mutationBonus = bonus;
}
@Override
public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
IGenome genome1, IClimateProvider climate) {
if (MoonPhase.getMoonPhase(world).isBetween(this.moonPhaseStart, this.moonPhaseEnd)) {
return this.mutationBonus;
}
return 1;
}
@Override
public String getDescription() {
if (this.moonPhaseStart != this.moonPhaseEnd) {
return String.format(
LocalizationManager.getLocalizedString("research.bonusPhase"),
moonPhaseStart.getLocalizedNameAlt(),
moonPhaseEnd.getLocalizedNameAlt());
} else {
return String.format(
LocalizationManager.getLocalizedString("research.bonusPhaseSingle"),
moonPhaseStart.getLocalizedName());
}
}
}
@@ -0,0 +1,49 @@
package magicbees.bees;
import net.minecraft.world.World;
import forestry.api.core.IClimateProvider;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IGenome;
import forestry.api.genetics.IMutationCondition;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.MoonPhase;
public class MoonPhaseMutationRestriction implements IMutationCondition {
private final MoonPhase moonPhaseStart;
private final MoonPhase moonPhaseEnd;
public MoonPhaseMutationRestriction(MoonPhase phase) {
this.moonPhaseStart = phase;
this.moonPhaseEnd = phase;
}
public MoonPhaseMutationRestriction(MoonPhase start, MoonPhase end) {
this.moonPhaseStart = start;
this.moonPhaseEnd = end;
}
@Override
public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
IGenome genome1, IClimateProvider climate) {
if (MoonPhase.getMoonPhase(world).isBetween(this.moonPhaseStart, this.moonPhaseEnd)) {
return 1;
}
return 0;
}
@Override
public String getDescription() {
if (moonPhaseStart != moonPhaseEnd) {
return String.format(
LocalizationManager.getLocalizedString("research.requiresPhase"),
moonPhaseStart.getLocalizedNameAlt(),
moonPhaseEnd.getLocalizedNameAlt());
} else {
return String.format(
LocalizationManager.getLocalizedString("research.requiresPhaseSingle"),
moonPhaseStart.getLocalizedName());
}
}
}
@@ -0,0 +1,97 @@
package magicbees.bees.allele.effect;
import java.util.HashMap;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
public class AlleleEffectCrumbling extends AlleleEffect {
private static HashMap<ItemStack, ItemStack> crumbleMap = new HashMap<ItemStack, ItemStack>();
public static void addPairToMap(ItemStack source, ItemStack target) {
boolean add = true;
for (ItemStack i : crumbleMap.keySet()) {
if (OreDictionary.itemMatches(i, source, false)) {
add = false;
break;
}
}
if (add) {
crumbleMap.put(source, target);
}
}
public AlleleEffectCrumbling(String id, boolean isDominant) {
super(id, isDominant, 600);
addPairToMap(new ItemStack(Blocks.stone), new ItemStack(Blocks.cobblestone));
addPairToMap(new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.mossy_cobblestone));
addPairToMap(new ItemStack(Blocks.stonebrick, 1, 0), new ItemStack(Blocks.stonebrick, 1, 2));
addPairToMap(new ItemStack(Blocks.stonebrick, 1, 2), new ItemStack(Blocks.stonebrick, 1, 1));
addPairToMap(new ItemStack(Blocks.cobblestone_wall), new ItemStack(Blocks.cobblestone_wall, 1, 1));
addPairToMap(new ItemStack(Blocks.gravel), new ItemStack(Blocks.sand));
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
}
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
// Get random coords within territory
int[] randomCoords = new int[3];
for (int i = 0; i < 3; i++) {
int range = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[i]);
if (range > 0) {
randomCoords[i] = world.rand.nextInt(range) - range / 2;
}
}
int xCoord = coords.posX + randomCoords[0];
int yCoord = coords.posY + randomCoords[1];
int zCoord = coords.posZ + randomCoords[2];
Block block = world.getBlock(xCoord, yCoord, zCoord);
if (block != null) {
ItemStack source = new ItemStack(block, 1, world.getBlockMetadata(xCoord, yCoord, zCoord));
for (ItemStack key : crumbleMap.keySet()) {
if (OreDictionary.itemMatches(source, key, false)) {
ItemStack target = crumbleMap.get(key);
world.setBlock(
xCoord,
yCoord,
zCoord,
Block.getBlockFromItem(target.getItem()),
target.getItemDamage(),
2);
break;
}
}
}
storedData.setInteger(0, 0);
return storedData;
}
}
@@ -0,0 +1,39 @@
package magicbees.bees.allele.effect;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
public class AlleleEffectCure extends AlleleEffect {
public AlleleEffectCure(String id, boolean isDominant) {
super(id, isDominant, 200);
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null) {
storedData = new EffectData(1, 0, 0);
}
return storedData;
}
@Override
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
List<EntityPlayer> entityList = this.getEntitiesWithinRange(genome, housing, EntityPlayer.class);
for (EntityPlayer player : entityList) {
player.curePotionEffects(new ItemStack(Items.milk_bucket));
}
storedData.setInteger(0, 0);
return storedData;
}
}
@@ -0,0 +1,118 @@
package magicbees.bees.allele.effect;
import static magicbees.main.utils.compat.thaumcraft.NodeHelper.getWeightedRandomAspect;
import static magicbees.main.utils.compat.thaumcraft.NodeHelper.updateNode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import forestry.api.apiculture.IAlleleBeeAcceleratableEffect;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
import magicbees.main.Config;
import magicbees.main.utils.BlockUtil;
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.nodes.INode;
public class AlleleEffectEmpowering extends AlleleEffect implements IAlleleBeeAcceleratableEffect {
public AlleleEffectEmpowering(String id, boolean isDominant) {
super(id, isDominant, 200);
combinable = true;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (!(storedData instanceof EffectData)) {
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
}
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
int range = Math
.max((int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f)), 1);
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
if (NodeHelper.growNodeInRange(chunks, world, coords.posX, coords.posY, coords.posZ, range)) {
storedData.setInteger(0, storedData.getInteger(0) - throttle);
}
return storedData;
}
@Override
public IEffectData doEffectAccelerated(IBeeGenome genome, IEffectData storedData, IBeeHousing housing, float did) {
storedData.setInteger(0, 0);
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
int range = Math
.max((int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f)), 1);
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
int idid = (int) did;
List<INode> nodes = new ArrayList<>(idid);
Collections.shuffle(chunks);
for (Chunk chunk : chunks) {
List<INode> l = NodeHelper.findNodesInChunkWithinRange(chunk, coords.posX, coords.posY, coords.posZ, range);
nodes.addAll(l);
idid -= l.size();
if (idid <= 0) {
while (idid < 0) {
nodes.remove(0);
idid++;
}
break;
}
}
if (nodes.isEmpty()) return storedData;
did /= (float) nodes.size();
if (did < 1f) did = 1f;
for (INode node : nodes) {
AspectList aspectsBase = node.getAspectsBase();
int randBase = Math.max(aspectsBase.visSize(), 1);
if (world.rand.nextInt(randBase) < 120) {
Aspect aspectToAdd;
int rollAttempts = 0;
short amount = (short) Math
.min((int) did + world.rand.nextInt((int) (2f * did)), Config.thaumcraftNodeMaxSize);
do {
aspectToAdd = getWeightedRandomAspect(world.rand);
++rollAttempts;
} while (aspectsBase.getAmount(aspectToAdd) > (Config.thaumcraftNodeMaxSize - 1) && rollAttempts < 20);
if (20 <= rollAttempts) {
continue;
}
amount = (short) Math.min(Config.thaumcraftNodeMaxSize - aspectsBase.getAmount(aspectToAdd), amount);
aspectsBase.add(aspectToAdd, amount);
node.getAspects().add(aspectToAdd, amount);
updateNode(node, world);
}
}
return storedData;
}
}
@@ -0,0 +1,51 @@
package magicbees.bees.allele.effect;
import java.util.List;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
import magicbees.main.utils.BlockUtil;
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
import thaumcraft.api.nodes.NodeType;
public class AlleleEffectNodeConversion extends AlleleEffect {
private NodeType targetType;
public AlleleEffectNodeConversion(String id, NodeType targetNodeType, boolean isDominant, int timeout) {
super(id, isDominant, timeout);
targetType = targetNodeType;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
}
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
int range = (int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f));
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
if (NodeHelper
.convertNodeInRangeToType(chunks, world, coords.posX, coords.posY, coords.posZ, range, targetType)) {
storedData.setInteger(0, storedData.getInteger(0) - throttle);
}
return storedData;
}
}
@@ -0,0 +1,46 @@
package magicbees.bees.allele.effect;
import java.util.List;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
import magicbees.main.utils.BlockUtil;
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
public class AlleleEffectNodeRepair extends AlleleEffect {
public AlleleEffectNodeRepair(String id, boolean isDominant) {
super(id, isDominant, 2);
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
}
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
int range = (int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f));
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
if (NodeHelper.repairNodeInRange(chunks, world, coords.posX, coords.posY, coords.posZ, range)) {
storedData.setInteger(0, storedData.getInteger(0) - throttle);
}
return storedData;
}
}
@@ -0,0 +1,23 @@
package magicbees.bees.allele.effect;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
public class AlleleEffectPlaceholder extends AlleleEffect {
public AlleleEffectPlaceholder(String id, boolean isDominant) {
super(id, isDominant, 100000);
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
return storedData;
}
}
@@ -0,0 +1,64 @@
package magicbees.bees.allele.effect;
import java.util.List;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
public class AlleleEffectPotion extends AlleleEffect {
private int potionId;
private int duration;
private boolean isMalicious;
public AlleleEffectPotion(String name, Potion potionApplied, int effectDuration, boolean isDominant) {
super(name, isDominant, 200);
this.potionId = potionApplied.id;
this.duration = 20 * effectDuration;
this.isMalicious = false;
}
public AlleleEffectPotion setMalicious() {
this.isMalicious = true;
return this;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null) {
storedData = new EffectData(1, 0, 0);
}
return storedData;
}
@Override
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
List<EntityLivingBase> entityList = this.getEntitiesWithinRange(genome, housing, EntityLivingBase.class);
for (EntityLivingBase e : entityList) {
if (this.isMalicious) {
int armorPieces = BeeManager.armorApiaristHelper.wearsItems(e, getUID(), true);
int finalDuration = this.duration / 4 * (4 - armorPieces);
if (finalDuration > 0) {
e.addPotionEffect(new PotionEffect(this.potionId, finalDuration, 0));
}
} else {
if (e instanceof EntityPlayer) {
e.addPotionEffect(new PotionEffect(this.potionId, this.duration, 0));
}
}
}
storedData.setInteger(0, 0);
return storedData;
}
}
@@ -0,0 +1,118 @@
package magicbees.bees.allele.effect;
import static magicbees.main.utils.compat.thaumcraft.NodeHelper.updateNode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import forestry.api.apiculture.IAlleleBeeAcceleratableEffect;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
import magicbees.main.utils.BlockUtil;
import magicbees.main.utils.compat.thaumcraft.NodeHelper;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.AspectList;
import thaumcraft.api.nodes.INode;
public class AlleleEffectRecharge extends AlleleEffect implements IAlleleBeeAcceleratableEffect {
public AlleleEffectRecharge(String id, boolean isDominant) {
super(id, isDominant, 20);
combinable = true;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (!(storedData instanceof EffectData)) {
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
}
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
int range = (int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f));
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
if (NodeHelper.rechargeNodeInRange(chunks, world, coords.posX, coords.posY, coords.posZ, range)) {
storedData.setInteger(0, storedData.getInteger(0) - throttle);
}
return storedData;
}
@Override
public IEffectData doEffectAccelerated(IBeeGenome genome, IEffectData storedData, IBeeHousing housing, float did) {
storedData.setInteger(0, 0);
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
int range = Math
.max((int) Math.ceil(genome.getTerritory()[0] * beeModifier.getTerritoryModifier(genome, 1f)), 1);
List<Chunk> chunks = BlockUtil.getChunksInSearchRange(world, coords.posX, coords.posZ, range);
int idid = (int) did;
List<INode> nodes = new ArrayList<>(idid);
Collections.shuffle(chunks);
for (Chunk chunk : chunks) {
List<INode> l = NodeHelper.findNodesInChunkWithinRange(chunk, coords.posX, coords.posY, coords.posZ, range);
nodes.addAll(l);
idid -= l.size();
if (idid <= 0) {
while (idid < 0) {
nodes.remove(0);
idid++;
}
break;
}
}
if (nodes.isEmpty()) return storedData;
did /= (float) nodes.size();
if (did < 1f) did = 1f;
for (INode node : nodes) {
AspectList baseAspects = node.getAspectsBase();
AspectList currentAspects = node.getAspects();
HashMap<Aspect, Integer> toAdd = new HashMap<>();
int total = 0;
for (Map.Entry<Aspect, Integer> aspect : baseAspects.aspects.entrySet()) {
int diff = aspect.getValue() - currentAspects.getAmount(aspect.getKey());
if (diff <= 0) continue;
toAdd.put(aspect.getKey(), diff);
total += diff;
}
if (total == 0) continue;
int amount = Math.min(total + world.rand.nextInt(total), (int) did);
if (amount <= 0) amount = 1;
for (Map.Entry<Aspect, Integer> aspect : toAdd.entrySet()) {
currentAspects.add(aspect.getKey(), Math.min(aspect.getValue(), amount));
}
updateNode(node, world);
}
return storedData;
}
}
@@ -0,0 +1,199 @@
package magicbees.bees.allele.effect;
import java.util.List;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
public class AlleleEffectSpawnMob extends AlleleEffect {
protected boolean aggosOnPlayer;
protected boolean spawnsWhilePlayerNear;
protected String alternateMob;
protected String mobName;
protected String mobSound;
protected int chanceToSpawn;
protected int maxMobsInArea;
public AlleleEffectSpawnMob(String id, boolean isDominant, String mobToSpawn) {
this(id, isDominant, mobToSpawn, null);
}
public AlleleEffectSpawnMob(String id, boolean isDominant, String mobToSpawn, String mobSoundFx) {
super(id, isDominant, 200);
this.aggosOnPlayer = false;
this.mobName = mobToSpawn;
this.chanceToSpawn = 100;
this.maxMobsInArea = 6;
this.mobSound = mobSoundFx;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
// Throttle; Ready to spawn
storedData = new EffectData(1, 1, 0);
}
return storedData;
}
@Override
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
// Check if we're ready to spawn the mob.
boolean didSpawn = false;
if (storedData.getBoolean(0)) {
World w = housing.getWorld();
int roll = w.rand.nextInt(100);
if (roll <= chanceToSpawn) {
if (spawnsWhilePlayerNear) {
EntityPlayer target = findPlayerTarget(genome, housing);
// Let's spawn a mob. =D
if (target != null) {
didSpawn = spawnMob(genome, target, w, housing, false);
} else if (alternateMob != null) {
didSpawn = spawnMob(genome, null, w, housing, true);
}
} else {
storedData.setBoolean(0, !this.spawnMob(genome, null, w, housing, true));
}
} else {
playMobLiveSound(genome, housing, w);
didSpawn = true;
}
if (didSpawn) {
storedData.setBoolean(0, !didSpawn);
storedData.setInteger(0, storedData.getInteger(0) - throttle);
}
} else {
storedData.setBoolean(0, true);
}
return storedData;
}
private void playMobLiveSound(IBeeGenome genome, IBeeHousing housing, World w) {
if (mobSound != null && w.rand.nextInt(100) < 35) {
ChunkCoordinates coords = housing.getCoordinates();
int range = genome.getTerritory()[0];
double x = coords.posX + w.rand.nextDouble() * (range * 2) - range;
range = genome.getTerritory()[1];
double y = coords.posY + w.rand.nextDouble() * (range * 2) - range;
range = genome.getTerritory()[2];
double z = coords.posZ + w.rand.nextDouble() * (range * 2) - range;
w.playSoundEffect(x, y, z, this.mobSound, 0.5f, (w.rand.nextFloat() - w.rand.nextFloat()) * 0.2f + 1.0f);
}
}
private EntityPlayer findPlayerTarget(IBeeGenome genome, IBeeHousing housing) {
List<EntityPlayer> entities = getEntitiesWithinRange(genome, housing, EntityPlayer.class);
for (EntityPlayer e : entities) {
// Check for wearing armor & cancel
// Full armor suit is treated as "invisible."
if (forestry.api.apiculture.BeeManager.armorApiaristHelper.wearsItems((EntityLivingBase) e, getUID(), true)
< 4) {
return e;
}
}
return null;
}
protected boolean spawnMob(IBeeGenome bee, EntityPlayer player, World world, IBeeHousing housing,
boolean spawnAlternate) {
boolean spawnedFlag = false;
EntityLiving mob;
if (spawnAlternate && alternateMob != null) {
mob = (EntityLiving) EntityList.createEntityByName(alternateMob, world);
} else {
mob = (EntityLiving) EntityList.createEntityByName(mobName, world);
}
if (mob != null) {
double pos[] = this.randomMobSpawnCoords(world, bee, housing);
int entitiesCount = world.getEntitiesWithinAABB(
mob.getClass(),
AxisAlignedBB.getBoundingBox(
(int) pos[0],
(int) pos[1],
(int) pos[2],
(int) pos[0] + 1,
(int) pos[1] + 1,
(int) pos[2] + 1).expand(8.0D, 4.0D, 8.0D))
.size();
mob.setPositionAndRotation(pos[0], pos[1], pos[2], world.rand.nextFloat() * 360f, 0f);
if (entitiesCount < maxMobsInArea && mob.getCanSpawnHere()) {
spawnedFlag = world.spawnEntityInWorld(mob);
if (aggosOnPlayer && player != null) {
if (forestry.api.apiculture.BeeManager.armorApiaristHelper
.wearsItems((EntityLivingBase) player, getUID(), true) < 4) {
// Protect fully suited player from initial murder intent.
mob.setAttackTarget(player);
}
}
}
}
return spawnedFlag;
}
public AlleleEffectSpawnMob setSpawnsOnPlayerNear(String alternateMobToSpawn) {
spawnsWhilePlayerNear = true;
alternateMob = alternateMobToSpawn;
return this;
}
public AlleleEffectSpawnMob setAggrosPlayerOnSpawn() {
aggosOnPlayer = true;
return this;
}
public AlleleEffectSpawnMob setThrottle(int val) {
throttle = val;
return this;
}
public AlleleEffectSpawnMob setChanceToSpawn(int value) {
chanceToSpawn = value;
return this;
}
public AlleleEffectSpawnMob setMaxMobsInSpawnZone(int value) {
maxMobsInArea = value;
return this;
}
protected double[] randomMobSpawnCoords(World world, IBeeGenome bee, IBeeHousing housing) {
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
double pos[] = new double[3];
pos[0] = coords.posX
+ (world.rand.nextDouble() * (bee.getTerritory()[0] * beeModifier.getTerritoryModifier(bee, 1f))
- bee.getTerritory()[0] / 2);
pos[1] = coords.posY + world.rand.nextInt(3) - 1;
pos[2] = coords.posZ
+ (world.rand.nextDouble() * (bee.getTerritory()[2] * beeModifier.getTerritoryModifier(bee, 1f))
- bee.getTerritory()[2] / 2);
return pos;
}
}
@@ -0,0 +1,92 @@
package magicbees.bees.allele.effect;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
public class AlleleEffectSpawnMobWeighted extends AlleleEffect {
private String[] entityNames;
private int[] spawnChance;
public AlleleEffectSpawnMobWeighted(String id, boolean isDominant, int throttle, String[] mobs, int[] chance) {
super(id, isDominant, throttle);
if (mobs.length != chance.length) {
throw new IllegalArgumentException("Array lengths must be equal!");
}
this.entityNames = mobs;
this.spawnChance = chance;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
storedData = new EffectData(1, 0, 0);
}
return storedData;
}
@Override
public IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
if (this.spawnMob(genome, housing)) {
storedData.setInteger(0, 0);
}
return storedData;
}
protected boolean spawnMob(IBeeGenome genome, IBeeHousing housing) {
boolean flag = false;
World w = housing.getWorld();
int roll = 0;
for (int i = 0; i < this.spawnChance.length && !flag; ++i) {
roll = 100 - w.rand.nextInt(100) + 1;
if (roll < this.spawnChance[i]) {
Entity mob = EntityList.createEntityByName(this.entityNames[i], w);
if (mob != null) {
flag = true;
double[] coords = this.randomMobSpawnCoords(w, genome, housing);
mob.setPositionAndRotation(coords[0], coords[1], coords[2], w.rand.nextFloat() * 360f, 0f);
if (mob instanceof EntityLiving) {
if (((EntityLiving) mob).getCanSpawnHere()) {
w.spawnEntityInWorld(mob);
}
} else {
w.spawnEntityInWorld(mob);
}
}
}
}
return flag;
}
protected double[] randomMobSpawnCoords(World world, IBeeGenome bee, IBeeHousing housing) {
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
double pos[] = new double[3];
pos[0] = coords.posX
+ world.rand.nextDouble() * (bee.getTerritory()[0] * beeModifier.getTerritoryModifier(bee, 1f))
- bee.getTerritory()[0] / 2;
pos[1] = coords.posY
+ world.rand.nextDouble() * (bee.getTerritory()[1] * beeModifier.getTerritoryModifier(bee, 1f))
- bee.getTerritory()[1] / 2;
pos[2] = coords.posZ
+ world.rand.nextDouble() * (bee.getTerritory()[2] * beeModifier.getTerritoryModifier(bee, 1f))
- bee.getTerritory()[2] / 2;
return pos;
}
}
@@ -0,0 +1,79 @@
package magicbees.bees.allele.effect;
import java.lang.reflect.Field;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import magicbees.main.utils.compat.ThaumcraftHelper;
public class AlleleEffectSpawnWisp extends AlleleEffectSpawnMob {
private byte[] wispTypes = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 };
public AlleleEffectSpawnWisp(String id, boolean isDominant, String mobToSpawn, String soundToPlay) {
super(id, isDominant, mobToSpawn, soundToPlay);
}
@Override
protected boolean spawnMob(IBeeGenome bee, EntityPlayer player, World world, IBeeHousing housing,
boolean spawnAlternate) {
boolean spawnedFlag = false;
EntityLiving mob;
if (spawnAlternate && this.alternateMob != null) {
mob = (EntityLiving) EntityList.createEntityByName(this.alternateMob, world);
} else {
mob = (EntityLiving) EntityList.createEntityByName(this.mobName, world);
}
if (mob != null) {
double pos[] = this.randomMobSpawnCoords(world, bee, housing);
int entitiesCount = world.getEntitiesWithinAABB(
mob.getClass(),
AxisAlignedBB.getBoundingBox(
(int) pos[0],
(int) pos[1],
(int) pos[2],
(int) pos[0] + 1,
(int) pos[1] + 1,
(int) pos[2] + 1).expand(8.0D, 4.0D, 8.0D))
.size();
mob.setPositionAndRotation(pos[0], pos[1], pos[2], world.rand.nextFloat() * 360f, 0f);
if (entitiesCount < this.maxMobsInArea && mob.getCanSpawnHere()) {
// Try some Reflection on TC code. This could be dangerous.
try {
Class<?> wispEntity = Class.forName(ThaumcraftHelper.Entity.WISP.getClassName());
Field type = wispEntity.getDeclaredField("type");
type.setByte(mob, wispTypes[world.rand.nextInt(wispTypes.length)]);
} catch (Exception e) {
/*
* Last time I had a request to post error messages, I regretted it.
*/
}
spawnedFlag = world.spawnEntityInWorld(mob);
if (this.aggosOnPlayer && player != null) {
if (BeeManager.armorApiaristHelper.wearsItems((EntityLivingBase) player, getUID(), true) < 4) {
// Protect fully suited player from initial murder
// intent.
mob.setAttackTarget(player);
}
}
}
}
return spawnedFlag;
}
}
@@ -0,0 +1,68 @@
package magicbees.bees.allele.effect;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IBeeModifier;
import forestry.api.genetics.IEffectData;
import magicbees.bees.AlleleEffect;
import magicbees.bees.BeeManager;
public class AlleleEffectTransmuting extends AlleleEffect {
private TransmutationEffectController transmutationController;
public AlleleEffectTransmuting(String id, boolean isDominant, TransmutationEffectController effectController,
int timeoutBeeTicks) {
super(id, isDominant, timeoutBeeTicks);
this.transmutationController = effectController;
}
@Override
public IEffectData validateStorage(IEffectData storedData) {
if (storedData == null || !(storedData instanceof magicbees.bees.allele.effect.EffectData)) {
storedData = new magicbees.bees.allele.effect.EffectData(1, 0, 0);
}
return storedData;
}
@Override
protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
World world = housing.getWorld();
ChunkCoordinates coords = housing.getCoordinates();
IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
// Get random coords within territory
int[] randomCoords = new int[3];
for (int i = 0; i < 3; i++) {
int range = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[i]);
if (range > 0) {
randomCoords[i] = world.rand.nextInt(range) - range / 2;
}
}
int xCoord = coords.posX + randomCoords[0];
int yCoord = coords.posY + randomCoords[1];
int zCoord = coords.posZ + randomCoords[2];
BiomeGenBase biome = world.getBiomeGenForCoords(xCoord, zCoord);
transmutationController.attemptTransmutations(
world,
biome,
new ItemStack(
world.getBlock(xCoord, yCoord, zCoord),
1,
world.getBlockMetadata(xCoord, yCoord, zCoord)),
xCoord,
yCoord,
zCoord);
storedData.setInteger(0, 0);
return storedData;
}
}
@@ -0,0 +1,72 @@
package magicbees.bees.allele.effect;
import net.minecraft.nbt.NBTTagCompound;
import forestry.api.genetics.IEffectData;
public class EffectData implements IEffectData {
private int[] intData;
private boolean[] boolData;
private float[] floatData;
public EffectData(int intCount, int boolCount, int floatCount) {
this.intData = new int[intCount];
this.boolData = new boolean[boolCount];
this.floatData = new float[floatCount];
}
@Override
public void readFromNBT(NBTTagCompound nbttagcompound) {}
@Override
public void writeToNBT(NBTTagCompound nbttagcompound) {}
@Override
public void setInteger(int index, int val) {
if (index >= 0 && index < this.intData.length) {
this.intData[index] = val;
}
}
@Override
public void setFloat(int index, float val) {
if (index >= 0 && index < this.floatData.length) {
this.floatData[index] = val;
}
}
@Override
public void setBoolean(int index, boolean val) {
if (index >= 0 && index < this.boolData.length) {
this.boolData[index] = val;
}
}
@Override
public int getInteger(int index) {
int val = 0;
if (index >= 0 && index < this.intData.length) {
val = this.intData[index];
}
return val;
}
@Override
public float getFloat(int index) {
float val = 0f;
if (index >= 0 && index < this.floatData.length) {
val = this.floatData[index];
}
return val;
}
@Override
public boolean getBoolean(int index) {
boolean val = false;
if (index >= 0 && index < this.boolData.length) {
val = this.boolData[index];
}
return val;
}
}
@@ -0,0 +1,49 @@
package magicbees.bees.allele.effect;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import magicbees.api.bees.ITransmutationEffectController;
import magicbees.api.bees.ITransmutationEffectLogic;
import magicbees.main.utils.LogHelper;
public class TransmutationEffectController implements ITransmutationEffectController {
private List<ITransmutationEffectLogic> logicObjects;
public TransmutationEffectController(ITransmutationEffectLogic... effectLogic) {
logicObjects = new ArrayList<ITransmutationEffectLogic>();
for (ITransmutationEffectLogic logic : effectLogic) {
logicObjects.add(logic);
}
}
public void attemptTransmutations(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
Collections.shuffle(logicObjects);
for (ITransmutationEffectLogic logic : logicObjects) {
try {
if (logic.tryTransmutation(world, biome, sourceBlock, x, y, z)) {
break;
}
} catch (Exception e) {
LogHelper.warn(
String.format(
"Magic Bees encountered an issue with an ITransmutationEffectLogic provider %s. Debug information follows.",
logic.getClass().getName()));
LogHelper.info(e.getMessage());
}
}
}
@Override
public void addEffectLogic(ITransmutationEffectLogic logic) {
if (logic != null && !logicObjects.contains(logic)) {
logicObjects.add(logic);
}
}
}
@@ -0,0 +1,30 @@
package magicbees.bees.allele.effect;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.oredict.OreDictionary;
import magicbees.api.bees.ITransmutationEffectLogic;
import magicbees.main.utils.compat.BotaniaHelper;
public class TransmutationEffectLBotaniaLiving implements ITransmutationEffectLogic {
@Override
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
int[] oreIDs = OreDictionary.getOreIDs(sourceBlock);
for (int oreId : oreIDs) {
if (oreId == OreDictionary.getOreID("logWood")) {
world.setBlock(x, y, z, BotaniaHelper.blockLivingWood);
return true;
} else if (oreId == OreDictionary.getOreID("stone")) {
world.setBlock(x, y, z, BotaniaHelper.blockLivingRock);
return true;
} else if (oreId == OreDictionary.getOreID("livingwood")) {
world.setBlock(x, y, z, BotaniaHelper.blockDreamWood);
return true;
}
}
return false;
}
}
@@ -0,0 +1,54 @@
package magicbees.bees.allele.effect;
import java.util.Locale;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.oredict.OreDictionary;
import cpw.mods.fml.common.registry.GameRegistry;
import magicbees.api.bees.ITransmutationEffectLogic;
public class TransmutationEffectRailcraft implements ITransmutationEffectLogic {
@Override
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
boolean flag = false;
if (OreDictionary.itemMatches(new ItemStack(Blocks.stone), sourceBlock, false)
|| OreDictionary.itemMatches(new ItemStack(Blocks.cobblestone), sourceBlock, false)) {
flag = trySpawnQuarriedStone(world, biome, sourceBlock, x, y, z)
|| trySpawnAbyssalStone(world, biome, sourceBlock, x, y, z);
}
return flag;
}
private boolean trySpawnQuarriedStone(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
boolean flag = false;
if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.FOREST)
&& !BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SNOWY)) {
ItemStack item = GameRegistry.findItemStack("Railcraft", "cube.stone.quarried", 1);
if (item != null) {
world.setBlock(x, y, z, Block.getBlockFromItem(item.getItem()), item.getItemDamage(), 2);
flag = true;
}
}
return flag;
}
private boolean trySpawnAbyssalStone(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
boolean flag = false;
if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.WATER)
&& !biome.biomeName.toLowerCase(Locale.ENGLISH).contains("river")) {
ItemStack item = GameRegistry.findItemStack("Railcraft", "cube.stone.abyssal", 1);
if (item != null) {
world.setBlock(x, y, z, Block.getBlockFromItem(item.getItem()), item.getItemDamage(), 2);
flag = true;
}
}
return flag;
}
}
@@ -0,0 +1,28 @@
package magicbees.bees.allele.effect;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.oredict.OreDictionary;
import magicbees.api.bees.ITransmutationEffectLogic;
public class TransmutationEffectVanilla implements ITransmutationEffectLogic {
@Override
public boolean tryTransmutation(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
return trySpawnSandstone(world, biome, sourceBlock, x, y, z);
}
private boolean trySpawnSandstone(World world, BiomeGenBase biome, ItemStack sourceBlock, int x, int y, int z) {
boolean flag = false;
if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.SANDY)
&& OreDictionary.itemMatches(new ItemStack(Blocks.sand), sourceBlock, false)) {
world.setBlock(x, y, z, Blocks.sandstone);
flag = true;
}
return flag;
}
}
@@ -0,0 +1,31 @@
package magicbees.bees.allele.flowerProvider;
import java.util.Set;
import net.minecraft.block.Block;
import forestry.api.apiculture.FlowerManager;
import forestry.api.genetics.IFlower;
import forestry.api.genetics.IFlowerGrowthRule;
import forestry.api.genetics.IFlowerProvider;
public abstract class FlowerProvider implements IFlowerProvider {
@Override
@Deprecated
public Set<IFlower> getFlowers() {
return FlowerManager.flowerRegistry.getAcceptableFlowers(getFlowerType());
}
protected void registerPlantableFlower(Block block, int meta, int weight) {
FlowerManager.flowerRegistry.registerPlantableFlower(block, meta, weight, getFlowerType());
}
protected void registerAcceptableFlower(Block block, int meta) {
FlowerManager.flowerRegistry.registerAcceptableFlower(block, meta, getFlowerType());
}
protected void registerGrowthRule(IFlowerGrowthRule growthRule) {
FlowerManager.flowerRegistry.registerGrowthRule(growthRule, getFlowerType());
}
}
@@ -0,0 +1,94 @@
package magicbees.bees.allele.flowerProvider;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import forestry.api.genetics.IFlowerGrowthHelper;
import forestry.api.genetics.IFlowerGrowthRule;
import forestry.api.genetics.IFlowerRegistry;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.compat.ArsMagicaHelper;
public class FlowerProviderArsMagicaFlower extends FlowerProvider implements IFlowerGrowthRule {
public FlowerProviderArsMagicaFlower() {
registerPlantableFlower(ArsMagicaHelper.blackOrchid, 0, 1);
registerPlantableFlower(ArsMagicaHelper.desertNova, 0, 1);
registerPlantableFlower(ArsMagicaHelper.aum, 0, 1);
registerPlantableFlower(ArsMagicaHelper.wakebloom, 0, 1);
registerPlantableFlower(ArsMagicaHelper.tarmaRoot, 0, 1);
registerGrowthRule(this);
}
@Override
public String getFlowerType() {
return "flowersArsMagica";
}
@Override
public String getDescription() {
return LocalizationManager.getLocalizedString("flowerProvider.arsmagica");
}
@Override
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int y, int z, ItemStack[] products) {
return products;
}
@Override
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
return pollinatable.getPlantType().size() > 1;
}
@Override
@Deprecated
public boolean growFlower(World world, IIndividual genome, int x, int y, int z) {
return growFlower(world, x, y, z);
}
@Override
public boolean growFlower(IFlowerGrowthHelper helper, String flowerType, World world, int x, int y, int z) {
return growFlower(world, x, y, z);
}
@Override
@Deprecated
public boolean growFlower(IFlowerRegistry fr, String flowerType, World world, IIndividual individual, int x, int y,
int z) {
return growFlower(world, x, y, z);
}
private boolean growFlower(World world, int x, int y, int z) {
boolean flag = false;
Block blockDown = world.getBlock(x, y - 1, z);
if (world.getBlock(x, y, z).isAir(world, x, y, z)) {
if (blockDown == Blocks.dirt || blockDown == Blocks.grass) {
int dart = world.rand.nextInt(100);
Block block;
if (dart > 60) {
block = ArsMagicaHelper.blackOrchid;
} else if (dart > 30) {
block = ArsMagicaHelper.aum;
} else {
block = ArsMagicaHelper.tarmaRoot;
}
world.setBlock(x, y, z, block);
flag = true;
} else if (blockDown == Blocks.sand) {
world.setBlock(x, y, z, ArsMagicaHelper.desertNova);
flag = true;
} else if (blockDown == Blocks.stone) {
world.setBlock(x, y, z, ArsMagicaHelper.tarmaRoot);
flag = true;
} else if (blockDown == Blocks.water || blockDown == Blocks.water) {
world.setBlock(x, y, z, ArsMagicaHelper.wakebloom);
flag = true;
}
}
return flag;
}
}
@@ -0,0 +1,65 @@
package magicbees.bees.allele.flowerProvider;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.compat.ThaumcraftHelper;
public class FlowerProviderAuraNode extends FlowerProvider {
public FlowerProviderAuraNode() {
registerAcceptableFlower(ThaumcraftHelper.airy, ThaumcraftHelper.AiryBlockType.NODE.ordinal());
registerAcceptableFlower(ThaumcraftHelper.airy, ThaumcraftHelper.AiryBlockType.ENERGIZED_NODE.ordinal());
}
@Override
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
return pollinatable.getPlantType().size() > 0;
}
@Override
@Deprecated
public boolean growFlower(World world, IIndividual genome, int x, int y, int z) {
return true;
}
@Override
public String getFlowerType() {
return "flowersThaumcraftAuraNode";
}
@Override
public String getDescription() {
return LocalizationManager.getLocalizedString("flowerProvider.node");
}
@Override
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int y, int z, ItemStack[] products) {
return products;
}
protected ItemStack[] addItemToProducts(ItemStack[] products, ItemStack itemStack) {
for (ItemStack stack : products) {
if (stack.getItem() == itemStack.getItem() && stack.getItemDamage() == itemStack.getItemDamage()) {
if (stack.stackSize < stack.getItem().getItemStackLimit(stack)) {
stack.stackSize += itemStack.stackSize;
itemStack.stackSize = Math.max(stack.stackSize - stack.getItem().getItemStackLimit(stack), 0);
}
}
}
if (itemStack.stackSize > 0) {
ItemStack[] newProducts = new ItemStack[products.length + 1];
for (int i = 0; i < products.length; ++i) {
newProducts[i] = products[i];
}
newProducts[products.length] = itemStack;
products = newProducts;
}
return products;
}
}
@@ -0,0 +1,47 @@
package magicbees.bees.allele.flowerProvider;
import java.util.EnumSet;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.oredict.OreDictionary;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import magicbees.main.utils.LocalizationManager;
public class FlowerProviderBookshelf extends FlowerProvider {
public FlowerProviderBookshelf() {
registerAcceptableFlower(Blocks.bookshelf, OreDictionary.WILDCARD_VALUE);
}
@Override
@Deprecated
public boolean growFlower(World world, IIndividual genome, int x, int i, int j) {
return true;
}
@Override
public String getFlowerType() {
return "flowersBookshelf";
}
@Override
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int i, int j, ItemStack products[]) {
return products;
}
@Override
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
EnumSet<EnumPlantType> types = pollinatable.getPlantType();
return types.size() > 0 && !types.contains(EnumPlantType.Nether) && !types.contains(EnumPlantType.Water);
}
@Override
public String getDescription() {
return LocalizationManager.getLocalizedString("flowerProvider.book");
}
}
@@ -0,0 +1,67 @@
package magicbees.bees.allele.flowerProvider;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import forestry.api.genetics.IFlowerGrowthHelper;
import forestry.api.genetics.IFlowerGrowthRule;
import forestry.api.genetics.IFlowerRegistry;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.compat.BotaniaHelper;
public class FlowerProviderBotania extends FlowerProvider implements IFlowerGrowthRule {
public FlowerProviderBotania() {
registerPlantableFlower(BotaniaHelper.blockMysticalFlower, OreDictionary.WILDCARD_VALUE, 1);
registerGrowthRule(this);
}
@Override
@Deprecated
public boolean growFlower(World world, IIndividual individual, int x, int y, int z) {
return growFlower(world, x, y, z);
}
@Override
public boolean growFlower(IFlowerGrowthHelper helper, String flowerType, World world, int x, int y, int z) {
return growFlower(world, x, y, z);
}
@Override
@Deprecated
public boolean growFlower(IFlowerRegistry fr, String flowerType, World world, IIndividual individual, int x, int y,
int z) {
return growFlower(world, x, y, z);
}
private boolean growFlower(World world, int x, int y, int z) {
if (world.isAirBlock(x, y, z) && BotaniaHelper.blockMysticalFlower.canPlaceBlockAt(world, x, y, z)) {
world.setBlock(x, y, z, BotaniaHelper.blockMysticalFlower);
world.setBlockMetadataWithNotify(x, y, z, world.rand.nextInt(16), 2);
}
return false;
}
@Override
public ItemStack[] affectProducts(World world, IIndividual individual, int x, int y, int z, ItemStack[] products) {
return products;
}
@Override
public String getDescription() {
return LocalizationManager.getLocalizedString("flowerProvider.botania");
}
@Override
public String getFlowerType() {
return "flowersBotania";
}
@Override
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
return pollinatable.getPlantType().size() > 0;
}
}
@@ -0,0 +1,76 @@
package magicbees.bees.allele.flowerProvider;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import forestry.api.genetics.IFlowerGrowthHelper;
import forestry.api.genetics.IFlowerGrowthRule;
import forestry.api.genetics.IFlowerRegistry;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IPollinatable;
import magicbees.main.utils.LocalizationManager;
import magicbees.main.utils.compat.ThaumcraftHelper;
public class FlowerProviderThaumcraftFlower extends FlowerProvider implements IFlowerGrowthRule {
public FlowerProviderThaumcraftFlower() {
registerPlantableFlower(ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.SHIMMERLEAF.ordinal(), 1);
registerPlantableFlower(ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.CINDERPEARL.ordinal(), 1);
registerGrowthRule(this);
}
@Override
public String getFlowerType() {
return "flowersThaumcraft";
}
@Override
public String getDescription() {
return LocalizationManager.getLocalizedString("flowerProvider.magic");
}
@Override
public ItemStack[] affectProducts(World world, IIndividual genome, int x, int y, int z, ItemStack[] products) {
return products;
}
@Override
public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
return 0 < pollinatable.getPlantType().size();
}
@Override
@Deprecated
public boolean growFlower(World world, IIndividual genome, int x, int y, int z) {
return growFlower(world, x, y, z);
}
@Override
public boolean growFlower(IFlowerGrowthHelper helper, String flowerType, World world, int x, int y, int z) {
return growFlower(world, x, y, z);
}
@Override
@Deprecated
public boolean growFlower(IFlowerRegistry fr, String flowerType, World world, IIndividual individual, int x, int y,
int z) {
return growFlower(world, x, y, z);
}
private boolean growFlower(World world, int x, int y, int z) {
boolean flag = false;
Block blockDown = world.getBlock(x, y - 1, z);
if (world.getBlock(x, y, z).isAir(world, x, y, z)) {
if (blockDown == Blocks.dirt || blockDown == Blocks.grass) {
world.setBlock(x, y, z, ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.SHIMMERLEAF.ordinal(), 2);
flag = true;
} else if (blockDown == Blocks.sand) {
world.setBlock(x, y, z, ThaumcraftHelper.plant, ThaumcraftHelper.BlockPlant.CINDERPEARL.ordinal(), 2);
flag = true;
}
}
return flag;
}
}
@@ -0,0 +1,93 @@
package magicbees.block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
import magicbees.main.utils.TabMagicBees;
import magicbees.tileentity.TileEntityApimancersDrainerCommon;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.IEssentiaContainerItem;
public class BlockApimancersDrainer extends BlockContainer {
@SideOnly(Side.CLIENT)
private IIcon[] icons;
public static Class<? extends TileEntity> drainer = TileEntityApimancersDrainerCommon.class;
public BlockApimancersDrainer() {
super(Material.rock);
this.setCreativeTab(TabMagicBees.tabMagicBees);
this.setBlockName("apimancersDrainer");
this.setHardness(1f);
this.setResistance(1.5f);
this.setHarvestLevel("pickaxe", 0);
}
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
try {
return drainer.newInstance();
} catch (Exception e) {
return null;
}
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float par7,
float par8, float par9) {
if (world.isRemote) {
return false;
} else {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileEntityApimancersDrainerCommon && side != 1) {
ItemStack tItemStack = player.getHeldItem();
if (tItemStack != null) {
Item tItem = tItemStack.getItem();
if (tItem instanceof IEssentiaContainerItem
&& ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) != null
&& ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()).size() > 0) {
Aspect tLocked = ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem())
.getAspects()[0];
((TileEntityApimancersDrainerCommon) tile).setAspect(tLocked);
player.addChatMessage(
new ChatComponentTranslation("Producing " + tLocked.getLocalizedDescription()));
}
} else {
((TileEntityApimancersDrainerCommon) tile).setAspect(null);
player.addChatMessage(new ChatComponentTranslation("Cleared production specifier"));
}
world.markBlockForUpdate(x, y, z);
return true;
}
return false;
}
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return icons[side <= 1 ? side : 2];
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
icons = new IIcon[4];
for (int i = 0; i < icons.length; i++) {
icons[i] = register.registerIcon(CommonProxy.DOMAIN + ":apimancersdrainer." + i);
}
}
}
@@ -0,0 +1,105 @@
package magicbees.block;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.client.gui.UIScreens;
import magicbees.main.CommonProxy;
import magicbees.main.MagicBees;
import magicbees.main.utils.TabMagicBees;
import magicbees.tileentity.TileEntityEffectJar;
public class BlockEffectJar extends BlockContainer {
public BlockEffectJar() {
super(Material.glass);
this.setCreativeTab(TabMagicBees.tabMagicBees);
this.setBlockName("effectJar");
this.setBlockBounds(0.25f, 0f, 0.25f, 0.75f, 0.81f, 0.74f);
this.setHardness(0.1f);
this.setResistance(1.5f);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7,
float par8, float par9) {
boolean activate = false;
if (!player.isSneaking()) {
if (!world.isRemote) {
player.openGui(MagicBees.object, UIScreens.EFFECT_JAR.ordinal(), world, x, y, z);
}
activate = true;
}
return activate;
}
@Override
public TileEntity createNewTileEntity(World w, int metadata) {
return new TileEntityEffectJar();
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public int getRenderType() {
return CommonProxy.RenderIdEffectJar;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
this.dropInventory(world, x, y, z);
super.breakBlock(world, x, y, z, block, meta);
}
private void dropInventory(World world, int x, int y, int z) {
TileEntity e = world.getTileEntity(x, y, z);
if (e != null && e instanceof TileEntityEffectJar) {
TileEntityEffectJar jar = (TileEntityEffectJar) e;
// 0 is the only droppable stack.
ItemStack stack = jar.getStackInSlot(0);
if (stack != null && stack.stackSize > 0) {
float pX = world.rand.nextFloat() * 0.8f + 0.1f;
float pY = world.rand.nextFloat() * 0.8f + 0.1f;
float pZ = world.rand.nextFloat() * 0.8f + 0.1f;
EntityItem entityItem = new EntityItem(world, x + pX, y + pY, z + pZ, stack.copy());
entityItem.motionX = world.rand.nextGaussian() * 0.05f;
entityItem.motionY = world.rand.nextGaussian() * 0.05f + 0.2f;
entityItem.motionZ = world.rand.nextGaussian() * 0.05f;
world.spawnEntityInWorld(entityItem);
stack.stackSize = 0;
}
}
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister par1IconRegister) {
this.blockIcon = Blocks.glass.getIcon(0, 0);
}
}
@@ -0,0 +1,77 @@
package magicbees.block;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
import magicbees.main.utils.TabMagicBees;
public class BlockEnchantedEarth extends Block {
@SideOnly(Side.CLIENT)
private IIcon top;
public BlockEnchantedEarth() {
super(Material.ground);
setCreativeTab(TabMagicBees.tabMagicBees);
setBlockName("enchantedEarth");
setBlockTextureName(CommonProxy.DOMAIN + ":enchantedEarth");
setTickRandomly(true);
setStepSound(soundTypeGravel);
setHardness(0.1F);
}
@Override
public void updateTick(World world, int x, int y, int z, Random random) {
for (int height = y + 1; height <= 256; ++height) {
Block b = world.getBlock(x, height, z);
if (b == this) {
continue;
} else {
if (b.getTickRandomly()) {
world.scheduleBlockUpdate(x, height, z, b, 0);
}
break;
}
}
if (y < 256 && random.nextInt(2) == 0) {
int newX = x + (random.nextInt(3) - 1);
int newZ = z + (random.nextInt(3) - 1);
int newY = y + 1;
Block b = world.getBlock(newX, newY, newZ);
if (b.getTickRandomly()) {
world.scheduleBlockUpdate(newX, newY, newZ, b, random.nextInt(5) + 1);
}
}
}
@Override
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction,
IPlantable plantable) {
return true;
}
@Override
public IIcon getIcon(int side, int meta) {
if (side == 1) {
return top;
}
return super.getIcon(side, meta);
}
@Override
public void registerBlockIcons(IIconRegister iconRegister) {
top = iconRegister.registerIcon(textureName + "_top");
super.registerBlockIcons(iconRegister);
}
}
@@ -0,0 +1,99 @@
package magicbees.block;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.core.Tabs;
import magicbees.block.types.HiveType;
import magicbees.main.Config;
public class BlockHive extends Block {
public BlockHive() {
super(new MaterialHive());
this.setLightLevel(0.8f);
setHardness(1f);
setCreativeTab(Tabs.tabApiculture);
setBlockName("hive");
}
@Override
public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) {
return false;
}
@Override
public int damageDropped(int meta) {
return meta;
}
@Override
public int getLightValue(IBlockAccess world, int x, int y, int z) {
int meta = world.getBlockMetadata(x, y, z);
if (meta < 0 || meta > HiveType.VALUES.length) {
meta = 0;
}
return HiveType.getHiveFromMeta(meta).getLightValue();
}
@SideOnly(Side.CLIENT)
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void getSubBlocks(Item item, CreativeTabs tab, List itemsList) {
// Java bitches about raw types & types not being checked. Sorry, but the API sucks.
for (HiveType type : HiveType.VALUES) {
if (type.show || Config.forestryDebugEnabled) {
itemsList.add(new ItemStack(this, 1, type.ordinal()));
}
}
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
return HiveType.getHiveFromMeta(metadata).getDrops(world, x, y, z, fortune);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
HiveType.registerIcons(register);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
if (meta < 0 || meta > HiveType.VALUES.length) {
meta = 0;
}
return HiveType.getHiveFromMeta(meta).getIconForSide(side);
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
Block block = world.getBlock(x, y, z);
if (block.isAir(world, x, y, z)) {
return null;
}
Item item = Item.getItemFromBlock(block);
if (item == null) {
return null;
}
return new ItemStack(item, 1, getDamageValue(world, x, y, z) & 7);
}
}
@@ -0,0 +1,112 @@
package magicbees.block;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.client.gui.UIScreens;
import magicbees.main.CommonProxy;
import magicbees.main.MagicBees;
import magicbees.main.utils.TabMagicBees;
import magicbees.tileentity.TileEntityMagicApiary;
public class BlockMagicApiary extends BlockContainer {
@SideOnly(Side.CLIENT)
private IIcon[] icons;
public BlockMagicApiary() {
super(Material.wood);
this.setCreativeTab(TabMagicBees.tabMagicBees);
this.setBlockName("magicApiary");
this.setHardness(1f);
this.setResistance(1.5f);
this.setHarvestLevel("axe", 0);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7,
float par8, float par9) {
boolean activate = false;
if (!player.isSneaking()) {
if (!world.isRemote) {
player.openGui(MagicBees.object, UIScreens.THAUMIC_APIARY.ordinal(), world, x, y, z);
}
activate = true;
}
return activate;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
if (side == 0) {
return icons[0];
} else if (side == 1) {
return icons[1];
} else if (side == 2 || side == 3) {
return icons[2];
} else {
return icons[3];
}
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister register) {
icons = new IIcon[4];
icons[0] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.0");
icons[1] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.1");
icons[2] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.2");
icons[3] = register.registerIcon(CommonProxy.DOMAIN + ":thaumicapiary.4");
}
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
return new TileEntityMagicApiary();
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
TileEntity te = world.getTileEntity(x, y, z);
if (te != null && te instanceof IInventory) {
IInventory inventory = (IInventory) te;
for (int i = 0; i < inventory.getSizeInventory(); i++) {
ItemStack itemStack = inventory.getStackInSlotOnClosing(i);
if (itemStack != null) {
float spawnX = x + world.rand.nextFloat();
float spawnY = y + world.rand.nextFloat();
float spawnZ = z + world.rand.nextFloat();
EntityItem droppedItem = new EntityItem(world, spawnX, spawnY, spawnZ, itemStack);
float mult = 0.05F;
droppedItem.motionX = (-0.5F + world.rand.nextFloat()) * mult;
droppedItem.motionY = (4 + world.rand.nextFloat()) * mult;
droppedItem.motionZ = (-0.5F + world.rand.nextFloat()) * mult;
world.spawnEntityInWorld(droppedItem);
}
}
}
super.breakBlock(world, x, y, z, block, meta);
}
}
@@ -0,0 +1,47 @@
package magicbees.block;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
import magicbees.main.utils.TabMagicBees;
import magicbees.tileentity.TileEntityManaAuraProvider;
public class BlockManaAuraProvider extends Block implements ITileEntityProvider {
@SideOnly(Side.CLIENT)
private IIcon topIcon;
public BlockManaAuraProvider() {
super(Material.rock);
this.setCreativeTab(TabMagicBees.tabMagicBees);
this.setBlockName("manaAuraProvider");
this.setHardness(2f);
this.setResistance(3f);
this.setHarvestLevel("pickaxe", 0);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityManaAuraProvider();
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":manaApiaryBooster0");
this.topIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":manaApiaryBooster1");
}
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return (side == 0 || side == 1) ? this.topIcon : this.blockIcon;
}
}
@@ -0,0 +1,47 @@
package magicbees.block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.init.Blocks;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
import magicbees.main.utils.TabMagicBees;
import magicbees.tileentity.TileEntityVisAuraProvider;
public class BlockVisAuraProvider extends BlockContainer {
public BlockVisAuraProvider() {
super(Material.glass);
this.setCreativeTab(TabMagicBees.tabMagicBees);
this.setBlockName("visAuraProvider");
this.setHardness(0.5f);
this.setResistance(1.5f);
this.setLightLevel(8);
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
return new TileEntityVisAuraProvider();
}
@Override
public int getRenderType() {
return CommonProxy.RenderIdVisAuraProvider;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = Blocks.planks.getIcon(0, 5);
}
}
@@ -0,0 +1,13 @@
package magicbees.block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
public class MaterialHive extends Material {
public MaterialHive() {
super(MapColor.stoneColor);
this.setImmovableMobility();
this.setRequiresTool();
}
}
@@ -0,0 +1,178 @@
package magicbees.block.types;
import java.util.ArrayList;
import java.util.Collections;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.apiculture.IHiveDrop;
import magicbees.bees.BeeGenomeManager;
import magicbees.bees.BeeSpecies;
import magicbees.bees.HiveDrop;
import magicbees.item.types.CombType;
import magicbees.main.CommonProxy;
import magicbees.main.Config;
import magicbees.main.utils.compat.ForestryHelper;
public enum HiveType {
CURIOUS("curious", BeeSpecies.MYSTICAL, 12, true),
UNUSUAL("unusual", BeeSpecies.UNUSUAL, 12, true),
RESONANT("resonant", BeeSpecies.SORCEROUS, 12, true),
DEEP("deep", BeeSpecies.ATTUNED, 4, true),
INFERNAL("infernal", BeeSpecies.INFERNAL, 15, true),
OBLIVION("oblivion", BeeSpecies.OBLIVION, 7, true),;
public static final HiveType[] VALUES = values();
private static String[] nameList;
private String name;
private BeeSpecies occupant;
public boolean show;
private int lightLevel;
private ArrayList<IHiveDrop> drops;
@SideOnly(Side.CLIENT)
private IIcon[] icons;
public static HiveType getHiveFromMeta(int meta) {
HiveType type = CURIOUS;
if (meta > 0 && meta < HiveType.VALUES.length) {
type = HiveType.VALUES[meta];
}
return type;
}
public static void initHiveData() {
ItemStack[] combs = new ItemStack[] { Config.combs.getStackForType(CombType.MUNDANE) };
HiveDrop valiantDrop = new HiveDrop(
BeeGenomeManager.addRainResist(ForestryHelper.getTemplateForestryForSpecies("Valiant")),
combs,
5);
CURIOUS.drops.add(new HiveDrop(BeeSpecies.MYSTICAL.getGenome(), combs, 80).setIgnoblePercentage(0.7f));
CURIOUS.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.MYSTICAL.getGenome()), combs, 15));
CURIOUS.drops.add(valiantDrop);
UNUSUAL.drops.add(new HiveDrop(BeeSpecies.UNUSUAL.getGenome(), combs, 80).setIgnoblePercentage(0.7f));
UNUSUAL.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.UNUSUAL.getGenome()), combs, 15));
UNUSUAL.drops.add(valiantDrop);
RESONANT.drops.add(new HiveDrop(BeeSpecies.SORCEROUS.getGenome(), combs, 80).setIgnoblePercentage(0.7f));
RESONANT.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.SORCEROUS.getGenome()), combs, 20));
RESONANT.drops.add(valiantDrop);
DEEP.drops.add(new HiveDrop(BeeSpecies.ATTUNED.getGenome(), combs, 80).setIgnoblePercentage(0.65f));
DEEP.drops.add(new HiveDrop(BeeGenomeManager.addRainResist(BeeSpecies.ATTUNED.getGenome()), combs, 20));
DEEP.drops.add(valiantDrop);
combs = new ItemStack[] { Config.combs.getStackForType(CombType.MOLTEN),
new ItemStack(Items.glowstone_dust, 6) };
INFERNAL.drops.add(new HiveDrop(BeeSpecies.INFERNAL.getGenome(), combs, 80).setIgnoblePercentage(0.5f));
INFERNAL.drops.add(new HiveDrop(ForestryHelper.getTemplateForestryForSpecies("Steadfast"), combs, 3));
combs = new ItemStack[] { Config.combs.getStackForType(CombType.FORGOTTEN),
new ItemStack(Items.ender_pearl, 1) };
OBLIVION.drops.add(new HiveDrop(BeeSpecies.OBLIVION.getGenome(), combs, 80));
OBLIVION.drops.add(new HiveDrop(ForestryHelper.getTemplateForestryForSpecies("Steadfast"), combs, 9));
}
private HiveType(String hiveName, BeeSpecies occupant, int light, boolean visible) {
this.name = hiveName;
this.occupant = occupant;
this.lightLevel = light;
this.show = visible;
this.drops = new ArrayList<IHiveDrop>();
}
@SideOnly(Side.CLIENT)
public static void registerIcons(IIconRegister register) {
for (HiveType type : HiveType.VALUES) {
type.icons = new IIcon[2];
type.icons[0] = register.registerIcon(CommonProxy.DOMAIN + ":beehive." + type.ordinal() + ".top");
type.icons[1] = register.registerIcon(CommonProxy.DOMAIN + ":beehive." + type.ordinal() + ".side");
}
}
@SideOnly(Side.CLIENT)
public IIcon getIconForSide(int side) {
IIcon i = this.icons[0];
if (side != 0 && side != 1) {
i = this.icons[1];
}
return i;
}
public int getLightValue() {
return this.lightLevel;
}
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int fortune) {
ArrayList<ItemStack> hiveDrops = new ArrayList<ItemStack>();
int dart;
Collections.shuffle(this.drops);
// Get a princess.
int throttle = 0;
while (hiveDrops.size() <= 0 && throttle < 10) {
++throttle;
for (IHiveDrop drop : drops) {
dart = world.rand.nextInt(100);
if (dart <= drop.getChance(world, x, y, z)) {
hiveDrops.add(drop.getPrincess(world, x, y, z, fortune));
break;
}
}
}
// Get a drone, maybe.
for (IHiveDrop drop : drops) {
dart = world.rand.nextInt(100);
if (dart <= drop.getChance(world, x, y, z)) {
hiveDrops.addAll(drop.getDrones(world, x, y, z, fortune));
break;
}
}
// Get additional drops.
for (IHiveDrop drop : drops) {
dart = world.rand.nextInt(100);
if (dart <= drop.getChance(world, x, y, z)) {
hiveDrops.addAll(drop.getAdditional(world, x, y, z, fortune));
}
}
return hiveDrops;
}
public static String[] getAllNames() {
return (nameList == null) ? nameList = generateNames() : nameList;
}
public BeeSpecies getOccupant() {
return this.occupant;
}
private static String[] generateNames() {
String[] names = new String[VALUES.length];
for (int i = 0; i < names.length; ++i) {
names[i] = VALUES[i].name;
}
return names;
}
}
@@ -0,0 +1,38 @@
package magicbees.block.types;
public enum PlankType {
GREATWOOD("greatwood", 48),
SILVERWOOD("silverwood", 49),;
public String name;
public int textureIdx;
private static String[] nameList;
private PlankType(String n, int idx) {
this.name = n;
this.textureIdx = idx;
}
public static PlankType getType(int meta) {
PlankType type = null;
if (meta >= 0 && meta <= values().length) {
type = values()[meta];
}
return type;
}
public static String[] getAllNames() {
return (nameList == null) ? nameList = generateNames() : nameList;
}
private static String[] generateNames() {
String[] names = new String[values().length];
for (int i = 0; i < names.length; ++i) {
names[i] = values()[i].name;
}
return names;
}
}
@@ -0,0 +1,102 @@
package magicbees.client.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.tileentity.TileEntityEffectJar;
public class ContainerEffectJar extends Container {
public TileEntityEffectJar jar;
public int lastBeeHealth = 0;
public int speciesColour = 0xffffff;
public ContainerEffectJar(TileEntityEffectJar tileEntityEffectJar, EntityPlayer player) {
this.jar = tileEntityEffectJar;
this.addSlotToContainer(
new SlotCustomItems(this.jar, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1)));
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 9; ++j) {
this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 74 + i * 18));
}
}
for (int i = 0; i < 9; ++i) {
this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 132));
}
}
@Override
public void addCraftingToCrafters(ICrafting crafting) {
super.addCraftingToCrafters(crafting);
crafting.sendProgressBarUpdate(this, 0, this.jar.currentBeeHealth);
crafting.sendProgressBarUpdate(this, 1, this.jar.currentBeeColour);
}
@Override
public void detectAndSendChanges() {
super.detectAndSendChanges();
for (int i = 0; i < this.crafters.size(); ++i) {
ICrafting crafting = (ICrafting) this.crafters.get(i);
if (this.lastBeeHealth != this.jar.currentBeeHealth) {
crafting.sendProgressBarUpdate(this, 0, this.jar.currentBeeHealth);
this.lastBeeHealth = this.jar.currentBeeHealth;
}
if (this.speciesColour != this.jar.currentBeeColour) {
crafting.sendProgressBarUpdate(this, 1, this.jar.currentBeeColour);
this.speciesColour = this.jar.currentBeeColour;
}
}
}
@Override
@SideOnly(Side.CLIENT)
public void updateProgressBar(int craftingId, int value) {
if (craftingId == 0) {
this.jar.currentBeeHealth = value;
} else if (craftingId == 1) {
this.jar.currentBeeColour = value;
}
}
@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
return this.jar.isUseableByPlayer(entityplayer);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
Slot itemSlot = this.getSlot(slot);
boolean clearSlot = false;
if (itemSlot != null && itemSlot.getHasStack()) {
ItemStack srcStack = itemSlot.getStack();
if (slot == 0 && srcStack != null) {
clearSlot = this.mergeItemStack(srcStack, 1, 36 + 1, false);
} else {
if (this.getSlot(0).isItemValid(srcStack)) {
clearSlot = this.mergeItemStack(srcStack, 0, 1, false);
}
}
}
if (clearSlot) {
itemSlot.putStack(null);
}
itemSlot.onSlotChanged();
player.inventory.markDirty();
return null;
}
}
@@ -0,0 +1,16 @@
package magicbees.client.gui;
import net.minecraft.entity.player.InventoryPlayer;
import cpw.mods.fml.common.registry.GameRegistry;
import forestry.core.gui.ContainerItemInventory;
import magicbees.main.utils.compat.baubles.InventoryBeeRing;
public class ContainerEffectRing extends ContainerItemInventory<InventoryBeeRing> {
public ContainerEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) {
super(inventory, playerInventory, 8, 74);
addSlotToContainer(
new SlotCustomItems(inventory, 0, 80, 22, GameRegistry.findItemStack("Forestry", "beeDroneGE", 1)));
}
}
@@ -0,0 +1,30 @@
package magicbees.client.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
public class ContainerMB extends Container {
protected final int PLAYER_INVENTORY_ROWS = 3;
protected final int PLAYER_INVENTORY_COLUMNS = 9;
public void addPlayerInventory(InventoryPlayer inventoryPlayer, int xStart, int yStart) {
for (int x = 0; x < PLAYER_INVENTORY_COLUMNS; x++) {
addSlotToContainer(
new Slot(inventoryPlayer, x, xStart + 8 + 18 * x, yStart + 4 + PLAYER_INVENTORY_ROWS * 18));
}
for (int y = 0; y < PLAYER_INVENTORY_ROWS; y++) {
for (int x = 0; x < PLAYER_INVENTORY_COLUMNS; x++) {
addSlotToContainer(new Slot(inventoryPlayer, x + y * 9 + 9, xStart + 8 + 18 * x, yStart + y * 18));
}
}
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer) {
return true;
}
}
@@ -0,0 +1,131 @@
package magicbees.client.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.IHiveFrame;
import magicbees.bees.BeeManager;
import magicbees.main.utils.ItemInterface;
import magicbees.tileentity.TileEntityMagicApiary;
public class ContainerMagicApiary extends ContainerMB {
public TileEntityMagicApiary apiary;
public int maxSlot = 0;
// Constants
private static final int SLOT_QUEEN = 0;
private static final int SLOT_DRONE = 1;
private static final int SLOT_FRAME_START = 2;
private static final int SLOT_INVENTORY_START = 5;
private static final int SLOT_FRAME_COUNT = 3;
private static final int SLOT_INVENTORY_COUNT = 7;
public ContainerMagicApiary(InventoryPlayer inventoryPlayer, TileEntityMagicApiary thaumicApiary) {
this.apiary = thaumicApiary;
// Queen/Princess slot
addSlotToContainer(
new SlotCustomItems(
this.apiary,
0,
29,
39,
ItemInterface.getItemStack("Forestry", "beeQueenGE", 1),
ItemInterface.getItemStack("Forestry", "beePrincessGE", 1)));
// Drone slot
addSlotToContainer(
new SlotCustomItems(this.apiary, 1, 29, 65, ItemInterface.getItemStack("Forestry", "beeDroneGE", 64)));
int currentSlot = 1;
// Frame slots
for (int x = 0; x < 3; x++) {
currentSlot++;
addSlotToContainer(new SlotFrame(thaumicApiary, currentSlot, 66, 23 + x * 29));
// LogHelper.info("[1] CURRENTSLOT: " + currentSlot);
}
for (int x = 0; x < 3; x++) {
currentSlot++;
addSlotToContainer(new Slot(thaumicApiary, currentSlot, 116, 26 + x * 26));
// LogHelper.info("[2] CURRENTSLOT: " + currentSlot);
}
int j = 0;
for (int y = 0; y < 2; y++) {
for (int x = 0; x < 2; x++) {
currentSlot++;
addSlotToContainer(new Slot(thaumicApiary, currentSlot, 95 + x * 42, 39 + j * 26));
// LogHelper.info("[3] CURRENTSLOT: " + currentSlot);
}
j++;
}
addPlayerInventory(inventoryPlayer, 0, 110);
maxSlot = currentSlot;
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
Slot itemSlot = this.getSlot(slotIndex);
boolean clearSlot = false;
if (itemSlot != null && itemSlot.getHasStack()) {
ItemStack srcStack = itemSlot.getStack();
if (slotIndex <= maxSlot && srcStack != null) {
clearSlot = this.mergeItemStack(srcStack, maxSlot + 1, maxSlot + 36, false);
} else {
if (slotIndex > maxSlot && srcStack != null) {
if (BeeManager.beeRoot.isMember(srcStack)) {
if (!BeeManager.beeRoot.isDrone(srcStack)) {
if (this.getSlot(SLOT_QUEEN).getHasStack() == false) {
clearSlot = this.mergeItemStack(srcStack, SLOT_QUEEN, SLOT_QUEEN + 1, false);
}
} else {
if (this.getSlot(SLOT_DRONE).isItemValid(srcStack)) {
clearSlot = this.mergeItemStack(srcStack, SLOT_DRONE, SLOT_DRONE + 1, false);
}
}
} else if (srcStack.getItem() instanceof IHiveFrame) {
clearSlot = this
.mergeItemStack(srcStack, SLOT_FRAME_START, SLOT_FRAME_START + SLOT_FRAME_COUNT, false);
}
}
}
}
if (clearSlot) {
itemSlot.putStack(null);
}
itemSlot.onSlotChanged();
player.inventory.markDirty();
return null;
}
@Override
public boolean canInteractWith(EntityPlayer entityPlayer) {
return apiary.isUseableByPlayer(entityPlayer);
}
@Override
public void updateProgressBar(int i, int j) {
apiary.getGUINetworkData(i, j);
}
@Override
public void detectAndSendChanges() {
super.detectAndSendChanges();
for (Object crafter : crafters) {
apiary.sendGUINetworkData(this, (ICrafting) crafter);
}
}
}
@@ -0,0 +1,67 @@
package magicbees.client.gui;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL11;
import magicbees.main.CommonProxy;
import magicbees.tileentity.TileEntityEffectJar;
public class GUIEffectJar extends GuiContainer {
public static final String BACKGROUND_FILE = "jarScreen.png";
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.GUI_TEXTURE + "jarScreen.png");
private static final int WIDTH = 176;
private static final int HEIGHT = 156;
private static final int BAR_DEST_X = 117;
private static final int BAR_DEST_Y = 10;
private static final int BAR_SRC_X = 176;
private static final int BAR_SRC_Y = 0;
private static final int BAR_WIDTH = 10;
private static final int BAR_HEIGHT = 40;
public GUIEffectJar(TileEntityEffectJar jar, EntityPlayer player) {
super(new ContainerEffectJar(jar, player));
this.xSize = WIDTH;
this.ySize = HEIGHT;
}
@Override
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 9, 63, 0);
}
@Override
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
GL11.glColor4f(1f, 1f, 1f, 1f);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_SRC_ALPHA);
this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION);
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize);
TileEntityEffectJar jar = ((ContainerEffectJar) this.inventorySlots).jar;
float r = ((jar.currentBeeColour >> 16) & 255) / 255f;
float g = ((jar.currentBeeColour >> 8) & 255) / 255f;
float b = (jar.currentBeeColour & 255) / 255f;
GL11.glColor3f(r, g, b);
int value = BAR_HEIGHT - (jar.currentBeeHealth * BAR_HEIGHT) / 100;
this.drawTexturedModalRect(
this.guiLeft + BAR_DEST_X,
this.guiTop + value + BAR_DEST_Y,
BAR_SRC_X,
BAR_SRC_Y,
BAR_WIDTH,
BAR_HEIGHT - value);
}
}
@@ -0,0 +1,62 @@
package magicbees.client.gui;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import forestry.core.gui.GuiForestry;
import magicbees.main.CommonProxy;
import magicbees.main.utils.compat.baubles.InventoryBeeRing;
public class GUIEffectRing extends GuiForestry<ContainerEffectRing, IInventory> {
public static final String BACKGROUND_FILE = "ringScreen.png";
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.GUI_TEXTURE + BACKGROUND_FILE);
private static final int BAR_DEST_X = 117;
private static final int BAR_DEST_Y = 10;
private static final int BAR_SRC_X = 176;
private static final int BAR_SRC_Y = 0;
private static final int BAR_WIDTH = 10;
private static final int BAR_HEIGHT = 40;
private final InventoryBeeRing inventoryBeeRing;
protected GUIEffectRing(InventoryBeeRing inventory, InventoryPlayer playerInventory) {
super(BACKGROUND_LOCATION, new ContainerEffectRing(inventory, playerInventory), inventory);
this.inventoryBeeRing = inventory;
}
@Override
protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glColor4f(1f, 1f, 1f, 1f);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_SRC_ALPHA);
this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION);
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize);
int currentBeeColour = this.inventoryBeeRing.getCurrentBeeColour();
float r = ((currentBeeColour >> 16) & 255) / 255f;
float g = ((currentBeeColour >> 8) & 255) / 255f;
float b = (currentBeeColour & 255) / 255f;
GL11.glColor3f(r, g, b);
int value = BAR_HEIGHT - (this.inventoryBeeRing.getCurrentBeeHealth() * BAR_HEIGHT) / 100;
this.drawTexturedModalRect(
this.guiLeft + BAR_DEST_X,
this.guiTop + value + BAR_DEST_Y,
BAR_SRC_X,
BAR_SRC_Y,
BAR_WIDTH,
BAR_HEIGHT - value);
}
}
@@ -0,0 +1,41 @@
package magicbees.client.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import cpw.mods.fml.common.network.IGuiHandler;
import magicbees.main.utils.compat.baubles.InventoryBeeRing;
import magicbees.tileentity.TileEntityEffectJar;
import magicbees.tileentity.TileEntityMagicApiary;
public class GUIHandler implements IGuiHandler {
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
Object value = null;
if (ID == UIScreens.EFFECT_JAR.ordinal()) {
value = new ContainerEffectJar((TileEntityEffectJar) world.getTileEntity(x, y, z), player);
} else if (ID == UIScreens.THAUMIC_APIARY.ordinal()) {
TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z);
value = new ContainerMagicApiary(player.inventory, tileEntityThaumicApiary);
} else if (ID == UIScreens.EFFECT_RING.ordinal()) {
value = new ContainerEffectRing(new InventoryBeeRing(player.getHeldItem(), player), player.inventory);
}
return value;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
if (ID == UIScreens.EFFECT_JAR.ordinal()) {
return new GUIEffectJar((TileEntityEffectJar) world.getTileEntity(x, y, z), player);
} else if (ID == UIScreens.THAUMIC_APIARY.ordinal()) {
TileEntityMagicApiary tileEntityThaumicApiary = (TileEntityMagicApiary) world.getTileEntity(x, y, z);
return new GuiMagicApiary(player.inventory, tileEntityThaumicApiary);
} else if (ID == UIScreens.EFFECT_RING.ordinal()) {
return new GUIEffectRing(new InventoryBeeRing(player.getHeldItem(), player), player.inventory);
}
return null;
}
}
@@ -0,0 +1,29 @@
package magicbees.client.gui;
import java.util.Set;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import cpw.mods.fml.client.IModGuiFactory;
public class GuiFactory implements IModGuiFactory {
@Override
public void initialize(Minecraft minecraftInstance) {}
@Override
public Class<? extends GuiScreen> mainConfigGuiClass() {
return ModGuiConfig.class;
}
@Override
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() {
return null;
}
@Override
public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) {
return null;
}
}
@@ -0,0 +1,158 @@
package magicbees.client.gui;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
import magicbees.tileentity.TileEntityMagicApiary;
@SideOnly(Side.CLIENT)
public class GuiMagicApiary extends GuiContainer {
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.GUI_TEXTURE + "apiary.png");
private static final int WIDTH = 176;
private static final int HEIGHT = 192;
private static final int LIFEBAR_WIDTH = 2;
private static final int LIFEBAR_HEIGHT = 46;
private static final int LIFEBAR_DEST_X = 21;
private static final int LIFEBAR_DEST_Y = 37;
private static final int LIFEBAR_SRC_Y = 0;
private static final int LIFEBAR_SRC_STAGE1_X = 184;
private static final int LIFEBAR_SRC_STAGE2_X = 182;
private static final int LIFEBAR_SRC_STAGE3_X = 180;
private static final int LIFEBAR_SRC_STAGE4_X = 178;
private static final int LIFEBAR_SRC_STAGE5_X = 176;
private static final int WORKBOOST_WIDTH = 16;
private static final int WORKBOOST_HEIGHT = 12;
private static final int WORKBOOST_DEST_X = 37;
private static final int WORKBOOST_DEST_Y = 18;
private static final int WORKBOOST_SRC_X = 176;
private static final int WORKBOOST_SRC_Y = 46;
private static final int DEATHBOOST_WIDTH = 11;
private static final int DEATHBOOST_HEIGHT = 13;
private static final int DEATHBOOST_DEST_X = 25;
private static final int DEATHBOOST_DEST_Y = 17;
private static final int DEATHBOOST_SRC_X = 176;
private static final int DEATHBOOST_SRC_Y = 58;
private static final int MUTATIONBOOST_WIDTH = 9;
private static final int MUTATIONBOOST_HEIGHT = 13;
private static final int MUTATIONBOOST_DEST_X = 15;
private static final int MUTATIONBOOST_DEST_Y = 17;
private static final int MUTATIONBOOST_SRC_X = 176;
private static final int MUTATIONBOOST_SRC_Y = 71;
private GuiButton mutationButton;
public GuiMagicApiary(InventoryPlayer inventoryPlayer, TileEntityMagicApiary thaumicApiary) {
super(new ContainerMagicApiary(inventoryPlayer, thaumicApiary));
this.xSize = WIDTH;
this.ySize = HEIGHT;
}
@Override
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 9, 99, 0);
}
@Override
protected void drawGuiContainerBackgroundLayer(float opacity, int x, int y) {
GL11.glColor4f(1, 1, 1, 1);
this.mc.getTextureManager().bindTexture(BACKGROUND_LOCATION);
this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
TileEntityMagicApiary apiary = ((ContainerMagicApiary) this.inventorySlots).apiary;
drawLifebar(apiary);
drawWorkBoostIcon(apiary);
drawDeathRateIcon(apiary);
drawMutationIcon(apiary);
}
private void drawMutationIcon(TileEntityMagicApiary apiary) {
if (apiary.isMutationBoosted()) {
this.drawTexturedModalRect(
this.guiLeft + MUTATIONBOOST_DEST_X,
this.guiTop + MUTATIONBOOST_DEST_Y,
MUTATIONBOOST_SRC_X,
MUTATIONBOOST_SRC_Y,
MUTATIONBOOST_WIDTH,
MUTATIONBOOST_HEIGHT);
}
}
private void drawDeathRateIcon(TileEntityMagicApiary apiary) {
if (apiary.isDeathRateBoosted()) {
this.drawTexturedModalRect(
this.guiLeft + DEATHBOOST_DEST_X,
this.guiTop + DEATHBOOST_DEST_Y,
DEATHBOOST_SRC_X,
DEATHBOOST_SRC_Y,
DEATHBOOST_WIDTH,
DEATHBOOST_HEIGHT);
}
}
private void drawWorkBoostIcon(TileEntityMagicApiary apiary) {
if (apiary.isProductionBoosted()) {
this.drawTexturedModalRect(
this.guiLeft + WORKBOOST_DEST_X,
this.guiTop + WORKBOOST_DEST_Y,
WORKBOOST_SRC_X,
WORKBOOST_SRC_Y,
WORKBOOST_WIDTH,
WORKBOOST_HEIGHT);
}
}
private void drawLifebar(TileEntityMagicApiary apiary) {
int value = LIFEBAR_HEIGHT - apiary.getHealthScaled(LIFEBAR_HEIGHT);
int lifebarSrc = getLifebarSrc(apiary);
this.drawTexturedModalRect(
this.guiLeft + LIFEBAR_DEST_X,
this.guiTop + value + LIFEBAR_DEST_Y,
lifebarSrc,
LIFEBAR_SRC_Y,
LIFEBAR_WIDTH,
LIFEBAR_HEIGHT - value);
}
private int getLifebarSrc(TileEntityMagicApiary apiary) {
int value = apiary.getHealthScaled(5);
if (value >= 5) {
return LIFEBAR_SRC_STAGE1_X;
} else if (value >= 4) {
return LIFEBAR_SRC_STAGE2_X;
} else if (value >= 3) {
return LIFEBAR_SRC_STAGE3_X;
} else if (value >= 2) {
return LIFEBAR_SRC_STAGE4_X;
} else {
return LIFEBAR_SRC_STAGE5_X;
}
}
@Override
protected void mouseClicked(int p_73864_1_, int p_73864_2_, int p_73864_3_) {
// TODO Auto-generated method stub
super.mouseClicked(p_73864_1_, p_73864_2_, p_73864_3_);
}
}
@@ -0,0 +1,44 @@
package magicbees.client.gui;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.common.config.ConfigElement;
import cpw.mods.fml.client.config.DummyConfigElement;
import cpw.mods.fml.client.config.GuiConfig;
import cpw.mods.fml.client.config.IConfigElement;
import magicbees.main.Config;
import magicbees.main.utils.VersionInfo;
public class ModGuiConfig extends GuiConfig {
public ModGuiConfig(GuiScreen guiScreen) {
super(
guiScreen,
configElements(),
VersionInfo.ModName,
false,
false,
GuiConfig.getAbridgedConfigPath(Config.configuration.toString()));
}
private static List<IConfigElement> configElements() {
List<IConfigElement> list = new ArrayList<IConfigElement>();
list.add(categoryElement(Config.CATEGORY_GENERAL, "General", "magicbees.config.category.general"));
list.add(categoryElement(Config.CATEGORY_DEBUG, "Debug", "magicbees.config.category.debug"));
list.add(categoryElement(Config.CATEGORY_MODULES, "Modules", "magicbees.config.category.modules"));
list.add(categoryElement(Config.CATEGORY_BOTANIA, "Botania Plugin", "magicbees.config.category.botania"));
return list;
}
private static IConfigElement categoryElement(String category, String name, String tooltip_key) {
return new DummyConfigElement.DummyCategoryElement(
name,
tooltip_key,
new ConfigElement(Config.configuration.getCategory(category)).getChildElements());
}
}
@@ -0,0 +1,82 @@
package magicbees.client.gui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
/**
* @author MysteriousAges
*/
public class SlotCustomItems extends Slot {
private List<ItemStack> items;
public SlotCustomItems(IInventory inventory, int slotIndex, int xPos, int yPos, ItemStack... items) {
super(inventory, slotIndex, xPos, yPos);
this.items = new ArrayList<ItemStack>(items.length);
Collections.addAll(this.items, items);
}
/**
* @return List of valid ItemStacks
*/
public List<ItemStack> getValidItems() {
return this.items;
}
public void addValidItem(ItemStack newItem) {
boolean contains = false;
for (int i = 0; i < this.items.size(); ++i) {
ItemStack s = this.items.get(i);
if (s.getItem() == newItem.getItem()) {
if (s.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
contains = true;
break;
} else if (s.getItemDamage() == newItem.getItemDamage()) {
contains = true;
break;
}
}
}
if (!contains) {
this.items.add(newItem);
}
}
/**
* @param removeItem ItemStack to remove.
*/
public void removeValidItem(ItemStack removeItem) {
for (int i = 0; i < this.items.size(); ++i) {
ItemStack s = this.items.get(i);
if (s.getItem() == removeItem.getItem()) {
if (s.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
this.items.remove(i);
break;
} else if (s.getItemDamage() == removeItem.getItemDamage()) {
this.items.remove(i);
break;
}
}
}
}
@Override
public boolean isItemValid(ItemStack itemStack) {
for (ItemStack item : this.items) {
if (item != null && item.getItem() == itemStack.getItem()) {
if (item.getItemDamage() == itemStack.getItemDamage()
|| item.getItemDamage() == OreDictionary.WILDCARD_VALUE) {
return true;
}
}
}
return false;
}
}
@@ -0,0 +1,31 @@
package magicbees.client.gui;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.IHiveFrame;
public class SlotFrame extends SlotCustomItems {
public SlotFrame(IInventory inventory, int slotIndex, int xPos, int yPos) {
super(inventory, slotIndex, xPos, yPos);
}
@Override
public boolean isItemValid(ItemStack itemStack) {
if (itemStack == null) {
return false;
}
if (!inventory.isItemValidForSlot(getSlotIndex(), itemStack)) {
return false;
}
boolean flag = false;
if (itemStack.getItem() instanceof IHiveFrame) {
flag = true;
}
return flag;
}
}
@@ -0,0 +1,7 @@
package magicbees.client.gui;
public enum UIScreens {
EFFECT_JAR,
THAUMIC_APIARY,
EFFECT_RING
}
@@ -0,0 +1,42 @@
package magicbees.client.model;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
@SideOnly(Side.CLIENT)
public class ModelEffectJar {
public static final ResourceLocation objFile = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.MODEL + "effectJar.obj");
public static final ResourceLocation textureLocation = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.MODEL + "jarTexture.png");
public static final ModelEffectJar model = new ModelEffectJar();
private IModelCustom effectJarObj;
public ModelEffectJar() {
this.effectJarObj = AdvancedModelLoader.loadModel(objFile);
}
public void render() {
this.effectJarObj.renderPart("jarLid");
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
this.effectJarObj.renderPart("jarBase");
GL11.glPopAttrib();
}
}
@@ -0,0 +1,49 @@
package magicbees.client.model;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.main.CommonProxy;
@SideOnly(Side.CLIENT)
public class ModelVisAuraProvider {
public static final ResourceLocation objFile = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.MODEL + "visAuraConverter.obj");
public static final ResourceLocation textureLocation = new ResourceLocation(
CommonProxy.DOMAIN,
CommonProxy.MODEL + "visAuraProvider.png");
public static final ModelVisAuraProvider model = new ModelVisAuraProvider();
private IModelCustom visAuraProviderObj;
public ModelVisAuraProvider() {
this.visAuraProviderObj = AdvancedModelLoader.loadModel(objFile);
}
public void render(long tick) {
GL11.glPushMatrix();
GL11.glRotated(Math.sin(tick * Math.PI * 2 / 80) * 0.7, 0, 1, 0);
GL11.glRotated(Math.sin((tick + 25) * Math.PI * 2 / 150) * 0.75, 0.5, 0, 0.5);
GL11.glTranslated(
Math.sin(tick * Math.PI * 2 / 1000) * 0.025,
0,
Math.sin((tick + 30) * Math.PI * 2 / 650) * 0.03);
float red = (float) (Math.sin(tick * Math.PI * 2 / 130) * 0.2 + 0.8);
float green = (float) (Math.cos((tick + 2) * Math.PI * 2 / 140) * 0.2 + 0.8);
float blue = (float) (Math.sin((tick + 5) * Math.PI * 2 / 99) * 0.2 + 0.8);
GL11.glColor3f(red, green, blue);
this.visAuraProviderObj.renderPart("centre");
GL11.glPopMatrix();
GL11.glColor3f(1f, 1f, 1f);
this.visAuraProviderObj.renderPart("frame");
}
}
@@ -0,0 +1,71 @@
package magicbees.client.render;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.client.FMLClientHandler;
import magicbees.client.model.ModelEffectJar;
import magicbees.tileentity.TileEntityEffectJar;
public class RendererEffectJar extends TileEntitySpecialRenderer implements IItemRenderer {
public static RendererEffectJar instance = new RendererEffectJar();
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float tick) {
if (tileEntity instanceof TileEntityEffectJar) {
this.doRender(x, y, z, 1f);
}
}
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
return true;
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return true;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
switch (type) {
default:
case ENTITY:
doRender(0, 0, 0, 1.8f);
break;
case EQUIPPED:
doRender(0, 0, 0, 1.5f);
break;
case EQUIPPED_FIRST_PERSON:
doRender(-.5, .5, 0.25, 1f);
break;
case INVENTORY:
doRender(0.3, 0.25, 0.3, 1.5f);
break;
}
}
private void doRender(double x, double y, double z, float scale) {
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glScaled(scale, scale, scale);
GL11.glTranslated(x, y, z);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelEffectJar.textureLocation);
ModelEffectJar.model.render();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopMatrix();
}
}
@@ -0,0 +1,50 @@
package magicbees.client.render;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.client.FMLClientHandler;
import magicbees.client.model.ModelVisAuraProvider;
import magicbees.tileentity.TileEntityVisAuraProvider;
public class RendererVisAuraProvider extends TileEntitySpecialRenderer implements IItemRenderer {
public static RendererVisAuraProvider instance = new RendererVisAuraProvider();
@Override
public void renderTileEntityAt(TileEntity entity, double x, double y, double z, float tick) {
if (entity instanceof TileEntityVisAuraProvider) {
this.doRender(x, y, z, 1f, entity.getWorldObj().getTotalWorldTime());
}
}
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
return true;
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return true;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
doRender(0, 0, 0, 1f, 0);
}
private void doRender(double x, double y, double z, float scale, long tick) {
GL11.glPushMatrix();
GL11.glScaled(scale, scale, scale);
GL11.glTranslated(x, y, z);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(ModelVisAuraProvider.textureLocation);
ModelVisAuraProvider.model.render(tick);
GL11.glPopMatrix();
}
}
@@ -0,0 +1,92 @@
package magicbees.item;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import magicbees.item.types.CapsuleType;
import magicbees.item.types.FluidType;
import magicbees.main.CommonProxy;
import magicbees.main.utils.TabMagicBees;
public class ItemCapsule extends Item {
private CapsuleType capsuleType;
public ItemCapsule(CapsuleType type, int maxStackSize) {
super();
this.capsuleType = type;
this.setCreativeTab(TabMagicBees.tabMagicBees);
this.setHasSubtypes(true);
this.setMaxStackSize(maxStackSize);
this.setUnlocalizedName("capsule." + type.toString().toLowerCase());
GameRegistry.registerItem(this, "capsule." + type.toString().toLowerCase());
}
public CapsuleType getType() {
return this.capsuleType;
}
@Override
public String getItemStackDisplayName(ItemStack itemStack) {
return String.format(
this.capsuleType.getLocalizedName(),
FluidType.VALUES[itemStack.getItemDamage()].getDisplayName());
}
public ItemStack getCapsuleForLiquid(FluidType l) {
return new ItemStack(this, 1, l.ordinal());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List itemList) {
for (FluidType l : FluidType.VALUES) {
if (l.available) {
itemList.add(new ItemStack(this, 1, l.ordinal()));
}
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {
return true;
}
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconRegister) {
this.itemIcon = iconRegister.registerIcon(
CommonProxy.DOMAIN + ":capsule"
+ this.capsuleType.getName().substring(0, 1).toUpperCase()
+ this.capsuleType.getName().substring(1));
for (FluidType t : FluidType.VALUES) {
if (t != FluidType.EMPTY) {
t.liquidIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":liquids/" + t.liquidID);
}
}
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamageForRenderPass(int metadata, int pass) {
IIcon i = this.itemIcon;
if (metadata != 0 && pass == 0) {
i = FluidType.VALUES[metadata % FluidType.VALUES.length].liquidIcon;
}
return i;
}
@Override
public int getRenderPasses(int metadata) {
return (metadata == 0) ? 1 : 2;
}
}
@@ -0,0 +1,98 @@
package magicbees.item;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.core.Tabs;
import magicbees.item.types.CombType;
import magicbees.main.Config;
import magicbees.main.utils.compat.ForestryHelper;
public class ItemComb extends Item {
public ItemComb() {
super();
this.setCreativeTab(Tabs.tabApiculture);
this.setHasSubtypes(true);
this.setUnlocalizedName("comb");
GameRegistry.registerItem(this, "comb");
}
public ItemStack getStackForType(CombType type) {
return new ItemStack(this, 1, type.ordinal());
}
public ItemStack getStackForType(CombType type, int count) {
return new ItemStack(this, count, type.ordinal());
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tabs, List list) {
for (CombType type : CombType.VALUES) {
if (type.showInList || Config.forestryDebugEnabled) {
list.add(this.getStackForType(type));
}
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {
return true;
}
@Override
public int getRenderPasses(int meta) {
return 2;
}
@SideOnly(Side.CLIENT)
private IIcon secondIcon;
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister par1IconRegister) {
this.itemIcon = par1IconRegister.registerIcon(ForestryHelper.Name.toLowerCase() + ":beeCombs.0");
this.secondIcon = par1IconRegister.registerIcon(ForestryHelper.Name.toLowerCase() + ":beeCombs.1");
}
@Override
public IIcon getIcon(ItemStack stack, int pass) {
return (pass == 0) ? itemIcon : secondIcon;
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass) {
int meta = Math.max(0, Math.min(CombType.VALUES.length - 1, stack.getItemDamage()));
int colour = CombType.VALUES[meta].getColours()[0];
if (pass >= 1) {
colour = CombType.VALUES[meta].getColours()[1];
}
return colour;
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
return CombType.VALUES[stack.getItemDamage()].getName();
}
@Override
public int getDamage(ItemStack stack) {
if (CombType.VALUES.length < super.getDamage(stack)) {
stack.setItemDamage(0);
}
return super.getDamage(stack);
}
}
Loaded 100 of 409 files, more files were not shown because too many files have changed in this diff. Show more