Compare commits

...
556 Commits
Author SHA1 Message Date
DrParadox7 103cd87cbe Mail blacklist implements Set 2023-11-12 18:14:46 +01:00
DrParadox7 1da67c79f3 Rework wildcard imports 2023-11-12 18:14:46 +01:00
DrParadox7 3023b12d83 Update BS 2023-11-12 18:14:46 +01:00
DrParadox7 05c4914c79 Mails are now checked for prohibited items
Added blacklist for Mail envelopes.

It's mainly there to prevent players bypassing the stamp cost by sending out inventories rather than items.
2023-11-12 18:14:46 +01:00
miozune bf6bf6846a Update dependency types (#56) 2023-08-12 10:37:19 +02:00
Martin Robertz ba6f1d6249 sa 2023-07-18 20:31:15 +02:00
Martin Robertz 64e861af85 deps 2023-07-18 20:31:06 +02:00
Martin Robertz 27a4d86108 bs 2023-07-18 20:30:42 +02:00
hacatuandJakub afc859c6e9 Fix Additive Production (#55)
* Fixed Secondary Species Primary Production
Calling Math.round on probabilities is a logical error

* gradle spotlessApply

* Fixed computation of BeeModifiers to be consistent with additive modifiers

Needs work in other mods (Binnie and MagicBees)

* Fixed doubled base production modifier, fixed tooltips for frames with negative modifiers

* Fixed floating point bug if productionModifier is negative

* Fixed floating point bug if productionModifier + tier is negative

* Float constant suffix

* Actually fix base production modifier

* Improve tooltip coloring, correct production modifier self capping, add float suffixes

* More tooltip improvments

* Nerf base production (apiaries in shambles)

* Halve forestry frame production boost

Co-authored-by: Jakub <53441451+kuba6000@users.noreply.github.com>

* Added flowering modifier to tooltips

I believe one of the blood magic frames has a non-default flowering modifier

* Fixed flowering modifier in tooltip and made default values visible

---------

Co-authored-by: Jakub <53441451+kuba6000@users.noreply.github.com>
2023-07-18 20:28:03 +02:00
初夏同学 6292b4569f Fix a bug when NBTString does not exist. (#54) 2023-07-02 09:48:59 +09:00
Runakai1GitHub GTNH Actionsgithub-actions[bot]
99ebd8efe0 Fix Alveary Simulation of Temperatures (#52)
* Fix Alveary Simulation of Temperatures

* Spottless

* spotlessApply (#53)

Co-authored-by: GitHub GTNH Actions <>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-18 14:56:09 +02:00
Dane Strandboge 29df6ceb1b Auto-apply stats tooltips to all IHiveFrame items (#51)
* Auto-apply stats tooltips to all IHiveFrame items

* allow generated tooltip to be overridden

* link event in api, update production tooltip
2023-04-28 18:54:35 +02:00
AlastorsandJason Mitchell 39c822df8a Fixes the incompatability with the newest NEI
Thanks Mitchbama

Co-Authored-By: Jason Mitchell <1894689+mitchej123@users.noreply.github.com>
2023-04-26 17:49:04 -07:00
Jakub 9e9ae6bcad Support GT_Block_Machines in mutation requirements (#48) 2023-04-07 17:50:43 +02:00
Jakub 661a5598ea New bees formula (#45)
* New formula

* Make production modifier globally additive
2023-03-29 17:26:15 +02:00
Jakub d96669f5f7 Add a way to simulate night (#46)
* Add a way to simulate night

* Add default value to avoid crashes

* Delighted -> Unlighted
2023-03-27 21:01:10 +02:00
Quetz4l ca9ebbc0ed add setting to config-> disable butterflies spawn (#44)
* bs

* add setting to config-> disable butterflies spawn
+ default disable is false

* changed name DISABLE_BUTTERFLY to disableButterfly

* changed Boolean to boolean
(for disableButterfly)
2023-03-20 21:48:43 +01:00
Ethryan 7e60669620 Fix typo (#43) 2023-02-19 22:32:10 +01:00
f2b402955a Update Forestry.java (#41)
* Update Forestry.java

* spotlessApply (#42)

Co-authored-by: GitHub GTNH Actions <>

* Update Forestry.java

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-02-16 11:14:18 +01:00
hacatu 983b5bc8dd Fixed Secondary Species Primary Production (#40)
Calling Math.round on probabilities is a logical error
2023-02-16 10:17:58 +01:00
Raven Szewczyk 7817587067 [ci skip] upgraded build system 2023-01-31 09:52:49 +00:00
Jason Mitchell 79fb06bca6 [ci skip] Add git-blame-ignore-revs for spotlessApply 2023-01-29 12:03:50 -08:00
Jason Mitchell 94aa9346b1 [ci skip] spotlessApply with the new settings 2023-01-29 12:03:50 -08:00
Jason Mitchell 4711be8028 [ci skip] Update buildscript to RetroFuturaGradle 2023-01-29 12:03:12 -08:00
miozune 10df035419 Fix BOP Turnip Seeds extracted into 0mB of Seed Oil (#39)
* Fix BOP Turnip Seeds extracted into 0mB of Seed Oil

* Use `GameRegistry#findItemStack`
2022-10-25 19:54:42 +02:00
Jakub 5f622686f3 Fix typo (#38) 2022-10-21 22:57:06 +02:00
Glease fce7efd59a fix potential memory leak (#36) 2022-10-19 08:50:23 +01:00
Jakub 6158afeb86 Add Jubiliance description (#35)
* Add Jubilance description

* Update GuiBeealyzer.java

* Translatable strings
2022-10-16 13:45:10 +02:00
Jakub e94f967c38 Move IAlleleBeeAcceleratableEffect from GT (#34) 2022-10-13 16:05:44 +02:00
Jason Mitchell 3ee9facc9b Let the people have their giant sequoia with slightly less tedium. (#32)
* Let the people have their giant sequoia with slightly less tedium.
2022-10-09 16:52:11 -07:00
Jakub 67026cf3cc Apply new bee production chance formula (#31)
* Apply new formula

* Update build.gradle

* Update

* Use function
2022-10-08 17:28:06 +02:00
Glease 47f33cb8ec forget invalid recipe entries (#30) 2022-10-05 17:57:58 +02:00
bjin2000 22d4978e6c fix swarmer's hive spawn (#29) 2022-09-24 12:43:17 +02:00
miozune c507872364 Vegetable is not fruit (#28) 2022-08-25 16:15:40 +02:00
miozune c5c3aee2fb Carrot is not fruit (#27)
* Carrot is not fruit

* updateBuildScript & spotlessApply
2022-08-25 14:10:35 +02:00
DianeXD 6973dbc80d Add missing temperature/humidity adjustment logic (#25)
Don't adjust to a relatively better environment
2022-08-19 14:24:11 +02:00
glowredman c7b65abfd8 Cofh dep (#24)
* Revert "Make CoFHCore required (#23)"

This reverts commit 03ac4a850a.

* throw exception if CoFHAPI|energy could not be found

* spaces -> tabs
2022-07-31 09:48:07 +02:00
Jason Mitchell 19ae8891f6 [ci skip] Migrate github actions to GTNH-Actions-Workflows 2022-07-16 10:48:13 -07:00
Jakub 03ac4a850a Make CoFHCore required (#23) 2022-07-15 23:12:07 +01:00
slprime cfa2feab1c Highlight missing item in worktable (#22)
* highlight missing item in worktable

* fix crash without recipe
2022-06-29 22:59:03 +02:00
DianeXD 06baad945a Add overlay identifier (#21)
* Add overlay identifier

* Use recipeID
2022-06-03 13:37:08 +02:00
Jakub Szewczyk 14f61b5917 Fix planting in wrong dimension (#20)
* Update buildscript

* Pass the world object directly to avoid using the wrong dimension
2022-04-27 11:21:57 +02:00
Glease b58e4c57c7 Drastically reduce getBlock calls in orchard mode (#19)
* Drastically reduce getBlock calls in orchard mode

* improve caching
2022-03-26 15:55:35 +01:00
bombcar bfa39a7738 update buildscript (#18)
* update buildscript

* reformat

* Read gtnh mavne
2022-02-12 22:09:09 +01:00
bombcar 460804ae35 correct dependencies (#17) 2022-02-09 06:59:41 +01:00
bombcar 8f6e9a89e4 Updatebuild (#16)
* update buildscript

* clarify lcense
2022-02-07 20:22:25 -08:00
Martin Robertz 9c4de1a6fe Merge pull request #14 from GTNewHorizons/hive-npe
Fix NPE on rendering inside Hive
2022-01-19 12:04:44 +01:00
miozune af1c54b738 Fix NPE on rendering inside Hive 2022-01-19 19:16:50 +09:00
Jason Mitchell 5845a37558 update to explicit dependencies 2022-01-17 22:25:55 -08:00
Jason Mitchell 93cdba701c maven publish buildscript update 2022-01-17 22:25:42 -08:00
Martin Robertz fc9a2bce58 add bat files to ignorelist 2021-12-11 17:22:44 +01:00
boubou19 4410d607bb Merge pull request #13 from GTNewHorizons/update-build-script
Update build scripts and CI
2021-11-30 15:41:05 +01:00
Johann Bernhardt ffc523e1b9 Update build scripts and CI 2021-11-30 10:08:54 +01:00
Martin Robertz 6366eea2c7 Merge pull request #12 from GTNewHorizons/unified-build-script
Unified build script
2021-11-23 20:21:14 +01:00
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 <33183715+bartimaeusnek@users.noreply.github.com>
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 <33183715+bartimaeusnek@users.noreply.github.com>
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 <33183715+bartimaeusnek@users.noreply.github.com>
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 <33183715+bartimaeusnek@users.noreply.github.com>
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
1932 changed files with 139762 additions and 88097 deletions

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
# Ignore spotlessApply reformat
94aa9346b1811eff7e67820b75d5098e3f83448d
+44
View File
@@ -0,0 +1,44 @@
* text eol=lf
*.[jJ][aA][rR] binary
*.[pP][nN][gG] binary
*.[jJ][pP][gG] binary
*.[jJ][pP][eE][gG] binary
*.[gG][iI][fF] binary
*.[tT][iI][fF] binary
*.[tT][iI][fF][fF] binary
*.[iI][cC][oO] binary
*.[sS][vV][gG] text
*.[eE][pP][sS] binary
*.[xX][cC][fF] binary
*.[kK][aA][rR] binary
*.[mM]4[aA] binary
*.[mM][iI][dD] binary
*.[mM][iI][dD][iI] binary
*.[mM][pP]3 binary
*.[oO][gG][gG] binary
*.[rR][aA] binary
*.7[zZ] binary
*.[gG][zZ] binary
*.[tT][aA][rR] binary
*.[tT][gG][zZ] binary
*.[zZ][iI][pP] binary
*.[tT][cC][nN] binary
*.[sS][oO] binary
*.[dD][lL][lL] binary
*.[dD][yY][lL][iI][bB] binary
*.[pP][sS][dD] binary
*.[tT][tT][fF] binary
*.[oO][tT][fF] binary
*.[pP][aA][tT][cC][hH] -text
*.[bB][aA][tT] text eol=crlf
*.[cC][mM][dD] text eol=crlf
*.[pP][sS]1 text eol=crlf
*[aA][uU][tT][oO][gG][eE][nN][eE][rR][aA][tT][eE][dD]* binary
+13
View File
@@ -0,0 +1,13 @@
name: Build and test
on:
pull_request:
branches: [ master, main ]
push:
branches: [ master, main ]
jobs:
build-and-test:
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/build-and-test.yml@master
secrets: inherit
+14
View File
@@ -0,0 +1,14 @@
name: Release tagged build
on:
push:
tags: [ '*' ]
permissions:
contents: write
jobs:
release-tags:
uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/release-tags.yml@master
secrets: inherit
+32 -22
View File
@@ -1,22 +1,32 @@
# 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/
/.vscode/
/run/
/build/
/eclipse/
.classpath
.project
/bin/
/config/
/crash-reports/
/logs/
options.txt
/saves/
usernamecache.json
banned-ips.json
banned-players.json
eula.txt
ops.json
server.properties
servers.dat
usercache.json
whitelist.json
/out/
*.iml
*.ipr
*.iws
src/main/resources/mixins.*.json
*.bat
*.DS_Store
!gradlew.bat
-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*
Executable → Regular
View File
File mode changed.
+3
View File
@@ -0,0 +1,3 @@
# Any Github changes require admin approval
/.github/** @GTNewHorizons/admin
Executable → Regular
View File
File mode changed.
Executable → Regular
+1 -676
View File
@@ -1,7 +1,7 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -163,678 +163,3 @@ whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Executable → Regular
+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=0
Executable → Regular
+1561 -284
View File
File diff suppressed because it is too large. Load diff
+1
View File
@@ -3,3 +3,4 @@ samtrion;samtrion@gmail.com;2015-01-18
GenuineSounds;GenuineSoundsLtd@gmail.com;2015-02-26
airbreather;airbreather@linux.com;2015-04-10
ganymedes01;foka_12@hotmail.com;2015-05-27
infinityraider;theoneandonlyraider@gmail;com;2015-10-03
+10
View File
@@ -0,0 +1,10 @@
// Add your dependencies here
dependencies {
api('curse.maven:cofh-lib-220333:2388748')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.3.81-GTNH:dev')
compileOnly('com.github.GTNewHorizons:inventory-tweaks:1.5.16:api')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.36:api')
compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev')
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 username 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 mod's version when compiled. You should use this to specify your mod's
# version in @Mod([...], version = VERSION, [...])
# Leave these properties empty to skip individual token replacements
replaceGradleTokenInFile = 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. It 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 compatibility only
# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin
coreModClass =
# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class
# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false!
containsMixinsAndOrCoreModOnly = false
# 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.
+2 -2
View File
@@ -1,6 +1,6 @@
#Wed Jul 02 15:54:47 CDT 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
Vendored
+198 -117
View File
@@ -1,79 +1,126 @@
#!/usr/bin/env bash
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Attempt to set APP_HOME
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
MAX_FD=maximum
warn ( ) {
warn () {
echo "$*"
}
} >&2
die ( ) {
die () {
echo
echo "$*"
echo
exit 1
}
} >&2
# 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
;;
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -82,7 +129,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
@@ -90,75 +137,109 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
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
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
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=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
Vendored
+34 -32
View File
@@ -1,4 +1,20 @@
@if "%DEBUG%" == "" @echo off
@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
@rem Gradle startup script for Windows
@@ -8,20 +24,24 @@
@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=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -35,7 +55,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,44 +65,26 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz 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.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
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
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
+2
View File
@@ -0,0 +1,2 @@
before_install:
- ./gradlew setupCIWorkspace
Submodule lang deleted from e111b835ad.
-12
View File
@@ -1,12 +0,0 @@
/*
*******************************************************************************
* 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
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
*******************************************************************************
*/
+4
View File
@@ -0,0 +1,4 @@
// Add any additional repositiroes for your dependencies here
repositories {
}
+28
View File
@@ -0,0 +1,28 @@
pluginManagement {
repositories {
maven {
// RetroFuturaGradle
name "GTNH Maven"
url "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
allowInsecureProtocol = true
mavenContent {
includeGroup("com.gtnewhorizons.retrofuturagradle")
}
}
gradlePluginPortal()
mavenCentral()
mavenLocal()
}
}
plugins {
id 'com.diffplug.blowdryerSetup' version '1.6.0'
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.4.0' // Provides java toolchains
}
blowdryerSetup {
repoSubfolder 'gtnhShared'
github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.2.0')
//devLocal '.' // Use this when testing config updates locally
}
-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;
}
}
+122 -120
View File
@@ -1,51 +1,50 @@
/*******************************************************************************
* 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 (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
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
* Various Contributors including, but not limited to: SirSengir (original work), CovertJaguar, Player, Binnie,
* MysteriousAges
******************************************************************************/
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.ModAPIManager;
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.core.config.Version;
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.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,114 +52,117 @@ import forestry.core.utils.StringUtil;
* @author SirSengir
*/
@Mod(
modid = Defaults.MOD,
name = "Forestry",
version = Version.VERSION,
dependencies = "required-after:Forge@[10.13.0.1207,);"
+ "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)
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;")
public class Forestry {
@Mod.Instance(Defaults.MOD)
public static Forestry instance;
private File configFolder;
@Mod.Instance(Constants.MOD)
public static Forestry instance;
private static final Map<String, ForestryItem> mappedItems = new HashMap<String, ForestryItem>();
private File configFolder;
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() {
ForestryAPI.instance = this;
ForestryAPI.climateManager = new ClimateManager();
ForestryAPI.forestryConstants = new Constants();
ForestryAPI.errorStateRegistry = new ErrorStateRegistry();
EnumErrorCode.init();
}
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>();
}
public static PacketHandler packetHandler;
@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) {
checkForCoFHLib();
packetHandler = new PacketHandler();
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
packetHandler = new PacketHandler();
configFolder = new File(event.getModConfigurationDirectory(), "forestry");
// Register event handler
EventHandlerCore eventHandlerCore = new EventHandlerCore();
MinecraftForge.EVENT_BUS.register(eventHandlerCore);
FMLCommonHandler.instance().bus().register(eventHandlerCore);
MinecraftForge.EVENT_BUS.register(new MultiblockEventHandler());
core.preInit(event.getSourceFile(), this);
}
configFolder = new File(event.getModConfigurationDirectory(), "forestry");
Config.load();
@EventHandler
public void init(FMLInitializationEvent event) {
core.init(this);
}
PluginManager.runSetup();
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
core.postInit();
}
ForestryAPI.activeMode = new GameMode(Config.gameMode);
@EventHandler
public void serverStarting(FMLServerStartingEvent event) {
core.serverStarting(event.getServer());
}
PluginManager.runPreInit();
}
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 init(FMLInitializationEvent event) {
// Register gui handler
NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler());
@EventHandler
public void processIMCMessages(IMCEvent event) {
core.processIMCMessages(event.getMessages());
}
PluginManager.runInit();
}
@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));
if (block != null) {
mapping.remap(block);
Proxies.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());
}
}
}
}
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
PluginManager.runPostInit();
// Parse Mail Blacklist
Config.parseMailBlacklist();
// 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) {
PluginManager.serverStarting(event.getServer());
}
public File getConfigFolder() {
return configFolder;
}
@EventHandler
public void processIMCMessages(IMCEvent event) {
PluginManager.processIMCMessages(event.getMessages());
}
@EventHandler
public void missingMapping(FMLMissingMappingsEvent event) {
for (MissingMapping mapping : event.get()) {
if (mapping.type == Type.BLOCK) {
Block block = GameRegistry.findBlock(Constants.MOD, StringUtil.cleanTags(mapping.name));
if (block != null) {
mapping.remap(block);
Log.warning("Remapping block " + mapping.name + " to " + StringUtil.cleanBlockName(block));
}
} else {
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));
}
}
}
}
private static void checkForCoFHLib() {
if (!ModAPIManager.INSTANCE.hasAPI("CoFHAPI|energy")) {
throw new RuntimeException(
"CoFHAPI|energy could not be found! This version of Forestry does not contain the RedstoneFlux API anymore, so you have to install either CoFHLib or CoFHCore.");
}
}
}
@@ -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;
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,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 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,57 @@
/*******************************************************************************
* 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 0.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 isSelfUnlighted() {
return false;
}
public boolean isSunlightSimulated() {
return false;
}
public boolean isHellish() {
return false;
}
}
@@ -0,0 +1,107 @@
/*******************************************************************************
* 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,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 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,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 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,9 @@
package forestry.api.apiculture;
import forestry.api.genetics.IEffectData;
@SuppressWarnings("unused")
public interface IAlleleBeeAcceleratableEffect {
IEffectData doEffectAccelerated(IBeeGenome genome, IEffectData storedData, IBeeHousing housing, float did);
}
@@ -0,0 +1,32 @@
/*******************************************************************************
* 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,55 @@
/*******************************************************************************
* 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,50 @@
/*******************************************************************************
* 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);
/**
* Get the Jubilance Provider for this bee species.
*/
default IJubilanceProvider getJubilanceProvider() {
return null;
}
/**
* 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,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 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,40 @@
/*******************************************************************************
* 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,66 @@
/*******************************************************************************
* 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,87 @@
/*******************************************************************************
* 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,41 @@
/*******************************************************************************
* 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,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 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,52 @@
/*******************************************************************************
* 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,28 @@
/*******************************************************************************
* 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,14 @@
/*******************************************************************************
* 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,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.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,30 @@
/*******************************************************************************
* 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,77 @@
/*******************************************************************************
* 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. Cannot be used together with SelfUnlighted
*/
boolean isSelfLighted();
/**
* @return Boolean indicating if housing can ignore lightness/day. Cannot be used together with SelfLighted
*/
default boolean isSelfUnlighted() {
return false;
}
/**
* @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,20 @@
/*******************************************************************************
* 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,11 @@
/*******************************************************************************
* 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,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 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,127 @@
/*******************************************************************************
* 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,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 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,74 @@
/*******************************************************************************
* 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,41 @@
/*******************************************************************************
* 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 javax.annotation.Nullable;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
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();
/**
* Provides an override for the "Hold Shift" tooltip info for a frame.<br>
* Called by {@link forestry.apiculture.EventHandlerApiculture#addFrameTooltip(ItemTooltipEvent)}.
*
* @return The info to display for this frame, or null if default generated info.
*/
@Nullable
default List<String> getFrameTooltip() {
return null;
}
}
@@ -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.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,19 @@
/*******************************************************************************
* 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);
default String getDescription() {
return null;
}
}
@@ -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.hives;
public class HiveManager {
public static IHiveRegistry hiveRegistry;
public static IHiveGenHelper genHelper;
}
@@ -0,0 +1,50 @@
/*******************************************************************************
* 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,27 @@
/*******************************************************************************
* 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,22 @@
/*******************************************************************************
* 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,34 @@
/*******************************************************************************
* 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,9 @@
/*******************************************************************************
* 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,9 @@
/*******************************************************************************
* 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;
@@ -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.arboriculture;
import net.minecraft.util.StatCollector;
import forestry.api.genetics.AlleleManager;
import forestry.api.genetics.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;
EnumFruitFamily(String uid, String scientific) {
this.uid = uid;
this.scientific = scientific;
AlleleManager.alleleRegistry.registerFruitFamily(this);
}
@Override
public String getUID() {
return "forestry." + uid;
}
@Override
public String getScientific() {
return this.scientific;
}
@Override
public String getName() {
return StatCollector.translateToLocal("for.family." + uid);
}
@Override
public String getDescription() {
return StatCollector.translateToLocal("for.family." + uid + ".description");
}
}
@@ -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;
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,14 @@
/*******************************************************************************
* 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,15 @@
/*******************************************************************************
* 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,93 @@
/*******************************************************************************
* 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,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 forestry.api.genetics.IAllele;
/**
* Simple allele encapsulating an {@link IFruitProvider}.
*/
public interface IAlleleFruit extends IAllele {
IFruitProvider getProvider();
}
@@ -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 forestry.api.genetics.IAllele;
/**
* Simple allele encapsulating an {@link IGrowthProvider}.
*/
public interface IAlleleGrowth extends IAllele {
IGrowthProvider getProvider();
}
@@ -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.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,48 @@
/*******************************************************************************
* 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,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.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,11 @@
/*******************************************************************************
* 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,72 @@
/*******************************************************************************
* 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,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.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,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 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,13 @@
/*******************************************************************************
* 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,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.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,83 @@
/*******************************************************************************
* 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 net.minecraftforge.common.EnumPlantType;
import com.mojang.authlib.GameProfile;
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,37 @@
/*******************************************************************************
* 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 net.minecraftforge.common.util.ForgeDirection;
import com.mojang.authlib.GameProfile;
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,44 @@
/*******************************************************************************
* 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,26 @@
/*******************************************************************************
* 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,11 @@
/*******************************************************************************
* 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 {
}
Loaded 100 of 1932 files, more files were not shown because too many files have changed in this diff. Show more