Compare commits

..
456 Commits
Author SHA1 Message Date
mezz 6ad9c979d6 Refactor Binnie's mods into separate modules (#260) 2017-08-11 22:52:39 -07:00
Nedelosk cd82361a39 Clean Up ModuleManager and remove unused parameter 2017-08-09 23:44:26 +02:00
mezz a502020e47 Fix #253 Additional fixes for game crashes when you open GUI on some blocks 2017-08-08 22:31:00 -07:00
mezz a9a2db67f4 Remove some dead code that is not related to unfinished features 2017-08-08 22:30:59 -07:00
mezz 5b1250ce8a Use lambdas for event handlers 2017-08-08 22:30:59 -07:00
mezz 6668392bd7 Fix bug with ceramic brick in debug world 2017-08-08 22:30:58 -07:00
mezz d3a93abb25 Cleanup 2017-08-08 22:30:50 -07:00
Nedelosk 8a2f686264 Fix #254 Mod Modules are not disabled if the mod is disabled 2017-08-08 16:53:06 +02:00
Nedelosk 2eca542f87 Refactoring Extra Tree Modules 2017-08-08 16:10:35 +02:00
Nedelosk 4421d2ce44 Refactoring Extra Tree Modules 2017-08-08 15:20:44 +02:00
mezz 78b98f07db Fix #253 Game crashes when you open GUI on some blocks 2017-08-07 21:37:31 -07:00
Nedelosk ad20fa2ffc Fix #252 Server startup Crash 2017-08-07 16:56:17 +02:00
Nedelosk b18c195aa9 Refactoring Botany Modules and Fix #252 2017-08-07 16:53:13 +02:00
mezz e2a49158f3 Update to 1.12 2017-08-06 19:41:48 -07:00
Nedelosk 235dfca751 Improve Modules 2017-08-06 23:19:40 +02:00
Nedelosk cb81d0ead4 Fix #246 Gene Database Issue 2017-08-04 22:12:08 +02:00
Nedelosk 21728bcab1 Add CraftTweaker Support for Extra Trees Machines 2017-08-04 21:21:52 +02:00
Nedelosk dbdb5478c2 Clean Up Flowers 2017-08-04 13:10:34 +02:00
Nedelosk 46c5b95d82 Remove FieldsAreNonnullByDefault Annotation from the api 2017-08-03 23:19:53 +02:00
Nedelosk e6547caacc Create Distillery and Fruit Press Recipe Api 2017-08-03 21:10:23 +02:00
Nedelosk f7b1805e95 Create Lumbermill Recipe Api 2017-08-03 19:54:47 +02:00
Nedelosk 123b47f038 Create Brewery Recipe Api 2017-08-03 19:09:40 +02:00
Nedelosk c96ab68f19 Fix Refresh Packet 2017-08-03 14:48:54 +02:00
Nedelosk 35d6304a96 Clean Up Biology Page 2017-08-02 18:22:47 +02:00
Nedelosk 8f69af62f8 Clean Up Fence Model 2017-08-02 16:50:31 +02:00
Nedelosk d2b14b6320 Fix #236 Extra Bees config incorrectly located and clean up honey combs 2017-08-02 16:36:49 +02:00
Nedelosk 65431e73d4 Clean Up Flower 2017-08-02 15:42:10 +02:00
Nedelosk fa4a5b0a17 Clean Up Flower TileEntity 2017-08-02 03:37:05 +02:00
Nedelosk 714ba830d7 Fix Analyst Window 2017-08-02 03:13:41 +02:00
Nedelosk ed3cfe12a1 Clean Up Analyst Window 2017-08-02 03:05:45 +02:00
Nedelosk d2a9e62cb2 Clean Up Mutation Page 2017-08-02 02:41:39 +02:00
Nedelosk cbfb25647a Clean Up Bee Effects 2017-08-02 01:39:55 +02:00
Nedelosk 6587200dd3 Fix NPE 2017-08-01 23:59:46 +02:00
Nedelosk b488570a5f Fix some Refactoring Fails 2017-08-01 23:37:26 +02:00
Nedelosk 40a1c94a86 Clean Up more Widget Code 2017-08-01 22:40:43 +02:00
Nedelosk 79c303b12d Fix Extra Trees error code 2017-08-01 17:03:32 +02:00
Nedelosk 065d795622 Refactoring some Gui Classes 2017-08-01 16:57:04 +02:00
Nedelosk 2b54db9342 Fix tolerance allele 2017-08-01 15:11:06 +02:00
Nedelosk 8f8e497f58 Clean Genesis Class 2017-08-01 14:32:41 +02:00
Nedelosk 34fda5ddd1 Clean Up More Gui Classes 2017-08-01 14:18:10 +02:00
Nedelosk ab1a2eeb89 Clean Up Point Code 2017-08-01 12:16:01 +02:00
Nedelosk 5c40de2eba Rename Widget some Methods 2017-08-01 12:08:46 +02:00
Nedelosk b0503fe523 Rename Widget some Methods 2017-08-01 00:43:43 +02:00
Nedelosk 3e3c9c30a4 Start Clean Up Gui 2017-08-01 00:37:15 +02:00
Nedelosk 1b338efca9 Fix machine fx rendering and add item cloning 2017-07-31 23:42:16 +02:00
Nedelosk ddc9764a23 Fix item rendering 2017-07-31 21:54:39 +02:00
Nedelosk f23e28deaf Fix Field Kit Animation 2017-07-31 20:32:12 +02:00
Nedelosk afb9a62686 Fix #235 Field Kit GUI missing 2017-07-31 20:09:58 +02:00
Nedelosk 79a49341e9 Fix Error States on Server 2017-07-31 16:36:57 +02:00
Nedelosk 5a93a3d0a9 Fix Extra Trees Machine Localisation 2017-07-31 16:05:52 +02:00
Nedelosk 2afb3c52f3 Improve Extra Trees Machine Localisation 2017-07-31 16:01:07 +02:00
Nedelosk cbe86e814f Fix #160 Ceramic Brick Block Meta 2017-07-31 13:32:58 +02:00
Nedelosk c5f2368e1d Move Botany Gardening Items 2017-07-31 12:27:36 +02:00
Nedelosk 7e4e518d7b Localise Analyst Title and Description 2017-07-31 12:14:16 +02:00
Nedelosk 21aa0c43a6 Clean Up Gui 2017-07-31 12:09:50 +02:00
Nedelosk 724c3d1fbd Fix item wrong lang key 2017-07-31 10:45:34 +02:00
Nedelosk 6c3d7d3bb0 Fix item rendering 2017-07-31 01:37:04 +02:00
Nedelosk afb9460ff9 Clean Up 2017-07-31 01:28:14 +02:00
Nedelosk 687c440c69 Change IAllele.getName() to IAllele.getAlleleName() 2017-07-30 23:40:19 +02:00
Nedelosk 1b722df37a More localisation 2017-07-30 23:34:07 +02:00
Nedelosk dcdf4b1cac Clean Up and Move some classes 2017-07-30 22:31:16 +02:00
Nedelosk 705581b9ac Fix #210 Database missed description 2017-07-30 22:04:25 +02:00
Nedelosk 2a451bc72e Fix item slot rendering 2017-07-30 21:01:59 +02:00
Nedelosk faf2b88ed8 Fix some bugs 2017-07-30 20:25:33 +02:00
Nedelosk fcef87b3da Fix #234 Analyst Eating Items 2017-07-30 19:58:20 +02:00
Nedelosk fcbbd06c63 Fix Mod Support and Fix #208 Added Tech Reborn Support 2017-07-30 19:17:54 +02:00
Nedelosk 1b3b452900 Refactoring bee species 2017-07-30 16:23:27 +02:00
Alexander Kornilov 0726954433 Feature/lang Simplify en_GB and add missing keys (#220) 2017-07-29 15:09:54 -07:00
Nedelosk 6ff11f4eea Fix jenkins link 2017-07-29 23:57:33 +02:00
Nedelosk 03eaa2510c Update README.md 2017-07-29 23:55:03 +02:00
Nedelosk a3103bce5e Update README.md 2017-07-29 23:44:46 +02:00
Nedelosk a9030ef60b Update README.md 2017-07-29 23:37:27 +02:00
Nedelosk 4062adee6c Fix possible NPE 2017-07-29 23:23:25 +02:00
Nedelosk 2ca2cef6a2 Merge remote-tracking branch 'origin/master-MC1.11.2' into master-MC1.11.2 2017-07-29 23:21:17 +02:00
Nedelosk 95dca83465 Fix #232 2017-07-29 23:21:02 +02:00
mezz f977a29ad6 Fix mcmod.info 2017-07-29 12:25:23 -07:00
Nedelosk 68ed8a1511 Fix #229 Game Crash from looking at wood in JEI 2017-07-29 21:07:41 +02:00
Nedelosk c9d3001b47 Merge remote-tracking branch 'origin/master-MC1.11.2' into master-MC1.11.2 2017-07-29 21:01:07 +02:00
Nedelosk 75c875868a Fix #230 Crash when opening a diamond compartment 2017-07-29 21:00:50 +02:00
mezz c51a9273f9 Fix gradle 2017-07-28 22:38:29 -07:00
mezz 4edd2e9d5d Update mcmodinfo 2017-07-28 22:11:49 -07:00
mezz bc310023df Fix version number in filename 2017-07-28 21:48:22 -07:00
mezz 703e99e916 Bump version for first 1.11.2 release 2017-07-28 21:47:08 -07:00
mezz f73667c173 Fix grade git changelog 2017-07-28 21:38:27 -07:00
mezz 0101eae8f8 Make gradlew executable 2017-07-28 20:56:54 -07:00
mezz 5be32a2a3a Set up gradle for jenkins and auto-upload to curse 2017-07-28 20:49:07 -07:00
Alexander Kornilov 3ff4957a10 Feature/code improve (#221)
* Code improvement for genetics.api
Code improvement for genetics.core
Fix missed localization for info of Lab Stand
* Code improvement for genetics.genetics package
2017-07-16 18:08:38 -07:00
Alexander Kornilov 9e1ec59b86 Feature/refactoring (#211)
* Some code improve readability for botany.ceramic package
* Code improvement for botany.core package
* Code improvement for botany.craftgui package
* Fixed TextJustification from all code files
* Code improvement for botany.farm package
* Code improvement for botany.flower
* Code improvement for root botany package
Code improvement for botany.network package
Code improvement for botany.proxypackage
* Code improvement for botany.gargdening package
Added missed localization for Soil Meter
* Code improvement for botany.genetic package
* Code improvement for botany.items package
* Removed "// TODO fix deprecated" comment
* Reformatted code by Forestry format settings
* Reformat code with new format settings
2017-07-15 12:27:20 -07:00
Alexander Kornilov 0aa9853da2 Feature/refactoring (#207)
* Fixed deprecated I18n usage
* Code improve readability for botany.api package
* Fix naming of templateAsGenome method params
2017-07-14 22:48:11 -07:00
mezz 96fe27e834 Cleanup 2017-07-13 23:35:09 -07:00
mezz 934bb3b8f9 Fix #162 Crash when hovering over drinks with AppleSkin and AppleCore 2017-07-13 23:25:53 -07:00
mezz 83d9da7797 Update gradle and dependencies 2017-07-13 23:11:57 -07:00
Nedelosk 1e0d11b1ac Merge branch 'master-MC1.11.2' of https://github.com/ForestryMC/Binnie into master-MC1.11.2 2017-07-10 00:48:04 +02:00
Nedelosk 808b04c3b8 More localisation 2017-07-10 00:47:53 +02:00
marcin212 2425ae959e Fixed recipe for Apiarist Database 2017-07-08 14:36:12 +02:00
marcin212 3679551882 Fixed SOF when machine has full inventory 2017-07-08 14:35:30 +02:00
marcin212 83fd00cad5 Fixed brewery recipes 2017-07-07 13:41:45 +02:00
marcin212 f3d93b47b9 Fixed shitf-click stack overflow #180 2017-07-07 12:34:32 +02:00
marcin212 62fc457808 Fixed second NPE in machines 2017-07-06 20:00:37 +02:00
marcin212 2811aabc2e Fixed NPE in machines 2017-07-06 15:04:19 +02:00
marcin212 8573f087eb Fixed blue/black background in machines GUI 2017-07-06 15:03:55 +02:00
marcin212 d0215ce0aa Color changed to hex 2017-07-06 15:00:40 +02:00
Nedelosk b6d5901f07 Star to rework Machine localisation 2017-06-28 19:10:09 +02:00
Nedelosk 18f30c8c0d Fix Farm Circuit Dictionary localisation 2017-06-28 16:07:19 +02:00
Nedelosk cf8634546c Fix Botany Dictionary localisation 2017-06-27 18:25:04 +02:00
Nedelosk 864e5e0dfc Add Botany Dictionary localisation 2017-06-27 17:42:13 +02:00
Nedelosk 6df4570bca Improve ceramic localization 2017-06-27 16:56:02 +02:00
Nedelosk e0d23ada41 Change colour to color 2017-06-27 16:35:15 +02:00
Nedelosk b7b663640d Improve insulated tube and color localization 2017-06-27 16:33:41 +02:00
Nedelosk 9989eef753 Improve flower localization 2017-06-27 16:01:25 +02:00
Nedelosk 941c377c58 Improve localization 2017-06-27 15:10:47 +02:00
Nedelosk be827a17a7 Moving gardening helper class to the api 2017-06-27 14:01:56 +02:00
Nedelosk beb1ba9ae1 Clean Up Soil and Plank Block 2017-06-27 13:22:32 +02:00
Nedelosk 709d80adc6 Fix #151 [1.11.2] Implement Hive Attack 2017-06-27 12:54:53 +02:00
Nedelosk 552a907d58 Fix #157 Using normal logs in the logs to planks recipe always produces fireproof planks 2017-06-26 18:56:39 +02:00
Nedelosk e0409c17ba Update Forestry and add village hope field 2017-06-26 14:52:52 +02:00
Nedelosk b1de19e1f1 Change the machine sink tier from 1 to 4 2017-06-25 14:06:16 +02:00
Nedelosk 09754111f0 Add hops as a grass seed 2017-06-25 01:50:40 +02:00
Nedelosk a7da3c5297 Fix machine particle texture 2017-06-24 15:48:29 +02:00
Nedelosk 866e8d0711 Fix #149 GUI scrollbar working differently 2017-06-24 15:22:29 +02:00
Nedelosk bbc87beb38 Improve Glass Fix #148, Fix #147 2017-06-24 15:08:59 +02:00
Nedelosk d0cb769a2b Update Forestry and Fix #143 2017-06-24 14:30:16 +02:00
Nedelosk d678903d68 Improve Extra Trees Wood Fix #144, Fix #145, Fix #146 2017-06-24 13:54:54 +02:00
Nedelosk 140df9ce4e Merge remote-tracking branch 'origin/master-MC1.11.2' into master-MC1.11.2 2017-06-24 01:50:51 +02:00
Nedelosk db2f4b7360 Add hops crop 2017-06-24 01:50:32 +02:00
marcin212 b9dfb8ee31 Fixed block alveary 2017-06-23 00:01:00 +02:00
marcin212 a408df86ed Fixed Alveary transmitter and lighting 2017-06-22 23:52:20 +02:00
Nedelosk 564f586c58 Fix #137 [1.11.2] Lumbermill keeps working when bark and sawdust slots full. 2017-06-21 20:27:04 +02:00
marcin212 05308e82c8 Added recipes for glassware 2017-06-21 12:01:51 +02:00
marcin212 e9d5c638c7 Fixed crash without IC2 2017-06-18 17:59:22 +02:00
Nedelosk a51bfd196c Add drink models 2017-06-18 02:24:56 +02:00
Nedelosk 81f632168b Add et wood doors 2017-06-17 13:42:07 +02:00
Nedelosk 6ec7808b25 Fix #115 Add a botanist backpack recipe and fix OreDictionary integration 2017-06-17 01:44:59 +02:00
Nedelosk f3770bf545 Add a botanist backpack Fix #115 2017-06-16 14:08:11 +02:00
marcin212 2a873e8bfb Merge branch 'master-MC1.11.2' of https://github.com/ForestryMC/Binnie into master-MC1.11.2
# Conflicts:
#	src/main/java/binnie/extrabees/worldgen/ExtraBeesWorldGenerator.java
#	src/main/java/binnie/extrabees/worldgen/WorldGenHiveNether.java
2017-06-16 12:49:49 +02:00
marcin212 6968ebed3f Added marble bees #36 2017-06-16 12:46:38 +02:00
Nedelosk 88c7daf024 Move drain input fluid from onFinishTask to onUpdate 2017-06-16 00:58:03 +02:00
Nedelosk e72bda24e3 Merge remote-tracking branch 'origin/master-MC1.11.2' into master-MC1.11.2 2017-06-16 00:55:12 +02:00
Nedelosk b3e514355b Fix #119 Infinity Alcohol crafting and some other brewery bugs 2017-06-16 00:54:46 +02:00
marcin212 c530745d8e Merge branch 'master-MC1.11.2' of https://github.com/ForestryMC/Binnie into master-MC1.11.2 2017-06-15 23:12:56 +02:00
marcin212 c30629eac4 Fixed ic2 mod id in optional method 2017-06-15 23:12:17 +02:00
Nedelosk 10e641506e Optimize imports 2017-06-15 23:11:48 +02:00
Nedelosk f1df70aeec Fix #98 Analyzer doesn't add researched data to the tracker. 2017-06-15 23:06:19 +02:00
marcin212 0d35e58106 Added flower farm harvesting logic #126 2017-06-15 22:44:50 +02:00
Nedelosk ae1168ea60 Fixed Compartment dupe bug 2017-06-15 22:41:54 +02:00
Nedelosk a91c578829 Add ic2 energy support back to power components 2017-06-15 22:26:30 +02:00
Nedelosk 7ac50de818 Add ic2 energy support back to IPoweredMachine 2017-06-15 22:18:50 +02:00
Nedelosk a61b6c9397 Add modelmanager back 2017-06-15 21:33:26 +02:00
Nedelosk 8ccb633925 Clean Up 2017-06-15 21:27:17 +02:00
Nedelosk 96a747518e Remove license header from IItemModelProvider 2017-06-15 21:16:59 +02:00
Nedelosk 31d0a03d3f Clean Up and fix some bugs 2017-06-15 21:15:09 +02:00
Nedelosk 21752a8b28 Update Forestry 2017-06-15 19:52:46 +02:00
Nedelosk ef371173c9 Make the honey crystal to a energy storage 2017-06-15 19:41:41 +02:00
Nedelosk d460bcab77 Clean Up ModuleItems and add two fluid names to ManagerLiquid 2017-06-15 17:08:13 +02:00
Nedelosk c5d0520299 Fix #23 Corn recipe yields barley grain 2017-06-15 16:45:32 +02:00
marcin212 bf40504ddf Fixed spawn fruit block 2017-06-14 15:20:26 +02:00
marcin212 e0ab7a89cc Removed null parameter 2017-06-14 15:18:09 +02:00
marcin212 24fd7e89d3 Updated Forge, Forestry and JEI 2017-06-14 12:59:26 +02:00
marcin212 287b1a5b10 Clean up 2017-06-14 12:58:32 +02:00
marcin212 81a2268e1d Fixed synchronization with container 2017-06-13 13:12:18 +02:00
marcin212 7ddd7d976e Fixed selecting distillery level 2017-06-13 11:36:52 +02:00
marcin212 d43d770024 Fixed drop of Corrosive bees 2017-06-11 20:35:11 +02:00
marcin212 876b214a97 Fixed leaves 2017-06-11 16:38:49 +02:00
marcin212 57eea26c1a Fixed creative Gene Database 2017-06-09 23:19:01 +02:00
marcin212 a5019da906 Merge branch 'master-MC1.11.2' of https://github.com/ForestryMC/Binnie into master-MC1.11.2 2017-06-09 21:08:39 +02:00
marcin212 0b3dbe6ef5 Fixed NPE caused by missing FlowerAlyzerPlugin 2017-06-09 21:07:45 +02:00
marcin212 c4db4fa664 Fixed missing textures for leaves 2017-06-09 20:43:53 +02:00
marcin212 99cef245d0 Fix flower rendering after reconnect. 2017-06-08 12:04:31 +02:00
marcin212 97a2b939cf Fixed flower tooltip formatting 2017-06-08 11:51:32 +02:00
marcin212 3ebb628a56 Fixed Fluid duplication in Incubator #103 2017-06-08 11:08:33 +02:00
marcin212 0c64d703d8 Fixed garden logic crash 2017-06-07 21:03:40 +02:00
marcin212 852c9a9a3e Fixed Player inventory in Gene Bank 2017-06-07 17:57:48 +02:00
marcin212 87ac2c18a3 Fixed rendering in MasterRegistry 2017-06-07 16:22:54 +02:00
marcin212 3aa8fb19c7 Added Nonnull 2017-06-07 16:22:19 +02:00
marcin212 ab03f3f734 Fixed Crash when placing flower on soil #104 2017-06-07 15:38:05 +02:00
marcin212 9fb03893b2 Fixed wrong import 2017-06-05 23:50:28 +02:00
marcin212 e6b087319c Fixed #101 TileEntityMachine has throw an exception trying to write state. 2017-06-05 23:19:21 +02:00
marcin212 aa567e190e remove unsed import 2017-06-05 21:57:04 +02:00
marcin212 6907f4159e Fixed incubator recipes 2017-06-05 21:56:47 +02:00
marcin212 dc2c63c856 Fixed Inoculator don't need Bacteria Vector to process #66 2017-06-05 21:06:30 +02:00
marcin212 dde90817d7 Fixed progress texture for Acclimatiser 2017-06-05 20:44:43 +02:00
marcin212 559ab4176d Fixed wrong texture in WindowPolymeriser 2017-06-05 20:21:11 +02:00
marcin212 5f234cc94e Fixed IndexOutOfBoundsException when crafting in 2x2 grid 2017-06-05 20:07:07 +02:00
marcin212 3936c0d377 Removed unused imports 2017-06-05 19:50:15 +02:00
marcin212 9fae7c1866 Fixed Sequencer progress control 2017-06-05 19:44:54 +02:00
marcin212 814b717aaf Fixed crash caused by opening Registry 2017-06-05 19:41:52 +02:00
marcin212 314e632e47 Fixed rotating block design 2017-06-05 19:39:56 +02:00
marcin212 e1fbb78c8a Fixed world generating lag 2017-06-05 19:38:45 +02:00
marcin212 f85e312c1a Fixed wooden tile kicks player from server when placing #90 2017-06-05 19:37:24 +02:00
marcin212 f4903fc1bc Fixed hives drop #97 2017-06-05 01:09:16 +02:00
marcin212 248a07e311 Fixed color of bees 2017-06-05 01:08:29 +02:00
marcin212 8f0bdf698a Fixed #98 2017-06-05 00:22:32 +02:00
marcin212 218e1c6f8c Fixed #89 2017-06-04 23:38:07 +02:00
marcin212 14bedffe0e Fixed NPE 2017-06-04 23:37:45 +02:00
marcin212 b772f7c305 Fixed lumbermill crash 2017-06-04 22:47:56 +02:00
marcin212 c8be69796f Fixed #99 2017-06-04 22:44:07 +02:00
marcin212 41bf3bfdbb Fixed some missing textures 2017-06-04 22:01:43 +02:00
Nedelosk 7a8dfc3012 Update forestry version 2017-06-04 00:45:36 +02:00
marcin212 04706d12c8 Fix bee mutations 2017-06-03 19:24:15 +02:00
marcin212 34d57cda35 Fix problem in PlankType with "getName", which conflicts during obfuscation. 2017-06-03 18:50:39 +02:00
marcin212 6c3eaca546 Remove unused imports 2017-06-03 18:14:13 +02:00
marcin212 05648ce05a Fix problem in EnumFlowerColor with "getName", which conflicts during obfuscation. 2017-06-03 18:11:05 +02:00
marcin212 b59f541a10 Fix extrabees dependencies 2017-06-03 17:49:00 +02:00
Alexander Kornilov 966f4e0693 Fix build script (#83)
* Fix build.gradlew
Added README.md

* Fix

* Fix build.gradle and README.md
2017-06-01 00:48:31 -07:00
Alexander Kornilov c3809fbc27 Some reformat code for 1.11.2 source (#84)
* Optimized imports

* Some code reformat

* Some refactoring and code reformat

* Some code reformat
2017-06-01 00:48:08 -07:00
Elec332 886c36a308 Fixed last dependancies on one another 2017-05-14 21:14:21 +02:00
Elec332 0630d0e0f1 Added item filters for alveary parts & added recipes for alveary parts 2017-05-14 20:48:17 +02:00
Elec332 2dac035df0 Separation basically done 2017-05-13 22:25:42 +02:00
Elec332 b7da877963 Moved punnett square and apiarist database to the genetics mod 2017-05-13 18:42:38 +02:00
Elec332 34a9a90ab3 Fixed textures, split the alveary stuff, onlt GUI left to do! 2017-05-13 17:10:55 +02:00
Elec332 a5e27bfd47 Only the client and apiary packages left to do! 2017-05-13 11:59:49 +02:00
Elec332 60607354dd Split the proxy from the rest 2017-05-12 21:57:54 +02:00
Elec332 2c45413a6b Fixes and more ExtraBees unhooking stuff 2017-05-12 20:49:12 +02:00
Elec332 1828ad9f3b Packages done: worldgen, utils, items, init, genetics & blocks. Now on to the hard part... 2017-05-12 18:13:06 +02:00
Elec332 a1aa3661d5 Unhook mutation & species classes 2017-05-12 17:25:44 +02:00
Elec332 b12d19c9ea More work on splitting ExtraBees 2017-05-12 16:02:25 +02:00
Elec332 ac05f9013a Started on splitting ExtraBees 2017-05-12 12:32:53 +02:00
mezz 601e20fe99 Move the strange block-scope class SpeciesList which was breaking S2S
See https://github.com/MinecraftForge/Srg2Source/issues/18
2017-05-09 23:14:18 -07:00
mezz 9e47e018cf Add .travis.yml 2017-05-09 14:22:29 -07:00
mezz a97f5a2baa SideOnly fixes 2017-04-19 01:57:44 -07:00
mezz 14c107ab71 Minor cleanup and fixes 2017-04-19 01:57:02 -07:00
mezz 3bb678258f Clean up some null annotations 2017-04-19 00:52:10 -07:00
mezz cc20e2d339 Clean up some parameter names 2017-04-19 00:15:55 -07:00
Nedelosk f5e52163b4 Clean Up 2017-04-12 15:59:06 +02:00
Nedelosk d3b2c99c60 Some todos 2017-04-12 15:46:47 +02:00
marcin212 fd0783afee Fix effect: Power 2017-04-12 13:14:54 +02:00
marcin212 319bf4ea2c Fix item rotation in GUI 2017-04-12 13:07:14 +02:00
Nedelosk d1306b174c Fix Size MultiFenceRecipe 2017-04-11 23:02:01 +02:00
Nedelosk aa1e797cf7 Remove Unused Stuff 2017-04-11 17:51:42 +02:00
Nedelosk 8ba9d8609b Add MultiFenceRecipe Jei Registry Plugin 2017-04-11 17:50:41 +02:00
Nedelosk 7964e56c77 Remove Gooseberry from world gen 2017-04-11 01:29:55 +02:00
Nedelosk 6d54f6a8a8 Imrpove ShrubLog 2017-04-11 01:18:32 +02:00
Nedelosk 498fe87e49 Work on Tree generation and add shrubs to world gen 2017-04-11 01:04:19 +02:00
Nedelosk 9fe3d8bbf1 Fix Ceramic Model 2017-04-10 21:24:36 +02:00
Nedelosk 4202534e1f Fix MultiFence Model 2017-04-10 21:17:35 +02:00
Nedelosk c5c76f4009 Cache MultiFence Models 2017-04-10 21:01:13 +02:00
Nedelosk 3124c00152 Fix MultiFence Name 2017-04-10 20:49:10 +02:00
Nedelosk bb9427367d Remove old ETFenceGate class 2017-04-10 20:19:22 +02:00
Nedelosk 36c0409e5a Clean Up Multi Fences 2017-04-10 20:15:51 +02:00
Nedelosk f1640ff21b Work on MultiFence 2017-04-10 19:19:19 +02:00
Nedelosk c949131976 Clean Up and remove BlockFence 2017-04-10 16:27:04 +02:00
Nedelosk fa67089c77 Remove model text gui 2017-04-10 15:59:55 +02:00
Nedelosk a17d9015c1 Rename ModelBaker, fix uv and add multifence model 2017-04-10 15:56:56 +02:00
Nedelosk 892dee2eb0 Add .name to fluid keys 2017-04-10 13:20:07 +02:00
Nedelosk c980cf68b1 Add extra bees fluid names 2017-04-10 13:13:14 +02:00
Nedelosk b84e29a3f0 Fix some names 2017-04-10 13:06:19 +02:00
Nedelosk 12ade3a559 Clean Up Bee Mutations 2017-04-10 12:28:25 +02:00
Nedelosk 2faa08c1b6 Clean Up 2017-04-10 11:53:54 +02:00
Nedelosk 11b8fce668 Clean Up Butterflies 2017-04-10 11:52:02 +02:00
Nedelosk 1626b6ec03 Make shrub logs flammable 2017-04-10 02:20:04 +02:00
Nedelosk 1cbf2ad892 Add Fruit pods and update forestry version 2017-04-10 01:52:17 +02:00
Nedelosk c90b134ded Add butterfly item textures 2017-04-09 23:01:31 +02:00
Nedelosk 72567d3706 Improve shrub log 2017-04-09 21:56:33 +02:00
Nedelosk 3919edcc3e Add tiny shrub log 2017-04-09 21:26:40 +02:00
Nedelosk 11c40fa158 Clean Up and fix missing fruit sprites 2017-04-09 14:33:31 +02:00
Nedelosk b044244dc6 Move craftgui to binnie core 2017-04-09 01:58:51 +02:00
mezz 1ea33829b3 Update JEI integration 2017-04-04 03:26:39 -07:00
mezz 79af0241e8 Remove SimpleRecipeHandler (unused now) 2017-04-03 18:05:40 -07:00
mezz c6ee1184ff Update JEI integration 2017-04-03 18:04:31 -07:00
mezz 2c277cc311 Update Forestry integration 2017-04-03 18:03:54 -07:00
mezz d3dd0467d9 update required Forge version 2017-03-23 18:11:13 -07:00
mezz a0843d9523 More sideonly cleanup 2017-03-23 18:10:55 -07:00
Nedelosk 475f4b63da Start to clean up Analyst Gui 2017-03-23 15:32:55 +01:00
Nedelosk 044a8a1984 Clean up Genetics Mod 2017-03-22 17:17:12 +01:00
Nedelosk e88822fb3d Add color to serums 2017-03-22 16:35:38 +01:00
Nedelosk 14deee0df7 Clean up some Items 2017-03-22 16:21:29 +01:00
Nedelosk 8f77efae6e Start to clean up tree generation 2017-03-21 15:50:03 +01:00
Nedelosk c93a79887f Clean Up and move guis 2017-03-20 21:21:17 +01:00
Nedelosk 490feb915f Clean Up 2017-03-18 22:58:25 +01:00
Nedelosk 4825f402fc Fix PanelModelBaker 2017-02-18 18:52:19 +01:00
mezz cce3b7b901 Auto-format fix imports, tabs/spaces 2017-02-12 00:09:28 -08:00
mezz 5816af57bc Add tooltips to frames to show what each does 2017-02-12 00:01:53 -08:00
mezz bdcefcb5be Fix some gui crashes 2017-02-11 23:51:03 -08:00
mezz 5ecfb694c5 Fix mutation multiplier and add gui mutation tooltip to accepted items 2017-02-09 23:00:32 -08:00
mezz e851fb5bc8 Use Forge tooltips where possible 2017-02-09 22:59:51 -08:00
mezz 8654b9d054 Fix crashes on the Debug map 2017-02-09 22:17:22 -08:00
mezz 93419395c3 Fix JEI integration crash 2017-02-09 21:58:45 -08:00
mezz 4936316ef3 Fix render crash with ceramic bricks 2017-02-09 21:58:31 -08:00
mezz fef0b7ede9 Fix assets to use lowercase for 1.11 2017-02-09 21:58:01 -08:00
mezz 2423adae4c Resolve more client/server sided issues
using Minecraft Development for IntelliJ IDEA plugin.
https://plugins.jetbrains.com/idea/plugin/8327-minecraft-development
2017-02-09 20:13:10 -08:00
mezz b8acba968e Fix many server crashes from client-side code 2017-02-09 02:27:31 -08:00
mezz f660f213f6 Updates for 1.11. Running but missing textures. 2017-02-09 01:41:06 -08:00
mezz 424fdaaf48 Begin 1.11 (compiles, does not run yet) 2017-02-08 00:52:37 -08:00
mezz 5310003659 Fix fruit press interface 2017-02-07 18:34:40 -08:00
mezz e38b8531da Improve tooltips and information for insulated electron tubes 2017-02-07 17:54:26 -08:00
mezz a5daa93bf1 More null annotations 2017-02-07 00:05:24 -08:00
mezz da8a833485 More null annotations 2017-02-06 01:34:48 -08:00
mezz 16b955b443 Begin adding stricter null annotations to prepare for 1.11 2017-02-05 23:47:40 -08:00
Nedelosk 4140ba7d7f Fix block carpentry panel 2017-01-27 20:15:44 +01:00
Chocohead 23ed2dcaea Generics for everyone \o/ 2017-01-26 18:18:14 +00:00
Chocohead ac9344cbda Add back planks to arborist's database 2017-01-26 17:46:47 +00:00
Nedelosk ce5232841a Improve Fluid Containers 2017-01-25 22:13:28 +01:00
Nedelosk f35f247cb4 Clean Up 2017-01-25 20:58:37 +01:00
Nedelosk 923d3791cd Fix fluid containers 2017-01-25 20:58:11 +01:00
Nedelosk cdea827464 Clean Up BinnieSprite 2017-01-25 20:57:52 +01:00
Nedelosk 58c36b3c92 Clean Up 2017-01-25 15:05:17 +01:00
Nedelosk 49d80c847e Move some craftguis 2017-01-25 15:01:41 +01:00
Nedelosk fff40b966d Add more models 2017-01-25 13:35:12 +01:00
mezz 6f42dfdef9 Fix Distillery 2017-01-24 23:28:30 -08:00
mezz f9dc27a063 Fix uses of liquid containers 2017-01-24 23:15:52 -08:00
mezz fd77975c6e Fix item rendering in inventories 2017-01-24 21:56:56 -08:00
mezz 460a7db190 Move static rendering methods to RenderUtil 2017-01-24 21:36:55 -08:00
mezz 9c4b081f6d Use GlStateManager 2017-01-24 21:18:28 -08:00
mezz 31a305ffc2 Gui rendering cleanup 2017-01-24 20:53:27 -08:00
mezz 17f036522e Fix compilation problems 2017-01-24 16:01:26 -08:00
Nedelosk 1a3b8fae21 Clean Up 2017-01-24 22:05:32 +01:00
Nedelosk 172afd0574 Fix design blocks 2017-01-24 21:44:39 +01:00
Nedelosk 7666e96542 Clean Up extra tree modules and add wood fences and fence gates 2017-01-24 18:41:35 +01:00
mezz 1276bd4b18 Fix some TODOs 2017-01-24 01:47:00 -08:00
mezz 7c048de845 Stop suppressing exceptions that may be important 2017-01-24 01:19:28 -08:00
mezz 163abc377e Remove unused machine types from alveary blockstate json 2017-01-24 00:44:25 -08:00
mezz 89edfaa7c7 Remove ItemParser 2017-01-23 23:40:13 -08:00
mezz 159dc804a2 Improve Brewery JEI representation 2017-01-23 22:19:24 -08:00
mezz d0dffe7edd Fix the brewery not consuming input items 2017-01-23 22:18:55 -08:00
mezz 2d459dd953 Complete the implementation of ComponentInventorySlots 2017-01-23 22:17:17 -08:00
mezz aede7bf7ec Fix IDesignMaterials not compiling 2017-01-23 14:46:59 -08:00
Nedelosk 9fcdc34b5a Fix wood blocks 2017-01-23 21:00:17 +01:00
Nedelosk 9ba257dec5 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2017-01-23 15:49:21 +01:00
Nedelosk 87cf7386c6 Improve fluid rendering 2017-01-23 15:44:46 +01:00
mezz b79b279a17 Add Distilling JEI recipes 2017-01-23 01:34:30 -08:00
mezz 1d96c9d349 Refactor Distillery 2017-01-22 23:52:15 -08:00
mezz e5f01e82a2 Add Brewing JEI recipes 2017-01-22 22:24:01 -08:00
mezz 25a2752907 Fix concurrent modification exceptions from networking 2017-01-22 22:23:27 -08:00
mezz c195cfaa19 Fix concurrent modification exceptions from networking 2017-01-22 22:21:25 -08:00
mezz 427f030110 Refactor Brewing Recipes 2017-01-22 21:51:59 -08:00
Nedelosk f0d8d6b89d Work on extra trees 2017-01-22 10:36:25 +01:00
Nedelosk 192943cb3e Add decorative leaves and food models 2017-01-21 15:57:39 +01:00
mezz 31d7d6e76e Add Fruit Press JEI recipes 2017-01-21 00:28:28 -08:00
mezz b6f91fe870 Add Lumbermill JEI recipes 2017-01-20 23:42:29 -08:00
Nedelosk 88ad994a8c Update Forestry Version 2017-01-20 16:48:11 +01:00
mezz aa8ff6556b Add Genetic Database JEI recipes 2017-01-19 23:12:00 -08:00
mezz 0f716a0a16 Add Genepool JEI recipes 2017-01-19 22:15:25 -08:00
mezz 3530a0e9df Add Splicer JEI recipes, improve Inoculator JEI recipes 2017-01-19 19:34:31 -08:00
Nedelosk a990ce3dc9 Improve wood blocks 2017-01-19 23:54:13 +01:00
Nedelosk 3ed915f9d5 Fix soil item model and start to move craftgui 2017-01-15 18:41:45 +01:00
Nedelosk de2dc3dabb Update jei and improve other things 2017-01-15 18:07:05 +01:00
Nedelosk 3059231363 Update Forestry Version 2017-01-15 14:33:09 +01:00
Nedelosk 154839594d Fix fluid container models 2017-01-15 00:46:39 +01:00
Nedelosk c7635db7e8 Clean Up and fluid texture fix 2017-01-14 23:56:44 +01:00
mezz 41e847b944 Add Inoculator JEI recipes 2017-01-03 03:16:55 -08:00
mezz 125cd54b66 Update Forestry version 2017-01-03 00:25:27 -08:00
Nedelosk 56f2be5817 Merge pull request #6 from RossRKK/master-MC1.10.2
Added proven and scented gears to the oredictionary
2016-12-04 19:03:48 +01:00
Ross Kelso e93934fdf8 Removed an import
This was accidentally moved over when I copied the line of code
2016-12-04 02:10:23 +00:00
Ross Kelso 1ad0dcc0ae Added proven and scented gears to the oredictionary 2016-12-04 01:52:35 +00:00
marcin212 cee31027e6 Work on items from wood - part 2 2016-11-04 00:54:45 +01:00
marcin212 38c1aa5b4b Fix planks textures and add banana planks 2016-11-03 17:00:14 +01:00
Nedelosk bebb663768 Improve default statemapper 2016-11-01 16:52:41 +01:00
Nedelosk f288984833 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-11-01 16:48:14 +01:00
Nedelosk 9e68539431 Start to work on ceramic blocks 2016-11-01 16:48:01 +01:00
marcin212 a903d57103 Work on items from wood 2016-11-01 02:39:35 +01:00
marcin212 8c9cd7c202 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2
# Conflicts:
#	src/main/java/binnie/extratrees/genetics/ExtraTreeSpecies.java
#	src/main/java/binnie/extratrees/genetics/ModuleGenetics.java
2016-10-31 21:11:27 +01:00
marcin212 8e14eb81a1 Rewrite ExtraTreeSpecies class 2016-10-31 21:03:38 +01:00
mezz 4b6e3e5424 Fix cast warning 2016-10-30 21:57:40 -07:00
mezz 61f7878acc Cleanup 2016-10-30 21:34:53 -07:00
mezz 307374ca2b improve null checks for Mods.java 2016-10-30 20:56:24 -07:00
mezz 975309598a Auto-fix formatting 2016-10-30 20:56:03 -07:00
mezz 697ccabf53 Fix several broken ItemStacks and recipes 2016-10-30 19:24:46 -07:00
marcin212 775b4109a9 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-31 00:25:42 +01:00
marcin212 977d295680 Remove unused classes 2016-10-31 00:24:45 +01:00
Nedelosk 21db702ee7 Fix GUIs do not always update their displayed items #4 2016-10-30 22:30:33 +01:00
Nedelosk cef5f4963f Work on GardenLogic and localize the tubes 2016-10-30 18:59:39 +01:00
Nedelosk 1cd3dc1ac8 Update Forestry Version 2016-10-30 13:54:12 +01:00
mezz ef722ec0d0 Update Forestry, JEI, Forge version 2016-10-29 18:37:01 -07:00
mezz c40cdb281f Add Sequencer JEI recipes 2016-10-29 01:20:39 -07:00
mezz 7c37c3f126 Add Polymeriser JEI recipes 2016-10-29 00:17:04 -07:00
mezz f082500fc0 Add Isolator JEI recipes 2016-10-28 21:47:06 -07:00
mezz b6191ab4b0 Fix DefaultTankContainer 2016-10-28 18:58:14 -07:00
Nedelosk 91933a738b Adding Fluid and Item Capability to the machine tile entity 2016-10-28 14:11:28 +02:00
Nedelosk d77daf41d0 Localise three analyst pages and fix analyser 2016-10-28 13:31:40 +02:00
Nedelosk 489ce3dece Clean Up Machines: Genetic 2016-10-28 12:43:12 +02:00
Nedelosk 154207f60f Clean Up 2016-10-28 02:20:36 +02:00
Nedelosk 84d8ad9144 Clean up Acclimatiser 2016-10-28 00:22:46 +02:00
Nedelosk 6b7b6480c0 Start to clean up machines 2016-10-28 00:01:33 +02:00
Nedelosk 3bf37f8838 Work on things 2016-10-27 16:05:15 +02:00
mezz 5bb4b5d9a5 Auto-format spaces to tabs (#2) 2016-10-27 02:49:49 -07:00
mezz 25be7fd254 Complete JEI integration of the Incubator 2016-10-27 02:42:11 -07:00
mezz 49542b0851 Minor cleanup 2016-10-27 02:41:42 -07:00
marcin212 09fa488cff Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-27 05:21:18 +02:00
marcin212 c201768ffa Fix sapling rendering 2016-10-27 05:20:23 +02:00
marcin212 c91a0c601f Fix textures of leaves and remove redundant enum (replace LeafType to EnumLeafType from Forestry) 2016-10-27 05:16:43 +02:00
Nedelosk ccb718b84d Fix Flower Mutation Registration 2016-10-27 01:34:14 +02:00
Nedelosk 5b4d490e94 Remove unused classes 2016-10-27 01:13:55 +02:00
Nedelosk 1982cbc615 Clean Up 2016-10-27 01:12:43 +02:00
Nedelosk b356c65a73 Register Fluid Textures 2016-10-27 01:09:37 +02:00
Nedelosk d7b5954d42 Clean Up 2016-10-27 00:01:23 +02:00
Nedelosk fe1c8b77c9 Remove unused ore dicts 2016-10-27 00:00:08 +02:00
Nedelosk 8a103a72cc Remove Unused Encylopedia 2016-10-26 23:59:04 +02:00
Nedelosk 5927258a90 Improve Soil 2016-10-26 23:44:47 +02:00
Nedelosk a300bc0a11 Adding database and soil localisation 2016-10-26 23:23:47 +02:00
Nedelosk 7e9a87f08b Remove Log 2016-10-26 22:15:47 +02:00
Nedelosk 2c8285651f Adding Flower localisation and Clean Up 2016-10-26 22:10:55 +02:00
Nedelosk df17dccad7 Add Flower Item Models and Flower Double Models 2016-10-26 22:01:13 +02:00
Nedelosk fb732b9398 Adding more flower models 2016-10-26 16:24:17 +02:00
Nedelosk 2a23e60cdb Adding flower blockstate and blockstatemapper 2016-10-26 01:32:05 +02:00
Nedelosk 5a64454906 Clean Up and localise flower tooltip 2016-10-25 19:07:29 +02:00
Nedelosk d706224e56 Clean Up Botany Mod Class 2016-10-25 18:39:41 +02:00
Nedelosk f993d0571d Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-25 18:14:30 +02:00
Nedelosk 7dba116937 Working on Flower Models and Update Forestry 2016-10-25 18:08:12 +02:00
Elec332 0f67d73b30 Cleanup main mod classes, ran import optimiser 2016-10-25 15:13:44 +02:00
marcin212 bedfd6e402 Fix sprite color in Butterfly module 2016-10-25 02:28:09 +02:00
marcin212 d4519ffee6 Add JEIBees for debugging 2016-10-25 02:23:46 +02:00
marcin212 5171e33764 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-25 00:42:37 +02:00
marcin212 e00101e0c0 Fix missing GUI icons 2016-10-25 00:42:29 +02:00
Nedelosk 9e31a19f34 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-25 00:28:35 +02:00
Nedelosk 7ce53b0c23 Working on Ceramic and other Botany things 2016-10-25 00:28:26 +02:00
marcin212 62a4efaa53 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-25 00:01:04 +02:00
marcin212 6801529ca5 Working on module apiary 2016-10-25 00:00:47 +02:00
Nedelosk f814808f20 Working on Ceramic 2016-10-24 23:27:17 +02:00
Nedelosk 9884a13c6e Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-24 21:58:05 +02:00
Nedelosk 57494b1f81 Working on Gardening 2016-10-24 21:57:50 +02:00
marcin212 3a0c551668 Add ItemGenesis model 2016-10-24 21:56:35 +02:00
marcin212 9d5144ddea Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-24 21:35:41 +02:00
marcin212 eacfa331e3 Add extrabees item models 2016-10-24 21:35:14 +02:00
marcin212 43efa66c20 Move ItemMisc models to subdirectory 2016-10-24 21:34:29 +02:00
Nedelosk 9f04dc7ed0 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-24 20:26:19 +02:00
Nedelosk 7de922264a Adding new Models 2016-10-24 20:25:24 +02:00
marcin212 7e1e92ae2c Decompiler mess cleanup 2016-10-24 19:33:53 +02:00
Nedelosk 2ed7e79478 Update Soil and add Soil Models 2016-10-24 18:23:30 +02:00
Nedelosk 0caaa095a2 Update Jei Integration 2016-10-24 16:24:42 +02:00
Nedelosk 0806d2ac38 Clean Up Api 2016-10-22 19:18:25 +02:00
Nedelosk 8b1bce6963 Clean Up and start to work on flower models 2016-10-22 18:56:37 +02:00
Nedelosk fd7c73c354 Add Flower Definition and Add Flower Factory 2016-10-22 03:39:42 +02:00
marcin212 4cca08af79 Fix flickering GUI 2016-10-21 18:06:45 +02:00
marcin212 59e21d05ef Fix wrong allele name and enable module genetics in botany 2016-10-21 15:30:06 +02:00
Nedelosk ff41a6e83b Rename FlowerHelper to FlowerRoot and improve it 2016-10-21 14:23:48 +02:00
Nedelosk 86bde197ec Clean Up 2016-10-21 13:40:04 +02:00
Nedelosk 8c61cacb57 Add Item models 2016-10-21 13:39:50 +02:00
Nedelosk ef6cbb1090 Adding basic Item and improve genetic Items 2016-10-21 12:20:02 +02:00
Nedelosk 2adc2e3562 Improve .gitignore and Adding ModelManager like that from Forestry 2016-10-21 12:07:12 +02:00
marcin212 ce2629a9f4 Fix itemstack display name for soil, serum and serum array 2016-10-21 11:27:53 +02:00
marcin212 a7af5980a1 Merge branch 'master-MC1.10.2' of https://github.com/ForestryMC/Binnie into master-MC1.10.2 2016-10-21 10:37:23 +02:00
marcin212 8a2fc188ae Support for Forge Energy 2016-10-21 10:36:20 +02:00
mezz f27454a73d Begin work on JEI integration 2016-10-21 01:31:57 -07:00
mezz 827c260442 Remove System.out.println spam 2016-10-21 00:39:55 -07:00
mezz a4cd13282a Remove redundant casts, unnecessary object creation, and string == 2016-10-21 00:32:06 -07:00
mezz 100784b51b Fix bug with mutation discovery in ControlMutationsBox 2016-10-21 00:29:36 -07:00
mezz b2963069fc Fix more null warnings 2016-10-21 00:22:24 -07:00
mezz ca1b4b03b1 Clean up genetic item recipes 2016-10-21 00:18:44 -07:00
mezz 4e3fb7e0bd fix bug in IBorder 2016-10-20 23:54:21 -07:00
mezz 0806b3b562 Fix missing import 2016-10-20 23:52:52 -07:00
mezz fc47c969f1 Remove FakeWorld 2016-10-20 23:51:42 -07:00
mezz 3178aa890d Fix some null warnings 2016-10-20 23:51:14 -07:00
mezz c6783e573c Use Collections.addAll 2016-10-20 23:18:49 -07:00
mezz 57930991ec Remove unnecessary boxing/unboxing 2016-10-20 23:14:07 -07:00
mezz f96bf5ba5f Use foreach loops 2016-10-20 23:13:41 -07:00
mezz 7a90a5cbbf Remove unused imports 2016-10-20 23:13:09 -07:00
mezz dac491c788 remove default template file headers 2016-10-20 23:12:50 -07:00
mezz d06b1d6304 Clean up some odd casts and obfuscated param names 2016-10-20 23:08:28 -07:00
mezz 507b8fa2d6 Remove unnecessary modifiers from enums and interfaces 2016-10-20 22:46:07 -07:00
mezz 55c58cf5d9 Use diamond operator everywhere 2016-10-20 22:41:23 -07:00
mezz 9812ddc4ce Fix mod names and dependencies 2016-10-20 22:38:23 -07:00
mezz 61d2d5ce30 Fix PlankType for Forestry planks 2016-10-20 22:00:47 -07:00
mezz d4cb398ac1 Fix crash from WATER effect bees 2016-10-20 21:48:08 -07:00
mezz 885ee83ede Fix null items in flowermanager registration 2016-10-20 21:47:29 -07:00
mezz edf9f0a9d0 Update gradle wrapper and build.gradle 2016-10-20 21:26:21 -07:00
marcin212 6a7c4bf67d start 1.10.2 2016-10-20 04:32:47 +02:00
5480 changed files with 90175 additions and 73080 deletions

No files matched your search

-9
View File
@@ -1,9 +0,0 @@
directory="run/crash-reports"
if [ -d $directory ]; then
echo "Crash reports detected:"
cat $directory/*
exit 1
else
echo "No crash reports detected"
exit 0
fi
-45
View File
@@ -1,45 +0,0 @@
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Build and test
on:
pull_request:
branches: [ master, main ]
push:
branches: [ master, main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up JDK 8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'adopt'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Setup the workspace
run: ./gradlew setupCIWorkspace
- name: Build the mod
run: ./gradlew build
- name: Run server for 1 minute
run: |
mkdir run
echo "eula=true" > run/eula.txt
timeout 60 ./gradlew runServer || true
- name: Test no crashes happend
run: |
chmod +x .github/scripts/test-no-crash-reports.sh
.github/scripts/test-no-crash-reports.sh
-45
View File
@@ -1,45 +0,0 @@
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Release tagged build
on:
push:
tags:
- '*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set release version
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up JDK 8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'adopt'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Setup the workspace
run: ./gradlew setupCIWorkspace
- name: Build the mod
run: ./gradlew build
- name: Release under current tag
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "${{ env.RELEASE_VERSION }}"
prerelease: false
title: "${{ env.RELEASE_VERSION }}"
files: build/libs/*.jar
+9 -26
View File
@@ -1,29 +1,12 @@
.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/
# IntelliJ
.idea/
*.iml
*.ipr
*.iws
src/main/resources/mixins.*.json
*.bat
# folders
.gradle/
classes/
build/
run/
out/
+24
View File
@@ -0,0 +1,24 @@
sudo: required
dist: trusty
language: java
jdk: oraclejdk8
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
- rm -f $HOME/.gradle/caches/minecraft/deobfedDeps/providedDummy.jar
- rm -f $HOME/.gradle/caches/minecraft/deobfedDeps/compileDummy.jar
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
before_install: chmod +x gradlew
install:
- ./gradlew setupCIWorkspace -S
script:
- ./gradlew build
notifications:
email: false
+1 -4
View File
@@ -10,7 +10,7 @@ along with new features such as fully breedable flowers and genetic manipulation
[Wiki](https://binnie.mods.wiki/wiki/Main_Page)
[Latest Builds for 1.7.10](https://ci.bymarcin.com/job/Binnie-Mods-MC1.7.10/)
[Latest Builds for 1.11 / 1.11.2](http://jenkins.ic2.player.to/job/Binnie's%201.11.2/)
### Mods
@@ -36,9 +36,6 @@ Genetics is for those who want to eschew conventional breeding, and want to ente
Binnie Core is a mod which contains a lot of the core functionality such as networking and GUI's for the other mods. The only in game features it currently contains are the Compartments
### Warning
Removed unused (unfinished) items and blocks: Honey Crystal, Alcohol, etc.
### Building
+10
View File
@@ -0,0 +1,10 @@
archivesBaseName = 'all-' + mcversion
dependencies {
compile project(":api")
compile project(":botany")
compile project(":core")
compile project(":extrabees")
compile project(":extratrees")
compile project(":genetics")
}
+1
View File
@@ -0,0 +1 @@
archivesBaseName = 'api-' + mcversion
@@ -0,0 +1,22 @@
package binnie.botany.api;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlowerFactory;
import binnie.botany.api.genetics.IFlowerRoot;
public class BotanyAPI {
/**
* Convenient access to AlleleManager.alleleRegistry.getSpeciesRoot("rootFlowers")
*/
public static IFlowerRoot flowerRoot;
/**
* Used to create new flowers.
*/
public static IFlowerFactory flowerFactory;
/**
* Used to manager soil.
*/
public static IGardeningManager gardening;
}
@@ -0,0 +1,43 @@
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
public enum EnumAcidity implements IStringSerializable {
ACID(TextFormatting.RED),
NEUTRAL(null),
ALKALINE(TextFormatting.AQUA);
@Nullable
TextFormatting color;
EnumAcidity(@Nullable TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
return name().toLowerCase();
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18n.translateToLocal("botany.ph." + getName());
if (withColor && color != null) {
localisedName = color + localisedName;
}
return localisedName;
}
public static EnumAcidity getFromValue(float rawAcidity) {
if(rawAcidity <= -1.0f){
return EnumAcidity.ACID;
}else if(rawAcidity >= 1.0f){
return EnumAcidity.ALKALINE;
}else{
return EnumAcidity.NEUTRAL;
}
}
}
@@ -0,0 +1,5 @@
package binnie.botany.api.gardening;
public enum EnumFertiliserType {
ACID, ALKALINE, NUTRIENT
}
@@ -0,0 +1,44 @@
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
public enum EnumMoisture implements IStringSerializable {
DRY(TextFormatting.YELLOW),
NORMAL(null),
DAMP(TextFormatting.DARK_BLUE);
@Nullable
final TextFormatting color;
EnumMoisture(@Nullable TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
return name().toLowerCase();
}
public String getLocalisedName(boolean withColor) {
String localisedName = I18n.translateToLocal("botany.moisture." + getName());
if (withColor && color != null) {
localisedName = color + localisedName + TextFormatting.GRAY;
}
return localisedName;
}
public static EnumMoisture getFromValue(float rawMoisture) {
if(rawMoisture <= -1.0f){
return EnumMoisture.DRY;
}else if(rawMoisture >= 1.0f){
return EnumMoisture.DAMP;
}else{
return EnumMoisture.NORMAL;
}
}
}
@@ -0,0 +1,29 @@
package binnie.botany.api.gardening;
import java.util.Locale;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
public enum EnumSoilType implements IStringSerializable {
SOIL(TextFormatting.DARK_GRAY),
LOAM(TextFormatting.GOLD),
FLOWERBED(TextFormatting.LIGHT_PURPLE);
private final TextFormatting color;
EnumSoilType(TextFormatting color) {
this.color = color;
}
@Override
public String getName() {
return name().toLowerCase(Locale.ENGLISH);
}
public String getTranslated() {
return color + I18n.translateToLocal("botany.soil." + getName());
}
}
@@ -0,0 +1,22 @@
package binnie.botany.api.gardening;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface IBlockSoil {
EnumAcidity getPH(World world, BlockPos pos);
EnumMoisture getMoisture(World world, BlockPos pos);
EnumSoilType getType(World world, BlockPos pos);
boolean fertilise(World world, BlockPos pos, EnumSoilType soilType);
boolean degrade(World world, BlockPos pos, EnumSoilType soilType);
boolean setPH(World world, BlockPos pos, EnumAcidity acidity);
boolean setMoisture(World world, BlockPos pos, EnumMoisture moisture);
boolean resistsWeeds(World world, BlockPos pos);
}
@@ -0,0 +1,67 @@
package binnie.botany.api.gardening;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.core.EnumTemperature;
import binnie.botany.api.genetics.IFlower;
public interface IGardeningManager {
default boolean isSoil(Block block) {
return block instanceof IBlockSoil;
}
boolean isSoil(Item item);
boolean isSoil(ItemStack item);
EnumMoisture getNaturalMoisture(World world, BlockPos pos);
EnumAcidity getNaturalPH(World world, BlockPos pos);
float getBiomeMoisture(World world, BlockPos pos);
float getBiomePH(World world, BlockPos pos);
IBlockState getSoil(EnumSoilType soil, boolean weedKill, EnumMoisture moisture, EnumAcidity acidity);
void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity);
Collection<ItemStack> getFertilisers(EnumFertiliserType type);
Map<EnumFertiliserType, Map<ItemStack, Integer>> getFertilisers();
void registerFertiliser(EnumFertiliserType type, ItemStack stack, int strength);
boolean isFertiliser(EnumFertiliserType type, ItemStack stack);
int getFertiliserStrength(ItemStack stack);
boolean canTolerate(@Nullable IFlower flower, World world, BlockPos pos);
EnumSoilType getSoilType(World world, BlockPos pos);
default Block getSoilBlock(EnumSoilType type) {
return getSoilBlock(type, false);
}
Block getSoilBlock(EnumSoilType type, boolean weedKill);
boolean canTolerate(IFlower flower, EnumAcidity acidity, EnumMoisture moisture, EnumTemperature temperature);
boolean isWeedkiller(ItemStack heldItem);
boolean addWeedKiller(World world, BlockPos pos);
boolean onFertiliseSoil(ItemStack heldItem, IBlockSoil soil, World world, BlockPos pos, EntityPlayer player);
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api.gardening;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,75 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
import net.minecraft.util.text.translation.I18n;
// TODO: move out of API
public class AlleleFlowerColor implements IAlleleFlowerColor {
private int color;
private String uid;
private boolean isDominant;
private String name;
private String unlocalizedName;
private int colorDis;
private int id;
public AlleleFlowerColor(String uid, int id, int color, int colorDis, String name, String unlocalizedName, boolean isDominant) {
this.color = color;
this.uid = uid;
this.isDominant = isDominant;
this.name = name;
this.unlocalizedName = unlocalizedName;
this.colorDis = colorDis;
this.id = id;
}
@Override
public int getValue() {
return color;
}
@Override
public String getUID() {
return uid;
}
@Override
public boolean isDominant() {
return isDominant;
}
@Override
public String getName() {
return name;
}
@Override
public String getAlleleName() {
return name;
}
@Override
public String getUnlocalizedName() {
return unlocalizedName;
}
@Override
public int getColor(boolean dis) {
return dis ? colorDis : color;
}
@Override
public IAlleleInteger getAllele() {
return this;
}
@Override
public int getID() {
return id;
}
@Override
public String getColorName() {
return I18n.translateToLocal("botany.color." + getAlleleName());
}
}
@@ -0,0 +1,40 @@
package binnie.botany.api.genetics;
public final class ColorMix implements IColorMix {
private final IFlowerColor colorFirst;
private final IFlowerColor colorSecond;
private final IFlowerColor result;
private final int chance;
public ColorMix(IFlowerColor colorFirst, IFlowerColor colorSecond, IFlowerColor result, int chance) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
this.result = result;
this.chance = chance;
}
@Override
public IFlowerColor getColorFirst() {
return colorFirst;
}
@Override
public IFlowerColor getColorSecond() {
return colorSecond;
}
@Override
public boolean isMutation(IFlowerColor colorFirst, IFlowerColor colorSecond) {
return (colorFirst == this.colorFirst && colorSecond == this.colorSecond) || (colorFirst == this.colorSecond && colorSecond == this.colorFirst);
}
@Override
public int getChance() {
return chance;
}
@Override
public IFlowerColor getResult() {
return result;
}
}
@@ -1,4 +1,6 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import java.util.Locale;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
@@ -36,7 +38,7 @@ public enum EnumFlowerChromosome implements IChromosomeType {
@Override
public String getName() {
return toString().toLowerCase();
return toString().toLowerCase(Locale.ENGLISH);
}
@Override
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,29 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.ISpeciesType;
public enum EnumFlowerStage implements ISpeciesType {
FLOWER("Flower"),
SEED("Seed"),
POLLEN("Pollen");
public static final EnumFlowerStage[] VALUES = values();
String name;
EnumFlowerStage(String name) {
this.name = name;
}
public static EnumFlowerStage getStage(IFlower flower) {
return getStage(flower.getAge());
}
public static EnumFlowerStage getStage(int age) {
return age == 0 ? EnumFlowerStage.SEED : EnumFlowerStage.FLOWER;
}
public String getName() {
return name;
}
}
@@ -0,0 +1,6 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
public interface IAlleleFlowerColor extends IFlowerColor, IAlleleInteger {
}
@@ -0,0 +1,10 @@
package binnie.botany.api.genetics;
import net.minecraft.world.World;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
public interface IAlleleFlowerEffect extends IAlleleEffect {
IEffectData doEffect(IFlowerGenome genome, IEffectData effect, World world, int x, int y, int z);
}
@@ -0,0 +1,31 @@
package binnie.botany.api.genetics;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IModelManager;
import forestry.api.genetics.IAlleleProperty;
import forestry.api.genetics.IAlleleSpecies;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IAlleleFlowerSpecies extends IAlleleSpecies, IAlleleProperty<IAlleleFlowerSpecies> {
IFlowerType getType();
EnumAcidity getPH();
EnumMoisture getMoisture();
@SideOnly(Side.CLIENT)
int getFlowerColor(EnumFlowerStage type, int renderPass);
@SideOnly(Side.CLIENT)
ModelResourceLocation getFlowerModel(EnumFlowerStage type, boolean flowered);
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager, EnumFlowerStage type);
}
@@ -0,0 +1,15 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleSpeciesBuilder;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IAlleleFlowerSpeciesBuilder extends IAlleleSpeciesBuilder {
@Override
IAlleleFlowerSpecies build();
IAlleleFlowerSpeciesBuilder setPH(EnumAcidity acidity);
IAlleleFlowerSpeciesBuilder setMoisture(EnumMoisture moisture);
}
@@ -1,4 +1,4 @@
package binnie.botany.api;
package binnie.botany.api.genetics;
import forestry.api.genetics.IBreedingTracker;
@@ -0,0 +1,13 @@
package binnie.botany.api.genetics;
public interface IColorMix {
IFlowerColor getColorFirst();
IFlowerColor getColorSecond();
boolean isMutation(IFlowerColor colorFirst, IFlowerColor colorSecond);
int getChance();
IFlowerColor getResult();
}
@@ -0,0 +1,76 @@
package binnie.botany.api.genetics;
import javax.annotation.Nullable;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.genetics.IIndividual;
public interface IFlower extends IIndividual {
/**
* @return Flowers's genetic information.
*/
@Override
IFlowerGenome getGenome();
/**
* @return Genetic information of the flower's mate, null if unmated.
*/
@Nullable
IFlowerGenome getMate();
/**
* Mate with the given flower.
*
* @param flower the {@link IFlower} to mate this one with.
*/
void mate(IFlower flower);
/**
* Remove the mate of the flower.
*/
void removeMate();
IFlower getOffspring(World world, BlockPos pos);
/**
* @return The current age of the flower.
*/
int getAge();
/**
* Set the current age of the flower.
*/
void setAge(int age);
/**
* Age the flower.
*/
void age();
/**
* @return Maximum age of the flower.
*/
int getMaxAge();
/**
* @return true if the flower is wilted.
*/
boolean isWilted();
/**
* Set that the flower is wilted.
*/
void setWilted(boolean wilted);
/**
* @return true if the flower has flowered.
*/
boolean hasFlowered();
/**
* Set that the flower has flowered.
*/
void setFlowered(boolean flowered);
}
@@ -0,0 +1,13 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAlleleInteger;
public interface IFlowerColor {
int getColor(boolean dis);
IAlleleInteger getAllele();
int getID();
String getColorName();
}
@@ -0,0 +1,15 @@
package binnie.botany.api.genetics;
import net.minecraft.item.ItemStack;
import forestry.core.genetics.IGeneticDefinition;
public interface IFlowerDefinition extends IGeneticDefinition {
@Override
IFlowerGenome getGenome();
@Override
IFlower getIndividual();
ItemStack getMemberStack(EnumFlowerStage flowerStage);
}
@@ -0,0 +1,10 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IClassification;
public interface IFlowerFactory {
IAlleleFlowerSpeciesBuilder createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean isDominant, IClassification branch, String binomial, IFlowerType flowerType);
IFlowerMutationBuilder createMutation(IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IAllele[] result, int chance);
}
@@ -0,0 +1,44 @@
package binnie.botany.api.genetics;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IGenome;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
public interface IFlowerGenome extends IGenome {
@Override
IAlleleFlowerSpecies getPrimary();
@Override
IAlleleFlowerSpecies getSecondary();
IFlowerColor getPrimaryColor();
IFlowerColor getSecondaryColor();
IFlowerColor getStemColor();
int getFertility();
int getLifespan();
IFlowerType getType();
EnumTolerance getToleranceTemperature();
EnumTolerance getToleranceMoisture();
EnumTolerance getTolerancePH();
float getAgeChance();
float getSappiness();
boolean canTolerate(EnumAcidity acidity);
boolean canTolerate(EnumMoisture moisture);
boolean canTolerate(EnumTemperature temperature);
}
@@ -0,0 +1,13 @@
package binnie.botany.api.genetics;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import forestry.api.genetics.IMutation;
public interface IFlowerMutation extends IMutation {
@Override
IFlowerRoot getRoot();
float getChance(World world, BlockPos pos, IAlleleFlowerSpecies allele0, IAlleleFlowerSpecies allele1, IFlowerGenome genome0, IFlowerGenome genome1);
}
@@ -0,0 +1,6 @@
package binnie.botany.api.genetics;
import forestry.api.genetics.IMutationBuilder;
public interface IFlowerMutationBuilder extends IMutationBuilder {
}
@@ -0,0 +1,59 @@
package binnie.botany.api.genetics;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.ISpeciesRoot;
public interface IFlowerRoot extends ISpeciesRoot {
@Override
@Nullable
IFlower getMember(ItemStack memberStack);
@Override
IFlower templateAsIndividual(IAllele[] template);
@Override
IFlower templateAsIndividual(IAllele[] templateFirst, IAllele[] templateSecond);
@Override
IFlowerGenome templateAsGenome(IAllele[] template);
@Override
IFlowerGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive);
@Override
IBotanistTracker getBreedingTracker(World world, @Nullable GameProfile profile);
@Override
List<? extends IFlowerMutation> getMutations(boolean shuffle);
@Override
@Nullable
EnumFlowerStage getType(ItemStack itemStack);
IFlower getFlower(IFlowerGenome genome);
void addConversion(ItemStack memberStack, IAllele[] template);
@Nullable
IFlower getConversion(ItemStack memberStack);
Collection<IColorMix> getColorMixes(boolean shuffle);
void registerColourMix(IColorMix colorMix);
boolean plant(World world, BlockPos pos, IFlower flower, GameProfile owner);
void tryGrowSection(World world, BlockPos pos);
void onGrowFromSeed(World world, BlockPos pos);
}
@@ -0,0 +1,23 @@
package binnie.botany.api.genetics;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IModelManager;
public interface IFlowerType<I extends IFlowerType<I>> extends Comparable<I> {
@SideOnly(Side.CLIENT)
void registerModels(Item item, IModelManager manager, EnumFlowerStage type);
@SideOnly(Side.CLIENT)
ModelResourceLocation getModel(EnumFlowerStage type, boolean flowered);
String getName();
int getSections();
int ordinal();
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api.genetics;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.botany.api;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,10 @@
package binnie.core.api;
import java.util.Collection;
public interface IBinnieRecipe {
Collection<Object> getInputs();
Collection<Object> getOutputs();
}
@@ -0,0 +1,24 @@
package binnie.core.api;
import java.util.Collection;
public interface ICraftingManager<T extends IBinnieRecipe> {
/**
* Add a new recipe to the crafting provider.
*
* @return <tt>true</tt> if this collection changed as a result of the call
*/
boolean addRecipe(T recipe);
/**
* Remove a specific recipe from the crafting provider.
*
* @return <tt>true</tt> if an element was removed as a result of this call
*/
boolean removeRecipe(T recipe);
/**
* @return an unmodifiable collection of all recipes registered to the crafting provider.
*/
Collection<T> recipes();
}
@@ -0,0 +1,107 @@
package binnie.core.api.block;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
// TODO: move out of API
public class BlockMetadata extends BlockContainer implements IBlockMetadata {
public BlockMetadata(final Material material) {
super(material);
}
public static ItemStack getBlockDropped(IBlockMetadata block, IBlockAccess world, BlockPos pos) {
TileEntityMetadata tile = TileEntityMetadata.getTile(world, pos);
if (tile != null && !tile.hasDroppedBlock()) {
int meta = block.getDroppedMeta(world.getBlockState(pos), tile.getTileMetadata());
return TileEntityMetadata.getItemStack((Block) block, meta);
}
return ItemStack.EMPTY;
}
public static void getDrops(NonNullList<ItemStack> drops, IBlockMetadata block, IBlockAccess world, BlockPos pos) {
ItemStack drop = getBlockDropped(block, world, pos);
if (!drop.isEmpty()) {
drops.add(drop);
}
}
public static boolean breakBlock(IBlockMetadata blockMetadata, @Nullable EntityPlayer player, World world, BlockPos pos) {
List<ItemStack> drops = new ArrayList<>();
Block block = (Block) blockMetadata;
TileEntityMetadata tile = TileEntityMetadata.getTile(world, pos);
if (tile != null && !tile.hasDroppedBlock()) {
drops = block.getDrops(world, pos, world.getBlockState(pos), 0);
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
if (tile != null) {
tile.dropBlock();
}
}
return hasBeenBroken;
}
public static ItemStack getPickBlock(World world, BlockPos pos) {
Block block = world.getBlockState(pos).getBlock();
return getBlockDropped((IBlockMetadata) block, world, pos);
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
getDrops(drops, this, world, pos);
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
return breakBlock(this, player, world, pos);
}
@Override
public TileEntity createNewTileEntity(final World var1, final int i) {
return new TileEntityMetadata();
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
return getPickBlock(world, pos);
}
/* IBLOCKMETADATA */
@Override
public String getDisplayName(final ItemStack itemStack) {
return this.getLocalizedName();
}
@Override
public int getPlacedMeta(final ItemStack item, final World world, final BlockPos pos, final EnumFacing clickedBlock) {
return TileEntityMetadata.getItemDamage(item);
}
@Override
public int getDroppedMeta(IBlockState state, int tileMetadata) {
return getMetaFromState(state);
}
}
@@ -0,0 +1,17 @@
package binnie.core.api.block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
// TODO: move out of API
public interface IBlockMetadata extends ITileEntityProvider {
int getPlacedMeta(ItemStack itemStack, World world, BlockPos pos, EnumFacing facing);
int getDroppedMeta(IBlockState state, int tileMetadata);
String getDisplayName(ItemStack itemStack);
}
@@ -0,0 +1,125 @@
package binnie.core.api.block;
import com.google.common.base.Preconditions;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
// TODO: move out of API
public class TileEntityMetadata extends TileEntity {
private int meta;
private boolean droppedBlock;
public TileEntityMetadata() {
this.droppedBlock = false;
}
@Nullable
public static TileEntityMetadata getTile(final IBlockAccess world, final BlockPos pos) {
final TileEntity tile = world.getTileEntity(pos);
if (!(tile instanceof TileEntityMetadata)) {
return null;
}
return (TileEntityMetadata) tile;
}
public static ItemStack getItemStack(final Block block, final int damage) {
final Item item = Item.getItemFromBlock(block);
Preconditions.checkNotNull(item, "Could not get item for block %s", block);
final ItemStack itemStack = new ItemStack(item, 1, 0);
setItemDamage(itemStack, damage);
return itemStack;
}
public static void setItemDamage(final ItemStack item, final int i) {
item.setItemDamage((i < 16387) ? i : 16387);
final NBTTagCompound tag = new NBTTagCompound();
tag.setInteger("meta", i);
item.setTagCompound(tag);
}
public static int getItemDamage(final ItemStack item) {
if (item.hasTagCompound() && item.getTagCompound().hasKey("meta")) {
return item.getTagCompound().getInteger("meta");
}
return item.getItemDamage();
}
public static int getTileMetadata(final IBlockAccess world, final BlockPos pos) {
final TileEntityMetadata tile = getTile(world, pos);
return (tile == null) ? 0 : tile.getTileMetadata();
}
@Override
public boolean receiveClientEvent(final int id, final int type) {
if (id == 42) {
this.meta = type;
markDirty();
}
return true;
}
@Override
public NBTTagCompound getUpdateTag() {
return writeToNBT(new NBTTagCompound());
}
@Override
public void readFromNBT(final NBTTagCompound nbt) {
super.readFromNBT(nbt);
if(world!=null)
setTileMetadata(nbt.getInteger("meta"), world.isRemote);
else
this.meta = nbt.getInteger("meta");
}
@Override
public NBTTagCompound writeToNBT(final NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("meta", this.meta);
return nbt;
}
public int getTileMetadata() {
return this.meta;
}
public void setTileMetadata(final int meta, final boolean notify) {
if (this.meta != meta) {
this.meta = meta;
if (notify) {
IBlockState state = world.getBlockState(pos);
world.notifyBlockUpdate(pos, state, state, 3);
}
}
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
super.onDataPacket(net, pkt);
readFromNBT(pkt.getNbtCompound());
}
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
return new SPacketUpdateTileEntity(pos, 0, getUpdateTag());
}
public boolean hasDroppedBlock() {
return this.droppedBlock;
}
public void dropBlock() {
this.droppedBlock = true;
}
}
@@ -0,0 +1,148 @@
package binnie.core.api.genetics;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import java.util.TreeSet;
import com.mojang.authlib.GameProfile;
import forestry.api.core.ForestryEvent;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IClassification;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesRoot;
import forestry.api.genetics.ISpeciesType;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IBreedingSystem {
ISpeciesRoot getSpeciesRoot();
Collection<IAlleleSpecies> getAllSpecies();
Collection<IAlleleSpecies> getDiscoveredSpecies(World world, GameProfile player);
List<IClassification> getAllBranches();
Collection<IClassification> getDiscoveredBranches(World world, GameProfile player);
List<IMutation> getDiscoveredMutations(World world, GameProfile player);
List<IMutation> getResultantMutations(final IAlleleSpecies species);
List<IMutation> getFurtherMutations(final IAlleleSpecies species);
boolean isMutationDiscovered(IMutation mutation, World world, GameProfile name);
float getChance(IMutation mutation, EntityPlayer player, IAlleleSpecies firstSpecies, IAlleleSpecies secondSpecies);
String getAlleleName(final IChromosomeType chromosome, final IAllele allele);
String getChromosomeName(final IChromosomeType chromo);
String getChromosomeShortName(final IChromosomeType chromo);
@Nullable
IIndividual getConversion(final ItemStack stack);
ItemStack getConversionStack(final ItemStack stack);
@Nullable
IIndividual getIndividual(String uid);
void calculateArrays();
void addExtraAlleles(final IChromosomeType p0, final TreeSet<IAllele> p1);
String getDescriptor();
String getIdent();
ItemStack getItemStackRepresentitive();
int getColour();
int getDiscoveredSpeciesCount();
int getTotalSpeciesCount();
float getDiscoveredSpeciesPercentage();
int getTotalSecretCount();
int getDiscoveredSecretCount();
float getDiscoveredBranchPercentage();
int getTotalBranchCount();
int getDiscoveredBranchCount();
String getEpitome();
String getEpitome(float discoveredPercentage);
Collection<IMutation> getAllMutations();
void calculateAlleles(ISpeciesRoot speciesRoot);
void calculateBranches(ISpeciesRoot speciesRoot);
void calculateMutations(ISpeciesRoot speciesRoot);
boolean isBlacklisted(IAllele allele);
boolean isMutationDiscovered(IMutation mutation, IBreedingTracker tracker);
boolean isSpeciesDiscovered(IAlleleSpecies species, World world, GameProfile name);
boolean isSpeciesDiscovered(IAlleleSpecies species, IBreedingTracker tracker);
boolean isSecret(IAlleleSpecies species);
boolean isSecret(IClassification branch);
Collection<IClassification> getDiscoveredBranches(IBreedingTracker tracker);
Collection<IAlleleSpecies> getDiscoveredSpecies(IBreedingTracker tracker);
@SideOnly(Side.CLIENT)
TextureAtlasSprite getUndiscoveredIcon();
@SideOnly(Side.CLIENT)
TextureAtlasSprite getDiscoveredIcon();
Class<? extends IBreedingTracker> getTrackerClass();
@SubscribeEvent
void onSyncBreedingTracker(ForestryEvent.SyncedBreedingTracker event);
void syncTracker(IBreedingTracker tracker);
void onSyncBreedingTracker(IBreedingTracker tracker);
String getName();
boolean isDNAManipulable(ItemStack stack);
boolean isDNAManipulable(ISpeciesType type);
IIndividual getDefaultIndividual();
ISpeciesType getDefaultType();
ISpeciesType[] getActiveTypes();
Collection<IChromosomeType> getActiveKaryotype();
ItemStack getDefaultMember(String uid);
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.core.api;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,7 @@
package binnie.extrabees.api;
import binnie.core.api.genetics.IBreedingSystem;
public class ExtraBeesAPI {
public static IBreedingSystem beeBreedingSystem;
}
@@ -0,0 +1,30 @@
package binnie.extratrees.api;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
import net.minecraft.item.ItemStack;
public interface ICarpentryInterface {
boolean registerCarpentryWood(final int index, final IDesignMaterial material);
int getCarpentryWoodIndex(final IDesignMaterial material);
IDesignMaterial getWoodMaterial(final int p0);
boolean registerDesign(final int p0, final IDesign p1);
int getDesignIndex(final IDesign p0);
IDesign getDesign(final int p0);
@Nullable
IDesignMaterial getWoodMaterial(final ItemStack stack);
boolean registerDesignCategory(final IDesignCategory p0);
Collection<IDesignCategory> getAllDesignCategories();
List<IDesign> getSortedDesigns();
}
@@ -7,7 +7,7 @@ public interface IDesignCategory {
List<IDesign> getDesigns();
void addDesign(IDesign design);
void addDesign(final IDesign p0);
String getId();
}
@@ -0,0 +1,13 @@
package binnie.extratrees.api;
import net.minecraft.item.ItemStack;
public interface IDesignMaterial {
ItemStack getStack();
ItemStack getStack(boolean fireproof);
String getDesignMaterialName();
int getColour();
}
@@ -0,0 +1,36 @@
package binnie.extratrees.api;
import javax.annotation.Nullable;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IDesignSystem {
@Nullable
@SideOnly(Side.CLIENT)
TextureAtlasSprite getPrimarySprite(final IPattern pattern);
@Nullable
@SideOnly(Side.CLIENT)
TextureAtlasSprite getSecondarySprite(final IPattern pattern);
@SideOnly(Side.CLIENT)
void registerSprites();
IDesignMaterial getDefaultMaterial();
@Nullable
IDesignMaterial getMaterial(final int p0);
int getMaterialIndex(final IDesignMaterial p0);
IDesignMaterial getDefaultMaterial2();
ItemStack getAdhesive();
@Nullable
IDesignMaterial getMaterial(final ItemStack p0);
}
@@ -0,0 +1,28 @@
package binnie.extratrees.api;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface ILayout {
IPattern getPattern();
boolean isInverted();
ILayout rotateRight();
ILayout rotateLeft();
ILayout flipHorizontal();
ILayout flipVertical();
ILayout invert();
@SideOnly(Side.CLIENT)
TextureAtlasSprite getPrimarySprite(IDesignSystem system);
@SideOnly(Side.CLIENT)
TextureAtlasSprite getSecondarySprite(IDesignSystem system);
}
@@ -0,0 +1,22 @@
package binnie.extratrees.api;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.ISpriteRegister;
public interface IPattern extends ISpriteRegister {
@SideOnly(Side.CLIENT)
TextureAtlasSprite getPrimarySprite(IDesignSystem system);
@SideOnly(Side.CLIENT)
TextureAtlasSprite getSecondarySprite(IDesignSystem system);
ILayout getRotation();
ILayout getHorizontalFlip();
int getIndex();
}
@@ -0,0 +1,10 @@
package binnie.extratrees.api;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface IToolHammer {
boolean isActive(final ItemStack p0);
void onHammerUsed(final ItemStack p0, final EntityPlayer p1);
}
@@ -0,0 +1,29 @@
package binnie.extratrees.api.carpentry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import binnie.extratrees.api.IDesignSystem;
public final class DesignerManager {
public static DesignerManager instance = new DesignerManager();
private final List<IDesignSystem> systems;
private DesignerManager() {
this.systems = new ArrayList<>();
}
public void registerDesignSystem(final IDesignSystem system) {
this.systems.add(system);
}
public Collection<IDesignSystem> getDesignSystems() {
return this.systems;
}
public void addDesignSystem(final IDesignSystem system) {
this.systems.add(system);
}
}
@@ -1,11 +1,17 @@
package binnie.extratrees.carpentry;
package binnie.extratrees.api.carpentry;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.ITextureManager;
import binnie.extratrees.api.IDesignSystem;
import binnie.extratrees.api.ILayout;
import binnie.extratrees.api.IPattern;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
// TODO: move out of API
public enum EnumPattern implements IPattern {
Blank,
Octagon,
@@ -284,26 +290,26 @@ public enum EnumPattern implements IPattern {
EnumPattern.OverlappedSplitBarred2.setLeftRotation(EnumPattern.OverlappedSplitBarred, false);
}
protected ILayout leftRotation;
protected ILayout horizontalFlip;
ILayout leftRotation;
ILayout horizontalFlip;
EnumPattern() {
leftRotation = Layout.get(this, false);
horizontalFlip = Layout.get(this, false);
this.leftRotation = Layout.get(this, false);
this.horizontalFlip = Layout.get(this, false);
}
static void setupStripedPattern(EnumPattern vert, EnumPattern hori) {
static void setupStripedPattern(final EnumPattern vert, final EnumPattern hori) {
vert.setLeftRotation(hori, true);
hori.setLeftRotation(vert, false);
vert.setHorizontalFlip(vert, true);
}
static void setupChequeredPattern(EnumPattern cheq) {
static void setupChequeredPattern(final EnumPattern cheq) {
cheq.setLeftRotation(cheq, true);
cheq.setHorizontalFlip(cheq, true);
}
static void setupCornerPattern(EnumPattern tl, EnumPattern tr, EnumPattern br, EnumPattern bl) {
static void setupCornerPattern(final EnumPattern tl, final EnumPattern tr, final EnumPattern br, final EnumPattern bl) {
tl.setLeftRotation(bl, false);
tr.setLeftRotation(tl, false);
br.setLeftRotation(tr, false);
@@ -312,24 +318,24 @@ public enum EnumPattern implements IPattern {
bl.setHorizontalFlip(br, false);
}
static void setupInvert2Rot(EnumPattern a, EnumPattern b) {
static void setupInvert2Rot(final EnumPattern a, final EnumPattern b) {
a.setLeftRotation(b, true);
b.setLeftRotation(a, false);
a.setHorizontalFlip(b, false);
}
static void set2Rotation(EnumPattern a, EnumPattern b) {
static void set2Rotation(final EnumPattern a, final EnumPattern b) {
a.setLeftRotation(b, false);
b.setLeftRotation(a, false);
a.setHorizontalFlip(b, false);
}
static void setupBarredPattern(EnumPattern vert, EnumPattern hori) {
static void setupBarredPattern(final EnumPattern vert, final EnumPattern hori) {
vert.setLeftRotation(hori, false);
hori.setLeftRotation(vert, false);
}
static void setupEdgedPattern(EnumPattern l, EnumPattern t, EnumPattern r, EnumPattern b) {
static void setupEdgedPattern(final EnumPattern l, final EnumPattern t, final EnumPattern r, final EnumPattern b) {
l.setLeftRotation(b, false);
t.setLeftRotation(l, false);
r.setLeftRotation(t, false);
@@ -337,13 +343,13 @@ public enum EnumPattern implements IPattern {
l.setHorizontalFlip(r, false);
}
static void setupDiagonalPattern(EnumPattern a, EnumPattern b) {
static void setupDiagonalPattern(final EnumPattern a, final EnumPattern b) {
a.setLeftRotation(b, false);
b.setLeftRotation(a, false);
a.setHorizontalFlip(b, false);
}
static void setupBarredPattern(EnumPattern l, EnumPattern t, EnumPattern r, EnumPattern b) {
static void setupBarredPattern(final EnumPattern l, final EnumPattern t, final EnumPattern r, final EnumPattern b) {
l.setLeftRotation(b, false);
t.setLeftRotation(l, false);
r.setLeftRotation(t, false);
@@ -351,52 +357,59 @@ public enum EnumPattern implements IPattern {
l.setHorizontalFlip(r, false);
}
static void setupTSectionPattern(EnumPattern l, EnumPattern t, EnumPattern r, EnumPattern b) {
static void setupTSectionPattern(final EnumPattern l, final EnumPattern t, final EnumPattern r, final EnumPattern b) {
setupEdgedPattern(l, t, r, b);
}
private static void setupRotation(EnumPattern t, EnumPattern r, EnumPattern b, EnumPattern l) {
private static void setupRotation(final EnumPattern t, final EnumPattern r, final EnumPattern b, final EnumPattern l) {
setupEdgedPattern(l, t, r, b);
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getPrimaryIcon(IDesignSystem system) {
return system.getPrimaryIcon(this);
public TextureAtlasSprite getPrimarySprite(IDesignSystem system) {
return system.getPrimarySprite(this);
}
private void setHorizontalFlip(EnumPattern pattern, boolean inverted) {
horizontalFlip = Layout.get(pattern, inverted);
private void setHorizontalFlip(final EnumPattern pattern, final boolean inverted) {
this.horizontalFlip = Layout.get(pattern, inverted);
pattern.horizontalFlip = Layout.get(this, inverted);
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getSecondaryIcon(IDesignSystem system) {
return system.getSecondaryIcon(this);
public TextureAtlasSprite getSecondarySprite(IDesignSystem system) {
return system.getSecondarySprite(this);
}
@Override
public ILayout getRotation() {
return leftRotation;
return this.leftRotation;
}
@Override
public ILayout getHorizontalFlip() {
return horizontalFlip;
}
protected void setLeftRotation(EnumPattern pattern, boolean inverted) {
leftRotation = Layout.get(pattern, inverted);
return this.horizontalFlip;
}
@Override
public void registerIcons(IIconRegister register) {
public int getIndex() {
return ordinal();
}
protected void setLeftRotation(final EnumPattern pattern, final boolean inverted) {
this.leftRotation = Layout.get(pattern, inverted);
}
@Override
public void registerSprites(ITextureManager manager) {
}
public ILayout layout() {
return layout(false);
return this.layout(false);
}
public ILayout layout(boolean invert) {
public ILayout layout(final boolean invert) {
return Layout.get(this, invert);
}
}
@@ -0,0 +1,7 @@
package binnie.extratrees.api.carpentry;
import binnie.extratrees.api.IDesignSystem;
public interface IBlockDesign {
IDesignSystem getDesignSystem();
}
@@ -0,0 +1,4 @@
package binnie.extratrees.api.carpentry;
public interface IBlockDesignProperties {
}
@@ -0,0 +1,79 @@
package binnie.extratrees.api.carpentry;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.extratrees.api.IDesignSystem;
import binnie.extratrees.api.ILayout;
import binnie.extratrees.api.IPattern;
public class Layout implements ILayout {
IPattern pattern;
boolean inverted;
private Layout(final IPattern pattern, final boolean inverted) {
this.pattern = pattern;
this.inverted = inverted;
}
public static ILayout get(final IPattern pattern, final boolean inverted) {
return new Layout(pattern, inverted);
}
public static ILayout get(final IPattern pattern) {
return new Layout(pattern, false);
}
@Override
public IPattern getPattern() {
return this.pattern;
}
@Override
public boolean isInverted() {
return this.inverted;
}
ILayout newLayout(final ILayout newLayout) {
return new Layout(newLayout.getPattern(), this.inverted ^ newLayout.isInverted());
}
@Override
public ILayout rotateRight() {
return this.rotateLeft().rotateLeft().rotateLeft();
}
@Override
public ILayout rotateLeft() {
return this.newLayout(this.pattern.getRotation());
}
@Override
public ILayout flipHorizontal() {
return this.newLayout(this.pattern.getHorizontalFlip());
}
@Override
public ILayout flipVertical() {
return this.newLayout(this.pattern.getHorizontalFlip().rotateLeft().rotateLeft());
}
@SideOnly(Side.CLIENT)
@Override
public TextureAtlasSprite getPrimarySprite(IDesignSystem system) {
return this.inverted ? this.pattern.getSecondarySprite(system) : this.pattern.getPrimarySprite(system);
}
@SideOnly(Side.CLIENT)
@Override
public TextureAtlasSprite getSecondarySprite(IDesignSystem system) {
return this.inverted ? this.pattern.getPrimarySprite(system) : this.pattern.getSecondarySprite(system);
}
@Override
public ILayout invert() {
return new Layout(this.pattern, !this.inverted);
}
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.extratrees.api;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,15 @@
package binnie.extratrees.api.recipes;
import javax.annotation.Nullable;
public class ExtraTreesRecipeManager {
@Nullable
public static IBreweryManager breweryManager;
@Nullable
public static ILumbermillManager lumbermillManager;
@Nullable
public static IFruitPressManager fruitPressManager;
@Nullable
public static IDistilleryManager distilleryManager;
}
@@ -0,0 +1,22 @@
package binnie.extratrees.api.recipes;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
public interface IBreweryCrafting {
@Nullable
FluidStack getInputFluid();
@Nullable
ItemStack[] getInputGrains();
ItemStack getIngredient();
ItemStack getYeast();
boolean hasInputGrainsEmpty();
}
@@ -0,0 +1,22 @@
package binnie.extratrees.api.recipes;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.api.ICraftingManager;
public interface IBreweryManager extends ICraftingManager<IBreweryRecipe> {
void addRecipe(FluidStack input, FluidStack output);
void addRecipe(FluidStack input, FluidStack output, ItemStack yeast);
void addGrainRecipe(String grainOreName, FluidStack output);
void addGrainRecipe(String grainOreName, FluidStack output, String ingredientOreName);
void addGrainRecipe(String grainOreName, FluidStack output, @Nullable String ingredientOreName, ItemStack yeast);
}
@@ -0,0 +1,29 @@
package binnie.extratrees.api.recipes;
import javax.annotation.Nullable;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.api.IBinnieRecipe;
public interface IBreweryRecipe extends IBinnieRecipe {
@Nullable
FluidStack getOutput(IBreweryCrafting crafting);
FluidStack getInput();
FluidStack getOutput();
boolean isIngredient(ItemStack itemStack);
List<ItemStack> getIngredients();
boolean isGrain(ItemStack itemStack);
List<ItemStack> getGrains();
ItemStack getYeast();
}
@@ -0,0 +1,14 @@
package binnie.extratrees.api.recipes;
import java.util.Collection;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.api.ICraftingManager;
public interface IDistilleryManager extends ICraftingManager<IDistilleryRecipe> {
void addRecipe(FluidStack input, FluidStack output, int level);
Collection<IDistilleryRecipe> recipes(int level);
}
@@ -0,0 +1,14 @@
package binnie.extratrees.api.recipes;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.api.IBinnieRecipe;
public interface IDistilleryRecipe extends IBinnieRecipe {
FluidStack getInput();
FluidStack getOutput();
int getLevel();
}
@@ -0,0 +1,12 @@
package binnie.extratrees.api.recipes;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.api.ICraftingManager;
public interface IFruitPressManager extends ICraftingManager<IFruitPressRecipe> {
void addRecipe(ItemStack input, FluidStack output);
}
@@ -0,0 +1,14 @@
package binnie.extratrees.api.recipes;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import binnie.core.api.IBinnieRecipe;
public interface IFruitPressRecipe extends IBinnieRecipe {
ItemStack getInput();
FluidStack getOutput();
}
@@ -0,0 +1,10 @@
package binnie.extratrees.api.recipes;
import net.minecraft.item.ItemStack;
import binnie.core.api.ICraftingManager;
public interface ILumbermillManager extends ICraftingManager<ILumbermillRecipe> {
void addRecipe(ItemStack input, ItemStack output);
}
@@ -0,0 +1,12 @@
package binnie.extratrees.api.recipes;
import net.minecraft.item.ItemStack;
import binnie.core.api.IBinnieRecipe;
public interface ILumbermillRecipe extends IBinnieRecipe {
ItemStack getOutput();
ItemStack getInput();
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.extratrees.api.recipes;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,21 @@
package binnie.genetics.api;
import net.minecraft.nbt.NBTTagCompound;
import forestry.api.core.INbtReadable;
import forestry.api.core.INbtWritable;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.ISpeciesRoot;
public interface IGene extends INbtReadable, INbtWritable {
IChromosomeType getChromosome();
String getName();
ISpeciesRoot getSpeciesRoot();
IAllele getAllele();
NBTTagCompound getNBTTagCompound();
}
@@ -0,0 +1,16 @@
package binnie.genetics.api;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.ISpeciesRoot;
public interface IItemChargeable {
int getCharges(ItemStack stack);
int getMaxCharges(ItemStack stack);
@Nullable
ISpeciesRoot getSpeciesRoot(ItemStack stack);
}
@@ -0,0 +1,14 @@
package binnie.genetics.api;
import javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
public interface IItemSerum extends IItemChargeable {
IGene[] getGenes(ItemStack stack);
@Nullable
IGene getGene(ItemStack stack, int chromosome);
ItemStack addGene(ItemStack stack, IGene gene);
}
@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package binnie.genetics.api;
import javax.annotation.ParametersAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
+9
View File
@@ -0,0 +1,9 @@
archivesBaseName = 'botany-' + mcversion
dependencies {
compile project(":api")
compile project(":core")
// TODO: remove
compile project(":extratrees")
}
@@ -0,0 +1,105 @@
package binnie.botany;
import binnie.botany.genetics.FlowerBreedingSystem;
import binnie.core.Binnie;
import binnie.core.api.genetics.IBreedingSystem;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import binnie.core.Constants;
import binnie.botany.gui.BotanyGUI;
import binnie.botany.network.PacketID;
import binnie.botany.proxy.Proxy;
import binnie.core.BinnieCore;
import binnie.core.gui.IBinnieGUID;
import binnie.core.network.BinniePacketHandler;
import binnie.core.network.IPacketID;
import binnie.core.proxy.IProxyCore;
import binnie.core.modules.BlankModuleContainer;
@Mod(
modid = Constants.BOTANY_MOD_ID,
name = "Binnie's Botany",
dependencies = "required-after:" + Constants.CORE_MOD_ID
)
public class Botany extends BlankModuleContainer {
public static final float AGE_CHANCE = 0.2f;
@SuppressWarnings("NullableProblems")
@Mod.Instance(Constants.BOTANY_MOD_ID)
public static Botany instance;
@SuppressWarnings("NullableProblems")
@SidedProxy(clientSide = "binnie.botany.proxy.ProxyClient", serverSide = "binnie.botany.proxy.ProxyServer")
public static Proxy proxy;
public static IBreedingSystem flowerBreedingSystem;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent evt) {
super.preInit(evt);
flowerBreedingSystem = new FlowerBreedingSystem();
Binnie.GENETICS.registerBreedingSystem(flowerBreedingSystem);
}
@Mod.EventHandler
public void init(FMLInitializationEvent evt) {
super.init(evt);
}
@Mod.EventHandler
public void postInit(FMLPostInitializationEvent evt) {
super.postInit(evt);
}
@Override
protected void registerModules() {
}
@Override
public IBinnieGUID[] getGUIDs() {
return BotanyGUI.values();
}
@Override
public Class<?>[] getConfigs() {
return new Class[0];
}
@Override
public IPacketID[] getPacketIDs() {
return PacketID.values();
}
@Override
public IProxyCore getProxy() {
return Botany.proxy;
}
@Override
public String getChannel() {
return "BOT";
}
@Override
public String getModID() {
return Constants.BOTANY_MOD_ID;
}
@Override
protected Class<? extends BinniePacketHandler> getPacketHandler() {
return PacketHandler.class;
}
@Override
public boolean isAvailable() {
return BinnieCore.isBotanyActive();
}
public static class PacketHandler extends BinniePacketHandler {
public PacketHandler() {
super(Botany.instance);
}
}
}
@@ -0,0 +1,36 @@
package binnie.botany;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.core.util.I18N;
public class CreativeTabBotany extends CreativeTabs {
public static CreativeTabs instance = new CreativeTabBotany();
public CreativeTabBotany() {
super("Botany");
}
@Override
@SideOnly(Side.CLIENT)
public String getTranslatedTabLabel() {
return getTabLabel();
}
@Override
@SideOnly(Side.CLIENT)
public String getTabLabel() {
return I18N.localise("botany.tab.botany");
}
@Override
@SideOnly(Side.CLIENT)
public ItemStack getTabIconItem() {
return new ItemStack(Blocks.RED_FLOWER, 1, 5);
}
}
@@ -0,0 +1,274 @@
package binnie.botany;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import forestry.api.climate.IClimateInfo;
import forestry.api.core.EnumTemperature;
import forestry.api.core.ForestryAPI;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumFertiliserType;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.blocks.BlockPlant;
import binnie.botany.blocks.BlockSoil;
import binnie.botany.modules.ModuleGardening;
import binnie.core.util.OreDictionaryUtil;
public class GardeningManager implements IGardeningManager {
private final Map<EnumFertiliserType, Map<ItemStack, Integer>> fertilisers = new LinkedHashMap<>();
public GardeningManager() {
for(EnumFertiliserType type : EnumFertiliserType.values()){
fertilisers.put(type, new LinkedHashMap<>());
}
}
@Override
public boolean isSoil(Block block) {
return block instanceof IBlockSoil;
}
@Override
public boolean isSoil(Item item) {
return item instanceof ItemBlock && isSoil(((ItemBlock) item).getBlock());
}
@Override
public boolean isSoil(ItemStack item) {
return isSoil(item.getItem());
}
@Override
public EnumMoisture getNaturalMoisture(World world, BlockPos pos) {
float moisture = getBiomeMoisture(world, pos);
for (int offsetX = -1; offsetX < 2; ++offsetX) {
for (int offsetY = -1; offsetY < 2; ++offsetY) {
if (offsetX != 0 || offsetY != 0) {
Block block = world.getBlockState(pos.add(offsetX, 0, offsetY)).getBlock();
if (block == Blocks.SAND) {
moisture -= 1.5;
} else if (block == Blocks.WATER) {
moisture += 1.5;
}
}
}
}
if (world.isRainingAt(pos.up())) {
moisture += 1.5;
}
for (int offsetX = -1; offsetX < 2; ++offsetX) {
for (int offsetY = -1; offsetY < 2; ++offsetY) {
if (offsetX != 0 || offsetY != 0) {
Block block = world.getBlockState(pos.add(offsetX, 0, offsetY)).getBlock();
if (block == Blocks.GRAVEL && moisture > 0.0f) {
moisture *= 0.4f;
}
}
}
}
return EnumMoisture.getFromValue(moisture);
}
@Override
public EnumAcidity getNaturalPH(World world, BlockPos pos) {
float acidity = getBiomePH(world, pos);
return EnumAcidity.getFromValue(acidity);
}
@Override
public float getBiomeMoisture(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
double moisture = 3.2 * (humidity - 0.5) - 0.4 * (1.0 + temperature + 0.5 * temperature * temperature) + 1.1 - 1.6 * (temperature - 0.9) * (temperature - 0.9) - 0.002 * (pos.getY() - 64);
return (float) ((moisture == 0.0) ? moisture : ((moisture < 0.0) ? (-Math.sqrt(moisture * moisture)) : Math.sqrt(moisture * moisture)));
}
@Override
public float getBiomePH(World world, BlockPos pos) {
IClimateInfo info = ForestryAPI.climateManager.getInfo(world, pos);
double humidity = info.getHumidity();
double temperature = info.getTemperature();
return (float) (-3.0 * (humidity - 0.5) + 0.5 * (temperature - 0.699999988079071) * (temperature - 0.699999988079071) + 0.02f * (pos.getY() - 64) - 0.15000000596046448);
}
@Override
public IBlockState getSoil(EnumSoilType soil, boolean weedKill, EnumMoisture moisture, EnumAcidity acidity) {
IBlockState blockState = getSoilBlock(soil, weedKill).getDefaultState();
return blockState.withProperty(BlockSoil.MOISTURE, moisture).withProperty(BlockSoil.ACIDITY, acidity);
}
@Override
public void plantSoil(World world, BlockPos pos, EnumSoilType soil, EnumMoisture moisture, EnumAcidity acidity) {
IBlockState blockState = getSoil(soil, false, moisture, acidity);
world.setBlockState(pos, blockState, 2);
}
public Map<EnumFertiliserType, Map<ItemStack, Integer>> getFertilisers() {
return fertilisers;
}
@Override
public Collection<ItemStack> getFertilisers(EnumFertiliserType type) {
Set<ItemStack> items = fertilisers.get(type).keySet();
return Collections.unmodifiableSet(items);
}
@Override
public boolean isFertiliser(EnumFertiliserType type, ItemStack stack) {
Collection<ItemStack> fertilisers = getFertilisers(type);
for (ItemStack fertiliser : fertilisers) {
if (!fertiliser.isEmpty() && fertiliser.isItemEqual(stack)) {
return true;
}
}
return false;
}
@Override
public void registerFertiliser(EnumFertiliserType type, ItemStack stack, int strength) {
fertilisers.get(type).put(stack, strength);
}
@Override
public int getFertiliserStrength(ItemStack stack) {
for(EnumFertiliserType type : EnumFertiliserType.values()) {
for (Map.Entry<ItemStack, Integer> entry : fertilisers.get(type).entrySet()) {
if (entry.getKey().isItemEqual(stack)) {
return entry.getValue();
}
}
}
return 1;
}
@Override
public boolean onFertiliseSoil(ItemStack heldItem, IBlockSoil soil, World world, BlockPos pos, EntityPlayer player) {
int fertiliserStrength = getFertiliserStrength(heldItem);
if (isFertiliser(EnumFertiliserType.NUTRIENT, heldItem) && soil.getType(world, pos) != EnumSoilType.FLOWERBED) {
EnumSoilType type = soil.getType(world, pos);
int next = Math.min(type.ordinal() + fertiliserStrength, 2);
if (soil.fertilise(world, pos, EnumSoilType.values()[next])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
if (isFertiliser(EnumFertiliserType.ACID, heldItem) && soil.getPH(world, pos) != EnumAcidity.ACID) {
EnumAcidity pH = soil.getPH(world, pos);
int next = Math.max(pH.ordinal() - fertiliserStrength, 0);
if (soil.setPH(world, pos, EnumAcidity.values()[next])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
if (isFertiliser(EnumFertiliserType.ALKALINE, heldItem) && soil.getPH(world, pos) != EnumAcidity.ALKALINE) {
EnumAcidity pH = soil.getPH(world, pos);
int next = Math.min(pH.ordinal() + fertiliserStrength, 2);
if (soil.setPH(world, pos, EnumAcidity.values()[next])) {
if(!player.capabilities.isCreativeMode) {
heldItem.shrink(1);
}
return true;
}
}
return false;
}
@Override
public boolean canTolerate(@Nullable IFlower flower, World world, BlockPos pos) {
if (flower == null) {
return false;
}
IBlockState soil = world.getBlockState(pos.down());
Biome biome = world.getBiome(pos);
EnumAcidity acidity = soil.getValue(BlockSoil.ACIDITY);
EnumMoisture moisture = soil.getValue(BlockSoil.MOISTURE);
EnumTemperature temperature = EnumTemperature.getFromValue(biome.getTemperature());
return canTolerate(flower, acidity, moisture, temperature);
}
@Override
public EnumSoilType getSoilType(World world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
if (blockState.getBlock() instanceof IBlockSoil) {
IBlockSoil soil = ((IBlockSoil) blockState.getBlock());
return soil.getType(world, pos);
}
return EnumSoilType.SOIL;
}
@Override
public Block getSoilBlock(EnumSoilType type) {
return getSoilBlock(type, false);
}
@Override
public Block getSoilBlock(EnumSoilType type, boolean weedKill) {
switch (type) {
case FLOWERBED:
return weedKill ? ModuleGardening.flowerbedNoWeed : ModuleGardening.flowerbed;
case LOAM:
return weedKill ? ModuleGardening.loamNoWeed : ModuleGardening.loam;
default:
return weedKill ? ModuleGardening.soilNoWeed : ModuleGardening.soil;
}
}
@Override
public boolean canTolerate(IFlower flower, EnumAcidity acidity, EnumMoisture moisture, EnumTemperature temperature) {
IFlowerGenome genome = flower.getGenome();
return genome.canTolerate(acidity) && genome.canTolerate(moisture) && genome.canTolerate(temperature);
}
@Override
public boolean isWeedkiller(ItemStack heldItem) {
return OreDictionaryUtil.hasOreName(heldItem, "weedkiller");
}
@Override
public boolean addWeedKiller(World world, BlockPos pos) {
IBlockState oldState = world.getBlockState(pos);
if (!(oldState.getBlock() instanceof IBlockSoil)) {
return false;
}
EnumSoilType type = getSoilType(world, pos);
IBlockState newState = getSoil(type, true, oldState.getValue(BlockSoil.MOISTURE), oldState.getValue(BlockSoil.ACIDITY));
boolean done = world.setBlockState(pos, newState, 2);
if (done && BlockPlant.isWeed(world, pos.up())) {
world.setBlockToAir(pos.up());
}
return done;
}
}
@@ -0,0 +1,118 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.tile.TileCeramic;
import binnie.core.util.TileUtil;
public class BlockCeramic extends Block implements IColoredBlock, IItemModelRegister {
public BlockCeramic() {
super(Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramic");
setCreativeTab(CreativeTabBotany.instance);
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
manager.registerItemModel(item, c.ordinal());
}
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, @Nullable EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = new ArrayList<>();
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
drops = Collections.singletonList(ceramic.getStack());
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileCeramic();
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
TileCeramic ceramic = TileUtil.getTile(worldIn, pos, TileCeramic.class);
if (ceramic != null) {
ceramic.setColor(EnumFlowerColor.VALUES[stack.getItemDamage()]);
}
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
itemList.add(new ItemStack(this, 1, c.getFlowerColorAllele().getID()));
}
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
return ceramic.getStack();
}
return super.getPickBlock(state, target, world, pos, player);
}
@SideOnly(Side.CLIENT)
@Override
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
return ceramic.getColor().getFlowerColorAllele().getColor(false);
}
}
return EnumFlowerColor.get(0).getFlowerColorAllele().getColor(false);
}
}
@@ -0,0 +1,265 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.api.core.ISpriteRegister;
import forestry.api.core.IStateMapperRegister;
import forestry.api.core.ITextureManager;
import forestry.core.blocks.IColoredBlock;
import forestry.core.blocks.properties.UnlistedBlockAccess;
import forestry.core.blocks.properties.UnlistedBlockPos;
import forestry.core.models.BlockModelEntry;
import binnie.core.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.ceramic.brick.CeramicBrickPair;
import binnie.botany.ceramic.brick.CeramicBrickType;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.tile.TileCeramic;
import binnie.botany.tile.TileCeramicBrick;
import binnie.core.block.IMultipassBlock;
import binnie.core.models.DefaultStateMapper;
import binnie.core.models.ModelManager;
import binnie.core.models.ModelMutlipass;
import binnie.core.util.TileUtil;
public class BlockCeramicBrick extends Block implements IMultipassBlock<CeramicBrickPair>, IColoredBlock, ISpriteRegister, IStateMapperRegister, IItemModelRegister {
private static final PropertyEnum<CeramicBrickType> TYPE = PropertyEnum.create("type", CeramicBrickType.class);
public BlockCeramicBrick() {
super(Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramicBrick");
setCreativeTab(CreativeTabBotany.instance);
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, @Nullable EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = new ArrayList<>();
TileCeramic ceramic = TileUtil.getTile(world, pos, TileCeramic.class);
if (ceramic != null) {
drops = Collections.singletonList(ceramic.getStack());
}
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileCeramicBrick();
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
for (EnumFlowerColor color : EnumFlowerColor.values()) {
itemList.add(new CeramicBrickPair(color, color, CeramicBrickType.TILE).getStack(1));
}
for (CeramicBrickType type : CeramicBrickType.VALUES) {
if (type.canDouble()) {
itemList.add(new CeramicBrickPair(EnumFlowerColor.Brown, EnumFlowerColor.Gold, type).getStack(1));
}
}
itemList.add(new CeramicBrickPair(EnumFlowerColor.Gold, EnumFlowerColor.Gold, CeramicBrickType.SPLIT).getStack(1));
itemList.add(new CeramicBrickPair(EnumFlowerColor.Brown, EnumFlowerColor.Brown, CeramicBrickType.CHEQUERED).getStack(1));
itemList.add(new CeramicBrickPair(EnumFlowerColor.Gold, EnumFlowerColor.Brown, CeramicBrickType.LARGE_BRICK).getStack(1));
}
@SideOnly(Side.CLIENT)
@Override
public void registerStateMapper() {
ResourceLocation resourceLocation = new ResourceLocation(Constants.BOTANY_MOD_ID, "ceramicBrick");
ModelLoader.setCustomStateMapper(this, new DefaultStateMapper(resourceLocation));
ModelManager.registerCustomBlockModel(new BlockModelEntry(
new ModelResourceLocation(resourceLocation, "normal"),
new ModelResourceLocation(resourceLocation, "inventory"),
new ModelMutlipass<>(BlockCeramicBrick.class),
this
));
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
manager.registerItemModel(item, new CeramicBrickMeshDefinition());
}
@Override
protected BlockStateContainer createBlockState() {
return new ExtendedBlockState(
this,
new IProperty[]{TYPE},
new IUnlistedProperty[]{
UnlistedBlockPos.POS,
UnlistedBlockAccess.BLOCKACCESS
}
);
}
@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(TYPE, CeramicBrickType.VALUES[meta]);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(TYPE).ordinal();
}
@Override
public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) {
return ((IExtendedBlockState) super.getExtendedState(state, world, pos)).withProperty(UnlistedBlockPos.POS, pos).withProperty(UnlistedBlockAccess.BLOCKACCESS, world);
}
@Override
public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) {
ItemStack stack = placer.getHeldItem(hand);
CeramicBrickPair pair = new CeramicBrickPair(stack);
return getDefaultState().withProperty(TYPE, pair.type);
}
@Override
public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
TileCeramicBrick ceramic = TileUtil.getTile(worldIn, pos, TileCeramicBrick.class);
if (ceramic != null) {
CeramicBrickPair pair = new CeramicBrickPair(stack);
ceramic.setColors(pair.colorFirst, pair.colorSecond);
}
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
TileCeramicBrick ceramic = TileUtil.getTile(world, pos, TileCeramicBrick.class);
if (ceramic != null) {
return ceramic.pair().getStack(0);
}
return super.getPickBlock(state, target, world, pos, player);
}
@SideOnly(Side.CLIENT)
@Override
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileCeramicBrick ceramic = TileUtil.getTile(world, pos, TileCeramicBrick.class);
if (ceramic != null) {
if (tintIndex == 1) {
return ceramic.getColorFirst().getFlowerColorAllele().getColor(false);
} else if (tintIndex == 2) {
return ceramic.getColorSecond().getFlowerColorAllele().getColor(false);
}
}
}
return 0xffffff;
}
@SideOnly(Side.CLIENT)
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderPasses() {
return 3;
}
@Override
@SideOnly(Side.CLIENT)
public CeramicBrickPair getInventoryKey(ItemStack stack) {
return new CeramicBrickPair(stack);
}
@Override
@SideOnly(Side.CLIENT)
public CeramicBrickPair getWorldKey(IBlockState state) {
IExtendedBlockState extendedState = (IExtendedBlockState) state;
IBlockAccess world = extendedState.getValue(UnlistedBlockAccess.BLOCKACCESS);
BlockPos pos = extendedState.getValue(UnlistedBlockPos.POS);
TileCeramicBrick ceramic = TileUtil.getTile(world, pos, TileCeramicBrick.class);
if (ceramic != null) {
return ceramic.pair();
}
return CeramicBrickPair.EMPTY;
}
@Override
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite(CeramicBrickPair type, @Nullable EnumFacing facing, int pass) {
return type.getSprite(pass);
}
@Override
@SideOnly(Side.CLIENT)
public void registerSprites(ITextureManager manager) {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
for (CeramicBrickType type : CeramicBrickType.VALUES) {
type.sprites = new TextureAtlasSprite[3];
for (int i = 0; i < 3; ++i) {
type.sprites[i] = textureMap.registerSprite(new ResourceLocation(Constants.BOTANY_MOD_ID + ":blocks/ceramic." + type.id + "." + i));
}
}
}
private class CeramicBrickMeshDefinition implements ItemMeshDefinition {
@Override
public ModelResourceLocation getModelLocation(ItemStack stack) {
return new ModelResourceLocation(Constants.BOTANY_MOD_ID + ":ceramicBrick", "inventory");
}
}
}
@@ -0,0 +1,32 @@
package binnie.botany.blocks;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import binnie.botany.ceramic.CeramicColor;
import binnie.botany.ceramic.CeramicDesignSystem;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.core.util.I18N;
import binnie.extratrees.api.IDesign;
import binnie.extratrees.carpentry.BlockDesign;
import binnie.extratrees.carpentry.DesignBlock;
import binnie.extratrees.carpentry.ModuleCarpentry;
public class BlockCeramicPatterned extends BlockDesign {
public BlockCeramicPatterned() {
super(CeramicDesignSystem.instance, Material.ROCK);
setHardness(1.0f);
setResistance(5.0f);
setRegistryName("ceramicPattern");
}
@Override
public ItemStack getCreativeStack(IDesign design) {
return ModuleCarpentry.getItemStack(this, CeramicColor.get(EnumFlowerColor.White), CeramicColor.get(EnumFlowerColor.Black), design);
}
@Override
public String getBlockName(DesignBlock design) {
return I18N.localise("botany.ceramic.block.name", design.getDesign().getName());
}
}
@@ -0,0 +1,310 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IStateMapperRegister;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.Botany;
import binnie.botany.api.genetics.IFlower;
import binnie.botany.api.genetics.IFlowerGenome;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.api.genetics.IFlowerType;
import binnie.botany.blocks.properties.PropertyFlower;
import binnie.botany.core.BotanyCore;
import binnie.botany.genetics.EnumFlowerType;
import binnie.botany.genetics.FlowerDefinition;
import binnie.botany.models.StateMapperFlower;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.network.PacketID;
import binnie.botany.tile.TileEntityFlower;
import binnie.core.BinnieCore;
import binnie.core.network.packet.MessageNBT;
import binnie.core.util.TileUtil;
public class BlockFlower extends BlockContainer implements IColoredBlock, IStateMapperRegister {
public static final AxisAlignedBB FLOWER_BLOCK_AABB = new AxisAlignedBB(0.3D, 0.0D, 0.3D, 0.7D, 0.6D, 0.7D);
/* PROPERTIES */
public static final PropertyFlower FLOWER = new PropertyFlower("flower", IFlowerType.class);
public static final PropertyInteger SECTION = PropertyInteger.create("section", 0, EnumFlowerType.highestSection - 1);
public static final PropertyBool FLOWERED = PropertyBool.create("flowered");
public static final PropertyBool SEED = PropertyBool.create("seed");
public BlockFlower() {
super(Material.PLANTS);
setTickRandomly(true);
setRegistryName("flower");
setSoundType(SoundType.PLANT);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityFlower();
}
@Override
@SideOnly(Side.CLIENT)
public void registerStateMapper() {
ModelLoader.setCustomStateMapper(this, new StateMapperFlower());
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
ItemStack heldItem = player.getHeldItemMainhand();
if (heldItem.isEmpty() || heldItem.getItem() != BinnieCore.getFieldKit() || !player.isSneaking()) {
return false;
}
if (world.isRemote) {
return true;
}
TileEntity tile = world.getTileEntity(pos);
if (!(tile instanceof TileEntityFlower)) {
return true;
}
TileEntityFlower tileFlower = (TileEntityFlower) tile;
IFlower flower = tileFlower.getFlower();
if (flower == null) {
return true;
}
IFlowerGenome flowerGenome = flower.getGenome();
NBTTagCompound info = new NBTTagCompound();
info.setString("Species", flowerGenome.getPrimary().getUID());
info.setString("Species2", flowerGenome.getSecondary().getUID());
info.setFloat("Age", flower.getAge() / flowerGenome.getLifespan());
info.setShort("Colour", (short) flowerGenome.getPrimaryColor().getID());
info.setShort("Colour2", (short) flowerGenome.getSecondaryColor().getID());
info.setBoolean("Wilting", flower.isWilted());
info.setBoolean("Flowered", flower.hasFlowered());
Botany.proxy.sendToPlayer(new MessageNBT(PacketID.FIELDKIT.ordinal(), info), player);
heldItem.damageItem(1, player);
return true;
}
@Override
@Nullable
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
return null;
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
TileEntity tile = source.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getType().getSections() > 1) {
return FULL_BLOCK_AABB;
}
}
return FLOWER_BLOCK_AABB.offset(getOffset(state, source, pos));
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
IFlowerRoot flowerRoot = BotanyCore.getFlowerRoot();
TileEntity flower = world.getTileEntity(pos);
if (!!world.isRemote) {
if (flower != null && flower instanceof TileEntityFlower) {
IFlower f = flowerRoot.getMember(stack);
if (f != null) {
((TileEntityFlower) flower).setRender(new TileEntityFlower.RenderInfo(f, (TileEntityFlower) flower));
}
}
return;
}
TileEntity below = world.getTileEntity(pos.down());
if (flower != null && flower instanceof TileEntityFlower) {
if (below instanceof TileEntityFlower) {
((TileEntityFlower) flower).setSection(((TileEntityFlower) below).getSection());
} else {
GameProfile owner = (placer instanceof EntityPlayer) ? ((EntityPlayer) placer).getGameProfile() : null;
((TileEntityFlower) flower).create(stack, owner);
}
}
flowerRoot.tryGrowSection(world, pos);
}
@Override
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess world, @Nullable BlockPos pos, int tintIndex) {
if (world != null && pos != null) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (tintIndex == 0) {
return flower.getStemColour();
} else if (tintIndex == 1) {
return flower.getPrimaryColour();
}
return flower.getSecondaryColour();
}
}
return 0xffffff;
}
@Override
public boolean canPlaceBlockAt(World world, BlockPos pos) {
return super.canPlaceBlockAt(world, pos) && canBlockStay(world, pos);
}
public boolean canBlockStay(World world, BlockPos pos) {
TileEntity tile = world.getTileEntity(pos);
IBlockState downState = world.getBlockState(pos.down());
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() > 0) {
return downState.getBlock() == ModuleFlowers.flower;
}
return canPlaceBlockOn(downState.getBlock());
}
protected boolean canPlaceBlockOn(Block block) {
return block == Blocks.GRASS
|| block == Blocks.DIRT
|| block == Blocks.FARMLAND
|| BotanyCore.getGardening().isSoil(block);
}
@Override
@SideOnly(Side.CLIENT)
public EnumBlockRenderType getRenderType(IBlockState state) {
return EnumBlockRenderType.MODEL;
}
@Override
@SideOnly(Side.CLIENT)
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
}
@Override
@SideOnly(Side.CLIENT)
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
TileEntityFlower flower = TileUtil.getTile(world, pos, TileEntityFlower.class);
if (flower != null && flower.getType() != null) {
state = state.withProperty(FLOWER, flower.getType());
state = state.withProperty(FLOWERED, flower.isFlowered());
state = state.withProperty(SECTION, flower.getRenderSection());
state = state.withProperty(SEED, flower.getAge() == 0);
} else {
state = state.withProperty(FLOWER, FlowerDefinition.Dandelion.getSpecies().getType());
state = state.withProperty(FLOWERED, false);
state = state.withProperty(SEED, false);
}
return state;
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, FLOWER, FLOWERED, SECTION, SEED);
}
@Override
public int getMetaFromState(IBlockState state) {
return 0;
}
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) {
checkAndDropBlock(worldIn, pos);
TileEntity tile = worldIn.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
TileEntityFlower flower = (TileEntityFlower) tile;
if (flower.getSection() == 0 && flower.getFlower() != null && flower.getFlower().getAge() > 0 && flower.getFlower().getGenome().getPrimary().getType().getSections() > 1 && worldIn.getBlockState(pos.up()).getBlock() != ModuleFlowers.flower) {
dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0);
worldIn.setBlockToAir(pos);
}
}
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower) {
((TileEntityFlower) tile).randomUpdate(rand);
checkAndDropBlock(world, pos);
return;
}
world.setBlockToAir(pos);
}
protected void checkAndDropBlock(World world, BlockPos pos) {
if (!canBlockStay(world, pos)) {
dropBlockAsItem(world, pos, world.getBlockState(pos), 0);
world.setBlockToAir(pos);
}
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileEntityFlower && ((TileEntityFlower) tile).getSection() == 0) {
ItemStack flower = ((TileEntityFlower) tile).getItemStack();
if (!flower.isEmpty()) {
drops.add(flower);
}
}
}
@Override
public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) {
List<ItemStack> drops = getDrops(world, pos, world.getBlockState(pos), 0);
boolean hasBeenBroken = world.setBlockToAir(pos);
if (hasBeenBroken && !world.isRemote && drops.size() > 0 && (player == null || !player.capabilities.isCreativeMode)) {
for (ItemStack drop : drops) {
spawnAsEntity(world, pos, drop);
}
}
return hasBeenBroken;
}
}
@@ -0,0 +1,150 @@
package binnie.botany.blocks;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBush;
import net.minecraft.block.SoundType;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.core.BotanyCore;
public class BlockPlant extends BlockBush implements IItemModelRegister {
public static final PropertyEnum<PlantType> PLANT_TYPE = PropertyEnum.create("plant_type", PlantType.class);
public BlockPlant() {
setRegistryName("plant");
setCreativeTab(CreativeTabBotany.instance);
setTickRandomly(true);
setSoundType(SoundType.PLANT);
}
public static boolean isWeed(IBlockAccess world, BlockPos pos) {
IBlockState blockState = world.getBlockState(pos);
if (!(blockState.getBlock() instanceof BlockPlant)) {
return false;
}
PlantType type = blockState.getValue(PLANT_TYPE);
return type.isWeed();
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (int i = 0;i < PlantType.values().length;i++) {
PlantType type = PlantType.getType(i);
manager.registerItemModel(item, i, type.getName());
}
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, PLANT_TYPE);
}
@Override
public int getMetaFromState(IBlockState state) {
return state.getValue(PLANT_TYPE).ordinal();
}
@Override
public IBlockState getStateFromMeta(int meta) {
return getDefaultState().withProperty(PLANT_TYPE, PlantType.getType(meta));
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
public boolean canPlaceBlockAt(World worldIn, BlockPos pos) {
return super.canPlaceBlockAt(worldIn, pos) || BotanyCore.getGardening().isSoil(worldIn.getBlockState(pos).getBlock());
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}
@Override
public void getSubBlocks(CreativeTabs p_149666_2_, NonNullList<ItemStack> subBlocks) {
for (PlantType type : PlantType.values()) {
subBlocks.add(type.get());
}
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
PlantType type = state.getValue(PLANT_TYPE);
if (rand.nextInt(4) == 0) {
if (type == PlantType.WEEDS) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS_LONG), 2);
} else if (type == PlantType.WEEDS_LONG) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS_VERY_LONG), 2);
} else if (type == PlantType.DEAD_FLOWER) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.DECAYING_FLOWER), 2);
} else if (type == PlantType.DECAYING_FLOWER) {
world.setBlockToAir(pos);
return;
}
}
if (rand.nextInt(6) == 0) {
if (type == PlantType.WEEDS) {
world.setBlockToAir(pos);
} else if (type == PlantType.WEEDS_LONG) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS), 2);
} else if (type == PlantType.WEEDS_VERY_LONG) {
world.setBlockState(pos, state.withProperty(PLANT_TYPE, PlantType.WEEDS_LONG), 2);
}
}
Block below = world.getBlockState(pos.down()).getBlock();
if (!BotanyCore.getGardening().isSoil(below)) {
return;
}
IBlockSoil soil = (IBlockSoil) below;
if (rand.nextInt(3) != 0) {
return;
}
if (type.isWeed()) {
if (!soil.degrade(world, pos.down(), EnumSoilType.LOAM)) {
soil.degrade(world, pos.down(), EnumSoilType.SOIL);
}
} else if (type == PlantType.DECAYING_FLOWER && !soil.fertilise(world, pos.down(), EnumSoilType.LOAM)) {
soil.fertilise(world, pos.down(), EnumSoilType.FLOWERBED);
}
}
@Override
public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) {
return true;
}
@Override
public EnumOffsetType getOffsetType() {
return EnumOffsetType.XZ;
}
}
@@ -0,0 +1,322 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import binnie.core.Constants;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.gardening.EnumAcidity;
import binnie.botany.api.gardening.EnumMoisture;
import binnie.botany.api.gardening.EnumSoilType;
import binnie.botany.api.gardening.IBlockSoil;
import binnie.botany.core.BotanyCore;
import binnie.core.modules.BotanyModuleUIDs;
import binnie.botany.modules.ModuleFlowers;
import binnie.botany.modules.ModuleGardening;
import binnie.core.util.I18N;
import binnie.core.modules.ModuleManager;
public class BlockSoil extends Block implements IBlockSoil, IItemModelRegister {
public static final PropertyEnum<EnumMoisture> MOISTURE = PropertyEnum.create("moisture", EnumMoisture.class);
public static final PropertyEnum<EnumAcidity> ACIDITY = PropertyEnum.create("acidity", EnumAcidity.class);
public static final AxisAlignedBB SOIL_BLOCK_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.9375D, 1.0D);
private final boolean weedKilled;
private final EnumSoilType type;
public BlockSoil(EnumSoilType type, String blockName, boolean weedKilled) {
super(Material.GROUND);
this.type = type;
this.weedKilled = weedKilled;
setUnlocalizedName("botany.soil." + type.getName());
setCreativeTab(CreativeTabBotany.instance);
setRegistryName(blockName);
setTickRandomly(true);
setLightOpacity(255);
setHardness(0.5f);
setSoundType(SoundType.GROUND);
}
public static int getMeta(EnumAcidity acid, EnumMoisture moisture) {
return acid.ordinal() * 3 + moisture.ordinal();
}
public static String getPH(ItemStack stack, boolean withColor, boolean byNeutralNone) {
EnumAcidity ph = EnumAcidity.values()[stack.getItemDamage() / 3];
if (byNeutralNone) {
if (ph == EnumAcidity.NEUTRAL) {
return "";
}
}
return TextFormatting.GRAY + I18N.localise("botany.ph") + ": " + ph.getLocalisedName(withColor);
}
public static String getMoisture(ItemStack stack, boolean withColor, boolean byNormalNone) {
EnumMoisture moisure = EnumMoisture.values()[stack.getItemDamage() % 3];
if (byNormalNone) {
if (moisure == EnumMoisture.NORMAL) {
return "";
}
}
return TextFormatting.GRAY + I18N.localise("botany.moisture") + ": " + moisure.getLocalisedName(withColor);
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) {
switch (side) {
case UP:
return true;
case NORTH:
case SOUTH:
case WEST:
case EAST:
IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
Block block = iblockstate.getBlock();
return !iblockstate.isOpaqueCube() && block != Blocks.FARMLAND && block != Blocks.GRASS_PATH && block != this;
}
return super.shouldSideBeRendered(blockState, blockAccess, pos, side);
}
/**
* Used to determine ambient occlusion and culling when rebuilding chunks for render
*/
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public String getUnlocalizedName() {
return super.getUnlocalizedName().replaceFirst("tile.", "");
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
return SOIL_BLOCK_AABB;
}
@Nullable
@Override
public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) {
return SOIL_BLOCK_AABB;
}
@Override
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
return SOIL_BLOCK_AABB;
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> list) {
for (int i = 0; i < 9; ++i) {
list.add(new ItemStack(this, 1, i));
}
}
@Override
@SideOnly(Side.CLIENT)
public void registerModel(Item item, IModelManager manager) {
for (EnumAcidity acidity : EnumAcidity.values()) {
for (EnumMoisture moisture : EnumMoisture.values()) {
String modelName = "";
if (acidity != EnumAcidity.NEUTRAL) {
modelName += acidity.getName();
}
if (moisture != EnumMoisture.NORMAL) {
if (!modelName.isEmpty()) {
modelName += "_";
}
modelName += moisture.getName();
}
if (modelName.isEmpty()) {
modelName = "normal";
}
String identifier;
if (weedKilled) {
identifier = type.getName() + "_no_weed/" + modelName;
} else {
identifier = type.getName() + "/" + modelName;
}
manager.registerItemModel(item, moisture.ordinal() + acidity.ordinal() * 3, identifier);
}
}
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, MOISTURE, ACIDITY);
}
@Override
public int getMetaFromState(IBlockState state) {
return getMeta(state.getValue(ACIDITY), state.getValue(MOISTURE));
}
@Override
public IBlockState getStateFromMeta(int meta) {
EnumMoisture moisture = EnumMoisture.values()[meta % 3];
EnumAcidity acidity = EnumAcidity.values()[meta / 3];
return getDefaultState().withProperty(MOISTURE, moisture).withProperty(ACIDITY, acidity);
}
public EnumSoilType getType() {
return type;
}
@Override
public int damageDropped(IBlockState state) {
return getMetaFromState(state);
}
@Override
public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) {
EnumMoisture moisture = state.getValue(MOISTURE);
EnumMoisture desiredMoisture = BotanyCore.getGardening().getNaturalMoisture(world, pos);
if (desiredMoisture.ordinal() > moisture.ordinal()) {
moisture = ((moisture == EnumMoisture.DRY) ? EnumMoisture.NORMAL : EnumMoisture.DAMP);
} else if (desiredMoisture.ordinal() < moisture.ordinal()) {
moisture = ((moisture == EnumMoisture.DAMP) ? EnumMoisture.NORMAL : EnumMoisture.DRY);
}
IBlockState blockState = state.withProperty(MOISTURE, moisture);
if (state != blockState) {
world.setBlockState(pos, blockState, 2);
}
if (!weedKilled) {
if (rand.nextInt(5 - getType(world, pos).ordinal()) != 0) {
return;
}
pos = pos.up();
if (!world.isAirBlock(pos)) {
return;
}
world.setBlockState(pos, ModuleGardening.plant.getStateFromMeta(PlantType.WEEDS.ordinal()), 2);
}
}
@Override
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) {
super.neighborChanged(state, worldIn, pos, blockIn, fromPos);
if (worldIn.getBlockState(pos.up()).getMaterial().isSolid()) {
worldIn.setBlockState(pos, Blocks.DIRT.getDefaultState());
}
}
@Override
public EnumAcidity getPH(World world, BlockPos pos) {
return world.getBlockState(pos).getValue(ACIDITY);
}
@Override
public EnumMoisture getMoisture(World world, BlockPos pos) {
return world.getBlockState(pos).getValue(MOISTURE);
}
@Override
public EnumSoilType getType(World world, BlockPos pos) {
return type;
}
@Override
public boolean fertilise(World world, BlockPos pos, EnumSoilType maxLevel) {
EnumSoilType type = getType(world, pos);
if (type.ordinal() >= maxLevel.ordinal()) {
return false;
}
IBlockState old = world.getBlockState(pos);
IBlockState newState = BotanyCore.getGardening().getSoil(maxLevel, weedKilled, old.getValue(MOISTURE), old.getValue(ACIDITY));
return world.setBlockState(pos, newState, 2);
}
@Override
public boolean degrade(World world, BlockPos pos, EnumSoilType minLevel) {
EnumSoilType type = getType(world, pos);
if (type.ordinal() <= minLevel.ordinal()) {
return false;
}
IBlockState old = world.getBlockState(pos);
IBlockState newState = BotanyCore.getGardening().getSoil(minLevel, weedKilled, old.getValue(MOISTURE), old.getValue(ACIDITY));
return world.setBlockState(pos, newState, 2);
}
@Override
public boolean setPH(World world, BlockPos pos, EnumAcidity pH) {
IBlockState blockState = world.getBlockState(pos);
return world.setBlockState(pos, blockState.withProperty(ACIDITY, pH));
}
@Override
public boolean setMoisture(World world, BlockPos pos, EnumMoisture moisture) {
IBlockState blockState = world.getBlockState(pos);
return world.setBlockState(pos, blockState.withProperty(MOISTURE, moisture));
}
@Override
public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor) {
super.onNeighborChange(world, pos, neighbor);
if (world.isSideSolid(pos.up(), EnumFacing.DOWN, false)) {
((World) world).setBlockState(pos, Blocks.DIRT.getDefaultState(), 2);
}
}
@Override
public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, IPlantable plantable) {
IBlockState plant = plantable.getPlant(world, pos.up());
if(ModuleManager.isModuleEnabled(Constants.BOTANY_MOD_ID, BotanyModuleUIDs.FLOWERS)) {
if (plant.getBlock() == ModuleFlowers.flower) {
return true;
}
}
if (plant.getBlock() == ModuleGardening.plant) {
return !weedKilled || !BlockPlant.isWeed(world, pos);
}
return world instanceof World && Blocks.DIRT.canSustainPlant(state, world, pos, direction, plantable);
}
@Override
public boolean resistsWeeds(World world, BlockPos pos) {
return weedKilled;
}
public boolean isWeedKilled() {
return weedKilled;
}
}
@@ -0,0 +1,184 @@
package binnie.botany.blocks;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Enchantments;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import forestry.api.core.IItemModelRegister;
import forestry.api.core.IModelManager;
import forestry.core.blocks.IColoredBlock;
import binnie.botany.CreativeTabBotany;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.core.api.block.BlockMetadata;
import binnie.core.api.block.IBlockMetadata;
import binnie.core.api.block.TileEntityMetadata;
import binnie.core.util.I18N;
public class BlockStainedGlass extends Block implements IBlockMetadata, IColoredBlock, IItemModelRegister {
public BlockStainedGlass() {
super(Material.GLASS);
setCreativeTab(CreativeTabBotany.instance);
setRegistryName("stained");
setSoundType(SoundType.GLASS);
setHardness(0.3F);
}
@Override
public int quantityDropped(Random rand) {
return 0;
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.TRANSLUCENT;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModel(Item item, IModelManager manager) {
for (EnumFlowerColor color : EnumFlowerColor.values()) {
manager.registerItemModel(item, color.getFlowerColorAllele().getID());
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) {
IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side));
Block block = iblockstate.getBlock();
return block != this;
}
@Override
public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) {
player.addStat(StatList.getBlockStats(this));
player.addExhaustion(0.005F);
if (EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0 && te instanceof TileEntityMetadata) {
List<ItemStack> items = new ArrayList<>();
TileEntityMetadata tile = (TileEntityMetadata) te;
int damage = getDroppedMeta(state, tile.getTileMetadata());
ItemStack itemstack = TileEntityMetadata.getItemStack(this, damage);
if (!itemstack.isEmpty()) {
items.add(itemstack);
}
ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player);
for (ItemStack item : items) {
spawnAsEntity(worldIn, pos, item);
}
}
}
@Override
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
}
@Override
public TileEntity createNewTileEntity(World var1, int i) {
return new TileEntityMetadata();
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) {
TileEntity tileentity = worldIn.getTileEntity(pos);
return tileentity != null && tileentity.receiveClientEvent(id, param);
}
@Override
public int getPlacedMeta(ItemStack stack, World world, BlockPos pos, EnumFacing clickedBlock) {
return TileEntityMetadata.getItemDamage(stack);
}
@Override
public int getDroppedMeta(IBlockState state, int tileMetadata) {
return tileMetadata;
}
@Override
public String getDisplayName(ItemStack itemStack) {
EnumFlowerColor color = EnumFlowerColor.get(TileEntityMetadata.getItemDamage(itemStack));
return I18N.localise("botany.pigmented.glass.name", color.getDisplayName());
}
@Override
public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> itemList) {
for (EnumFlowerColor color : EnumFlowerColor.values()) {
itemList.add(TileEntityMetadata.getItemStack(this, color.ordinal()));
}
}
@Override
public boolean isWood(IBlockAccess world, BlockPos pos) {
return true;
}
@Override
public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face) {
return 20;
}
@Override
public boolean isFlammable(IBlockAccess world, BlockPos pos, EnumFacing face) {
return true;
}
@Override
public int getFireSpreadSpeed(IBlockAccess world, BlockPos pos, EnumFacing face) {
return 5;
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
return BlockMetadata.getPickBlock(world, pos);
}
@Override
public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) {
if (worldIn == null || pos == null) {
return 0;
}
EnumFlowerColor color = EnumFlowerColor.get(TileEntityMetadata.getTileMetadata(worldIn, pos));
return color.getFlowerColorAllele().getColor(false);
}
}
@@ -0,0 +1,46 @@
package binnie.botany.blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import binnie.botany.modules.ModuleGardening;
public enum PlantType implements IStringSerializable {
WEEDS("weeds", true),
WEEDS_LONG("weeds_long", true),
WEEDS_VERY_LONG("weeds_very_long", true),
DEAD_FLOWER("dead_flower"),
DECAYING_FLOWER("decaying_flower");
String name;
boolean isWeed;
PlantType(String name) {
this(name, false);
}
PlantType(String name, boolean isWeed) {
this.name = name;
this.isWeed = isWeed;
}
public static PlantType getType(int meta){
if(meta >= values().length){
meta = values().length-1;
}
return values()[meta];
}
public ItemStack get() {
return new ItemStack(ModuleGardening.plant, 1, ordinal());
}
public boolean isWeed() {
return isWeed;
}
@Override
public String getName() {
return name;
}
}
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.blocks;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,53 @@
package binnie.botany.blocks.properties;
import com.google.common.base.Optional;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import net.minecraft.block.properties.PropertyHelper;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IAllele;
import binnie.botany.api.genetics.IAlleleFlowerSpecies;
import binnie.botany.api.genetics.IFlowerType;
public class PropertyFlower<I extends IFlowerType<I>> extends PropertyHelper<I> {
public PropertyFlower(String name, Class<I> flowerTypeClass) {
super(name, flowerTypeClass);
}
@Override
public List<I> getAllowedValues() {
List<I> flowerTypes = new ArrayList<>();
for (IAllele allele : AlleleManager.alleleRegistry.getRegisteredAlleles().values()) {
if (allele instanceof IAlleleFlowerSpecies) {
IFlowerType flowerType = ((IAlleleFlowerSpecies) allele).getType();
if (!flowerTypes.contains(flowerType)) {
flowerTypes.add((I) flowerType);
}
}
}
return flowerTypes;
}
/**
* Get the name for the given value.
*/
@Override
public String getName(IFlowerType value) {
return value.getName().toLowerCase(Locale.ENGLISH);
}
@Override
public Optional<I> parseValue(String value) {
IAllele allele = AlleleManager.alleleRegistry.getAllele(value);
if (IAlleleFlowerSpecies.class.isInstance(allele)) {
IAlleleFlowerSpecies alleleValue = IAlleleFlowerSpecies.class.cast(allele);
return Optional.of((I) alleleValue.getType());
}
return Optional.absent();
}
}
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.blocks.properties;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,51 @@
package binnie.botany.ceramic;
import java.util.LinkedHashMap;
import java.util.Map;
import net.minecraft.item.ItemStack;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.api.block.TileEntityMetadata;
import binnie.extratrees.api.IDesignMaterial;
public class CeramicColor implements IDesignMaterial {
private final static Map<EnumFlowerColor, CeramicColor> map = new LinkedHashMap<>();
static {
for (EnumFlowerColor c : EnumFlowerColor.values()) {
CeramicColor.map.put(c, new CeramicColor(c));
}
}
EnumFlowerColor color;
CeramicColor(EnumFlowerColor color) {
this.color = color;
}
public static CeramicColor get(EnumFlowerColor c) {
return CeramicColor.map.get(c);
}
@Override
public ItemStack getStack() {
return TileEntityMetadata.getItemStack(ModuleCeramic.ceramic, color.ordinal());
}
@Override
public ItemStack getStack(boolean fireproof) {
return getStack();
}
@Override
public String getDesignMaterialName() {
return color.getName();
}
@Override
public int getColour() {
return color.getFlowerColorAllele().getColor(false);
}
}
@@ -0,0 +1,113 @@
package binnie.botany.ceramic;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import binnie.extratrees.api.carpentry.DesignerManager;
import binnie.extratrees.api.carpentry.EnumPattern;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.Botany;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.items.CeramicItems;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.AbstractMod;
import binnie.extratrees.api.IDesignMaterial;
import binnie.extratrees.api.IDesignSystem;
import binnie.extratrees.api.IPattern;
public class CeramicDesignSystem implements IDesignSystem {
public static CeramicDesignSystem instance = new CeramicDesignSystem();
Map<Integer, TextureAtlasSprite> primary;
Map<Integer, TextureAtlasSprite> secondary;
CeramicDesignSystem() {
primary = new HashMap<>();
secondary = new HashMap<>();
DesignerManager.instance.registerDesignSystem(this);
}
@Override
public IDesignMaterial getDefaultMaterial() {
return CeramicColor.get(EnumFlowerColor.White);
}
@Override
public IDesignMaterial getDefaultMaterial2() {
return CeramicColor.get(EnumFlowerColor.Black);
}
@Override
public IDesignMaterial getMaterial(int id) {
return CeramicColor.get(EnumFlowerColor.get(id));
}
@Override
public int getMaterialIndex(IDesignMaterial id) {
return ((CeramicColor) id).color.ordinal();
}
public String getTexturePath() {
return "blocks/ceramic";
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getPrimarySprite(IPattern pattern) {
int index = pattern.getIndex();
if (index > 0 && index < primary.size()) {
return primary.get(index);
}
return null;
}
@Override
@Nullable
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSecondarySprite(IPattern pattern) {
int index = pattern.getIndex();
if (index > 0 && index < secondary.size()) {
return secondary.get(index);
}
return null;
}
@Override
@SideOnly(Side.CLIENT)
public void registerSprites() {
TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
for (EnumPattern pattern : EnumPattern.values()) {
ResourceLocation primaryLocation = new ResourceLocation(getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".0");
ResourceLocation secondaryLocation = new ResourceLocation(getMod().getModID(), getTexturePath() + "/" + pattern.toString().toLowerCase() + ".1");
primary.put(pattern.getIndex(), textureMap.registerSprite(primaryLocation));
secondary.put(pattern.getIndex(), textureMap.registerSprite(secondaryLocation));
}
}
public AbstractMod getMod() {
return Botany.instance;
}
@Override
public ItemStack getAdhesive() {
return CeramicItems.MORTAR.get(1);
}
@Override
@Nullable
public IDesignMaterial getMaterial(ItemStack itemStack) {
return (itemStack.getItem() == Item.getItemFromBlock(ModuleCeramic.ceramic))
? getMaterial(itemStack.getItemDamage())
: null;
}
}
@@ -0,0 +1,90 @@
package binnie.botany.ceramic.brick;
import com.google.common.base.Preconditions;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagInt;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.util.I18N;
public class CeramicBrickPair {
public static final CeramicBrickPair EMPTY = new CeramicBrickPair(EnumFlowerColor.DarkSeaGreen, EnumFlowerColor.DarkSeaGreen, CeramicBrickType.TILE);
public final EnumFlowerColor colorFirst;
public final EnumFlowerColor colorSecond;
public CeramicBrickType type;
public int ordinal;
public CeramicBrickPair(EnumFlowerColor colorFirst, EnumFlowerColor colorSecond, CeramicBrickType type) {
this.colorFirst = colorFirst;
this.colorSecond = colorSecond;
this.type = type;
ordinal = colorFirst.ordinal() + colorSecond.ordinal() * 256 + type.ordinal() * 256 * 256;
}
public CeramicBrickPair(ItemStack stack) {
this(getId(stack));
}
public CeramicBrickPair(int id) {
colorFirst = EnumFlowerColor.get(id & 0xFF);
colorSecond = EnumFlowerColor.get(id >> 8 & 0xFF);
type = CeramicBrickType.get(id >> 16 & 0xFF);
}
public boolean isTwoColors() {
return type.canDouble() && colorSecond != colorFirst;
}
public static int getId(ItemStack stack){
if(!stack.hasTagCompound()){
return EMPTY.ordinal();
}
NBTTagCompound nbtTagCompound = stack.getTagCompound();
return nbtTagCompound.getInteger("id");
}
public ItemStack getStack(int i) {
ItemStack stack = new ItemStack(ModuleCeramic.ceramicBrick, i);
stack.setTagInfo("id", new NBTTagInt(ordinal()));
return stack;
}
public String getName() {
String name = colorFirst.getFlowerColorAllele().getColorName();
if (type.canDouble() && colorSecond != colorFirst) {
name = name + " & " + colorSecond.getFlowerColorAllele().getColorName();
}
return I18N.localise("botany.ceramic.type." + type.id + ".name", name);
}
public int ordinal() {
return ordinal;
}
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite(int pass) {
TextureAtlasSprite[] sprites = type.sprites;
Preconditions.checkState(sprites != null, "Sprites have not been registered.");
return sprites[pass];
}
@Override
public int hashCode() {
return Integer.hashCode(type.ordinal());
}
@Override
public boolean equals(Object obj) {
return obj instanceof CeramicBrickPair
&& ((CeramicBrickPair) obj).type == type;
}
}
@@ -0,0 +1,329 @@
package binnie.botany.ceramic.brick;
import javax.annotation.Nullable;
import java.util.List;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IStringSerializable;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import binnie.botany.api.genetics.EnumFlowerColor;
import binnie.botany.items.CeramicItems;
import binnie.botany.modules.ModuleCeramic;
import binnie.core.api.block.TileEntityMetadata;
public enum CeramicBrickType implements IStringSerializable {
TILE("tile") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int mortars = 0;
int blocks = 0;
int blockColor = -1;
for (ItemStack stack : stacks) {
if (isMortar(stack)) {
++mortars;
} else {
if (stack.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramic)) {
return ItemStack.EMPTY;
}
++blocks;
int color = TileEntityMetadata.getItemDamage(stack);
if (blockColor == -1) {
blockColor = color;
} else {
if (blockColor != color) {
return ItemStack.EMPTY;
}
}
}
}
if (mortars != 1) {
return ItemStack.EMPTY;
}
EnumFlowerColor c = EnumFlowerColor.get(blockColor);
return new CeramicBrickPair(c, c, CeramicBrickType.TILE).getStack(3);
}
},
BRICK("brick") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getBrickRecipe(this, stacks);
}
},
STRIPE_BRICK("brickstripe") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getBrickRecipe(this, stacks);
}
},
LARGE_BRICK("bricklarge") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() == 1) {
ItemStack stack3 = stacks.get(0);
CeramicBrickPair type3 = new CeramicBrickPair(stack3);
if (type3.type == CeramicBrickType.VERTICAL_LARGE_BRICK) {
type3.type = this;
return type3.getStack(1);
}
return ItemStack.EMPTY;
} else {
if (stacks.size() != 3) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
int a = 0;
int b = 0;
for (ItemStack stack4 : stacks) {
if (stack4.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.type != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color5 = type4.colorFirst.ordinal();
if (colors[0] == -1) {
colors[0] = color5;
a++;
} else if (colors[0] == color5) {
a++;
} else if (colors[1] == -1) {
colors[1] = color5;
b++;
} else {
if (colors[1] != color5) {
return ItemStack.EMPTY;
}
b++;
}
}
if (colors[1] == -1) {
colors[1] = colors[0];
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.LARGE_BRICK).getStack(3);
}
}
},
SPLIT("split") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
int altCounter = 0;
for (ItemStack stack2 : stacks) {
int alt = (altCounter != 0 && altCounter != 3) ? 1 : 0;
if (stack2.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type = new CeramicBrickPair(stack2);
if (type.type != CeramicBrickType.TILE) {
return ItemStack.EMPTY;
}
int color2 = type.colorFirst.ordinal();
if (colors[alt] == -1) {
colors[alt] = color2;
} else if (colors[alt] != color2) {
return ItemStack.EMPTY;
}
++altCounter;
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.SPLIT).getStack(4);
}
},
CHEQUERED("cheque") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
for (ItemStack stack2 : stacks) {
if (stack2.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.type != CeramicBrickType.SPLIT) {
return ItemStack.EMPTY;
}
int color3 = type2.colorFirst.ordinal();
int color4 = type2.colorSecond.ordinal();
if (colors[0] == -1) {
colors[0] = color3;
colors[1] = color4;
} else {
if (colors[0] != color3 || colors[1] != color4) {
return ItemStack.EMPTY;
}
}
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.CHEQUERED).getStack(4);
}
},
MIXED("mixed") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
if (stacks.size() != 4) {
return ItemStack.EMPTY;
}
int[] colors = {-1, -1};
for (ItemStack stack2 : stacks) {
if (stack2.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type2 = new CeramicBrickPair(stack2);
if (type2.isTwoColors()) {
return ItemStack.EMPTY;
}
int color3 = type2.colorFirst.ordinal();
if (type2.type == CeramicBrickType.SPLIT) {
if (colors[1] != -1) {
return ItemStack.EMPTY;
}
colors[1] = color3;
} else {
if (type2.type != CeramicBrickType.CHEQUERED) {
return ItemStack.EMPTY;
}
if (colors[0] == -1) {
colors[0] = color3;
} else if (colors[0] != color3) {
return ItemStack.EMPTY;
}
}
int color4 = type2.colorSecond.ordinal();
}
if (colors[0] == -1 || colors[1] == -1) {
return ItemStack.EMPTY;
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), CeramicBrickType.MIXED).getStack(4);
}
},
VERTICAL_BRICK("verticalbrick") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getVerticalBrickRecipe(stacks);
}
},
VERTICAL_STRIPE_BRICK("verticalbrickstripe") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getVerticalBrickRecipe(stacks);
}
},
VERTICAL_LARGE_BRICK("verticalbricklarge") {
@Override
public ItemStack getRecipe(List<ItemStack> stacks) {
return getVerticalBrickRecipe(stacks);
}
};
public static final CeramicBrickType[] VALUES = values();
public String id;
@SideOnly(Side.CLIENT)
@Nullable
public TextureAtlasSprite[] sprites;
CeramicBrickType(String id) {
this.id = id;
}
public static CeramicBrickType get(int id) {
return VALUES[id % VALUES.length];
}
public boolean canDouble() {
return this != CeramicBrickType.TILE;
}
public abstract ItemStack getRecipe(List<ItemStack> stacks);
protected ItemStack getVerticalBrickRecipe(List<ItemStack> stacks) {
if (stacks.size() != 1) {
return ItemStack.EMPTY;
}
ItemStack stack5 = stacks.get(0);
CeramicBrickPair type = new CeramicBrickPair(stack5);
if (type.type == CeramicBrickType.LARGE_BRICK) {
type.type = CeramicBrickType.VERTICAL_LARGE_BRICK;
return type.getStack(1);
}
if (type.type == CeramicBrickType.BRICK) {
type.type = CeramicBrickType.VERTICAL_BRICK;
return type.getStack(1);
}
if (type.type == CeramicBrickType.STRIPE_BRICK) {
type.type = CeramicBrickType.VERTICAL_STRIPE_BRICK;
return type.getStack(1);
}
return ItemStack.EMPTY;
}
protected ItemStack getBrickRecipe(CeramicBrickType ceramicType, List<ItemStack> stacks) {
if (stacks.size() == 1) {
ItemStack stack5 = stacks.get(0);
CeramicBrickPair type = new CeramicBrickPair(stack5);
if (type.type == CeramicBrickType.VERTICAL_BRICK) {
type.type = ceramicType;
return type.getStack(1);
}
if (type.type == CeramicBrickType.STRIPE_BRICK) {
type.type = ceramicType;
return type.getStack(1);
}
return ItemStack.EMPTY;
} else if (stacks.size() == 4) {
int[] colors = {-1, -1};
for (int index2 = 0; index2 < stacks.size(); ++index2) {
ItemStack stack4 = stacks.get(index2);
if (stack4.getItem() != Item.getItemFromBlock(ModuleCeramic.ceramicBrick)) {
return ItemStack.EMPTY;
}
CeramicBrickPair type4 = new CeramicBrickPair(stack4);
if (type4.type != CeramicBrickType.LARGE_BRICK) {
return ItemStack.EMPTY;
}
int color5 = type4.colorFirst.ordinal();
int color6 = type4.colorSecond.ordinal();
int alt2 = (index2 != 0 && index2 != 3) ? 1 : 0;
if (ceramicType == CeramicBrickType.STRIPE_BRICK) {
alt2 = 0;
}
if (colors[alt2] == -1) {
colors[alt2] = color5;
colors[1 - alt2] = color6;
} else if (colors[alt2] != color5 || colors[1 - alt2] != color6) {
return ItemStack.EMPTY;
}
}
return new CeramicBrickPair(EnumFlowerColor.get(colors[0]), EnumFlowerColor.get(colors[1]), ceramicType).getStack(4);
}
return ItemStack.EMPTY;
}
protected boolean isMortar(ItemStack stack) {
return stack.getItem() == ModuleCeramic.misc && stack.getItemDamage() == CeramicItems.MORTAR.ordinal();
}
@Override
public String getName() {
return id;
}
}
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.ceramic.brick;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.ceramic;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
@@ -0,0 +1,25 @@
package binnie.botany.core;
import binnie.botany.GardeningManager;
import binnie.botany.api.BotanyAPI;
import binnie.botany.api.gardening.IGardeningManager;
import binnie.botany.api.genetics.IFlowerRoot;
import binnie.botany.genetics.FlowerRoot;
public class BotanyCore {
public static final int CHANCE_INTERPOLLINATION = 20;
public static IFlowerRoot getFlowerRoot() {
if (BotanyAPI.flowerRoot == null) {
BotanyAPI.flowerRoot = new FlowerRoot();
}
return BotanyAPI.flowerRoot;
}
public static IGardeningManager getGardening() {
if (BotanyAPI.gardening == null) {
BotanyAPI.gardening = new GardeningManager();
}
return BotanyAPI.gardening;
}
}
@@ -0,0 +1,9 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package binnie.botany.core;
import javax.annotation.ParametersAreNonnullByDefault;
import binnie.core.util.FieldsAreNonnullByDefault;
import mcp.MethodsReturnNonnullByDefault;
Loaded 100 of 5480 files, more files were not shown because too many files have changed in this diff. Show more