Compare commits

..
502 Commits
Author SHA1 Message Date
Johann Bernhardt 86f36f9d04 Fixed mod name and mod id missmatch 2021-11-23 19:23:51 +01:00
Johann Bernhardt c387c4e6d2 Refactored dependency to craftguide 2021-11-23 19:20:08 +01:00
Johann Bernhardt f6f825283a ... and fixed texture issues 2021-11-23 19:16:12 +01:00
Johann Bernhardt 3a2ae9d677 Add information about shaded cofh-core 2021-11-23 19:15:54 +01:00
Johann Bernhardt 0f6849bf8b Refactor dependency to inventory tweaks 2021-11-23 16:41:16 +01:00
Johann Bernhardt 9728c3bbae Switch to NEI master 2021-11-22 18:52:57 +01:00
Johann Bernhardt f9d95a2c09 Experiment with custom pom entries 2021-11-22 14:23:02 +01:00
Johann Bernhardt 01c96dd1bd Move to unified build script 2021-11-22 12:39:37 +01:00
Johann Bernhardt 3429114d2a Move files 2021-11-22 12:37:53 +01:00
boubou19 a958073079 Merge pull request #11 from GTNewHorizons/patch-getblock-npe
Fix unprotected block access
2021-11-05 10:16:33 +01:00
Glease d4e58b84c8 Fix unprotected block access 2021-11-05 16:00:12 +08:00
Martin Robertz 689a822058 Merge pull request #10 from Flanisch/PamNetherCompat
Pams' Harvest The Nether Compatibility
2021-08-22 12:40:47 +02:00
BuildTools 0acbd6b247 Made MultiFarm typing crop specific 2021-08-21 14:02:23 +02:00
BuildTools d4206beba7 Add Pam's Harvest The Nether compatibility for MultiFarms 2021-08-21 04:01:34 +02:00
DreamMasterXXL 5412a73dc5 update api sub module 2021-08-14 15:37:31 +02:00
Martin Robertz dbd4246beb Merge pull request #9 from D-Cysteine/GTNH-Fixes
Update code to handle mutations with modified climate
2021-08-14 15:19:23 +02:00
D-Cysteine 6a205d71cc Remove incorrect IButterflyMutation change 2021-08-13 17:35:39 -06:00
Dream-MasterXXL ad50ab6716 update submodule Redstone flux use us repo fork 2021-08-12 15:41:13 +02:00
Dream-MasterXXL bb597e7403 update(Forestry API) use GTNH Fork 2021-08-12 15:35:35 +02:00
D-Cysteine 9614f95961 Fix import order 2021-08-11 23:58:10 -06:00
D-Cysteine ef0b5c7c1d Reset patch version 2021-08-11 23:28:12 -06:00
D-Cysteine 7e889775c1 Update code to handle mutations with modified climate 2021-08-11 23:25:56 -06:00
DreamMasterXXL 7ea1f150e0 add(Forestry)Changelog 2021-06-27 23:25:27 +02:00
Martin Robertz 4c7c7c3438 Merge pull request #8 from GTNewHorizons/worktable-npe
Fix NPE on crafting in worktable
2021-04-06 17:05:20 +02:00
Glease 621208393e Fix NPE on crafting in worktable 2021-04-06 22:46:39 +08:00
DreamMasterXXL 98c0b66b6f bump version 2021-01-29 20:11:09 +01:00
DreamMasterXXL 5b61261d69 Merge branch 'IC2-Crop-Module' into GTNH-Fixes 2021-01-29 20:05:41 +01:00
Martin Robertz d025499747 Merge pull request #7 from GTNewHorizons/bq3_compat
Dirty fix for BQ3 crafting quest not triggering
2021-01-22 17:15:58 +01:00
Glease 7320ddb44f Dirty fix for BQ3 crafting quest not triggering 2021-01-22 22:41:32 +08:00
bartimaeusnek d2545b7a59 Ic2 crop module (#6)
* Added IC2-Crop-Module

* Changed Lang repo

* updated lang submodule
2020-12-24 21:15:03 +01:00
bartimaeusnek 66d07bcac4 updated lang submodule 2020-10-14 13:26:11 +02:00
bartimaeusnek fb2eb7cda4 Changed Lang repo 2020-10-14 13:17:05 +02:00
bartimaeusnek 347fdb101c Added IC2-Crop-Module 2020-10-14 13:01:03 +02:00
DreamMasterXXL d2a086ac02 bump version 2020-05-10 14:01:46 +02:00
Glease 859a79a824 Actually remove the debug prints
GTNewHorizons/GT-New-Horizons-Modpack#6061
2020-05-10 18:53:18 +08:00
Dream-Master 00c31a6158 bump version 2020-03-27 21:27:04 +01:00
bartimaeusnek 5db5b712ce Fixed Mutation Coniditons (#5)
+ reduced usage of reflexion
+ inlined code

Signed-off-by: bartimaeusnek <[email protected]>
2020-03-27 14:12:42 +01:00
Dream-Master 9cac9a14df bump version 2020-03-23 22:29:01 +01:00
bartimaeusnek 43f98e9cca fixed method not found exception
wrong class for get Method call... i hate reflexion >_>
2020-03-23 17:18:25 +01:00
Dream-Master ff4c09324b update gradle 2020-03-23 13:57:14 +01:00
ElNounchandbartimaeusnek d1c17a13b1 BartWorks support for apiculture requirements (#4)
* BartWorks support for apiculture requirements

Co-authored-by: bartimaeusnek <[email protected]>
2020-03-22 15:03:20 +01:00
Jason Mitchell 8a8ac56266 bump version 2020-02-29 20:26:02 -08:00
Jason Mitchell 208de8ad3a Fix NPE 2020-02-29 20:23:52 -08:00
Dream-Master d988fb849d bump version 2020-02-16 12:53:28 +01:00
Martin Robertz ab83d90dd3 Merge pull request #3 from GTNewHorizons/limit_butterflies_distance_from_home
Backport butterflys staying close to home
2020-02-16 11:39:35 +01:00
Jason Mitchell 79c5cff926 Backport butterflys staying close to home from https://github.com/ForestryMC/ForestryMC/commit/904293f407c2e9ceeb35dcb9178ed505f361a0f3#diff-96a2a2f1a71177681853bd9c5eb46752 2020-02-15 21:31:55 -08:00
Martin Robertz 5522c33924 Merge pull request #2 from GTNewHorizons/feature/shiftlag
Feature/shiftlag
2019-12-14 21:00:39 +01:00
Richard Hendricks 93aa429cf2 Add config options, remove debug prints 2019-12-14 13:44:27 -06:00
Richard Hendricks fa5c4c0218 Remove isDirty related stuff, it causes stack overflows because it is not properly cleared when the craft is partial. Performance now should be good enough we don't even care about a few extra calls. 2019-12-14 02:04:02 -06:00
Richard Hendricks 32691c6af4 Add in local recipe cache 2019-12-13 17:41:58 -06:00
Richard Hendricks 5615ffc518 Recipelist acceleration is working. Worktable local cache needs creating. 2019-12-13 00:12:06 -06:00
Richard Hendricks 2af41cf68d not working 2019-12-12 20:16:58 -06:00
Richard Hendricks 0cdaf8cff8 Add new limiting crafting time function. 2019-12-09 22:07:26 -06:00
Dream-Master 7b5eafc42a update version 2019-05-12 20:32:50 +02:00
Martin Robertz 59ca1d2082 Merge pull request #1 from GTNewHorizons/giantSequoia
added recipe.
2019-05-09 09:46:14 +02:00
bartimaeusnek 0df88973c0 added recipe.
Signed-off-by: bartimaeusnek <[email protected]>
2019-05-09 06:35:23 +02:00
Dream-Master e54bb5d4ea change api path 2019-03-26 09:06:46 +01:00
Dream-Master 824f155804 change api adress 2019-03-26 09:01:05 +01:00
Dream-Master 24e2cf668e Revert "remove redstone flux not working api"
This reverts commit f260099bfa.
2019-03-26 08:55:47 +01:00
Dream-Master f260099bfa remove redstone flux not working api 2019-03-26 08:46:07 +01:00
bartimaeusnek 855d359b02 changed crop logic a bit
if crop havest is not possible at the optimal state, just harvest, ffs.

Signed-off-by: bartimaeusnek <[email protected]>
2019-03-23 23:29:26 +01:00
bartimaeusnek abcb180689 added a null check
might help for  https://github.com/GTNewHorizons/NewHorizons/issues/4283
2019-03-18 18:58:33 +01:00
Jason Mitchell 507adb1b3f version bump 2018-10-06 09:09:25 -07:00
Jason Mitchell 23c4e4ed91 Fix pollination crash 2018-10-06 09:08:06 -07:00
bartimaeusnek e5057788a8 version bump 2018-06-09 17:08:51 +02:00
bartimaeusnek a5045bfc0f try to limit nbttag compound on apiaries to 128 entries 2018-06-08 00:52:00 +02:00
bartimaeusnek bfd678c63e removed shades Java7Checker due to issures with Java 9
+ updated Forge Version to v1614
+ updated used Java version to v8
+ updated used grandle wrapper to 2.14.1
2018-06-07 20:15:02 +02:00
LunaticExperimentalist 320ea99090 Have trade station compare tags when accepting payment (#1850) 2017-09-18 21:44:11 -07:00
mezz 08f16ba26d Bump version 2016-10-02 15:41:30 -07:00
mezz 9419dc82de Fix #1442 Let BeeHousings detect biome changes 2016-10-02 15:41:09 -07:00
mezz 2d1f64c5f6 Bump version 2016-07-31 17:11:05 -07:00
mezz cd9f82001c Fix #1366 Alveary in the Nether does not have Hellish temperature 2016-07-31 17:10:59 -07:00
mezz f7b8435d28 Update lang, bump version 2016-06-23 15:38:24 -07:00
mezz 013806f158 Merge remote-tracking branch 'origin/dev' into 4.2 2016-06-23 15:33:48 -07:00
Nirek-K 062b5ee75f Fix #1328 Crash when trying to pick up wheat from Moistener process slot 2016-06-23 17:30:34 -05:00
Nirek-K 56adc25fdf Fix #1330 Change resource checks to check tile for IBeeHousing 2016-06-23 15:40:41 -05:00
mezz df375b1b30 Merge remote-tracking branch 'origin/dev' into 4.2 2016-06-09 16:43:14 -07:00
Nirek-K 789da29af0 Fix #1293 Prevent nulls from passing Agricraft harvest
Update HC compat
2016-06-05 19:18:53 -05:00
Nirek-K e0df2f84a0 Fix Fabricator glass recipes 4000mb->4 blocks 2016-05-29 18:40:57 -05:00
Nirek-K 01656f13a6 Basic MFR plugin, allow farm to plant/cut rubber trees
(trying to plant sacreds is a ..bad idea)
Centrifuge raw rubber from propolis in the absense of IC2
minor bugfix for witchery sapling ferment
2016-04-28 02:47:58 -05:00
mezz b466e9ce4a Merge remote-tracking branch 'origin/dev' into 4.2 2016-04-27 19:30:56 -07:00
Nirek-K 60c9dad874 Merge pull request #1137 from ultrasn0w/dev
Update PlantMegaPack Plugin
2016-04-25 14:55:21 -05:00
ultrasn0w d734ca55e6 Update PlantMegaPack Plugin 2016-04-25 21:15:47 +02:00
Nirek-K f16f349f10 Version bump to be ahead of stable, and pull in lang fixes 2016-04-24 14:32:05 -05:00
Nirek-K 66561ac66d Fix #1129 Bugfixes for Multifarm BC Gate Triggers. 2016-04-18 17:28:37 -05:00
Nirek-K ad96e21b37 Fix eating bottles slightly better, Steve now enjoys mead in 8packs (hic). 2016-04-17 18:46:52 -05:00
Nirek-K 3967d21b06 Short mead now has a purpose, further distillation produces mead (only drinkable in bottles).
Also fix somehow eating it glass bottle and all.
2016-04-17 01:40:45 -05:00
Nirek-K 2a025254a0 Add ic2 industrial fert as farming fertilizer. (seperate config option to probably come later) 2016-04-05 16:08:00 -05:00
Nirek-K 97bfbe2213 Fix #1117 Radioactive bee effect can bypass apiarist suit 2016-04-03 11:17:30 -05:00
Nirek-K 98c56973db Fix #1123 Add lang string for Leporine Bee, Add some basic bee trades to Aparist. 2016-03-31 09:41:47 -05:00
mezz b83da5c628 Merge branch 'mc-1.7.10' into 4.2 2016-03-22 12:29:14 -07:00
mezz 4a2af4743f Fix #1117 Radioactive bee effect can bypass apiarist suit 2016-03-22 12:28:31 -07:00
mezz e90771e38a Merge branch 'dev' into 4.2 2016-03-06 10:01:54 -08:00
mezz 9c98a6a00b Bump Version 2016-03-06 10:01:23 -08:00
mezz 75a3a7b935 Fix #1093 Electrical Engine circuit board does not sync 2016-03-06 10:00:22 -08:00
mezz 99020cde7f Fix #1086 Squeezer NEI integration can't lookup multi stack recipes. 2016-02-28 23:40:57 -08:00
mezz 98e13299d6 Fix #1061 Squeezer is very "liberal" regarding oredict in Recipes 2016-02-28 23:39:55 -08:00
mezz 010fe4662a Fix #1081 FillBucketHook does not check bucket type 2016-02-28 23:18:55 -08:00
mezz 92ee6dbc0d Merge branch 'dev' into 4.2 2016-02-22 15:34:50 -08:00
mezz 98c7b3b5ed Bump version 2016-02-22 15:34:21 -08:00
Nirek-K 507b03043e Add module checks to RotaryCraft plugin 2016-02-21 19:34:34 -06:00
mezz c1e00ff395 Do not save player profile properties to nbt 2016-02-19 19:08:17 -08:00
Nirek-K 897123c883 Add missing Snow diplacable tags for plugin flowers. 2016-02-19 13:14:00 -06:00
Nirek-K 0ed33cf9a3 Increase wax cast durability to 16, Fabricator tank to 8, Add 4 to 4 Plain glass Fabrication recipe, change stamp defs to be oreDictionary. 2016-02-19 12:41:35 -06:00
Nirek-K 8ba8c0fb17 Forgot Sandstone had variants. Add variants->Fabricator. 2016-02-18 06:25:16 -06:00
Nirek-K 9c40b03751 Tank should probably be a multiple of 2, derp. 2016-02-18 06:05:42 -06:00
Nirek-K 194c0a0e77 Add Red Sand, Sandstone to Fabricator->glass, slightly increase fabricator glasstank. 2016-02-18 05:51:30 -06:00
Nirek-K 77157aa9cb Add new pinecones from BoP to squeezable for seedoil. 2016-02-12 15:16:24 -06:00
Nirek-K f4681d251c Increase seed oil yield of Harvestcraft peanuts, and tree nuts to be slightly more viable oil sources. 2016-02-12 11:00:09 -06:00
mezz 96cc1b869c Merge branch 'dev' into 4.2 2016-02-11 17:36:46 -08:00
mezz 20ca044be0 Bump version 2016-02-11 17:36:30 -08:00
mezz 6cd9f33c3f Close #1060 Close #1065 Disable Growthcraft plugin for version 2.5.0+ 2016-02-11 17:35:21 -08:00
Nirek-K 7585c6a265 Fix #1067 add module checks to BoP Plugin 2016-02-11 00:48:38 -06:00
Nirek-K 91a5084bde Further cleanup GC plugin nulls. 2016-02-10 15:29:26 -06:00
Nirek-K 0876a50be2 Add missing null check to Growthcraft plugin. 2016-02-10 08:19:40 -06:00
mezz 1941690330 Merge branch 'dev' into 4.2 2016-02-01 18:06:09 -08:00
mezz bbd39ea5c7 Fix #1053 NPE when loading with old configs 2016-02-01 18:05:51 -08:00
mezz 53f4107ee3 Merge branch 'dev' into 4.2 2016-01-28 20:38:06 -08:00
mezz 6265c01f60 Bump version 2016-01-28 20:37:46 -08:00
Nirek-K b9478e16b7 Add Orchard farmland, dirt traversal for ic2 plants. 2016-01-24 15:49:31 -06:00
Nirek-K 2cdee67624 Add Carrots equal to Apples in the squeezer(juice/mulch), potatoes at double fermenter rate of wheat (choice between pure fermenting, and seeds for seedoil) 2016-01-24 03:35:55 -06:00
Nirek-K 58fe331fe3 And missed one in HC too. 2016-01-24 03:17:37 -06:00
Nirek-K a4d5117a97 Missed a check in BoP, also fix PlantMegaPack 2016-01-24 03:05:27 -06:00
Nirek-K 32a9a6ff5c Fix #1051 Check for Farming module before adding BoP and Harvestcraft crops. 2016-01-24 02:19:15 -06:00
mezz 9f2f2ed85b Fix #1043 Crash from mods spawning wood items with wildcard metadata 2016-01-15 20:07:54 -08:00
mezz 22258c2dac Merge branch 'dev' into 4.2 2016-01-11 07:40:17 -08:00
mezz e0c1c538aa Fix ClientTickEvent crash on disconnect from server 2016-01-10 21:04:35 -08:00
mezz 825768e522 Fix naturalist's eye lag on multiplayer servers 2016-01-01 11:55:39 -08:00
mezz dd21d83ea3 Merge branch 'dev' into 4.2 2015-12-30 04:39:13 -08:00
mezz d0ead16eaa Bump version to 4.2.4 2015-12-30 04:38:44 -08:00
mezz 1d924d5ed5 Merge pull request #1004 from estebes/dev
Add IC2 crops support to multifarms (uses orchard farm logic)
2015-12-30 04:37:20 -08:00
mezz ff7adac9e1 Fix #1001 Slabs can't combine on placement in same block 2015-12-30 04:34:23 -08:00
mezz 45993f8213 Fix #999 Forestry Wood Logs Placement Issue 2015-12-30 02:31:19 -08:00
mezz 33573fea20 Fix #1022 Indistinguishable pollination color for some tree species 2015-12-29 12:34:26 -08:00
mezz 178142bf7a Fix #922 New tree branching generates non-connected logs 2015-12-29 11:17:42 -08:00
mezz 5d2aaea757 Fix #1008 Backpack superposition bug 2015-12-29 09:40:37 -08:00
mezz fbb02e43f5 Limit packets from engines supplying power to nearly full receivers 2015-12-29 08:20:05 -08:00
mezz 896767ae1b auto format 2015-12-23 23:06:45 -08:00
mezz d11034e4aa Merge branch 'dev' into 4.2 2015-12-22 17:47:29 -08:00
mezz cc64b09ad4 Fix #1017 crash when accessing bee cart gui 2015-12-22 17:44:38 -08:00
mezz d5ebc02999 Fix BreedingTracker crash 2015-12-19 16:02:08 -08:00
mezz 8415b657f2 Use Forge 10.13.4.1566 fuel burn time workaround.
Fix #960 Fireproof wood have fuel value,
Fix #469 Burn time of wooden slabs should be 150 ticks
2015-12-13 13:47:55 -08:00
mezz f0099b728f Merge branch 'dev' into 4.2 2015-12-12 22:52:38 -08:00
mezz 1ceccddbd0 Fix sync issues with researched mutations, use smaller packets 2015-12-12 22:51:59 -08:00
mezz c875e8ed5d Merge branch 'dev' into 4.2 2015-12-12 18:10:38 -08:00
mezz f3ee4f8694 Bump version to 4.2.2 2015-12-12 18:09:51 -08:00
mezz c2437a8a13 Fix #1009 Minor fluid dupe on right-clicking nearly-full machine 2015-12-12 18:08:40 -08:00
mezz e2f32ab767 Sync mail to client on login, do not display mail indicator on logout 2015-12-12 17:45:12 -08:00
mezz d0c8c92863 Fix #1010 Automatically sync breeding trackers to client 2015-12-12 17:27:18 -08:00
Nirek-K a8c84cfcf9 Possibly fix IE plugin loading too early, add small RotaryCraft plugin. 2015-12-11 12:06:28 -06:00
mezz 8f8f6a05f7 Fix #1006 Farm Block Recipes broken 2015-12-09 14:43:58 -08:00
mezz 721c8fd0ad Make AlleleEffectFertile only tick IGrowable and IPlantable 2015-12-08 18:22:16 -08:00
estebes 962a17494c Added IC2 crops support to multifarms (uses orchard farm logic) 2015-12-05 11:10:34 +00:00
mezz 01e43d8a18 #987 Use fluid names instead of IDs 2015-12-03 12:19:04 -08:00
mezz 4228ef73d7 Merge branch 'dev' into 4.2 2015-12-03 11:29:37 -08:00
mezz 6b9614bccd Fix #994 Peat-fired Engine no longer accepts Bituminous Peat 2015-12-03 10:07:51 -08:00
mezz 179311a390 Use 2 render passes for saplings (for addon saplings via tree api) 2015-12-03 10:02:08 -08:00
mezz d8bcab07ba Use 2 render passes for saplings (for addon saplings via tree api) 2015-12-03 10:01:27 -08:00
mezz 2368f05778 Merge branch 'dev' into 4.2 2015-12-03 10:00:08 -08:00
mezz 347e0a61e1 Fix #986 Forestry version of acacia sapling cannot be obtained 2015-11-26 20:15:12 -08:00
mezz 23792a84c1 Fix #983 farm block recipes are missing for most materials 2015-11-25 12:11:15 -08:00
mezz b4c0777f1c minor cleanup 2015-11-22 10:10:09 -08:00
mezz db5daf9e3d Tidy species code 2015-11-21 21:50:38 -08:00
mezz a574eac903 Add custom colour provider for bee species colours 2015-11-21 21:27:21 -08:00
mezz b3799c22e6 Fix #975 Crash with Storage Module disabled and Growthcraft 2015-11-21 20:46:17 -08:00
mezz 97d10fdba3 Fix MutationConditionRequiresResource 2015-11-21 16:04:18 -08:00
mezz e03400fc6a Update lang 2015-11-21 16:04:09 -08:00
mezz 2a35c1072b bump version for dev 2015-11-21 14:05:41 -08:00
mezz a4dd450ff8 Add mutation condition requireResource(String oreDictName) 2015-11-21 14:04:53 -08:00
mezz 8df8404a84 #976 Disable inventory tweaks shortcut buttons on Forestry inventories 2015-11-21 12:34:21 -08:00
mezz 54e73da1d5 Fix #979 Bio Generator crashing the game 2015-11-21 11:53:06 -08:00
mezz 7d83e28a03 Fix #977 add additional defensive checks to BeekeepingLogic 2015-11-21 11:24:35 -08:00
mezz db7736f7d2 Add missing GUI classes to GuiIdRegistry 2015-11-21 11:24:00 -08:00
mezz eff9dfcca7 Fix #978 missing localization keys for mail trades and escritoire 2015-11-21 11:06:12 -08:00
mezz 2b874fb42f Use Multimaps.asMap to hide weird casting 2015-11-20 18:34:07 -08:00
mezz 27daa8e1ac Add support for InventoryTweaks 2015-11-20 18:28:25 -08:00
mezz a49eb1c5f9 Fix #524 Add config for Received letters HUD Placement 2015-11-20 15:31:21 -08:00
mezz 7e3b7acdef Allow hotkeys to send items to hotbar, except locked slots 2015-11-20 12:05:10 -08:00
mezz 9c532dd076 Allow hotkeys to send items to hotbar, except locked slots 2015-11-20 12:04:49 -08:00
mezz 3de8bac1ad Update minimum required Forge version to 10.13.4.1448
(cherry picked from commit 4c41d0bb6e)
2015-11-20 10:18:08 -08:00
mezz abca8b13f3 Fix #972 tree growing logs with default properties instead using genome
(cherry picked from commit 67a7185261)

Conflicts:
	src/main/java/forestry/arboriculture/genetics/TreeDefinition.java
2015-11-20 10:17:51 -08:00
mezz 3c7856f264 Add checking to make sure client and server can't open different GUIs 2015-11-20 09:49:55 -08:00
mezz 408a66bb40 Refactor GUI handling code 2015-11-19 20:37:33 -08:00
mezz 31231db459 minor cleanup 2015-11-19 16:42:30 -08:00
mezz 67a7185261 Fix #972 tree growing logs with default properties instead using genome 2015-11-19 01:37:29 -08:00
mezz aeaf113b11 Fix git capitalization derp 2015-11-19 01:24:57 -08:00
mezz 084a84903f Update lang 2015-11-19 01:04:39 -08:00
mezz 167e493160 Move butterfly blocks to PluginLepidopterology.blocks
remove custom shaped and shapeless recipes
2015-11-19 01:04:39 -08:00
mezz ce2a2ec8ed Move engine blocks to PluginEnergy.blocks 2015-11-19 01:04:38 -08:00
mezz 10e5391f48 Move factory blocks to PluginFactory.blocks 2015-11-19 01:04:38 -08:00
mezz ffe19807db Move mail blocks to PluginMail.blocks 2015-11-19 01:04:37 -08:00
mezz 6cfae1462f Move farm blocks to PluginFarming.blocks 2015-11-19 01:04:37 -08:00
mezz 18a0ae3643 Move apiculture blocks to PluginApiculture.blocks 2015-11-19 01:04:37 -08:00
mezz 358522b2af Move tree blocks to PluginArboriculture.blocks 2015-11-19 01:04:36 -08:00
mezz ade9bb6940 Move core blocks to PluginCore.blocks 2015-11-19 01:04:36 -08:00
mezz 23fd664e34 remove last bits of ForestryItem 2015-11-19 01:04:36 -08:00
mezz 60d5728ccb Move core items to PluginCore.items (first... 2015-11-19 01:04:35 -08:00
mezz 55118e399f Move butterfly items to PluginLepidopterology.items 2015-11-19 01:04:35 -08:00
mezz 7e50c57ba9 Move mail items to PluginMail.items 2015-11-19 01:04:35 -08:00
mezz 317dd0dbf9 Move storage items to PluginStorage.items 2015-11-19 01:04:34 -08:00
mezz e9af62e772 Move liquid container items to PluginFluids.items 2015-11-19 01:04:34 -08:00
mezz daa5e3bc75 Move food items into PluginFood.items 2015-11-19 01:04:33 -08:00
mezz e248f40f58 Move mod compatibility plugins into plugins/compat folder 2015-11-19 01:04:33 -08:00
mezz 0e53fccfdb Move food items into PluginFood.items 2015-11-19 01:04:33 -08:00
mezz fc289c16d4 Move arboriculture items into PluginApiculture.items 2015-11-19 01:04:32 -08:00
mezz fe69452464 Move apiculture items to PluginApiculture.items 2015-11-19 01:04:32 -08:00
mezz 4c41d0bb6e Update minimum required Forge version to 10.13.4.1448 2015-11-19 01:04:31 -08:00
mezz 0fe87253d1 Move core items to PluginCore.items (first of item/block refactor) 2015-11-19 01:04:31 -08:00
mezz 4f19f95b71 Clean up packet registration code 2015-11-19 01:04:31 -08:00
mezz a6ecc95f80 Merge pull request #971 from ganymedes01/dev
Workaround to allow other mods to get plank icons without position
2015-11-18 11:38:26 -08:00
ganymedes01 4b43ee9e8e Update BlockPlanks.java 2015-11-18 18:43:11 +00:00
mezz f52059640e Add strict checking for registered genomes 2015-11-17 14:13:22 -08:00
mezz c96f260abd Fix farms not spreading farmland after it has started 2015-11-17 03:06:32 -08:00
mezz 010c65b192 Fix soldering iron can't remove circuit boards 2015-11-17 02:26:44 -08:00
mezz f2b95e1777 Clean up farm itemEntity collection code 2015-11-17 02:19:35 -08:00
mezz 5f18a51827 Clean up allele effects code 2015-11-17 02:16:52 -08:00
mezz eaad349b74 Add typed methods for getting entities from the world 2015-11-17 02:12:30 -08:00
mezz efd9cd06f6 Add support for Apiarist Armor on any EntityLivingBase 2015-11-17 02:11:35 -08:00
mezz 2f16ca5828 Update lang 2015-11-17 02:10:11 -08:00
mezz d7c2f11ace Fix #967 trees growing with wrong wood 2015-11-16 23:13:39 -08:00
mezz d82db2f003 Fix #965 issues displaying multiblock owner ledgers 2015-11-16 22:50:41 -08:00
mezz 84b1fa8c07 Fix farms only planting brown mushrooms 2015-11-15 02:59:56 -08:00
mezz 723d07ab7c Use vanilla BigMushroom generation 2015-11-15 02:59:32 -08:00
mezz 71b5f2f181 Fix #964 tools not working in Adventure Mode 2015-11-15 02:19:29 -08:00
mezz 8d7dc86e9f Fix #805 Implement no recipe conflict feature for the Worktable 2015-11-15 00:51:56 -08:00
mezz 5f2de3026e Clean up widgets and OpenGL gui lighting issues 2015-11-13 23:12:40 -08:00
mezz 430115a7d4 Refactor text layout from GuiForestry into its own class 2015-11-13 03:38:06 -08:00
mezz a516886087 Refactor worktable code a bit 2015-11-13 02:47:52 -08:00
mezz c6b1e65a4a Create a dedicated ghost crafting inventory class 2015-11-12 23:21:00 -08:00
mezz e154d4e2c6 Add better error checking to the Fabricator 2015-11-11 21:44:03 -08:00
mezz 9247ed1509 Stop error ledgers from showing tooltip when cleared 2015-11-11 21:21:04 -08:00
mezz 0251691d66 Fix obfuscation conflict with multiblock component isInvalid() 2015-11-11 17:15:47 -08:00
mezz d4cd0aaf7e Fix #960, Use itemDamage for wood items instead of NBT 2015-11-11 00:09:17 -08:00
mezz 90c9050e80 Fix #949 Fluid not accepted by carpenter when some recipes are removed 2015-11-10 21:33:43 -08:00
mezz 0713e0ea9c Fix #949 Fluid not accepted by carpenter when fluid names are changed 2015-11-10 18:53:04 -08:00
mezz 731d15fbd5 Add API for multiblock components 2015-11-10 02:44:18 -08:00
mezz 14bdab069e Fix #879 Fix #957 Improve error messages, add habitat locator hint 2015-11-09 01:32:42 -08:00
mezz e73e18a3c7 Fix worktable not showing owner gui tab 2015-11-08 23:47:33 -08:00
mezz fc69e25ea3 Fix crash with Damage Indicators mod and Butterflies 2015-11-08 21:21:23 -08:00
mezz 8465ff358a Update Lang, organize error codes 2015-11-08 20:23:51 -08:00
mezz b7382f074a Fix crash from ExtraUtilities calling getRenderType() on server 2015-11-08 19:40:16 -08:00
mezz 56a9e84800 Fix Gui crash on server startup 2015-11-08 19:24:46 -08:00
mezz 01433d7741 Fix #958 Crash when placing a machine block on another modded block 2015-11-08 02:35:16 -08:00
mezz fb595f7b26 Fix #956 clean up butterfly code 2015-11-08 02:13:38 -08:00
mezz 53269c63ca Remove redundant language keys for cart entities 2015-11-07 15:34:15 -08:00
mezz 63a48b2ea2 Tidy bee cart code 2015-11-07 15:15:54 -08:00
mezz 3770d34926 Fix integration with RailCraft loader/unloader/dispenser 2015-11-06 23:07:51 -08:00
mezz 2ab553898f Stop RailCraft from rendering a halo text of the cart's inventory name 2015-11-06 00:08:39 -08:00
mezz 862feea792 Ensure Forestry Queens from NEI are mated 2015-11-05 23:09:05 -08:00
mezz bd8dbbeaf8 Add Minecart with Apiary 2015-11-05 21:58:01 -08:00
mezz 571bdd9b80 Fix cart contents rendering as black in the End dimension 2015-11-05 17:47:29 -08:00
mezz 411b4959f2 Move inventory code to their own files, refactor, cleanup.
Register items and blocks before the rest of preInit.
2015-11-05 04:47:04 -08:00
mezz f1afca664b Fix #951 Add localization for mutation restrictions 2015-11-04 18:56:13 -08:00
mezz d1fe7eee92 Clean up Escritoire code and behavior 2015-11-04 05:01:54 -08:00
mezz 08812ae5ea Fix #948 Bottler Error in Console Forestry NEI Integration 2015-11-03 21:41:59 -08:00
mezz c9b145817e Add registration and retrieval of alleles by IChromosomeType in the API 2015-11-03 21:32:14 -08:00
mezz 407496a0ad Fix Alveary bee effects 2015-11-03 20:45:06 -08:00
mezz eb0a55d91c Close #699 Add Beehouse Minecart 2015-11-03 01:07:20 -08:00
mezz 5b53c3f153 Bump version to 4.2.0 for dev branch 2015-11-03 01:07:19 -08:00
mezz d284ee0e6d Bump version number to 4.1.1 2015-11-02 00:14:35 -08:00
mezz acf350d1aa Fix #945 crash in StandardTank.canDrain 2015-11-02 00:02:31 -08:00
mezz 3fde556b86 Fix fermenter not starting in some cases 2015-10-31 21:11:35 -07:00
mezz 7a45ce35a3 Fix #937 Multifarm detects rain in rainless biomes 2015-10-31 20:41:36 -07:00
mezz 9a745b10d7 Fix #938 Squeezer tank level does not update unless gui interacted 2015-10-31 20:29:15 -07:00
mezz 1594edd4d4 Fix #936 Machines run too slowly 2015-10-31 01:40:13 -07:00
mezz 72fc7cee93 Fix crash from missing tile in TankManager 2015-10-30 01:29:44 -07:00
mezz 4796ea24bb Fix #691 Tank GUIs are not synced for multiple players at the same time 2015-10-30 01:05:22 -07:00
mezz bcb468b496 Fix #935 Most farm blocks are uncraftable 2015-10-29 21:25:35 -07:00
mezz 6a3e3e6f55 Fix #932 The coolant ability of crushed ice is 1000s of times too high 2015-10-29 17:20:37 -07:00
mezz 6ed24c7c8c Fix #930 Fireproof Wood doesn't work in regular wood recipes 2015-10-29 16:57:24 -07:00
mezz d6a5b00251 Fix #934 Raintank crash 2015-10-29 15:47:51 -07:00
mezz 1f82c216a8 Fix #933 Fix Ore Dictionary registration for Fruits 2015-10-29 15:41:22 -07:00
mezz 8824585282 Fix #929 Bottler doesn't work with some mod Fluid Containers 2015-10-27 23:38:50 -07:00
mezz 784bdba4fb Fix #928 Fermenter not processing some recipes when resource tank is low 2015-10-27 16:48:22 -07:00
mezz 79f98f35d8 Fix #924 Allow wrenching top or bottom of most blocks to rotate them 2015-10-27 01:59:48 -07:00
mezz a7ca8b0c20 Fix ray trace collision on chests 2015-10-27 01:57:50 -07:00
mezz 23271bab04 Fix #922 Multifarm does not harvest large tree branches 2015-10-27 00:55:48 -07:00
mezz d1328cff6c Fix #923 Alvearies get disconnected from pipes on server start 2015-10-27 00:13:54 -07:00
mezz 45f844b53b Fix #925 Fermenter null fluid crash 2015-10-26 22:48:15 -07:00
mezz 8502ec84f9 Fix #913 Fabricator temperature jumps once glass is melted 2015-10-25 14:10:56 -07:00
mezz b7aaebd508 Fix #918 New chests are not transparent to light 2015-10-25 13:26:13 -07:00
mezz 85c05d8985 Fix #899 Machine's exterior tank levels don't update until GUI is opened 2015-10-25 00:46:43 -07:00
mezz dffa89709b Fix #914 Multifarms delete harvested wood from forestry saplings 2015-10-24 23:20:03 -07:00
mezz d25f869129 Fix #900 Bee life bar will stay in GUI when queen is taken out 2015-10-24 22:31:19 -07:00
mezz f1693a248c Fix #911 GUI tabs can go offscreen on wide GUIs and small resolutions 2015-10-24 22:26:19 -07:00
mezz 888047cad8 Add preserveNBT option to IDescriptiveRecipe, simplify IFabricatorRecipe 2015-10-24 19:59:59 -07:00
mezz 7ad2e2e94d Add FabricatorSmeltingRecipeManager to API 2015-10-24 18:12:50 -07:00
mezz ef61493179 Add back deprecated PlainFlowers for compatibility 2015-10-23 12:23:19 -07:00
mezz a2aef025c1 Create ButterflyDefinition, organize alleles 2015-10-23 12:21:37 -07:00
mezz 41e3fb15e5 Fix crash from Creosote or Steam rendering on machine tanks 2015-10-22 23:20:34 -07:00
mezz bb87fc6046 Add Java 7 check, clean up build.gradle 2015-10-22 20:40:52 -07:00
mezz 806d7eb9f6 Remove unused generic type 2015-10-22 18:18:45 -07:00
mezz 6539ad10af Tidy up TextureManager 2015-10-22 18:18:27 -07:00
mezz 76afe30e94 Make IToolWrench @Optional 2015-10-22 14:29:39 -07:00
mezz 02c25142cd Move getPlayer from ProxyCommon to PlayerUtil 2015-10-22 14:10:26 -07:00
mezz 84968c6021 Fix #897 Bee territory numbers are misleading 2015-10-22 13:58:58 -07:00
mezz 4874b628db Improve engine placement and hit box 2015-10-22 01:15:37 -07:00
mezz df02bf1d26 Fix ItemBlockWood getIcon(ItemStack stack, int pass) to work correctly 2015-10-21 22:04:22 -07:00
mezz cf69299087 Make TankRenderInfo immutable 2015-10-21 22:03:20 -07:00
mezz c49401bcda Remove unused IStructureBlockItem.java 2015-10-21 22:02:58 -07:00
mezz d2d203f772 Fix machines won't drain fluid containers that hold less than one bucket 2015-10-21 14:15:37 -07:00
mezz 6d6af6b043 Fix #904 Crash from using Infuser 2015-10-21 12:22:40 -07:00
mezz c4311cca77 Implement a way to list and remove recipes from the API 2015-10-21 12:22:27 -07:00
mezz 824b3f087a Deprecate the unused IWorldGenInterface 2015-10-20 00:17:03 -07:00
mezz 2a1b8fbc68 Fix tree leaves have default genetics instead of sapling's genetics 2015-10-19 22:34:49 -07:00
mezz 07defbeec3 Fix #901 Fix some stuff for WAILAPlugins 2015-10-19 22:34:49 -07:00
Nirek-K 4716f8daf7 Add GC grapes to backpack. 2015-10-19 15:36:31 -05:00
mezz 0cc8c4c4df Remove unused textures and changelog folder 2015-10-18 18:08:55 -07:00
mezz 2605bdaceb Show actual fluid color on machine's exterior tanks 2015-10-18 18:01:40 -07:00
mezz 9899687786 Split up Proxies.common code 2015-10-17 12:25:13 -07:00
mezz 0ea878d7bc Minor cleanup, tidy Imprinter networking 2015-10-16 17:32:33 -07:00
mezz 3e0cf7c302 Fix #892 Forestry Workbench destroys TFC Tools in Crafts. 2015-10-16 14:35:31 -07:00
mezz b81466fdcb Update development version of Forge to recommended 2015-10-16 14:34:54 -07:00
Nirek-K 2725b19f95 Update/Include support for MagicalCrops Beta 5 2015-10-16 14:18:39 -05:00
mezz 099e6f47e8 Fix #893 Shift-Removing items from a machine prefers the hotbar 2015-10-16 11:56:22 -07:00
mezz 614c13b4f3 Clean up network, clearly separate client and server packets 2015-10-15 15:57:17 -07:00
mezz 140643bec3 Fix #887 Particles are wrong when breaking wood items 2015-10-14 12:20:42 -07:00
mezz e6bb939f7f Bump version of Dev branch to 4.1.0 2015-10-14 01:57:44 -07:00
mezz ad0fcc57b5 Fix #853 Improve trees to have more branches and variations with height. 2015-10-14 01:57:35 -07:00
mezz 3684792a39 Update Lang 2015-10-14 01:52:34 -07:00
mezz 0e81f373f0 Implement a generic ISpeciesType for ISpeciesRoot 2015-10-13 10:28:12 -07:00
mezz 59d1d3456b Fix #888 Squeezer should not work with reusable fluid containers 2015-10-13 08:08:53 -07:00
mezz 15fe11094b Bump version to 4.0.9 2015-10-11 19:04:57 -07:00
mezz 790e9b9fba Fix #883 ExtrabiomesXL saplings not fermenting with Honey 2015-10-11 19:04:16 -07:00
mezz c7ef2ef807 Bump version to 4.0.8 2015-10-11 06:12:17 -07:00
mezz 11fa7bbf75 Add improvements to the flower API 2015-10-11 06:12:17 -07:00
Nirek-K 4c2cbd77c1 Fix #876 Mustard internal naming is failure. 2015-10-11 04:58:45 -05:00
mezz f58de9e5cc Fix #880 Apiarist's chest does not creak when opened 2015-10-10 22:49:32 -07:00
mezz 3f0dc9e74f Fix #881 Update codebase to Java 7 2015-10-10 22:49:09 -07:00
mezz 9ecab0fecd Bump version to 4.0.7 2015-10-06 20:19:28 -07:00
mezz 01245f32c5 Fix #870 Analyzer turns pollen into saplings 2015-10-06 20:18:53 -07:00
mezz 8cc0da5c04 Fix #830 Multifarms do not plant saplings when Arboriculture is disabled 2015-10-05 23:42:00 -07:00
mezz 6e68768259 Fix #865 Farm with multiple gearboxes has "no power" if one has no power 2015-10-05 23:30:46 -07:00
mezz 9ee34b06b6 Remove unused part of NEI Recipe Handler 2015-10-05 22:17:29 -07:00
mezz b05c395300 Fix #867 Custom Forestry recipes not working with NEI [?] button 2015-10-05 22:17:03 -07:00
mezz 48ef020dc9 Fix #868 Last tin can won't be consumed by Farm GUI 2015-10-05 21:59:56 -07:00
mezz 83b7ce00f7 Fix #859 Multi Farm using single tube upgrade cannot set the direction 2015-10-03 22:48:39 -07:00
mezz 6165d80c0c Fix #807 Add direction labels to circuit board for farm configurations 2015-10-03 22:06:50 -07:00
James Mitchell 31cb40f7b6 Update CLA link 2015-10-03 20:35:23 -07:00
mezz 16e4801d48 Bump version to 4.0.6 2015-10-03 13:44:22 -07:00
InfinityRaider 8fb7d5eb67 FlowerRegistry and AgriCraft compatibility update
Add to CLA agreement
2015-10-03 13:35:27 -07:00
mezz 55866d6a64 #830 fix farm crash when Plugin Arboriculture is disabled 2015-10-03 00:51:31 -07:00
mezz 510cf83670 Fix #861 Worktable client crash 2015-10-03 00:28:01 -07:00
mezz 656a6451bf Improve bee complexity calculation by excluding blacklisted mutations 2015-10-03 00:22:59 -07:00
mezz 69ee5bde65 Bump version to 4.0.5 2015-10-03 00:12:26 -07:00
mezz 592895cc48 Add NEI Worktable [?] support and categories from NEI Addons 2015-10-03 00:12:02 -07:00
mezz 7b5febd394 Bump version to 4.0.4 2015-10-01 18:31:23 -07:00
mezz 71481d5ace Add API helpers for using the new IBeeHousing modifiers and listeners 2015-10-01 18:30:28 -07:00
mezz 1d0efd537e Fix #791 *alyzer slot behavior changed. (can't swap specimens) 2015-09-29 22:33:27 -07:00
mezz 5052df8844 Revert "Fix breaking change to the API in IMutation"
This reverts commit f020dcf2e2.
2015-09-29 21:10:11 -07:00
mezz b1d496f24f Fix #858 sometimes can't craft with multiple GregTech tools in Worktable 2015-09-29 21:07:23 -07:00
mezz 2bfe576f7e Bump version to 4.0.3 2015-09-29 15:21:30 -07:00
mezz cc5c8af338 Fix #856 Crash when clicking the fluid slot in NEI squeezer recipe 2015-09-29 15:20:35 -07:00
mezz 19a9c2681c Bump version to 4.0.2 2015-09-29 00:40:19 -07:00
mezz f020dcf2e2 Fix breaking change to the API in IMutation 2015-09-29 00:30:42 -07:00
mezz dd34765223 Bump version to 4.0.1 2015-09-28 23:47:54 -07:00
mezz 3253077466 Fix #854 OpenGL transparency issues 2015-09-28 23:45:18 -07:00
mezz 8743f29613 Fix #851 Add a way to get wood items from the API 2015-09-27 19:35:46 -07:00
mezz 0b6b201366 Fix bug in implementation of tryAddStack 2015-09-26 23:12:11 -07:00
mezz 3e9da9b85c Fix alyzer GUI's behaviour line 2015-09-26 22:03:10 -07:00
mezz 8b7d3e5d15 Replace Constants.WILDCARD with OreDictionary.WILDCARD_VALUE 2015-09-26 16:05:05 -07:00
mezz 76b7ee6f50 Fix squeezer consuming whole stacks of fluid containers at once 2015-09-26 14:36:37 -07:00
Nirek-K 9478ffb7c1 Fix #847 TradeStation not outputting items to automation (also fix insertion filtering) 2015-09-26 13:29:29 -05:00
mezz ad08b90be8 Fix #845 Looking up NEI Squeezer recipes shows full stacks instead of 1 2015-09-25 22:26:31 -07:00
mezz 94f1898a56 Fix #844 Combine NEI entries for squeezing liquid containers 2015-09-25 22:25:49 -07:00
mezz 86f9fbcaf0 Rename TileBeeHouse since it's messing with git's file capitalization 2015-09-25 15:45:23 -07:00
mezz 65f876cf4a #806 Fix server crash from trying to load chest renderer 2015-09-25 15:30:25 -07:00
mezz 4234c38d69 Replace !Proxies.common.isSimulating(world) with standard world.isRemote 2015-09-25 15:18:24 -07:00
mezz 1e89bab556 Rename files to be more consistent. Add missing headers, tidy up Utils 2015-09-25 15:09:54 -07:00
mezz 37dd0efee2 Fix #750 Worktable not working properly with GT Tools 2015-09-24 01:04:55 -07:00
mezz 19a802fd68 #750 Make sure recipes with NBT do not match items with no NBT 2015-09-24 00:49:26 -07:00
mezz f6e3eb9335 Cleanup unused imports 2015-09-23 03:09:08 -07:00
mezz bfd49b107d Remove PropolisPipe (Moved to BC Compat) and update BC API version 2015-09-23 03:08:45 -07:00
mezz 77f5130604 Fix #804 Missing glass input on Thermionic Fabricator NEI Integration 2015-09-23 01:42:05 -07:00
mezz a188bbd43a Fix #821 bee house and apiary are invisible 2015-09-23 01:17:28 -07:00
mezz eee55cebf7 Fix error message for missing plantable flowers in config 2015-09-23 01:15:25 -07:00
ganymedes01 e967479506 Close #809 Remove stained glass 2015-09-22 23:31:47 -07:00
mezz f49bcfd020 Fix #834 Fix machine fluid handling for IFluidContainerItem 2015-09-22 23:14:46 -07:00
Vexatos 614305c690 Extracted Apiarist Armor checking methods to API so addons can use them 2015-09-20 15:33:01 -07:00
Nirek-K 901318c2b0 Add small plugin for Erebus. (possibly to be expanded) 2015-09-18 16:58:33 -05:00
mezz ef0dc7b7f7 Fix #833 Spread out HasFlowersCache hasFlowers checking over ticks 2015-09-17 04:14:59 -07:00
Nirek-K 31bd1e82fd Make plantball value slightly less terrible (equal to 9 wheat, so 'slightly' better to combine wheat, still worse for things like saplings) 2015-09-15 18:09:48 -05:00
Nirek-K b56a299f63 Fix #829 IC2 plantballs not working in fermenter 2015-09-15 17:11:34 -05:00
mezz 2a4191718b Fix #828 Register ShapelessRecipeCustom in recipe sorter 2015-09-15 14:28:57 -07:00
mezz cf2050d77a Fix #826 Biomes O Plenty module crashes with disabled Storage Module 2015-09-12 21:07:05 -07:00
mezz e0ccc28d55 Fix #819 Thermionic Fabricator not heating up 2015-09-11 17:17:05 -07:00
ganymedes01 f85a3d442b enable lighting when rendering 2015-09-11 16:29:57 +01:00
ganymedes01 5cd2350c9b Fix #806 Chests now render akin to the vanilla chests 2015-09-09 01:07:16 -07:00
mezz eef67a43ac Merge pull request #815 from bdew/fix-squeezer-od
Fixes to OreDictionary support in squeezer recipes
2015-09-08 13:15:22 -07:00
mezz c42ba345da Merge pull request #810 from ganymedes01/rainmaker-fix
Fix rainmaker crash
2015-09-08 13:08:24 -07:00
bdew 8f67ea75b8 Changed squeezer recipes to prioritize specific recipes over OreDictionary
Also fixed squeezer not accepting inputs that match OD recipes and fixed the NEI handler
2015-09-06 22:39:57 +03:00
Nirek-K d954f97cff minor melony cleanup of Growthcraft plugin 2015-08-30 17:43:52 -05:00
Nirek-K 81b4035fb8 Add glowshrooms to nether flower 2015-08-30 17:19:28 -05:00
Nirek-K bcd97662b2 Growthcraft Plugin
Orchard support for rice, grape, hops
Forester Backpack plant support
Squeezer/fermenter
Centrifuging GC beecombs
2015-08-30 17:18:42 -05:00
Nirek-K 767c92a66a Add BoP Mushrooms and tiny cactus to Bees 2015-08-30 13:26:17 -05:00
Nirek-K 6a1b2610fb Fix BoP flower integration, update flowers to be more than just vanilla (idea: Hummer12007) 2015-08-30 13:13:35 -05:00
Nirek-K 81d2c1971c Allow Biogas Engine fuel tank to be drained externally. 2015-08-28 08:17:58 -05:00
ganymedes01 b99d5829c1 Fix rainmaker crash 2015-08-27 18:51:47 +01:00
Nirek-K e71d57406e Make worktable recipe oreDictionary aware (craftingTableWood) 2015-08-23 12:28:30 -05:00
Nirek-K 62ee9013e5 Add what should be the rest of mod magical crops for the beta 2015-08-22 20:44:55 -05:00
Nirek-K 1daa7d243f Add some support for magical crops beta naming (likely missing some nonvanilla crops) 2015-08-22 19:45:28 -05:00
Nirek-K 19c13abd45 Add the inevitivably missed oreDictionary Recipes 2015-08-21 02:34:49 -05:00
Nirek-K 79e0fabacb Make Chest Recipes oreDictionary aware with chestWood 2015-08-21 02:01:41 -05:00
Nirek-K def51bada1 Make most recipes OreDictionary Aware. 2015-08-21 01:45:09 -05:00
ganymedes01 f5dc70141e Enable lighting when rendering TESRs 2015-08-20 00:48:07 -07:00
mezz 4bf4c2a043 Fix #798 Add NEIIntegration (thanks @Tonius for original work) 2015-08-20 00:44:20 -07:00
mezz e3cd71779e Update Lang 2015-08-19 11:17:51 -07:00
mezz fbf731b858 Close #797 With Nirek: Chipset upgrades for Machines 2015-08-18 23:47:42 -07:00
mezz 1da8001b92 Add findMatchingRecipes for possible multiple recipes in the future 2015-08-16 22:23:33 -07:00
mezz 71d53727e9 Fix #792 Sheared decorative leaf blocks don't stack 2015-08-16 16:57:17 -07:00
mezz 358fb75f9a Fix #794 engine chaining and heating 2015-08-16 00:16:03 -07:00
mezz 020f30b418 Fix #793 frames should not be automated or stack in Apiaries 2015-08-15 23:37:27 -07:00
mezz c56f09897c Move BoP integration to Forestry 2015-08-15 22:41:04 -07:00
mezz d924483fbb Fix farmable IMC to accept negative meta (wildcard) 2015-08-15 22:12:04 -07:00
mezz 56c06ab6ed Use block and item registries instead of using delegate directly
allows compatibility with older Forge
2015-08-15 19:01:30 -07:00
mezz 8eb4afc464 Improve farmables IMC parsing (allow names with dots in them) 2015-08-15 18:59:23 -07:00
mezz 689b97d948 Merge GuiUtil into Utils 2015-08-14 00:54:27 -07:00
mezz 844045f75b Fix #669 Allow Rainmaker automation 2015-08-12 00:16:40 -07:00
mezz 045a3a9ccd Fix #743 Add config option for pollination on Vanilla trees 2015-08-11 23:09:51 -07:00
mezz 0def8c3f34 Let players walk through willow leaves slowly 2015-08-11 22:34:31 -07:00
mezz 8d9c282a4f Fix #789 leaves can decay when tree trunk is still there 2015-08-11 22:33:38 -07:00
mezz 2f5edddb59 Fix tree gen vines where leaves should be 2015-08-11 22:31:15 -07:00
mezz 3c63001cef Fix #768 drop circuit board when machine is broken. 2015-08-10 00:16:32 -07:00
mezz a714310096 Fix Alveary with new wood slabs 2015-08-10 00:14:27 -07:00
mezz 8303f5c216 Ensure string capitalization uses English Locale 2015-08-09 21:32:50 -07:00
mezz d04adf394b Cleanup some derped refactoring 2015-08-09 21:09:54 -07:00
mezz e28ad8424c Clean up Utils.getTile to not use try/catch 2015-08-09 21:02:46 -07:00
mezz 9f1b1cc474 Fix #680 and Fix #750 worktable handling of tools and ItemCraftedEvent 2015-08-09 21:02:26 -07:00
mezz 2508343599 Fix slab recipe to output 6 slabs instead of 1 2015-08-09 20:46:54 -07:00
mezz 6f07bbc63f Stop NEI Crashing when cheating items to a full inventory 2015-08-09 20:45:04 -07:00
mezz f9b76a90b1 Fix #773 Crash with invalid flowers from HEE in Forestry 4.0.0 2015-08-09 15:53:48 -07:00
mezz b1db58b8a4 #773 try to catch the cause of the apiculture config crash 2015-08-08 15:51:43 -07:00
mezz 44538c1e03 Fix #786 Extremely short bee-lifespan 2015-08-08 14:11:00 -07:00
mezz fb7bf6d9fb Make engines more compatible with other RF mods 2015-08-08 12:53:05 -07:00
mezz ee46f4fee1 Add sources jar to maven, try to clean up gradle 2015-08-08 11:13:05 -07:00
mezz 32812d8a43 Fix stair and fence item rendering when held 2015-08-02 22:53:23 -07:00
mezz fdf3493ed0 Code cleanup and remove some unused code 2015-08-02 22:53:19 -07:00
mezz f0f8c9a984 Fix #780 Small particles decrease the mipmap level
Add potion effect particles (poison, regeneration, confusion)
Add Ignition effect particles
2015-08-02 00:43:23 -07:00
mezz 48a59c2ca7 Fix Alveary temperature modifiers have no effect 2015-08-01 22:40:41 -07:00
mezz 15c17125bb Fix bees unable to find flowers 2015-08-01 22:39:48 -07:00
mezz 70a04e99ce #773 Fix NPE in StackUtils.parseStackString 2015-08-01 18:33:17 -07:00
mezz 43906e058d Fix #763 Forestry saplings sometimes use bonemeal infinitely 2015-08-01 18:23:45 -07:00
mezz 36ed432462 Update lang 2015-08-01 14:08:39 -07:00
mezz 7ed3d1e19f Fix server crash from wood icon registration 2015-08-01 13:32:01 -07:00
mezz 09fcbad632 Fix #776 Rearrange and use full-size text on (bee/tree/flutter)-alzyer 2015-08-01 04:09:11 -07:00
mezz 7cda899bef Fix #775 Found Chromosome with invalid Alleles 2015-08-01 00:58:37 -07:00
mezz 63ba9903ea Fix #779 Village apiaries are inactive, lose inventory after reload 2015-08-01 00:16:55 -07:00
mezz 3a5ccd87cd Tree refactor. Breaks wooden logs and planks.
Fix #758 Add fireproof versions of all Forestry wooden items
Fix #762 Forestry saplings are randomly invisible on place.
Fix #689 Remove old fence recipes
Fix #504 Make NaturalistEye pretty
Fix #778 Villager house roofs should be made of colorful Forestry wood stairs
2015-08-01 00:16:55 -07:00
mezz 0a79ead98d Add a way to get all the Alveary components from the Alveary Controller 2015-08-01 00:16:54 -07:00
Nirek-K 6845a0f71b Fix #771 Don't NPE in AgriCraft Plugin if Farming is disabled. 2015-07-25 11:10:50 -05:00
mezz 953ffd4fd1 Fix bee flower config parsing 2015-07-24 23:31:52 -07:00
mezz 8d96264763 Fix #769 Fix #744 issues with flower weights in apiculture.cfg 2015-07-24 23:08:17 -07:00
mezz b52a46f352 Fix multifarm control blocks. Minor multiblock cleanup 2015-07-20 21:52:07 -07:00
mezz d24eb693e9 Vect cleanup 2015-07-20 21:51:27 -07:00
mezz e04bbcba84 Fix #757 Particles rendering in other dimensions 2015-07-19 23:25:45 -07:00
mezz aa47599278 Giant multiblock refactor 2015-07-19 22:35:34 -07:00
Nirek-K 201111cb83 minor cleanup of the minor cleanup of the fabricator..cleanup 2015-07-18 18:58:13 -05:00
Nirek-K 20b3db9b41 minor cleanup to fabricator 2015-07-18 18:26:28 -05:00
Nirek-K 9251e17b9a Fix #761 Make tree vines generate correctly 2015-07-17 15:33:58 -05:00
Nirek-K e223537485 Fix #760 Allow Genome chests to be extracted from. 2015-07-16 11:19:14 -05:00
Nirek-K 454abdd2ed Restrict Fabricator inventory more like Carpenter.
Only accept related items while recipe is active, never accept casts/meltables.
2015-07-15 20:41:10 -05:00
Nirek-K 124aba3ede Fix #752 Fabricator Inventory only accepts items that is used in a recipe. 2015-07-15 14:13:56 -05:00
mezz c106c1826f Fix crash from missing Agrarian bee allele from older worlds 2015-07-13 21:05:13 -07:00
Nirek-K 0cd138111a Add mycelium recipes for grain seeds to Moistener 2015-07-12 14:18:29 -05:00
Nirek-K 2ea9f98aad Add Natura and Harvestcraft grains to Moistener. 2015-07-12 13:22:22 -05:00
Nirek-K 5cfdbccaad Allow extraction of unwanted items from the Moistener reservoir. 2015-07-12 09:50:48 -05:00
Nirek-K fba7288046 Fix #754 Allow bees to see Agricraft wheat and netherwart 2015-07-10 14:53:39 -05:00
mezz 6a6627394b Fix #697 boost mutation chance when researched in the Escritoire 2015-07-08 00:19:22 -07:00
Nirek-K d31968d190 Fix #746 point princess/drone triggers to master TE for errorstates 2015-07-02 09:08:38 -05:00
Nirek-K 5975bdf4fd Plant Mega Pack stage finalish plus 3.
misc plants to their respective sets
2015-07-01 08:32:19 -05:00
Nirek-K d882b0cf0a minor plugin cleanup 2015-07-01 01:34:50 -05:00
mezz a972287513 Fix #745 backpack item config gets the wrong meta value 2015-06-30 20:50:01 -07:00
mezz dea639cee2 Cleanup TickHandler registration 2015-06-30 20:50:01 -07:00
Nirek-K 2492167833 Plant Mega Pack Finalish Stage
Add plants to orchard (exception 2 tile plants)
Add aquatic plants to the orchard (place plant on water that's on dirt)
Add fungus to multifarm crop/orchard and bees
Add rest of mountain/shrubs/etc to multifarm and bees
Add jungle to multifarm crop/orchard and bees
Add berry bushes to multifarm crop/orchard and squeezer
2015-06-30 12:09:59 -05:00
Nirek-K 4f61f8062d Adjust Orchard logic slightly to support traversal blocks beyond wood. 2015-06-29 21:46:43 -05:00
mezz 73ad158b5c Fix #742 Hopper doesn't fill last spot of Carpenter inventory 2015-06-28 14:28:34 -07:00
mezz 7d998d2bb8 #740 Fix default Apiculture.cfg in non-english locales 2015-06-28 13:56:54 -07:00
mezz 958885ab95 Fix issue with BeekeepingLogic cached canWork 2015-06-28 02:51:58 -07:00
Nirek-K 7d9cf9ac81 Make Biogas equal to biomass in the Biogas Engine 2015-06-28 03:28:51 -05:00
Nirek-K b5120991d5 Plugin for Immersive Engineering
Add Hemp to crop tube, seeds to squeezer.
2015-06-28 02:09:59 -05:00
Nirek-K ce4e4935d9 Add IC2 Biogas as a fuel to the Biogas engine (80% value of Biomass) 2015-06-28 00:54:27 -05:00
mezz f0fa49f46c Fix #739 Trade station crashes when loaded without name set 2015-06-27 21:17:26 -07:00
mezz f79a8b3896 Fix #738 plain leaf blocks accept fertilizer and fruit pods do not grow 2015-06-26 22:27:43 -07:00
mezz f423093bf0 Fix #737 Cactus blocks not working as flowers 2015-06-26 19:36:36 -07:00
mezz 347b53307f Fix bees to pollinate vanilla trees again 2015-06-24 22:25:40 -07:00
mezz a848721f32 Fix wheat and other block-only flowers not counting as a flower 2015-06-24 22:03:06 -07:00
mezz 3fb8ba1ef4 Fix #732 letter sizes 2015-06-24 21:18:10 -07:00
mezz 00ad24d415 Tidy up TemperatureState for engines 2015-06-24 20:44:06 -07:00
mezz 9ade0b8df2 Register GeneratorFuels even without IC2 present 2015-06-24 20:43:11 -07:00
mezz 348551ed8f Add some basic tests (having minecraft unloaded is very limiting) 2015-06-22 23:34:26 -07:00
mezz 306ba82848 Fix #522 Redstone signals should disable Forestry's powered machines 2015-06-22 21:31:40 -07:00
mezz 55ee53583c #507 add basic config gui 2015-06-21 23:18:48 -07:00
mezz 3e9e4afbfd Localize Configs #507 2015-06-21 23:18:39 -07:00
mezz 117fd7235c Bump minor version number to 3.7.0 2015-06-21 14:53:34 -07:00
mezz b9cd7f1e63 Migrate ALL configs to forge configs #507 2015-06-21 14:52:54 -07:00
mezz 33b010a8fa Fix #536 Add additional Flower Configs for each type
Migrate Apiculture config #507
2015-06-20 23:57:33 -07:00
mezz 8ef193c8a5 Fix #730 Crash with corrupted forestry leaves from MFR harvester 2015-06-20 20:38:01 -07:00
mezz 9d1d1b9ef1 Bump BC recipes compatible version range.
BuildcraftAPI|recipes got a breaking update in 7.0, but it only
breaks integration tables
2015-06-20 16:17:27 -07:00
mezz edd7dd098b Include CraftGuide API in project, excluded from JAR
It rarely updates, and the gradle git thing was never working for me
2015-06-20 16:14:59 -07:00
mezz 3488a39016 Fix #295 Display energy stored on machines correctly 2015-06-20 01:45:12 -07:00
mezz 797b794214 Fix Analyzer block's display for trees and butterflies 2015-06-20 01:40:06 -07:00
mezz adc3b438c6 Fix #729 Leaves name doesn't show properly 2015-06-19 20:38:57 -07:00
1624 changed files with 91907 additions and 42505 deletions

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
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
+10
View File
@@ -0,0 +1,10 @@
if [ ! -z $(git diff --name-only HEAD HEAD~1 | grep build.gradle) ]; then
new_version="$(git log -n1 --format=format:"%H")"
sed --in-place "s!^//version:.*!//version: $new_version!g" build.gradle
git add build.gradle
git commit -m "[ci skip] update build script version to $new_version"
git push
echo "Updated buildscript version to $new_version";
else
echo "Ignored buildscript version update: no changes detected"
fi
+45
View File
@@ -0,0 +1,45 @@
# 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 10 ./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
+44
View File
@@ -0,0 +1,44 @@
# 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 latest build
on:
push:
branches: [ master, main ]
jobs:
build-and-release:
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: Update latest tag
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
prerelease: false
title: "Latest build"
files: build/libs/*.jar
+45
View File
@@ -0,0 +1,45 @@
# 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
+28 -22
View File
@@ -1,22 +1,28 @@
# everything
/*
# folders
!/forestry_techne
!/gradle/wrapper
!/src
!/api
# files
!/.gitignore
!/.gitmodules
!/CLA.txt
!/CONTRIBUTING.md
!/LICENSE.txt
!/license-header.txt
!/README.md
!/application.properties
!/build.gradle
!/build.xml
!/gradlew
!/gradlew.bat
.gradle
.settings
/.idea/
/run/
/build/
/eclipse/
.classpath
.project
/bin/
/config/
/crash-reports/
/logs/
options.txt
/saves/
usernamecache.json
banned-ips.json
banned-players.json
eula.txt
ops.json
server.properties
servers.dat
usercache.json
whitelist.json
/out/
*.iml
*.ipr
*.iws
src/main/resources/mixins.*.json
-9
View File
@@ -1,9 +0,0 @@
[submodule "lang"]
path = lang
url = https://github.com/ForestryMC/Forestry-Localization.git
[submodule "api/redstoneflux"]
path = api/redstoneflux
url = https://github.com/CoFH/RedstoneFlux-API.git
[submodule "api/forestry"]
path = api/forestry
url = https://github.com/ForestryMC/ForestryAPI.git
+48
View File
@@ -0,0 +1,48 @@
# ForestryMC
Changelog of ForestryMC.
### [#8 Fix NPE on crafting in worktable](https://github.com/GTNewHorizons/ForestryMC/pull/8)
**Merge pull request #8 from GTNewHorizons/worktable-npe**
* Fix NPE on crafting in worktable
[4c7c7c34388aebd](https://github.com/GTNewHorizons/ForestryMC/commit/4c7c7c34388aebd)
by Martin Robertz *2021-04-06 15:05:20*
### No issue
**Fix NPE on crafting in worktable**
[621208393e64d97](https://github.com/GTNewHorizons/ForestryMC/commit/621208393e64d97)
by Glease *2021-04-06 14:46:39*
### [#6 Ic2 crop module](https://github.com/GTNewHorizons/ForestryMC/pull/6)
**Ic2 crop module (#6)**
* Added IC2-Crop-Module
* Changed Lang repo
* updated lang submodule
[d2545b7a5990cf2](https://github.com/GTNewHorizons/ForestryMC/commit/d2545b7a5990cf2)
by bartimaeusnek *2020-12-24 20:15:03*
### [#7 Dirty fix for BQ3 crafting quest not triggering](https://github.com/GTNewHorizons/ForestryMC/pull/7)
**Merge pull request #7 from GTNewHorizons/bq3_compat**
* Dirty fix for BQ3 crafting quest not triggering
[d0254997472c5be](https://github.com/GTNewHorizons/ForestryMC/commit/d0254997472c5be)
by Martin Robertz *2021-01-22 16:15:58*
### No issue
**bump version**
[98c0b66b6fbe598](https://github.com/GTNewHorizons/ForestryMC/commit/98c0b66b6fbe598)
by DreamMasterXXL *2021-01-29 19:11:09*
**Merge branch 'IC2-Crop-Module' into GTNH-Fixes**
[5b61261d69d541b](https://github.com/GTNewHorizons/ForestryMC/commit/5b61261d69d541b)
by DreamMasterXXL *2021-01-29 19:05:41*
**Dirty fix for BQ3 crafting quest not triggering**
[7320ddb44f63bfd](https://github.com/GTNewHorizons/ForestryMC/commit/7320ddb44f63bfd)
by Glease *2021-01-22 14:41:32*
+1 -1
View File
@@ -31,7 +31,7 @@ Beware of ugly code.
Bugfixes are generally welcome. If you want to contribute something which changes game mechanics, please talk to someone with commit privileges first. Nothing is more frustrating than putting a lot of work and effort into a new game mechanic and then having the PR rejected because it doesn’t fit gameplay-wise.
**If you submit a PR you must accept the [Contributor License Agreement](https://www.clahub.com/agreements/ForestryMC/ForestryMC). There is no way around that, since otherwise changing the license later - even to something more permissive! - , becomes close to impossible.**
**If you submit a PR you must accept the [Contributor License Agreement](https://cla-assistant.io/ForestryMC/ForestryMC). There is no way around that, since otherwise changing the license later - even to something more permissive! - , becomes close to impossible.**
### License & Copyright
Submodule api/forestry deleted from a8e10de642.
-5
View File
@@ -1,5 +0,0 @@
mcversion=1.7.10
forgeversion=10.13.3.1370-1.7.10
version_major=3
version_minor=6
version_patch=2
+467 -297
View File
@@ -1,350 +1,520 @@
//version: eb0b030ab9cb1d0f9a31f11e69e1ceed1dab2c89
/*
DO NOT CHANGE THIS FILE!
Also, you may replace this file at any time if there is an update available.
Please check https://github.com/SinTh0r4s/ExampleMod1.7.10/blob/main/build.gradle for updates.
*/
import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import java.util.concurrent.TimeUnit
buildscript {
repositories {
mavenCentral()
maven {
name = "forge"
url = "http://files.minecraftforge.net/maven"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
// https://github.com/ajoberstar/gradle-git
classpath 'org.ajoberstar:gradle-git:0.8.0'
}
repositories {
maven {
name = "forge"
url = "https://maven.minecraftforge.net"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
maven {
name = "Scala CI dependencies"
url = "https://repo1.maven.org/maven2/"
}
maven {
name = "jitpack"
url = "https://jitpack.io"
}
}
dependencies {
classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.4'
}
}
plugins {
id 'idea'
id 'scala'
id("org.ajoberstar.grgit") version("3.1.1")
id("com.github.johnrengelman.shadow") version("4.0.4")
id("com.palantir.git-version") version("0.12.3")
}
apply plugin: 'forge'
apply plugin: 'maven'
loadProperties()
def projectJavaVersion = JavaLanguageVersion.of(8)
version = version_major + '.' + version_minor + '.' + version_patch + '.' + getBuildNumber()
if (project.hasProperty('buildQualifier')) {
version = project.version + '-' + project.buildQualifier
java {
toolchain {
languageVersion.set(projectJavaVersion)
}
}
group= "net.sengir.forestry" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "forestry_" + mcversion
ext.dirDest = './build/dist'
ext.dirLang = "./lang"
idea {
module {
inheritOutputDirs = true
downloadJavadoc = true
downloadSources = true
}
}
ext.apiForestry = "./api/forestry"
ext.apiRedstoneFlux = "./api/redstoneflux"
checkPropertyExists("modName")
checkPropertyExists("modId")
checkPropertyExists("modGroup")
checkPropertyExists("autoUpdateBuildScript")
checkPropertyExists("minecraftVersion")
checkPropertyExists("forgeVersion")
checkPropertyExists("replaceGradleTokenInFile")
checkPropertyExists("gradleTokenModId")
checkPropertyExists("gradleTokenModName")
checkPropertyExists("gradleTokenVersion")
checkPropertyExists("gradleTokenGroupName")
checkPropertyExists("apiPackage")
checkPropertyExists("accessTransformersFile")
checkPropertyExists("usesMixins")
checkPropertyExists("mixinPlugin")
checkPropertyExists("mixinsPackage")
checkPropertyExists("coreModClass")
checkPropertyExists("containsMixinsAndOrCoreModOnly")
checkPropertyExists("usesShadowedDependencies")
checkPropertyExists("developmentEnvironmentUserName")
ext.CraftGuideRepo = "https://github.com/Uristqwerty/CraftGuide.git"
ext.CraftGuideTmp = "build/tmp/CraftGuide"
def checkPropertyExists(String propertyName) {
if (project.hasProperty(propertyName) == false) {
throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/SinTh0r4s/ExampleMod1.7.10/blob/main/gradle.properties")
}
}
String javaSourceDir = "src/main/java/"
String scalaSourceDir = "src/main/scala/"
String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/")
String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/")
if((new File(targetPackageJava).exists() || new File(targetPackageScala).exists()) == false) {
throw new GradleException("Could not resolve \"modGroup\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
}
if(apiPackage) {
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
if((new File(targetPackageJava).exists() || new File(targetPackageScala).exists()) == false) {
throw new GradleException("Could not resolve \"apiPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
}
}
if(accessTransformersFile) {
String targetFile = "src/main/resources/META-INF/" + accessTransformersFile
if(new File(targetFile).exists() == false) {
throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile)
}
}
if(usesMixins.toBoolean()) {
if(mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) {
throw new GradleException("\"mixinPlugin\" requires \"mixinsPackage\" and \"mixinPlugin\" to be set!")
}
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
if((new File(targetPackageJava).exists() || new File(targetPackageScala).exists()) == false) {
throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
}
String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".scala"
String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
if((new File(targetFileJava).exists() || new File(targetFileScala).exists() || new File(targetFileScalaJava).exists()) == false) {
throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava)
}
}
if(coreModClass) {
String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".scala"
String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
if((new File(targetFileJava).exists() || new File(targetFileScala).exists() || new File(targetFileScalaJava).exists()) == false) {
throw new GradleException("Could not resolve \"coreModClass\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava)
}
}
configurations.all {
resolutionStrategy.cacheChangingModulesFor(0, TimeUnit.SECONDS)
// Make sure GregTech build won't time out
System.setProperty("org.gradle.internal.http.connectionTimeout", 120000 as String)
System.setProperty("org.gradle.internal.http.socketTimeout", 120000 as String)
}
// Fix Jenkins' Git: chmod a file should not be detected as a change and append a '.dirty' to the version
'git config core.fileMode false'.execute()
// Pulls version from git tag
version = minecraftVersion + "-" + gitVersion()
group = modGroup
archivesBaseName = modId
minecraft {
version = mcversion + "-" + forgeversion
runDir = "run"
version = minecraftVersion + "-" + forgeVersion + "-" + minecraftVersion
runDir = "run"
replace '@VERSION@', project.version
replace '@BUILD_NUMBER@', getBuildNumber()
if (replaceGradleTokenInFile) {
replaceIn replaceGradleTokenInFile
if(gradleTokenModId) {
replace gradleTokenModId, modId
}
if(gradleTokenModName) {
replace gradleTokenModName, modName
}
if(gradleTokenVersion) {
replace gradleTokenVersion, versionDetails().lastTag
}
if(gradleTokenGroupName) {
replace gradleTokenGroupName, modGroup
}
}
}
sourceSets {
api {
java {
srcDir CraftGuideTmp + "/src"
include '**/CraftGuide/api/**'
}
}
main {
java {
srcDir project.apiForestry
srcDir project.apiRedstoneFlux + "/src/main/java"
}
resources {
srcDir project.dirLang
}
}
if(file("addon.gradle").exists()) {
apply from: "addon.gradle"
}
apply from: 'repositories.gradle'
configurations {
implementation.extendsFrom(shadowImplementation)
}
repositories {
maven {
name = "ic2"
url = "http://maven.ic2.player.to/"
}
ivy {
name "BuildCraft"
artifactPattern "http://www.mod-buildcraft.com/releases/BuildCraft/[revision]/[module]-[revision]-[classifier].[ext]"
}
}
configurations {
api
compile.extendsFrom api
maven {
name = "Overmind forge repo mirror"
url = "https://gregtech.overminddl1.com/"
}
if(usesMixins.toBoolean()) {
maven {
name = "sponge"
url = "https://repo.spongepowered.org/repository/maven-public"
}
maven {
url = "https://jitpack.io"
}
}
}
dependencies {
api 'net.industrial-craft:industrialcraft-2:2.2.713-experimental:api'
api name: "buildcraft", version: "6.4.10", classifier: "dev"
if(usesMixins.toBoolean()) {
annotationProcessor("org.ow2.asm:asm-debug-all:5.0.3")
annotationProcessor("com.google.guava:guava:24.1.1-jre")
annotationProcessor("com.google.code.gson:gson:2.8.6")
annotationProcessor("org.spongepowered:mixin:0.8-SNAPSHOT")
// using 0.8 to workaround a issue in 0.7 which fails mixin application
compile("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
// Mixin includes a lot of dependencies that are too up-to-date
exclude module: "launchwrapper"
exclude module: "guava"
exclude module: "gson"
exclude module: "commons-io"
exclude module: "log4j-core"
}
compile("com.github.GTNewHorizons:SpongeMixins:1.3.3:dev")
}
}
processResources {
apply from: 'dependencies.gradle'
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
def mixinConfigJson = "mixins." + modId + ".json"
def mixingConfigRefMap = "mixins." + modId + ".refmap.json"
def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfigRefMap
def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg"
// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
// replace version and mcversion
expand 'version':project.version, 'mcversion':project.minecraft.version
}
// copy everything else, thats not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
exclude '**/*.md'
}
task generateAssets {
if(usesMixins.toBoolean()) {
new File(projectDir.toString() + "/src/main/resources/", mixinConfigJson).text = """{
"required": true,
"minVersion": "0.7.11",
"package": "${modGroup}.${mixinsPackage}",
"plugin": "${modGroup}.${mixinPlugin}",
"refmap": "${mixingConfigRefMap}",
"target": "@env(DEFAULT)",
"compatibilityLevel": "JAVA_8"
}
runClient {
if (project.hasProperty('mcUsername')) {
args "--username=" + project.mcUsername
}
if (project.hasProperty('mcPassword')) {
args "--password=" + project.mcPassword
}
"""
}
}
debugClient {
if (project.hasProperty('mcUsername')) {
args "--username=" + project.mcUsername
}
if (project.hasProperty('mcPassword')) {
args "--password=" + project.mcPassword
}
task relocateShadowJar(type: ConfigureShadowRelocation) {
target = tasks.shadowJar
prefix = modGroup + ".shadow"
}
task echoVersion << {
printNextVersion()
}
shadowJar {
manifest {
attributes(getManifestAttributes())
}
def saveVersion() {
ant.propertyfile(
file: "application.properties") {
entry( key:"version_major", type:"int", value: version_major)
entry( key:"version_minor", type:"int", value: version_minor)
entry( key:"version_patch", type:"int", value: version_patch)
}
project.version = version_major + '.' + version_minor + '.' + version_patch + '.' + getBuildNumber()
printNextVersion()
}
def printNextVersion() {
println '*************************************************************'
println 'The next build will be version: ' + project.version
println '*************************************************************'
}
task bumpMajor << {
project.version_major = Integer.parseInt(project.version_major) + 1
project.version_minor = "0"
project.version_patch = "0"
saveVersion()
}
task bumpMinor << {
project.version_minor = Integer.parseInt(project.version_minor) + 1
project.version_patch = "0"
saveVersion()
}
task bumpPatch << {
project.version_patch = Integer.parseInt(project.version_patch) + 1
saveVersion()
}
import org.ajoberstar.grgit.Grgit
task initCraftGuide << {
def localRepo = file(CraftGuideTmp)
if (localRepo.exists()) {
println 'Updating CraftGuide repo'
def grgit = Grgit.open(localRepo)
grgit.pull()
grgit.close()
} else {
println 'Cloning CraftGuide repo'
def grgit = Grgit.clone(dir: localRepo, uri: CraftGuideRepo)
grgit.close()
}
minimize() // This will only allow shading for actually used classes
configurations = [project.configurations.shadowImplementation]
dependsOn(relocateShadowJar)
}
jar {
destinationDir = file("build/tmp")
archiveName = "main.jar"
manifest {
attributes(getManifestAttributes())
}
// Copy various READMEs and Licensing files into the jar
into ('forestry/api') {
from project.apiForestry + "/LICENSE.txt"
}
into ('cofh/api') {
from project.apiRedstoneFlux + "/LICENSE - LGPLv3.txt"
}
into ('buildcraft/api') {
from "./src/main/java/buildcraft/LICENSE-API"
}
if(usesShadowedDependencies.toBoolean()) {
dependsOn(shadowJar)
enabled = false
}
}
task mainJarSigned ( type: Jar, dependsOn: 'reobf' ) {
from (zipTree(jar.getArchivePath())) {
exclude '**/api/**'
exclude '**/codechicken/**'
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDir = file("build/tmp")
archiveName = "signed.jar"
doLast {
if (project.hasProperty('signingKeystore')) {
ant.signjar(jar: getArchivePath(),
alias: signingAlias,
keystore: signingKeystore,
storepass: signingStorepass)
} else {
println 'Signing disabled, gradle.properties is missing.'
}
}
reobf {
if(usesMixins.toBoolean()) {
addExtraSrgFile mixinSrg
}
}
task mainJar ( type: Zip, dependsOn: mainJarSigned ) {
from (zipTree(mainJarSigned.getArchivePath())) {
include '**'
}
from (zipTree(jar.getArchivePath())) {
include '**'
exclude '**/codechicken/**'
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDir = file(dirDest)
includeEmptyDirs = false
extension = 'jar'
}
task devJarSigned ( type: Jar, dependsOn: 'classes' ) {
from(sourceSets.main.output) {
exclude '**/api/**'
exclude '**/codechicken/**'
}
destinationDir = file("build/tmp")
archiveName = "signed-dev.jar"
doLast {
if (project.hasProperty('signingKeystore')) {
ant.signjar(jar: getArchivePath(),
alias: signingAlias,
keystore: signingKeystore,
storepass: signingStorepass)
} else {
println 'Signing disabled, gradle.properties is missing.'
}
}
}
task devJar ( type: Zip, dependsOn: devJarSigned ) {
from (zipTree(devJarSigned.getArchivePath())) {
include '**'
}
from(sourceSets.main.allSource) {
include '**'
exclude '**/codechicken/**'
}
from(sourceSets.main.output) {
include '**'
exclude '**/codechicken/**'
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
destinationDir = file(dirDest)
extension = 'jar'
classifier = 'dev'
}
task apiJar(type: Jar, dependsOn: 'classes') {
from project.apiForestry
from (sourceSets.main.output) {
include 'forestry/api/**'
}
destinationDir = file(dirDest)
extension = 'jar'
classifier = 'api'
}
task releaseInit << {
println '*************************************************************'
println 'This build will be version: ' + rootProject.version
println '*************************************************************'
}
task release (dependsOn: [releaseInit, apiJar, devJar, mainJar]) {
}
mainJar.shouldRunAfter releaseInit
devJar.shouldRunAfter releaseInit
apiJar.shouldRunAfter releaseInit
afterEvaluate {
compileApiJava.dependsOn initCraftGuide
if(usesMixins.toBoolean()) {
tasks.compileJava {
options.compilerArgs += [
"-AreobfSrgFile=${tasks.reobf.srg}",
"-AoutSrgFile=${mixinSrg}",
"-AoutRefMapFile=${refMap}",
// Elan: from what I understand they are just some linter configs so you get some warning on how to properly code
"-XDenableSunApiLintControl",
"-XDignore.symbol.file"
]
}
}
}
runClient {
def arguments = []
if(usesMixins.toBoolean()) {
arguments += [
"--mods=../build/libs/$modId-${version}.jar",
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
]
}
if(developmentEnvironmentUserName) {
arguments += [
"--username",
developmentEnvironmentUserName
]
}
args(arguments)
}
runServer {
def arguments = []
if (usesMixins.toBoolean()) {
arguments += [
"--mods=../build/libs/$modId-${version}.jar",
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
]
}
args(arguments)
}
tasks.withType(JavaExec).configureEach {
javaLauncher.set(
javaToolchains.launcherFor {
languageVersion = projectJavaVersion
}
)
}
processResources
{
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
// replace version and mcversion
expand "minecraftVersion": project.minecraft.version,
"modVersion": versionDetails().lastTag,
"modId": modId,
"modName": modName
}
// copy everything else, thats not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
}
def getManifestAttributes() {
def manifestAttributes = [:]
if(containsMixinsAndOrCoreModOnly.toBoolean() == false) {
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
}
if(accessTransformersFile) {
manifestAttributes += ["FMLAT" : accessTransformersFile.toString()]
}
if(coreModClass) {
manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass]
}
if(usesMixins.toBoolean()) {
manifestAttributes += [
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
"MixinConfigs" : mixinConfigJson,
"ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
]
}
return manifestAttributes
}
task sourcesJar(type: Jar) {
from (sourceSets.main.allJava)
from (file("$projectDir/LICENSE"))
getArchiveClassifier().set('sources')
}
task shadowDevJar(type: ShadowJar) {
from sourceSets.main.output
getArchiveClassifier().set("dev")
manifest {
attributes(getManifestAttributes())
}
minimize() // This will only allow shading for actually used classes
configurations = [project.configurations.shadowImplementation]
}
task relocateShadowDevJar(type: ConfigureShadowRelocation) {
target = tasks.shadowDevJar
prefix = modGroup + ".shadow"
}
task circularResolverJar(type: Jar) {
dependsOn(relocateShadowDevJar)
dependsOn(shadowDevJar)
enabled = false
}
task devJar(type: Jar) {
from sourceSets.main.output
getArchiveClassifier().set("dev")
manifest {
attributes(getManifestAttributes())
}
if(usesShadowedDependencies.toBoolean()) {
dependsOn(circularResolverJar)
enabled = false
}
}
task apiJar(type: Jar) {
from (sourceSets.main.allJava) {
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString() + '/**'
}
from (sourceSets.main.output) {
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString() + '/**'
}
from (sourceSets.main.resources.srcDirs) {
include("LICENSE")
}
getArchiveClassifier().set('api')
}
artifacts {
archives apiJar
archives devJar
archives sourcesJar
archives devJar
if(apiPackage) {
archives apiJar
}
}
uploadArchives {
repositories {
if (project.hasProperty('mavenDir')) {
mavenDeployer {
repository(url: "file://"+mavenDir)
addFilter('api') { artifact, file ->
file == apiJar.archivePath
}
addFilter('dev') { artifact, file ->
file == devJar.archivePath
}
}
} else {
println 'Archives upload disabled, gradle.properties is missing.'
}
}
install{
repositories{
mavenInstaller{
pom.withXml {
def repositoriesNode = asNode().appendNode("repositories")
project.repositories.each { repository ->
def repositoryNode = repositoriesNode.appendNode("repository")
repositoryNode.appendNode("name", repository.name)
repositoryNode.appendNode("url", repository.properties.get("url"))
}
}
}
}
}
def loadProperties() {
println('loading application.properties')
// Updating
task updateBuildScript {
doLast {
if (updateBuildScript()) return
file("application.properties").withReader { reader ->
def userProps = new Properties()
userProps.load(reader)
for (Map.Entry property in userProps) {
project.ext[property.getKey()] = property.getValue()
}
}
print("Build script already up-to-date!")
}
}
def getBuildNumber() {
return "$System.env.BUILD_NUMBER" != "null" ? "$System.env.BUILD_NUMBER" : "0"
if (isNewBuildScriptVersionAvailable()) {
if (autoUpdateBuildScript.toBoolean()) {
updateBuildScript()
} else {
println("Build script update available! Run 'gradle updateBuildScript'")
}
}
static URL availableBuildScriptUrl() {
new URL("https://raw.githubusercontent.com/SinTh0r4s/ExampleMod1.7.10/main/build.gradle")
}
static boolean updateBuildScript() {
if (isNewBuildScriptVersionAvailable()) {
def buildscriptFile = new File("build.gradle")
availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } }
print("Build script updated. Please REIMPORT the project or RESTART your IDE!")
return true
}
return false
}
static boolean isNewBuildScriptVersionAvailable() {
Map parameters = ["connectTimeout": 2000, "readTimeout": 2000]
String currentBuildScript = new File("build.gradle").getText()
String currentBuildScriptHash = getVersionHash(currentBuildScript)
String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText()
String availableBuildScriptHash = getVersionHash(availableBuildScript)
boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash
return !isUpToDate
}
static String getVersionHash(String buildScriptContent) {
String versionLine = buildScriptContent.find("^//version: [a-z0-9]*")
if(versionLine != null) {
return versionLine.split(": ").last()
}
return ""
}
configure(updateBuildScript) {
group = 'forgegradle'
description = 'Updates the build script to the latest version'
}
+1
View File
@@ -3,3 +3,4 @@ samtrion;[email protected];2015-01-18
GenuineSounds;[email protected];2015-02-26
airbreather;[email protected];2015-04-10
ganymedes01;[email protected];2015-05-27
infinityraider;theoneandonlyraider@gmail;com;2015-10-03
+13
View File
@@ -0,0 +1,13 @@
// Add your dependencies here
dependencies {
compile("com.github.GTNewHorizons:NotEnoughItems:master-SNAPSHOT:dev")
compile("com.github.GTNewHorizons:inventory-tweaks:master-SNAPSHOT:api")
compile("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev")
compile("com.mod-buildcraft:buildcraft:7.1.23:dev")
// buildcraft shades cofh-core
//compileOnly("curse.maven:cofh-core-69162:2388751")
compileOnly("curse.maven:craftguide-75557:2459320")
}
Binary file not shown.
+60
View File
@@ -0,0 +1,60 @@
modName = Forestry
# This is a case-sensitive string to identify your mod. Convention is to use lower case.
modId = Forestry
modGroup = forestry
# WHY is there no version field?
# The build script relies on git to provide a version via tags. It is super easy and will enable you to always know the
# code base or your binary. Check out this tutorial: https://blog.mattclemente.com/2017/10/13/versioning-with-git-tags/
# Will update your build.gradle automatically whenever an update is available
autoUpdateBuildScript = false
minecraftVersion = 1.7.10
forgeVersion = 10.13.4.1614
# Select a username for testing your mod with breakpoints. You may leave this empty for a random user name each time you
# restart Minecraft in development. Choose this dependent on your mod:
# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name
# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty
developmentEnvironmentUserName = "Developer"
# Define a source file of your project with:
# public static final String VERSION = "GRADLETOKEN_VERSION";
# The string's content will be replaced with your mods version when compiled. You should use this to specify your mod's
# version in @Mod([...], version = VERSION, [...])
# Leave these properties empty to skip individual token replacements
replaceGradleTokenInFile = Constants.java
gradleTokenModId =
gradleTokenModName =
gradleTokenVersion = GRADLETOKEN_VERSION
gradleTokenGroupName =
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise you can
# leave this property empty.
# Example value: apiPackage = api + modGroup = com.myname.mymodid -> com.myname.mymodid.api
apiPackage = api
# Specify the configuration file for Forge's access transformers here. I must be placed into /src/main/resources/META-INF/
# Example value: mymodid_at.cfg
accessTransformersFile =
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
mixinPlugin =
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
mixinsPackage =
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
# This parameter is for legacy compatability only
# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin
coreModClass =
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
containsMixinsAndOrCoreModOnly = false
# If enabled, you may use 'shadowImplementation' for dependencies. They will be integrated in your jar. It is your
# responsibility check the licence and request permission for distribution, if required.
usesShadowedDependencies = false
Binary file not shown.
+1 -2
View File
@@ -1,6 +1,5 @@
#Wed Jul 02 15:54:47 CDT 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
Vendored
+77 -53
View File
@@ -1,4 +1,20 @@
#!/usr/bin/env bash
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
@@ -6,47 +22,6 @@
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
@@ -61,9 +36,49 @@ while [ -h "$PRG" ] ; do
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -90,7 +105,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -110,10 +125,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
@@ -154,11 +170,19 @@ if $cygwin ; then
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
APP_ARGS=$(save "$@")
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
Vendored
+20 -10
View File
@@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -8,14 +24,14 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -46,10 +62,9 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
@@ -60,11 +75,6 @@ set _SKIP=2
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
+2
View File
@@ -0,0 +1,2 @@
before_install:
- ./gradlew setupCIWorkspace
Submodule lang deleted from e111b835ad.
+18
View File
@@ -0,0 +1,18 @@
// Add any additional repositiroes for your dependencies here
repositories {
maven {
name = "ic2"
url = "http://maven.ic2.player.to/"
metadataSources {
mavenPom()
artifact()
}
}
maven {
url "https://cursemaven.com"
}
maven {
url = "https://jitpack.io"
}
}
-21
View File
@@ -1,21 +0,0 @@
BuildCraft API License
Copyright (c) 2011-2014 SpaceToad and the BuildCraft team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -1,40 +0,0 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* The BuildCraft API is distributed under the terms of the MIT License.
* Please check the contents of the license, which should be located
* as "LICENSE.API" in the BuildCraft source code distribution.
*/
package buildcraft.api.tools;
import net.minecraft.entity.player.EntityPlayer;
/***
* Implement this interface on subclasses of Item to have that item work as a wrench for buildcraft
*/
public interface IToolWrench {
/***
* Called to ensure that the wrench can be used. To get the ItemStack that is used, check player.inventory.getCurrentItem()
*
* @param player
* - The player doing the wrenching
* @param x
* ,y,z - The coordinates for the block being wrenched
*
* @return true if wrenching is allowed, false if not
*/
boolean canWrench(EntityPlayer player, int x, int y, int z);
/***
* Callback after the wrench has been used. This can be used to decrease durability or for other purposes. To get the ItemStack that was used, check
* player.inventory.getCurrentItem()
*
* @param player
* - The player doing the wrenching
* @param x
* ,y,z - The coordinates of the block being wrenched
*/
void wrenchUsed(EntityPlayer player, int x, int y, int z);
}
@@ -1,11 +0,0 @@
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* The BuildCraft API is distributed under the terms of the MIT License.
* Please check the contents of the license, which should be located
* as "LICENSE.API" in the BuildCraft source code distribution.
*/
@API(apiVersion = "1.0", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|tools")
package buildcraft.api.tools;
import cpw.mods.fml.common.API;
@@ -1,38 +0,0 @@
package codechicken.nei;
public class VisiblityData
{
public boolean showUtilityButtons = true;
public boolean showStateButtons = true;
/**
* Item panel and associated buttons
*/
public boolean showItemPanel = true;
/**
* Item and search section
*/
public boolean showItemSection = true;
/**
* Dropdown and Item search field
*/
public boolean showSearchSection = true;
/**
* All widgets except options button
*/
public boolean showWidgets = true;
/**
* The entire NEI interface, aka hidden
*/
public boolean showNEI = true;
public boolean enableDeleteMode = true;
public void translateDependancies()
{
if(!showNEI)
showWidgets = false;
if(!showWidgets)
showItemSection = showUtilityButtons = showStateButtons = false;
if(!showItemSection)
showSearchSection = showItemPanel = false;
}
}
@@ -1,49 +0,0 @@
package codechicken.nei.api;
import codechicken.nei.VisiblityData;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import java.util.List;
/**
* If this is implemented on a gui, it will be automatically registered
*/
public interface INEIGuiHandler
{
public VisiblityData modifyVisiblity(GuiContainer gui, VisiblityData currentVisibility);
/**
* NEI will give the specified item to the InventoryRange returned if the player's inventory is full.
* return null for no range
*/
public Iterable<Integer> getItemSpawnSlots(GuiContainer gui, ItemStack item);
/**
* @return A list of TaggedInventoryAreas that will be used with the savestates.
*/
public List<TaggedInventoryArea> getInventoryAreas(GuiContainer gui);
/**
* Handles clicks while an itemstack has been dragged from the item panel. Use this to set configurable slots and the like.
* Changes made to the stackSize of the dragged stack will be kept
* @param gui The current gui instance
* @param mousex The x position of the mouse
* @param mousey The y position of the mouse
* @param draggedStack The stack being dragged from the item panel
* @param button The button presed
* @return True if the drag n drop was handled. False to resume processing through other routes. The held stack will be deleted if draggedStack.stackSize == 0
*/
public boolean handleDragNDrop(GuiContainer gui, int mousex, int mousey, ItemStack draggedStack, int button);
/**
* Used to prevent the item panel from drawing on top of other gui elements.
* This function will also be called with a 1x1 size rectangle on the mouse position for determining if the given coordinate should override item panel functions such as scrolling
* @param x The x coordinate of the rectangle bounding the slot
* @param y The y coordinate of the rectangle bounding the slot
* @param w The w coordinate of the rectangle bounding the slot
* @param h The h coordinate of the rectangle bounding the slot
* @return true if the item panel slot within the specified rectangle should not be rendered.
*/
public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h);
}
@@ -1,48 +0,0 @@
package codechicken.nei.api;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import java.util.HashSet;
public class TaggedInventoryArea
{
public HashSet<Integer> slots = new HashSet<Integer>();
public String tagName;
/**
* Only for player inventories.
*/
private IInventory inventory;
/**
* Other inventories
*/
private Container container;
public TaggedInventoryArea(InventoryPlayer invPlayer)
{
this("InventoryPlayer", 0, 39, null);
inventory = invPlayer;
}
public TaggedInventoryArea(String name, int first, int last, Container container)
{
this.container = container;
tagName = name;
for(int i = first; i <= last; i++)
slots.add(i);
}
public ItemStack getStackInSlot(int i)
{
if(inventory != null)
return inventory.getStackInSlot(i);
return container.getSlot(i).getStack();
}
public boolean isContainer()
{
return inventory == null;
}
}
+66 -71
View File
@@ -11,41 +11,44 @@
package forestry;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent;
import cpw.mods.fml.common.event.FMLMissingMappingsEvent;
import cpw.mods.fml.common.event.FMLMissingMappingsEvent.MissingMapping;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.Type;
import forestry.api.fuels.EngineBronzeFuel;
import forestry.api.fuels.EngineCopperFuel;
import forestry.api.fuels.FermenterFuel;
import forestry.api.fuels.FuelManager;
import forestry.api.fuels.GeneratorFuel;
import forestry.api.fuels.MoistenerFuel;
import forestry.api.fuels.RainSubstrate;
import forestry.core.ForestryCore;
import forestry.core.config.Defaults;
import forestry.core.config.ForestryItem;
import forestry.api.core.ForestryAPI;
import forestry.core.ClimateManager;
import forestry.core.EventHandlerCore;
import forestry.core.config.Config;
import forestry.core.config.Constants;
import forestry.core.config.GameMode;
import forestry.core.config.Version;
import forestry.core.errors.EnumErrorCode;
import forestry.core.errors.ErrorStateRegistry;
import forestry.core.gui.GuiHandler;
import forestry.core.multiblock.MultiblockEventHandler;
import forestry.core.network.PacketHandler;
import forestry.core.proxy.Proxies;
import forestry.core.utils.FluidMap;
import forestry.core.utils.ItemStackMap;
import forestry.core.utils.Log;
import forestry.core.utils.StringUtil;
import forestry.core.worldgen.WorldGenerator;
import forestry.plugins.PluginManager;
/**
* Forestry Minecraft Mod
@@ -53,112 +56,104 @@ import forestry.core.utils.StringUtil;
* @author SirSengir
*/
@Mod(
modid = Defaults.MOD,
name = "Forestry",
version = Version.VERSION,
dependencies = "required-after:Forge@[10.13.0.1207,);"
modid = Constants.MOD,
name = Constants.MOD,
version = Constants.VERSION,
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
dependencies = "required-after:Forge@[10.13.4.1566,);"
+ "after:Buildcraft|Core@[6.1.7,);"
+ "after:ExtrabiomesXL;"
+ "after:BiomesOPlenty;"
+ "after:IC2@[2.0.140,);"
+ "after:Natura@[2.2.0,);"
+ "after:HardcoreEnderExpansion;")
//, certificateFingerprint = Version.FINGERPRINT)
public class Forestry {
@Mod.Instance(Defaults.MOD)
@Mod.Instance(Constants.MOD)
public static Forestry instance;
private File configFolder;
private static final Map<String, ForestryItem> mappedItems = new HashMap<String, ForestryItem>();
static {
mappedItems.put("Forestry:builderBackpack", ForestryItem.builderBackpack);
mappedItems.put("Forestry:builderBackpackT2", ForestryItem.builderBackpackT2);
mappedItems.put("Forestry:adventurerBackpack", ForestryItem.adventurerBackpack);
mappedItems.put("Forestry:adventurerBackpackT2", ForestryItem.adventurerBackpackT2);
mappedItems.put("Forestry:shortMead", ForestryItem.beverage);
mappedItems.put("Forestry:waterCan", ForestryItem.canWater);
mappedItems.put("Forestry:biofuelCan", ForestryItem.canEthanol);
mappedItems.put("Forestry:biomassCan", ForestryItem.canBiomass);
mappedItems.put("Forestry:bucketBiofuel", ForestryItem.bucketEthanol);
mappedItems.put("Forestry:refractoryBiofuel", ForestryItem.refractoryEthanol);
mappedItems.put("Forestry:waxCapsuleBiofuel", ForestryItem.waxCapsuleEthanol);
}
public Forestry() {
FuelManager.fermenterFuel = new ItemStackMap<FermenterFuel>();
FuelManager.moistenerResource = new ItemStackMap<MoistenerFuel>();
FuelManager.rainSubstrate = new ItemStackMap<RainSubstrate>();
FuelManager.bronzeEngineFuel = new FluidMap<EngineBronzeFuel>();
FuelManager.copperEngineFuel = new ItemStackMap<EngineCopperFuel>();
FuelManager.generatorFuel = new FluidMap<GeneratorFuel>();
ForestryAPI.instance = this;
ForestryAPI.climateManager = new ClimateManager();
ForestryAPI.forestryConstants = new Constants();
ForestryAPI.errorStateRegistry = new ErrorStateRegistry();
EnumErrorCode.init();
}
@SidedProxy(clientSide = "forestry.core.ForestryClient", serverSide = "forestry.core.ForestryCore")
public static ForestryCore core = new ForestryCore();
public static PacketHandler packetHandler;
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
packetHandler = new PacketHandler();
configFolder = new File(event.getModConfigurationDirectory(), "forestry");
core.preInit(event.getSourceFile(), this);
// Register event handler
EventHandlerCore eventHandlerCore = new EventHandlerCore();
MinecraftForge.EVENT_BUS.register(eventHandlerCore);
FMLCommonHandler.instance().bus().register(eventHandlerCore);
MinecraftForge.EVENT_BUS.register(new MultiblockEventHandler());
configFolder = new File(event.getModConfigurationDirectory(), "forestry");
Config.load();
PluginManager.runSetup();
ForestryAPI.activeMode = new GameMode(Config.gameMode);
PluginManager.runPreInit();
}
@EventHandler
public void init(FMLInitializationEvent event) {
core.init(this);
// Register gui handler
NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler());
PluginManager.runInit();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
core.postInit();
PluginManager.runPostInit();
// Register world generator
WorldGenerator worldGenerator = new WorldGenerator();
GameRegistry.registerWorldGenerator(worldGenerator, 0);
// Register tick handlers
Proxies.common.registerTickHandlers(worldGenerator);
// Handle IMC messages.
PluginManager.processIMCMessages(FMLInterModComms.fetchRuntimeMessages(ForestryAPI.instance));
}
@EventHandler
public void serverStarting(FMLServerStartingEvent event) {
core.serverStarting(event.getServer());
PluginManager.serverStarting(event.getServer());
}
public File getConfigFolder() {
return configFolder;
}
/*@EventHandler
public void fingerprintWarning(FMLFingerprintViolationEvent event) {
Proxies.log.info("Fingerprint of the mod jar is invalid. The jar file was tampered with.");
FMLInterModComms.sendMessage("Railcraft", "securityViolation", "Fingerprint of jar file did not match.");
FMLInterModComms.sendMessage("Thaumcraft", "securityViolation", "Fingerprint of jar file did not match.");
FMLInterModComms.sendMessage("IC2", "securityViolation", "Fingerprint of jar file did not match.");
}*/
@EventHandler
public void processIMCMessages(IMCEvent event) {
core.processIMCMessages(event.getMessages());
PluginManager.processIMCMessages(event.getMessages());
}
@EventHandler
public void missingMapping(FMLMissingMappingsEvent event) {
for (MissingMapping mapping : event.get()) {
if (mapping.type == Type.BLOCK) {
Block block = GameRegistry.findBlock(Defaults.MOD, StringUtil.cleanTags(mapping.name));
Block block = GameRegistry.findBlock(Constants.MOD, StringUtil.cleanTags(mapping.name));
if (block != null) {
mapping.remap(block);
Proxies.log.warning("Remapping block " + mapping.name + " to " + StringUtil.cleanBlockName(block));
Log.warning("Remapping block " + mapping.name + " to " + StringUtil.cleanBlockName(block));
}
} else {
Block block = GameRegistry.findBlock(Defaults.MOD, StringUtil.cleanTags(mapping.name));
if (block != null) {
mapping.remap(Item.getItemFromBlock(block));
Proxies.log.warning("Remapping item " + mapping.name + " to " + StringUtil.cleanBlockName(block));
} else {
ForestryItem mappedItem = mappedItems.get(mapping.name);
if (mappedItem != null) {
mapping.remap(mappedItem.item());
Proxies.log.warning("Remapping item " + mapping.name + " to " + mappedItem.name());
}
Item item = GameRegistry.findItem(Constants.MOD, StringUtil.cleanTags(mapping.name));
if (item != null) {
mapping.remap(item);
Log.warning("Remapping item " + mapping.name + " to " + StringUtil.cleanItemName(item));
}
}
}
@@ -0,0 +1,54 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.ArrayList;
import java.util.HashMap;
import net.minecraft.item.ItemStack;
/**
*
* Some miscellaneous lists and settings for bees.
*
* @author SirSengir
*/
public class BeeManager {
/**
* 0 - Common Village Bees 1 - Uncommon Village Bees (20 % of spawns)
*/
public static ArrayList<IBeeGenome>[] villageBees;
/**
* List of items that can induce swarming. Integer denotes x in 1000 chance.
*/
public static HashMap<ItemStack, Integer> inducers = new HashMap<ItemStack, Integer>();
/**
* Convenient access to AlleleManager.alleleRegistry.getSpeciesRoot("rootBees")
*/
public static IBeeRoot beeRoot;
/**
* Used to create new bees.
*/
public static IBeeFactory beeFactory;
/**
* Used to create new bee mutations.
*/
public static IBeeMutationFactory beeMutationFactory;
/**
* Used to get Forestry's jubilance implementations.
*/
public static IJubilanceFactory jubilanceFactory;
/**
* Used to check whether a player is wearing Apiarist Armor.
*/
public static IArmorApiaristHelper armorApiaristHelper;
}
@@ -0,0 +1,31 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IIndividual;
/**
* Easily extendable default IBeeListener.
* By itself, this IBeeListener does nothing.
* BeeListeners should inherit from this class unless they need to listen for everything.
*/
public class DefaultBeeListener implements IBeeListener {
@Override
public void wearOutEquipment(int amount) {
}
@Override
public void onQueenDeath() {
}
@Override
public boolean onPollenRetrieved(IIndividual pollen) {
return false;
}
}
@@ -0,0 +1,55 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
/**
* Easily extendable default IBeeModifier.
* By itself, this IBeeModifier does nothing.
* BeeModifiers should inherit from this class unless they modify everything.
*/
public class DefaultBeeModifier implements IBeeModifier {
public float getTerritoryModifier(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
return 1.0f;
}
public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
return 1.0f;
}
public float getProductionModifier(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
public float getFloweringModifier(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
public float getGeneticDecay(IBeeGenome genome, float currentModifier) {
return 1.0f;
}
public boolean isSealed() {
return false;
}
public boolean isSelfLighted() {
return false;
}
public boolean isSunlightSimulated() {
return false;
}
public boolean isHellish() {
return false;
}
}
@@ -0,0 +1,104 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Locale;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleArea;
import forestry.api.genetics.IAlleleBoolean;
import forestry.api.genetics.IAlleleFloat;
import forestry.api.genetics.IAlleleFlowers;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAlleleTolerance;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.ISpeciesRoot;
/**
* Enum representing the order of chromosomes in a bee's genome and what they control.
*
* @author SirSengir
*/
public enum EnumBeeChromosome implements IChromosomeType {
/**
* Species of the bee. Alleles here must implement {@link IAlleleBeeSpecies}.
*/
SPECIES(IAlleleBeeSpecies.class),
/**
* (Production) Speed of the bee.
*/
SPEED(IAlleleFloat.class),
/**
* Lifespan of the bee.
*/
LIFESPAN(IAlleleInteger.class),
/**
* Fertility of the bee. Determines number of offspring.
*/
FERTILITY(IAlleleInteger.class),
/**
* Temperature difference to its native supported one the bee can tolerate.
*/
TEMPERATURE_TOLERANCE(IAlleleTolerance.class),
/**
* Slightly incorrectly named. If true, a naturally dirunal bee can work during the night. If true, a naturally nocturnal bee can work during the day.
*/
NOCTURNAL(IAlleleBoolean.class),
/**
* Not used / superseded by fixed values for the species. Probably going to be replaced with a boolean for FIRE_RESIST.
*/
@Deprecated
HUMIDITY(IAllele.class),
/**
* Humidity difference to its native supported one the bee can tolerate.
*/
HUMIDITY_TOLERANCE(IAlleleTolerance.class),
/**
* If true the bee can work during rain.
*/
TOLERANT_FLYER(IAlleleBoolean.class),
/**
* If true, the bee can work without a clear view of the sky.
*/
CAVE_DWELLING(IAlleleBoolean.class),
/**
* Contains the supported flower provider.
*/
FLOWER_PROVIDER(IAlleleFlowers.class),
/**
* Determines pollination speed.
*/
FLOWERING(IAlleleInteger.class),
/**
* Determines the size of the bee's territory.
*/
TERRITORY(IAlleleArea.class),
/**
* Determines the bee's effect.
*/
EFFECT(IAlleleBeeEffect.class);
Class<? extends IAllele> clss;
EnumBeeChromosome(Class<? extends IAllele> clss) {
this.clss = clss;
}
@Override
public Class<? extends IAllele> getAlleleClass() {
return clss;
}
@Override
public String getName() {
return this.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public ISpeciesRoot getSpeciesRoot() {
return BeeManager.beeRoot;
}
}
@@ -0,0 +1,26 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Locale;
import forestry.api.genetics.ISpeciesType;
public enum EnumBeeType implements ISpeciesType {
DRONE, PRINCESS, QUEEN, LARVAE, NONE;
public static final EnumBeeType[] VALUES = values();
String name;
EnumBeeType() {
this.name = this.toString().toLowerCase(Locale.ENGLISH);
}
public String getName() {
return name;
}
}
@@ -0,0 +1,36 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.ArrayList;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.IFlowerRegistry;
public class FlowerManager {
/**
* <blockquote><pre>e.g. FlowerManager.flowerRegister.registerPlantableFlower(new ItemStack(Blocks.red_flower), 1.0, FlowerManager.FlowerTypeVanilla, FlowerManager.FlowerTypeSnow);</pre></blockquote>
*/
public static IFlowerRegistry flowerRegistry;
public static final String FlowerTypeVanilla = "flowersVanilla";
public static final String FlowerTypeNether = "flowersNether";
public static final String FlowerTypeCacti = "flowersCacti";
public static final String FlowerTypeMushrooms = "flowersMushrooms";
public static final String FlowerTypeEnd = "flowersEnd";
public static final String FlowerTypeJungle = "flowersJungle";
public static final String FlowerTypeSnow = "flowersSnow";
public static final String FlowerTypeWheat = "flowersWheat";
public static final String FlowerTypeGourd = "flowersGourd";
/**
* @deprecated since Forestry 3.4. Use IFlowerRegistry.registerPlantableFlower instead.
* Completely unused since Forestry 4.0, kept for backward compatibility with older mods.
*/
@Deprecated
public static ArrayList<ItemStack> plainFlowers = new ArrayList<ItemStack>();
}
@@ -0,0 +1,36 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
public interface IAlleleBeeEffect extends IAlleleEffect {
/**
* Called by apiaries to cause an effect in the world.
*
* @param genome
* Genome of the bee queen causing this effect
* @param storedData
* Object containing the stored effect data for the apiary/hive the bee is in.
* @param housing {@link IBeeHousing} the bee currently resides in.
* @return storedData, may have been manipulated.
*/
IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
/**
* Is called to produce bee effects.
*
* @param genome
* @param storedData
* Object containing the stored effect data for the apiary/hive the bee is in.
* @param housing {@link IBeeHousing} the bee currently resides in.
* @return storedData, may have been manipulated.
*/
IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing);
}
@@ -0,0 +1,56 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Map;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleSpecies;
public interface IAlleleBeeSpecies extends IAlleleSpecies {
/**
* @return the IBeeRoot
*/
IBeeRoot getRoot();
/**
* @return true if this species is only active at night.
*/
boolean isNocturnal();
/**
* @return Map of possible products with the chance for drop each bee cycle. (0 - 1]
*/
Map<ItemStack, Float> getProductChances();
/**
* @return Map of possible specialities with the chance for drop each bee cycle. (0 - 1]
*/
Map<ItemStack, Float> getSpecialtyChances();
/**
* Only jubilant bees produce specialities.
* @return true if the bee is jubilant, false otherwise.
*/
boolean isJubilant(IBeeGenome genome, IBeeHousing housing);
@SideOnly(Side.CLIENT)
IIcon getIcon(EnumBeeType type, int renderPass);
/**
* @deprecated since Forestry 3.6.
* @return Path of the texture to use for entity rendering.
*/
@Deprecated
String getEntityTexture();
}
@@ -0,0 +1,43 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.item.ItemStack;
import forestry.api.genetics.IAlleleSpeciesCustom;
public interface IAlleleBeeSpeciesCustom extends IAlleleBeeSpecies, IAlleleSpeciesCustom {
/**
* Add a product for this bee species.
* Chance is between 0 and 1.
*/
IAlleleBeeSpeciesCustom addProduct(ItemStack product, Float chance);
/**
* Add a specialty product for this bee species.
* Bees only produce their specialty when they are Jubilant (see IJubilanceProvider)
* Chance is between 0 and 1.
*/
IAlleleBeeSpeciesCustom addSpecialty(ItemStack specialty, Float chance);
/**
* Set the Jubilance Provider for this bee species.
* Bees only produce their specialty when they are Jubilant (see IJubilanceProvider)
*/
IAlleleBeeSpeciesCustom setJubilanceProvider(IJubilanceProvider provider);
/**
* Make this species only active at night.
*/
IAlleleBeeSpeciesCustom setNocturnal();
/** Use this if you have custom icons for bees. */
IAlleleBeeSpeciesCustom setCustomBeeIconProvider(IBeeIconProvider beeIconProvider);
/** Use this if you have custom icon colours for bees (other than the default static primary + secondary colours). */
IAlleleBeeSpeciesCustom setCustomBeeIconColourProvider(IBeeIconColourProvider beeIconColourProvider);
}
@@ -0,0 +1,57 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IBreedingTracker;
import forestry.api.genetics.IIndividual;
/**
* Can be used to garner information on bee breeding. See {@link forestry.api.genetics.ISpeciesRoot} for retrieval functions.
*
* @author SirSengir
*/
public interface IApiaristTracker extends IBreedingTracker {
/**
* Register the birth of a queen. Will mark species as discovered.
*
* @param queen
* Created queen.
*/
void registerQueen(IIndividual queen);
/**
* @return Amount of queens bred with this tracker.
*/
int getQueenCount();
/**
* Register the birth of a princess. Will mark species as discovered.
*
* @param princess
* Created princess.
*/
void registerPrincess(IIndividual princess);
/**
* @return Amount of princesses bred with this tracker.
*/
int getPrincessCount();
/**
* Register the birth of a drone. Will mark species as discovered.
*
* @param drone
* Created drone.
*/
void registerDrone(IIndividual drone);
/**
* @return Amount of drones bred with this tracker.
*/
int getDroneCount();
}
@@ -0,0 +1,39 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
/**
* When implemented by armor piece items, allows them to act as apiarist's armor.
*/
public interface IArmorApiarist {
/**
* Called when the apiarist's armor acts as protection against an attack.
*
* @param entity Entity being attacked
* @param armor Armor item
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return Whether or not the armor should protect the player from that attack
*/
boolean protectEntity(EntityLivingBase entity, ItemStack armor, String cause, boolean doProtect);
/**
* Called when the apiarist's armor acts as protection against an attack.
*
* @param player Player being attacked
* @param armor Armor item
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return Whether or not the armor should protect the player from that attack
* @deprecated since Forestry 4.2. Use protectEntity
*/
@Deprecated
public boolean protectPlayer(EntityPlayer player, ItemStack armor, String cause, boolean doProtect);
}
@@ -0,0 +1,62 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
/**
* Helper class for checking whether an entity is wearing Apiarist Armor
*
* @author Vexatos
*/
public interface IArmorApiaristHelper {
/**
* Called when the apiarist's armor acts as protection against an attack.
* @param stack ItemStack to check
* @param entity Entity being attacked
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return Whether or not the item is valid Apiarist Armor and should protect the player from that attack
* @since Forestry 4.2
*/
boolean isArmorApiarist(ItemStack stack, EntityLivingBase entity, String cause, boolean doProtect);
/**
* Called when the apiarist's armor acts as protection against an attack.
* @param entity Entity being attacked
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return The number of valid Apiarist Armor pieces the player is wearing that are actually protecting
* @since Forestry 4.2
*/
int wearsItems(EntityLivingBase entity, String cause, boolean doProtect);
/**
* Called when the apiarist's armor acts as protection against an attack.
* @param stack ItemStack to check
* @param player Player being attacked
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return Whether or not the item is valid Apiarist Armor and should protect the player from that attack
* @deprecated since Forestry 4.2. use the EntityLivingBase version
*/
@Deprecated
boolean isArmorApiarist(ItemStack stack, EntityPlayer player, String cause, boolean doProtect);
/**
* Called when the apiarist's armor acts as protection against an attack.
* @param player Player being attacked
* @param cause Optional cause of attack, such as a bee effect identifier
* @param doProtect Whether or not to actually do the side effects of protection
* @return The number of valid Apiarist Armor pieces the player is wearing that are actually protecting
* @deprecated since Forestry 4.2. use the EntityLivingBase version
*/
@Deprecated
int wearsItems(EntityPlayer player, String cause, boolean doProtect);
}
@@ -0,0 +1,86 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.List;
import java.util.Set;
import net.minecraft.item.ItemStack;
import net.minecraft.world.biome.BiomeGenBase;
import forestry.api.core.IErrorState;
import forestry.api.genetics.IEffectData;
import forestry.api.genetics.IIndividual;
import forestry.api.genetics.IIndividualLiving;
/**
* Other implementations than Forestry's default one are not supported.
*
* @author SirSengir
*/
public interface IBee extends IIndividualLiving {
/**
* @return Bee's genetic information.
*/
IBeeGenome getGenome();
/**
* @return Genetic information of the bee's mate, null if unmated.
*/
IBeeGenome getMate();
/**
* @return true if the individual is originally of natural origin.
*/
boolean isNatural();
/**
* @return generation this individual is removed from the original individual.
*/
int getGeneration();
/**
* Set the natural flag on this bee.
* @param flag
*/
void setIsNatural(boolean flag);
IEffectData[] doEffect(IEffectData[] storedData, IBeeHousing housing);
IEffectData[] doFX(IEffectData[] storedData, IBeeHousing housing);
/**
* @return true if the bee may spawn offspring
*/
boolean canSpawn();
/**
* Determines whether the queen can work.
* @param housing the {@link IBeeHousing} the bee currently resides in.
* @return an empty set if the queen can work, a set of error states if the queen can not work
*/
Set<IErrorState> getCanWork(IBeeHousing housing);
List<BiomeGenBase> getSuitableBiomes();
ItemStack[] getProduceList();
ItemStack[] getSpecialtyList();
ItemStack[] produceStacks(IBeeHousing housing);
IBee spawnPrincess(IBeeHousing housing);
IBee[] spawnDrones(IBeeHousing housing);
void plantFlowerRandom(IBeeHousing housing);
IIndividual retrievePollen(IBeeHousing housing);
boolean pollinateRandom(IBeeHousing housing, IIndividual pollen);
}
@@ -0,0 +1,39 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IClassification;
public interface IBeeFactory {
/**
* Creates a new bee species.
* Automatically registered with AlleleManager.alleleRegistry.registerAllele()
* See IAlleleBeeSpeciesCustom and IAlleleSpeciesCustom for adding additional properties to the returned species.
*
* @param uid Unique Identifier for this species
* @param dominant Whether this species is genetically dominant (false means it is recessive)
* @param authority Authority for the binomial name, e.g. "Sengir" on species of base Forestry.
* @param unlocalizedName Unlocalized name for this species
* @param unlocalizedDescription Unlocalized description for this species
* @param branch Classification of this species
* @param binomial Binomial name of the species sans genus ("Apis"). "humboldti" will have the bee species flavour name be "Apis humboldti". Feel free to use fun names or null.
* @param primaryColor The outline color of this species
* @param secondaryColor The body color of this species
* @return a new bee species allele.
*/
IAlleleBeeSpeciesCustom createSpecies(String uid, boolean dominant, String authority, String unlocalizedName, String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor);
/**
* Creates a new bee branch.
* Must be registered with AlleleManager.alleleRegistry.getClassification("family.apidae").addMemberGroup();
*
* @param uid Unique Identifier for this branch
* @param scientific approximates a "genus" in real life. Real life examples: "Micrapis", "Megapis"
* @return a new bee branch
*/
IClassification createBranch(String uid, String scientific);
}
@@ -0,0 +1,48 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.EnumTolerance;
import forestry.api.genetics.IFlowerProvider;
import forestry.api.genetics.IGenome;
/**
* Only the default implementation is supported.
*
* @author SirSengir
*
*/
public interface IBeeGenome extends IGenome {
IAlleleBeeSpecies getPrimary();
IAlleleBeeSpecies getSecondary();
float getSpeed();
int getLifespan();
int getFertility();
EnumTolerance getToleranceTemp();
EnumTolerance getToleranceHumid();
boolean getNocturnal();
boolean getTolerantFlyer();
boolean getCaveDwelling();
IFlowerProvider getFlowerProvider();
int getFlowering();
int[] getTerritory();
IAlleleBeeEffect getEffect();
}
@@ -0,0 +1,47 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import forestry.api.core.IClimateProvider;
import forestry.api.core.IErrorLogicSource;
import forestry.api.genetics.IHousing;
public interface IBeeHousing extends IHousing, IClimateProvider, IErrorLogicSource {
/**
* Used by BeeManager.beeRoot.createBeeHousingModifier(IBeeHousing housing)
* to combine bee modifiers from several sources that can change over time.
* @return IBeeModifiers from the housing, frames, etc.
*/
Iterable<IBeeModifier> getBeeModifiers();
/**
* Used by BeeManager.beeRoot.createBeeHousingListener(IBeeHousing housing)
* to combine bee listeners from several sources that can change over time.
* @return IBeeListeners from the housing, multiblock parts, etc.
*/
Iterable<IBeeListener> getBeeListeners();
IBeeHousingInventory getBeeInventory();
IBeekeepingLogic getBeekeepingLogic();
int getBlockLightValue();
boolean canBlockSeeTheSky();
World getWorld();
GameProfile getOwner();
/**
* @since Forestry 4.2
* @return exact coordinates where bee FX should spawn from
*/
Vec3 getBeeFXCoordinates();
}
@@ -0,0 +1,26 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.item.ItemStack;
public interface IBeeHousingInventory {
ItemStack getQueen();
ItemStack getDrone();
void setQueen(ItemStack itemstack);
void setDrone(ItemStack itemstack);
/**
* Adds products to the housing's inventory.
*
* @param product ItemStack with the product to add.
* @param all if true, success requires that all products are added
* @return boolean indicating success or failure.
*/
boolean addProduct(ItemStack product, boolean all);
}
@@ -0,0 +1,13 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
/**
* Custom colour provider for bees with complicated colors.
*/
public interface IBeeIconColourProvider {
int getIconColour(int renderPass);
}
@@ -0,0 +1,14 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
public interface IBeeIconProvider {
void registerIcons(IIconRegister register);
IIcon getIcon(EnumBeeType type, int renderPass);
}
@@ -0,0 +1,29 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IIndividual;
public interface IBeeListener {
/**
* Called when the bees wear out the housing's equipment.
* @param amount Integer indicating the amount worn out.
*/
void wearOutEquipment(int amount);
/**
* Called after the children have been spawned, and before the new princess is spawned.
*/
void onQueenDeath();
/**
* Called when the bees have retrieved some pollen.
* @return true if this bee listener handled the pollen.
*/
boolean onPollenRetrieved(IIndividual pollen);
}
@@ -0,0 +1,70 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
public interface IBeeModifier {
/**
* @param genome Genome of the bee this modifier is called for.
* @param currentModifier Current modifier.
* @return Float used to modify the base territory.
*/
float getTerritoryModifier(IBeeGenome genome, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @param mate Genome of the bee mate this modifier is called for.
* @param currentModifier Current modifier.
* @return Float used to modify the base mutation chance.
*/
float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @param currentModifier Current modifier.
* @return Float used to modify the life span of queens.
*/
float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @param currentModifier Current modifier.
* @return Float modifying the production speed of queens.
*/
float getProductionModifier(IBeeGenome genome, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @return Float modifying the flowering of queens.
*/
float getFloweringModifier(IBeeGenome genome, float currentModifier);
/**
* @param genome Genome of the bee this modifier is called for.
* @return Float modifying the chance for a swarmer queen to die off.
*/
float getGeneticDecay(IBeeGenome genome, float currentModifier);
/**
* @return Boolean indicating if housing can ignore rain
*/
boolean isSealed();
/**
* @return Boolean indicating if housing can ignore darkness/night
*/
boolean isSelfLighted();
/**
* @return Boolean indicating if housing can ignore not seeing the sky
*/
boolean isSunlightSimulated();
/**
* @return Boolean indicating whether this housing simulates the nether
*/
boolean isHellish();
}
@@ -0,0 +1,18 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IMutation;
public interface IBeeMutation extends IMutation {
IBeeRoot getRoot();
/**
* @return float representing the chance for mutation to occur. note that this is 0 - 100 based, since it was an integer previously!
*/
float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, IBeeGenome genome0, IBeeGenome genome1);
}
@@ -0,0 +1,12 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IMutationCustom;
public interface IBeeMutationCustom extends IBeeMutation, IMutationCustom {
}
@@ -0,0 +1,23 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import forestry.api.genetics.IAllele;
public interface IBeeMutationFactory {
/**
* Creates a new bee mutation.
* Automatically registered with BeeManager.beeRoot.registerMutation()
* See IBeeMutationCustom and IMutationCustom for adding additional properties to the returned mutation.
*
* @param parentBee0 A parent bee for this mutation
* @param parentBee1 A parent bee for this mutation
* @param result The resulting alleles for this mutation
* @param chance The chance that breeding the two parent bees will result in this mutation
* @return a new bee mutation.
*/
IBeeMutationCustom createMutation(IAlleleBeeSpecies parentBee0, IAlleleBeeSpecies parentBee1, IAllele[] result, int chance);
}
@@ -0,0 +1,132 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.ArrayList;
import java.util.Collection;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.ISpeciesRoot;
public interface IBeeRoot extends ISpeciesRoot {
/**
* @return true if passed item is a Forestry bee. Equal to getType(ItemStack stack) != EnumBeeType.NONE
*/
@Override
boolean isMember(ItemStack stack);
/**
* @return {@link IBee} pattern parsed from the passed stack's nbt data.
*/
@Override
IBee getMember(ItemStack stack);
@Override
IBee getMember(NBTTagCompound compound);
/* GENOME CONVERSION */
@Override
IBee templateAsIndividual(IAllele[] template);
@Override
IBee templateAsIndividual(IAllele[] templateActive, IAllele[] templateInactive);
@Override
IBeeGenome templateAsGenome(IAllele[] template);
@Override
IBeeGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive);
/* BREEDING TRACKER */
/**
* @param world
* @return {@link IApiaristTracker} associated with the passed world.
*/
IApiaristTracker getBreedingTracker(World world, GameProfile player);
/* BEE SPECIFIC */
/**
* @return type of bee encoded on the itemstack. EnumBeeType.NONE if it isn't a bee.
*/
@Override
EnumBeeType getType(ItemStack stack);
/**
* @return true if passed item is a drone. Equal to getType(ItemStack stack) == EnumBeeType.DRONE
*/
boolean isDrone(ItemStack stack);
/**
* @return true if passed item is mated (i.e. a queen)
*/
boolean isMated(ItemStack stack);
/**
* @param genome
* Valid {@link IBeeGenome}
* @return {@link IBee} from the passed genome
*/
IBee getBee(World world, IBeeGenome genome);
/**
* Creates an IBee suitable for a queen containing the necessary second genome for the mate.
*
* @param genome
* Valid {@link IBeeGenome}
* @param mate
* Valid {@link IBee} representing the mate.
* @return Mated {@link IBee} from the passed genomes.
*/
IBee getBee(World world, IBeeGenome genome, IBee mate);
/* TEMPLATES */
@Override
ArrayList<IBee> getIndividualTemplates();
/* MUTATIONS */
@Override
Collection<IBeeMutation> getMutations(boolean shuffle);
/* GAME MODE */
void resetBeekeepingMode();
ArrayList<IBeekeepingMode> getBeekeepingModes();
IBeekeepingMode getBeekeepingMode(World world);
IBeekeepingMode getBeekeepingMode(String name);
void registerBeekeepingMode(IBeekeepingMode mode);
void setBeekeepingMode(World world, String name);
/* MISC */
/**
* Creates beekeepingLogic for a housing.
* Should be used when the housing is created, see IBeekeepingLogic
*/
IBeekeepingLogic createBeekeepingLogic(IBeeHousing housing);
/**
* Combines multiple modifiers from an IBeeHousing into one.
* Stays up to date with changes to the housing's modifiers.
*/
IBeeModifier createBeeHousingModifier(IBeeHousing housing);
/**
* Combines multiple listeners from an IBeeHousing into one.
* Stays up to date with changes to the housing's listeners.
*/
IBeeListener createBeeHousingListener(IBeeHousing housing);
}
@@ -0,0 +1,61 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.entity.player.EntityPlayerMP;
import forestry.api.core.INBTTagable;
/**
* Stores beekeeping logic for bee housings.
* Get one with BeeManager.beeRoot.createBeekeepingLogic(IBeeHousing housing)
* Save and load it to NBT using the INBTTagable methods.
*/
public interface IBeekeepingLogic extends INBTTagable {
/* SERVER */
/**
* Checks that the bees can work, setting error conditions on the housing where needed
* @return true if no errors are present and doWork should be called
*/
boolean canWork();
/**
* Performs actual work, breeding, production, etc.
*/
void doWork();
/* CLIENT */
/**
* Call this when the housing comes into view of the client.
* (i.e. when tile.getDescriptionPacket() is called)
*/
void syncToClient();
void syncToClient(EntityPlayerMP player);
/**
* Get the progress bar for breeding and production.
* To avoid network spam, this is only available server-side,
* and must be synced manually to the client when a GUI is open.
*/
int getBeeProgressPercent();
/**
* Whether bee fx should be active.
* Internally, this is automatically synced to the client.
*/
boolean canDoBeeFX();
/**
* Display bee fx. Calls IBee.doFX(IEffectData[] storedData, IBeeHousing housing) on the queen.
* Internally, the queen is automatically synced to the client for the fx.
*/
void doBeeFX();
}
@@ -0,0 +1,73 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.ArrayList;
import net.minecraft.world.World;
public interface IBeekeepingMode {
/**
* @return Localized name of this beekeeping mode.
*/
String getName();
/**
* @return Localized list of strings outlining the behaviour of this beekeeping mode.
*/
ArrayList<String> getDescription();
/**
* @return Float used to modify the wear on comb frames.
*/
float getWearModifier();
/**
* @param queen
* @return fertility taking into account the birthing queen and surroundings.
*/
int getFinalFertility(IBee queen, World world, int x, int y, int z);
/**
* @param queen
* @return true if the queen is genetically "fatigued" and should not be reproduced anymore.
*/
boolean isFatigued(IBee queen, IBeeHousing housing);
/**
* @param queen
* @param housing
* @return true if the queen is being overworked in the bee housing (with chance). will trigger a negative effect.
*/
boolean isOverworked(IBee queen, IBeeHousing housing);
/**
*
* @param queen
* @param offspring
* @param housing
* @return true if the genetic structure of the queen is breaking down during spawning of the offspring (with chance). will trigger a negative effect.
*/
boolean isDegenerating(IBee queen, IBee offspring, IBeeHousing housing);
/**
* @param queen
* @return true if an offspring of this queen is considered a natural
*/
boolean isNaturalOffspring(IBee queen);
/**
* @param queen
* @return true if this mode allows the passed queen or princess to be multiplied
*/
boolean mayMultiplyPrincess(IBee queen);
/**
* @return the bee modifier for this mode
*/
IBeeModifier getBeeModifier();
}
@@ -0,0 +1,38 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import java.util.Collection;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
/**
* Bees can be seeded either as hive drops or as mutation results.
*
* Add IHiveDrops with HiveManager.get___Hive.addDrop
*
* @author SirSengir
*/
public interface IHiveDrop {
ItemStack getPrincess(World world, int x, int y, int z, int fortune);
Collection<ItemStack> getDrones(World world, int x, int y, int z, int fortune);
Collection<ItemStack> getAdditional(World world, int x, int y, int z, int fortune);
/**
* Chance to drop. Default drops have 80 (= 80 %).
*
* @param world Minecraft world this is called for.
* @param x x-Coordinate of the broken hive.
* @param y y-Coordinate of the broken hive.
* @param z z-Coordinate of the broken hive.
* @return Chance for drop as an integer of 0 - 100.
*/
int getChance(World world, int x, int y, int z);
}
@@ -0,0 +1,24 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.item.ItemStack;
public interface IHiveFrame {
/**
* Wears out a frame.
*
* @param housing IBeeHousing the frame is contained in.
* @param frame ItemStack containing the actual frame.
* @param queen Current queen in the caller.
* @param wear Integer denoting the amount worn out. The wear modifier of the current beekeeping mode has already been taken into account.
* @return ItemStack containing the actual frame with adjusted damage, or null if it has been broken.
*/
ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear);
IBeeModifier getBeeModifier();
}
@@ -0,0 +1,16 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.block.Block;
public interface IJubilanceFactory {
/** The default Jubilance Provider is satisfied when the humidity and temperature are ideal for the bee. */
IJubilanceProvider getDefault();
/** The Requires Resource Jubilance Provider is satisfied when a specific block is under the hive. */
IJubilanceProvider getRequiresResource(Block block, int meta);
}
@@ -0,0 +1,15 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture;
public interface IJubilanceProvider {
/**
* Returns true when conditions are right to make this species Jubilant.
* Jubilant bees can produce their Specialty products.
*/
boolean isJubilant(IAlleleBeeSpecies species, IBeeGenome genome, IBeeHousing housing);
}
@@ -0,0 +1,13 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
public class HiveManager {
public static IHiveRegistry hiveRegistry;
public static IHiveGenHelper genHelper;
}
@@ -0,0 +1,48 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
public interface IHiveDescription {
/**
* The hive generator for this hive.
*/
IHiveGen getHiveGen();
/**
* The hive block to be placed in the world.
*/
Block getBlock();
int getMeta();
/**
* returns true if the hive can be generated in these conditions.
* Used as a fast early-elimination check for hives that have no hope of spawning in the area.
*/
boolean isGoodBiome(BiomeGenBase biome);
boolean isGoodHumidity(EnumHumidity humidity);
boolean isGoodTemperature(EnumTemperature temperature);
/**
* float representing the relative chance a hive will generate in a chunk.
* Default is 1.0, higher numbers result in more hives, smaller will result in fewer.
* Tree hives want around 3.0 to 4.0 since there are less locations to generate on.
*/
float getGenChance();
/**
* Called after successful hive generation.
* world, x, y, z give the location of the new hive.
**/
void postGen(World world, int x, int y, int z);
}
@@ -0,0 +1,29 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import net.minecraft.world.World;
public interface IHiveGen {
/**
* return a Y value that the hive should try to generate at.
* returns negative if the hive can't be placed anywhere.
*/
int getYForHive(World world, int x, int z);
/**
* returns true if the hive can be generated at this location.
* Used for advanced conditions, like checking that the ground below the hive is a certain type.
*/
boolean isValidLocation(World world, int x, int y, int z);
/**
* returns true if the hive can safely replace the block at this location.
*/
boolean canReplace(World world, int x, int y, int z);
}
@@ -0,0 +1,23 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import net.minecraft.block.Block;
public interface IHiveGenHelper {
/**
* Returns a hiveGen for a hive that spawns on the ground.
* validGroundBlocks specifies which block materials it can spawn on.
*/
IHiveGen ground(Block... validGroundBlocks);
/**
* Returns a hiveGen for a hive that spawns in trees.
*/
IHiveGen tree();
}
@@ -0,0 +1,33 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.apiculture.hives;
import java.util.List;
import forestry.api.apiculture.IHiveDrop;
public interface IHiveRegistry {
/* Forestry Hive Names */
public static final String forest = "Forestry:forest";
public static final String meadows = "Forestry:meadows";
public static final String desert = "Forestry:desert";
public static final String jungle = "Forestry:jungle";
public static final String end = "Forestry:end";
public static final String snow = "Forestry:snow";
public static final String swamp = "Forestry:swamp";
/**
* Adds a new hive to be generated in the world.
*/
void registerHive(String hiveName, IHiveDescription hiveDescription);
/**
* Add drops to a registered hive.
*/
void addDrops(String hiveName, IHiveDrop... drops);
void addDrops(String hiveName, List<IHiveDrop> drop);
}
@@ -0,0 +1,8 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
@API(apiVersion="4.1.0", owner="ForestryAPI|apiculture", provides="ForestryAPI|hives")
package forestry.api.apiculture.hives;
import cpw.mods.fml.common.API;
@@ -0,0 +1,8 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
@API(apiVersion="5.0.0", owner="ForestryAPI|core", provides="ForestryAPI|apiculture")
package forestry.api.apiculture;
import cpw.mods.fml.common.API;
@@ -1,25 +1,25 @@
/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
* Copyright 2011-2014 SirSengir
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.core.genetics;
package forestry.api.arboriculture;
import net.minecraft.util.StatCollector;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.IFruitFamily;
import forestry.core.utils.StringUtil;
public class FruitFamily implements IFruitFamily {
public enum EnumFruitFamily implements IFruitFamily {
PRUNES("prunes", "Prunus domestica"),
POMES("pomes", "Pomum"),
JUNGLE("jungle", "Tropicus"),
NUX("nuts", "Nux");
private final String uid;
private final String scientific;
public FruitFamily(String uid, String scientific) {
EnumFruitFamily(String uid, String scientific) {
this.uid = uid;
this.scientific = scientific;
AlleleManager.alleleRegistry.registerFruitFamily(this);
@@ -37,12 +37,12 @@ public class FruitFamily implements IFruitFamily {
@Override
public String getName() {
return StringUtil.localize("family." + uid);
return StatCollector.translateToLocal("for.family." + uid);
}
@Override
public String getDescription() {
return null;
return StatCollector.translateToLocal("for.family." + uid + ".description");
}
}
@@ -0,0 +1,25 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.ISpeciesType;
public enum EnumGermlingType implements ISpeciesType {
SAPLING("sapling"), BLOSSOM("blossom"), POLLEN("pollen"), GERMLING("germling"), NONE("none");
public static final EnumGermlingType[] VALUES = values();
private final String name;
EnumGermlingType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
@@ -0,0 +1,10 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public enum EnumGrowthConditions {
HOSTILE, PALTRY, NORMAL, GOOD, EXCELLENT
}
@@ -0,0 +1,10 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public enum EnumLeafType {
DECIDUOUS, CONIFERS, JUNGLE, WILLOW, MAPLE, PALM
}
@@ -0,0 +1,98 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Locale;
import net.minecraftforge.common.EnumPlantType;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IAlleleArea;
import forestry.api.genetics.IAlleleBoolean;
import forestry.api.genetics.IAlleleFloat;
import forestry.api.genetics.IAlleleInteger;
import forestry.api.genetics.IAllelePlantType;
import forestry.api.genetics.IChromosomeType;
import forestry.api.genetics.IFruitFamily;
import forestry.api.genetics.ISpeciesRoot;
public enum EnumTreeChromosome implements IChromosomeType {
/**
* Determines the following: - WorldGen, including the used wood blocks - {@link IFruitFamily}s supported. Limits which {@link IFruitProvider}
* will actually yield fruit with this species. - Native {@link EnumPlantType} for this tree. Combines with the PLANT chromosome.
*/
SPECIES(IAlleleTreeSpecies.class),
/**
* {@link IGrowthProvider}, determines conditions required by the tree to grow.
*/
GROWTH(IAlleleGrowth.class),
/**
* A float modifying the height of the tree. Taken into account at worldgen.
*/
HEIGHT(IAlleleFloat.class),
/**
* Chance for saplings.
*/
FERTILITY(IAlleleFloat.class),
/**
* {@link IFruitProvider}, determines if and what fruits are grown on the tree. Limited by the {@link IFruitFamily}s the species supports.
*/
FRUITS(IAlleleFruit.class),
/**
* Chance for fruit leaves and/or drops.
*/
YIELD(IAlleleFloat.class),
/**
* May add additional tolerances for {@link EnumPlantTypes}.
*/
PLANT(IAllelePlantType.class),
/**
* Determines the speed at which fruit will ripen on this tree.
*/
SAPPINESS(IAlleleFloat.class),
/**
* Territory for leaf effects. Unused.
*/
TERRITORY(IAlleleArea.class),
/**
* Leaf effect. Unused.
*/
EFFECT(IAlleleLeafEffect.class),
/**
* Amount of random ticks which need to elapse before a sapling will grow into a tree.
*/
MATURATION(IAlleleInteger.class),
GIRTH(IAlleleInteger.class),
/**
* Determines if the tree can burn.
*/
FIREPROOF(IAlleleBoolean.class),
;
Class<? extends IAllele> clss;
EnumTreeChromosome(Class<? extends IAllele> clss) {
this.clss = clss;
}
@Override
public Class<? extends IAllele> getAlleleClass() {
return clss;
}
@Override
public String getName() {
return this.toString().toLowerCase(Locale.ENGLISH);
}
@Override
public ISpeciesRoot getSpeciesRoot() {
return TreeManager.treeRoot;
}
}
@@ -0,0 +1,69 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Locale;
import java.util.Random;
import net.minecraft.nbt.NBTTagCompound;
public enum EnumWoodType {
LARCH, TEAK, ACACIA, LIME, CHESTNUT,
WENGE, BAOBAB, SEQUOIA(4.0f), KAPOK, EBONY,
MAHOGANY, BALSA(1.0f), WILLOW, WALNUT, GREENHEART(7.5f),
CHERRY, MAHOE, POPLAR, PALM, PAPAYA,
PINE(3.0f), PLUM, MAPLE, CITRUS, GIGANTEUM,
IPE, PADAUK, COCOBOLO, ZEBRAWOOD;
public static final float DEFAULT_HARDNESS = 2.0f;
public static final EnumWoodType[] VALUES = values();
private final float hardness;
EnumWoodType() {
this.hardness = DEFAULT_HARDNESS;
}
EnumWoodType(float hardness) {
this.hardness = hardness;
}
public float getHardness() {
return hardness;
}
/**
* @deprecated since Forestry 4.2. Woods use itemDamage instead of NBT now
*/
@Deprecated
public void saveToCompound(NBTTagCompound compound) {
compound.setInteger("WoodType", ordinal());
}
/**
* @deprecated since Forestry 4.2. Woods use itemDamage instead of NBT now
*/
@Deprecated
public static EnumWoodType getFromCompound(NBTTagCompound compound) {
if (compound != null) {
int typeOrdinal = compound.getInteger("WoodType");
if (typeOrdinal >= 0 && typeOrdinal < VALUES.length) {
return VALUES[typeOrdinal];
}
}
return EnumWoodType.LARCH;
}
public static EnumWoodType getRandom(Random random) {
return VALUES[random.nextInt(VALUES.length)];
}
@Override
public String toString() {
return super.toString().toLowerCase(Locale.ENGLISH);
}
}
@@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IAllele;
/**
* Simple allele encapsulating an {@link IFruitProvider}.
*/
public interface IAlleleFruit extends IAllele {
IFruitProvider getProvider();
}
@@ -0,0 +1,17 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IAllele;
/**
* Simple allele encapsulating an {@link IGrowthProvider}.
*/
public interface IAlleleGrowth extends IAllele {
IGrowthProvider getProvider();
}
@@ -0,0 +1,20 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.world.World;
import forestry.api.genetics.IAlleleEffect;
import forestry.api.genetics.IEffectData;
/**
* Simple allele encapsulating a leaf effect. (Not implemented)
*/
public interface IAlleleLeafEffect extends IAlleleEffect {
IEffectData doEffect(ITreeGenome genome, IEffectData storedData, World world, int x, int y, int z);
}
@@ -0,0 +1,51 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.Collection;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.EnumPlantType;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IFruitFamily;
public interface IAlleleTreeSpecies extends IAlleleSpecies {
ITreeRoot getRoot();
/**
* @return Native plant type of this species.
*/
EnumPlantType getPlantType();
/**
* @return List of all {@link IFruitFamily}s which can grow on leaves generated by this species.
*/
Collection<IFruitFamily> getSuitableFruit();
/**
* @return Tree generator for this species.
*/
ITreeGenerator getGenerator();
/* TEXTURES AND OVERRIDES */
int getLeafColour(boolean pollinated);
@SideOnly(Side.CLIENT)
IIcon getLeafIcon(boolean pollinated, boolean fancy);
@SideOnly(Side.CLIENT)
IIcon getGermlingIcon(EnumGermlingType type, int renderPass);
@SideOnly(Side.CLIENT)
int getGermlingColour(EnumGermlingType type, int renderPass);
}
@@ -0,0 +1,21 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraftforge.common.EnumPlantType;
import forestry.api.genetics.IAlleleSpeciesCustom;
import forestry.api.genetics.IFruitFamily;
public interface IAlleleTreeSpeciesCustom extends IAlleleSpeciesCustom, IAlleleTreeSpecies {
/** Add a fruit family for this tree. Trees can have multiple fruit families. */
IAlleleTreeSpeciesCustom addFruitFamily(IFruitFamily family);
/** Set the minecraft plant type for this tree. Default is Plains. */
IAlleleTreeSpeciesCustom setPlantType(EnumPlantType type);
}
@@ -0,0 +1,12 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IBreedingTracker;
public interface IArboristTracker extends IBreedingTracker {
}
@@ -0,0 +1,74 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.genetics.IFruitFamily;
public interface IFruitProvider {
IFruitFamily getFamily();
int getColour(ITreeGenome genome, IBlockAccess world, int x, int y, int z, int ripeningTime);
boolean markAsFruitLeaf(ITreeGenome genome, World world, int x, int y, int z);
int getRipeningPeriod();
// / Products, Chance
ItemStack[] getProducts();
// / Specialty, Chance
ItemStack[] getSpecialty();
ItemStack[] getFruits(ITreeGenome genome, World world, int x, int y, int z, int ripeningTime);
/**
* @return Short, human-readable identifier used in the treealyzer.
*/
String getDescription();
/* TEXTURE OVERLAY */
/**
* @param genome
* @param world
* @param x
* @param y
* @param z
* @param ripeningTime
* Elapsed ripening time for the fruit.
* @param fancy
* @return IIcon index of the texture to overlay on the leaf block.
*/
short getIconIndex(ITreeGenome genome, IBlockAccess world, int x, int y, int z, int ripeningTime, boolean fancy);
/**
* @return true if this fruit provider requires fruit blocks to spawn, false otherwise.
*/
boolean requiresFruitBlocks();
/**
* Tries to spawn a fruit block at the potential position when the tree generates.
*
* @param genome
* @param world
* @param x
* @param y
* @param z
* @return true if a fruit block was spawned, false otherwise.
*/
boolean trySpawnFruitBlock(ITreeGenome genome, World world, int x, int y, int z);
@SideOnly(Side.CLIENT)
void registerIcons(IIconRegister register);
}
@@ -0,0 +1,19 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
/**
* Provides icons for saplings, pollen, etc.
* You must implement this yourself to use TreeManager.treeFactory.createSpecies()
* There is no default implementation because every sapling has a unique icon.
*/
public interface IGermlingIconProvider {
void registerIcons(IIconRegister register);
IIcon getIcon(EnumGermlingType type, int renderPass);
}
@@ -0,0 +1,38 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.world.World;
public interface IGrowthProvider {
/**
* Check to see whether a sapling at the given location with the given genome can grow into a tree.
*
* @param genome Genome of the tree this is called for.
* @param world Minecraft world the tree will inhabit.
* @param xPos x-Coordinate to attempt growth at.
* @param yPos y-Coordinate to attempt growth at.
* @param zPos z-Coordinate to attempt growth at.
* @param expectedGirth Trunk size of the tree to generate.
* @param expectedHeight Height of the tree to generate.
* @return true if the tree can grow at the given coordinates, false otherwise.
*/
boolean canGrow(ITreeGenome genome, World world, int xPos, int yPos, int zPos, int expectedGirth, int expectedHeight);
EnumGrowthConditions getGrowthConditions(ITreeGenome genome, World world, int xPos, int yPos, int zPos);
/**
* @return Short, human-readable identifier used in the treealyzer.
*/
String getDescription();
/**
* @return Detailed description of growth behaviour used in the treealyzer.
*/
String[] getInfo();
}
@@ -0,0 +1,20 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.util.IIcon;
/**
* Provides icons for leaves. Used by TreeManager.treeFactory.createSpecies()
* Get a default Forestry implementation from TreeManager.treeFactory.getLeafIconProvider() or implement your own.
*
* If you implement your own, be sure to register the icons.
* Icon registration is not done here because these icons are heavily reused.
*/
public interface ILeafIconProvider {
IIcon getIcon(boolean pollinated, boolean fancy);
int getColor(boolean pollinated);
}
@@ -0,0 +1,12 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.world.World;
public interface ILeafTickHandler {
boolean onRandomLeafTick(ITree tree, World world, int x, int y, int z, boolean isDestroyed);
}
@@ -0,0 +1,24 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public interface IToolGrafter {
/**
* Called by leaves to determine the increase in sapling droprate.
*
* @param stack ItemStack containing the grafter.
* @param world Minecraft world the player and the target block inhabit.
* @param x x-Coordinate of the broken leaf block.
* @param y y-Coordinate of the broken leaf block.
* @param z z-Coordinate of the broken leaf block.
* @return Float representing the factor the usual drop chance is to be multiplied by.
*/
float getSaplingModifier(ItemStack stack, World world, EntityPlayer player, int x, int y, int z);
}
@@ -0,0 +1,84 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.EnumSet;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.common.EnumPlantType;
import forestry.api.genetics.IEffectData;
import forestry.api.genetics.IIndividual;
import forestry.api.world.ITreeGenData;
public interface ITree extends IIndividual, ITreeGenData {
void mate(ITree other);
IEffectData[] doEffect(IEffectData[] storedData, World world, int x, int y, int z);
IEffectData[] doFX(IEffectData[] storedData, World world, int x, int y, int z);
ITreeGenome getGenome();
ITreeGenome getMate();
EnumSet<EnumPlantType> getPlantTypes();
/**
* @since Forestry 4.0
*/
ITree[] getSaplings(World world, GameProfile playerProfile, int x, int y, int z, float modifier);
ItemStack[] getProduceList();
ItemStack[] getSpecialtyList();
ItemStack[] produceStacks(World world, int x, int y, int z, int ripeningTime);
/**
* @return Boolean indicating whether a sapling can stay planted at the given position.
*/
boolean canStay(World world, int x, int y, int z);
/**
* @return Boolean indicating whether a sapling at the given position can grow into a tree.
*/
boolean canGrow(World world, int x, int y, int z, int expectedGirth, int expectedHeight);
/**
* @return Integer denoting the maturity (block ticks) required for a sapling to attempt to grow into a tree.
*/
int getRequiredMaturity();
/**
* @return Integer denoting how resilient leaf blocks are against adverse influences (i.e. caterpillars).
*/
int getResilience();
/**
* @return Integer denoting the size of the tree trunk.
*/
int getGirth(World world, int x, int y, int z);
/**
* @return Growth conditions at the given position.
*/
EnumGrowthConditions getGrowthCondition(World world, int x, int y, int z);
WorldGenerator getTreeGenerator(World world, int x, int y, int z, boolean wasBonemealed);
ITree copy();
boolean isPureBred(EnumTreeChromosome chromosome);
boolean canBearFruit();
}
@@ -0,0 +1,34 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.awt.Color;
import forestry.api.genetics.IClassification;
public interface ITreeFactory {
/**
* Creates a new tree species.
* Automatically registered with AlleleManager.alleleRegistry.registerAllele()
* See IAlleleTreeSpeciesCustom and IAlleleSpeciesCustom for adding additional properties to the returned species.
*
* @param uid Unique Identifier for this species
* @param unlocalizedName Unlocalized name for this species
* @param authority Authority for the binomial name, e.g. "Sengir" on species of base Forestry.
* @param unlocalizedDescription Unlocalized description for this species
* @param dominant Whether this species is genetically dominant (false means it is recessive)
* @param branch Classification of this species
* @param binomial Binomial name of the species sans genus. "humboldti" will have the bee species flavour name be "Apis humboldti". Feel free to use fun names or null.
* @param leafIconProvider The leaf icon provider for this species
* @param germlingIconProvider The germling icon provider for this species
* @param generator The tree generator
* @return a new tree species allele.
*/
IAlleleTreeSpeciesCustom createSpecies(String uid, String unlocalizedName, String authority, String unlocalizedDescription, boolean dominant, IClassification branch, String binomial, ILeafIconProvider leafIconProvider, IGermlingIconProvider germlingIconProvider, ITreeGenerator generator);
/** Get one of the built-in Forestry leaf types. Default type is deciduous. */
ILeafIconProvider getLeafIconProvider(EnumLeafType enumLeafType, Color color, Color colorPollinated);
}
@@ -0,0 +1,38 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
import com.mojang.authlib.GameProfile;
import net.minecraftforge.common.util.ForgeDirection;
import forestry.api.world.ITreeGenData;
/**
* Implements the tree generation for a tree species.
*/
public interface ITreeGenerator {
WorldGenerator getWorldGenerator(ITreeGenData tree);
void setLogBlock(ITreeGenome genome, World world, int x, int y, int z, ForgeDirection facing);
void setLeaves(ITreeGenome genome, World world, GameProfile owner, int x, int y, int z, boolean decorative);
/**
* @deprecated since Forestry 4.2. use the genome version
*/
@Deprecated
void setLogBlock(World world, int x, int y, int z, ForgeDirection facing);
/**
* @deprecated since Forestry 4.2. use the genome version
*/
@Deprecated
void setLeaves(World world, GameProfile owner, int x, int y, int z, boolean decorative);
}
@@ -0,0 +1,46 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.EnumSet;
import net.minecraftforge.common.EnumPlantType;
import forestry.api.genetics.IGenome;
public interface ITreeGenome extends IGenome {
IAlleleTreeSpecies getPrimary();
IAlleleTreeSpecies getSecondary();
IFruitProvider getFruitProvider();
IGrowthProvider getGrowthProvider();
float getHeight();
float getFertility();
/**
* @return Determines either a) how many fruit leaves there are or b) the chance for any fruit leave to drop a sapling. Exact usage determined by the
* IFruitProvider
*/
float getYield();
float getSappiness();
EnumSet<EnumPlantType> getPlantTypes();
/**
* @return Amount of random block ticks required for a sapling to mature into a fully grown tree.
*/
int getMaturationTime();
int getGirth();
IAlleleLeafEffect getEffect();
}
@@ -0,0 +1,45 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public interface ITreeModifier {
/**
*
* @param genome
* @return Float used to modify the height.
*/
float getHeightModifier(ITreeGenome genome, float currentModifier);
/**
*
* @param genome
* @return Float used to modify the yield.
*/
float getYieldModifier(ITreeGenome genome, float currentModifier);
/**
*
* @param genome
* @return Float used to modify the sappiness.
*/
float getSappinessModifier(ITreeGenome genome, float currentModifier);
/**
*
* @param genome
* @return Float used to modify the maturation.
*/
float getMaturationModifier(ITreeGenome genome, float currentModifier);
/**
* @param genome0
* @param genome1
* @return Float used to modify the base mutation chance.
*/
float getMutationModifier(ITreeGenome genome0, ITreeGenome genome1, float currentModifier);
}
@@ -0,0 +1,25 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.world.World;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.ISpeciesRoot;
public interface ITreeMutation extends IMutation {
/**
* @return {@link ISpeciesRoot} this mutation is associated with.
*/
ITreeRoot getRoot();
/**
* @return float representing the percent chance for mutation to occur, from 0.0 to 100.0.
* @since Forestry 4.0
*/
float getChance(World world, int x, int y, int z, IAlleleTreeSpecies allele0, IAlleleTreeSpecies allele1, ITreeGenome genome0, ITreeGenome genome1);
}
@@ -0,0 +1,12 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IMutationCustom;
public interface ITreeMutationCustom extends ITreeMutation, IMutationCustom {
}
@@ -0,0 +1,23 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import forestry.api.genetics.IAllele;
public interface ITreeMutationFactory {
/**
* Creates a new tree mutation.
* Automatically registered with TreeManager.treeRoot.registerMutation()
* See ITreeMutationCustom and IMutationCustom for adding additional properties to the returned mutation.
*
* @param parentTree0 A parent tree for this mutation
* @param parentTree1 A parent tree for this mutation
* @param result The resulting alleles for this mutation
* @param chance The chance that breeding the two parent trees will result in this mutation
* @return a new tree mutation.
*/
ITreeMutationCustom createMutation(IAlleleTreeSpecies parentTree0, IAlleleTreeSpecies parentTree1, IAllele[] result, int chance);
}
@@ -0,0 +1,99 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.ArrayList;
import java.util.Collection;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import com.mojang.authlib.GameProfile;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IChromosome;
import forestry.api.genetics.ISpeciesRoot;
public interface ITreeRoot extends ISpeciesRoot {
@Override
boolean isMember(ItemStack itemstack);
@Override
ITree getMember(ItemStack itemstack);
@Override
ITree getMember(NBTTagCompound compound);
@Override
ITree templateAsIndividual(IAllele[] template);
@Override
ITree templateAsIndividual(IAllele[] templateActive, IAllele[] templateInactive);
@Override
ITreeGenome templateAsGenome(IAllele[] template);
@Override
ITreeGenome templateAsGenome(IAllele[] templateActive, IAllele[] templateInactive);
/**
* @param world
* @return {@link IArboristTracker} associated with the passed world.
*/
@Override
IArboristTracker getBreedingTracker(World world, GameProfile player);
/* TREE SPECIFIC */
/**
* Register a leaf tick handler.
* @param handler the {@link ILeafTickHandler} to register.
*/
void registerLeafTickHandler(ILeafTickHandler handler);
Collection<ILeafTickHandler> getLeafTickHandlers();
/**
* @return type of tree encoded on the itemstack. EnumGermlingType.NONE if it isn't a tree.
*/
@Override
EnumGermlingType getType(ItemStack stack);
ITree getTree(World world, int x, int y, int z);
ITree getTree(World world, ITreeGenome genome);
boolean plantSapling(World world, ITree tree, GameProfile owner, int x, int y, int z);
@Override
IChromosome[] templateAsChromosomes(IAllele[] template);
@Override
IChromosome[] templateAsChromosomes(IAllele[] templateActive, IAllele[] templateInactive);
boolean setFruitBlock(World world, IAlleleFruit allele, float sappiness, short[] indices, int x, int y, int z);
/* GAME MODE */
ArrayList<ITreekeepingMode> getTreekeepingModes();
ITreekeepingMode getTreekeepingMode(World world);
ITreekeepingMode getTreekeepingMode(String name);
void registerTreekeepingMode(ITreekeepingMode mode);
void setTreekeepingMode(World world, String name);
/* TEMPLATES */
@Override
ArrayList<ITree> getIndividualTemplates();
/* MUTATIONS */
@Override
Collection<ITreeMutation> getMutations(boolean shuffle);
}
@@ -0,0 +1,22 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import java.util.ArrayList;
public interface ITreekeepingMode extends ITreeModifier {
/**
* @return Localized name of this treekeeping mode.
*/
String getName();
/**
* @return Localized list of strings outlining the behaviour of this treekeeping mode.
*/
ArrayList<String> getDescription();
}
@@ -0,0 +1,16 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
import net.minecraft.item.ItemStack;
public interface IWoodItemAccess {
ItemStack getLog(EnumWoodType woodType, boolean fireproof);
ItemStack getPlanks(EnumWoodType woodType, boolean fireproof);
ItemStack getSlab(EnumWoodType woodType, boolean fireproof);
ItemStack getFence(EnumWoodType woodType, boolean fireproof);
ItemStack getStairs(EnumWoodType woodType, boolean fireproof);
}
@@ -0,0 +1,29 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
package forestry.api.arboriculture;
public class TreeManager {
/**
* Convenient access to AlleleManager.alleleRegistry.getSpeciesRoot("rootTrees")
*/
public static ITreeRoot treeRoot;
/**
* Convenient access to wood items.
*/
public static IWoodItemAccess woodItemAccess;
/**
* Used to create new trees.
*/
public static ITreeFactory treeFactory;
/**
* Used to create new tree mutations.
*/
public static ITreeMutationFactory treeMutationFactory;
}
@@ -0,0 +1,8 @@
/*******************************************************************************
* Copyright 2011-2014 SirSengir
*
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
******************************************************************************/
@API(apiVersion = "4.2.1", owner = "ForestryAPI|core", provides = "ForestryAPI|arboriculture")
package forestry.api.arboriculture;
import cpw.mods.fml.common.API;
Loaded 100 of 1624 files, more files were not shown because too many files have changed in this diff. Show more