Compare commits

..
Author SHA1 Message Date
Martin Robertz e4b5b2c2ff update 2025-09-26 17:50:27 +02:00
ABKQPOandghostflyby 8350bd9dc7 Modify line-breaking method for rendering fonts in PageText (#101)
Co-authored-by: ghostflyby <ghostflyby+git@outlook.com>
2025-09-26 20:09:24 +08:00
Martin Robertz 5dc4882038 update 2025-09-07 19:41:11 +02:00
koolkrafter5 9404223f53 Revert "Prevent overenchanting (#98)" (#99) 2025-09-07 05:19:10 -04:00
Caedis 9157df8e3b Prevent overenchanting (#98) 2025-09-06 12:59:34 -04:00
Martin Robertz 143b8286d8 update 2025-09-03 16:57:01 +02:00
sisyphussy 825758d639 Add Botania Multiblocks to StructureLib (#93) 2025-09-03 15:09:02 +02:00
Martin Robertz f4f7485a12 update 2025-08-28 09:22:54 +02:00
LewisSaber a0d7b4dde8 fix unbreaking not affecting instant repair (#94) 2025-08-27 15:44:43 +02:00
Matthew Bentham d3f4b99d23 Fix WAILA not displaying quartz pillar block name when placed on its side (#97) 2025-08-22 04:07:24 -05:00
boubou19andAlexdoru 96521a399b Restore methods so other addons work again (#92)
Co-authored-by: Alexdoru <57050655+Alexdoru@users.noreply.github.com>
2025-07-22 15:22:13 +00:00
koolkrafter5 c5ceef1a78 Improve Null Checking for Petal Apothecary (#91) 2025-07-20 19:40:03 +02:00
boubou19andAlexdoru c72988e435 Faster load (#89)
Co-authored-by: Alexdoru <57050655+Alexdoru@users.noreply.github.com>
2025-07-17 05:10:15 +02:00
koolkrafter5 26a8bd6a26 Fix achievement text typo (#88) 2025-07-13 05:36:01 +02:00
Martin Robertz 23e4f6760d update 2025-06-08 11:55:28 +02:00
Nikolay S. 72da2272d1 Fix the rest of the lang file mistakes in Botania (#84) 2025-06-06 20:57:18 +00:00
Nikolay S. 36deb60855 Add missing equals sign (#83) 2025-06-06 20:31:18 +00:00
Maya c387a30be8 update 2025-05-25 19:38:30 -06:00
brandynandMaya bcf96ed130 Add configurable F3 Debug (#78)
Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
2025-05-25 19:38:18 -06:00
Martin Robertz 7b767d52c5 update 2025-05-16 18:32:31 +02:00
Caedis e812d33caf Replace Baubles with Baubles Expanded (#81) 2025-05-13 19:09:33 -05:00
Martin Robertz a0ba2f2d6a update 2025-03-04 10:08:44 +01:00
miozune 10f4e05d37 Update build (#76) 2025-03-02 15:54:17 +00:00
Dream Master 2b586edcf2 update 2025-01-15 12:01:33 +01:00
Shadow1590Shadow1590Maya
36dfeea862 Reach ring rewrite (#67)
Co-authored-by: Shadow1590 <>
Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
2025-01-14 23:50:10 -06:00
glowredmanandMartin Robertz e8fb04df37 Small Cleanup (#68)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
2025-01-13 00:13:56 -06:00
Martin Robertz f5a21fe41e update 2024-12-27 10:06:52 +01:00
5b81cbe85e backported item filter for Rannuncarpus (#60)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
2024-12-26 22:29:04 -06:00
Martin Robertz af57a9fa05 update 2024-12-23 18:30:44 +01:00
FabbozandMartin Robertz f323fe2ac0 AgricarnationCompatibility (#62)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
2024-12-22 19:16:26 +00:00
Martin Robertz 903619e38c update 2024-12-10 20:34:40 +01:00
Raven Szewczyk 7f838cd24c Fix music disk use in the GT electric jukebox by adding metadata (#66) 2024-12-10 12:57:33 +01:00
Martin Robertz 512aa4eddb update 2024-12-07 18:32:14 +01:00
Shadow1590andShadow1590 13d5384687 Fix reach ring (#64)
Co-authored-by: Shadow1590 <>
2024-12-07 18:02:23 +01:00
Maya 909cc503c5 add issue templates 2024-11-11 04:13:52 -06:00
Kogepan229andMartin Robertz 12f260d494 Fix mamapool NPE (#57)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
2024-08-18 12:51:30 +00:00
Martin Robertz 0872239905 update 2024-08-18 11:28:11 +02:00
AlexSocol 54508ae852 Update TileCraftCrate.java (#54)
Added ability for Crafty Crate to repair damaged items
2024-08-15 20:29:46 +02:00
Martin Robertz 952f9b89ab update 2024-06-02 23:12:36 +02:00
Alastors 67b44ca6f8 shift nei mana pool (#53) 2024-06-02 14:06:59 +02:00
Jason Mitchell ff36cef1f2 cuz more safer (#51) 2024-05-18 14:44:53 -07:00
Martin Robertz d5c4e9217b update 2024-05-06 18:28:40 +02:00
LuluTheDog 6610499e7c Added GoG Skybox support for all dimensions (#42)
* Added GoG Skybox support for all dimensions

- Added a boolean to toggle the feature to the config
- Added an int array to contain the dimension you would like to recieve the Skybox

-Changed the GoG Skybox render check to include above changes

Basically this allows you to display the Garden of Glass in any dimension you wish, instead of just in the overworld. I like to use this to have the skybox in my personal void dimension.

* Changed dimension ID to HashSet

- Changed the dimension ID handling from int[] to a HashSet of Integers

-Added loadPropIntSet()

Im sorry if there is better ways to handle the loading of the IDs from the file, this is what i was able to come up with, if theres a way to directly save a set to file please do tell
2024-05-06 18:27:49 +02:00
Martin Robertz ebcca54ad4 update 2024-03-24 13:12:23 +01:00
Abdiel Kavash 89237f644a Optimize Alf Portal logic (#49) 2024-03-24 08:17:05 +01:00
Martin Robertz 052041f846 update 2024-03-08 18:24:33 +01:00
Glease 8f1d0abbeb fix elv portal treating lexicon as illegal item (#47) 2024-03-07 11:04:18 +01:00
Martin Robertz d179ee57e9 update 2024-02-21 13:27:26 +01:00
Батьків Нестор-Євген Васильович 1e2c85f898 Bug fix and small refactor (#45) 2024-02-21 13:26:57 +01:00
Батьків Нестор-Євген Васильович f1900cd9b3 The ring of ikoL awakens! (#43)
* moving master block dont reset structure

* Add mirroring

* opsie

* Mirror look

* Mirror final round

* refractor + new hud message

* Cost balancing

* F*ck you idea, you are not my homie now

* Thanks idea, love you

* Thanks Raven

* This should be it
2024-02-18 10:57:54 +01:00
Martin Robertz 398af04ea5 update 2024-02-18 10:50:52 +01:00
Jason Mitchell d5beca8e52 Reduce number of item copies. Backport from 1.12 https://github.com/VazkiiMods/Botania/commit/8595d27f4181f11006586442e42e03988a329c58 (#44) 2024-02-17 16:07:32 -08:00
Raven Szewczyk db3e5b6388 [ci skip] upgraded build system 2024-02-04 19:57:14 +00:00
Martin Robertz 177cb6af04 update bs+deps 2024-01-29 18:44:42 +01:00
Jason Mitchell 0c89751e53 Keep a cache of time uniforms instead of querying them every time (#41) 2024-01-29 18:42:27 +01:00
Martin Robertz 98cb2bb68c update bs+deps 2024-01-17 21:57:17 +01:00
Батьків Нестор-Євген Васильович 7d615a0ceb Clarify some misunderstanding (#39) 2024-01-17 21:56:24 +01:00
Martin Robertz d2be71b4e3 update bs+deps 2024-01-11 23:00:07 +01:00
Raven Szewczyk d03a0c697c [ci skip] upgraded build system 2024-01-08 21:24:18 +00:00
Martin Robertz e8da80454b update bs+deps 2023-11-05 12:50:35 +01:00
Hubry 272075dd51 Fix Alfheim portal storing items not used in recipes (VazkiiMods/Botania#2721)
* Fix VazkiiMods/Botania#2403 (Alfheim portal storing items not used in recipes)

Possibly mitigates VazkiiMods/Botania#2669, as recipe checks are a bit simplified to not
create stack copies posting capability events and the portal will not
check items with no uses more than once.

* Don't teleport bread, Bord.
2023-11-04 19:24:45 +08:00
Martin Robertz 56bd18670f update bs+deps 2023-10-30 08:30:07 +01:00
Ryan Nasers 29f0c6af40 This fixes Botania creative tab breaking and shouldn't affect the ring itself (#34)
* This fixes creative tab breaking and shouldn't affect the ring itself

* Adding change suggest by OneEyeMaker, placed check for tag compound inside of isRingEnabled and isRingBreaking methods.

* Forgot that bit. :)
2023-10-29 21:23:06 +01:00
Ryan Nasers 5ed33dfa4f Adding mushroom bag and minor refactor (#33)
* Refactors flower bag into a generic bag
* Adds a mushroom bag
2023-10-29 21:20:52 +01:00
Dream-MasterXXL 7a74dabcea fix wildcard imports 2023-10-09 23:18:50 +02:00
Dream-MasterXXL 68518a7858 update bs+deps 2023-10-09 22:56:33 +02:00
LewisSaber f83cd1ab0b Made letter purple instead of dark blue 2023-10-06 20:57:28 +02:00
LewisSaber 5595d0377c I love you combuster 2023-10-06 20:57:28 +02:00
LewisSaber 6c4d37a345 compressed 2 keybinds, added tooltip 2023-10-06 20:57:28 +02:00
LewisSaber 77e14f3c8a I love identation I love identation I love identation I love identation I love identation I love identation I love identation 2023-10-06 20:57:28 +02:00
LewisSaber 71e00772b7 identation 2023-10-06 20:57:28 +02:00
LewisSaber cf60696c68 Add keybind to clear selected blocks
also stop selected blocks from drawing with ring turned off
2023-10-06 20:57:28 +02:00
Martin Robertz d24f3facfe update gradle 2023-09-16 20:06:16 +02:00
Батьків Нестор-Євген Васильович 5cdf19daac Add Breaking To Ring Of Loki (#31)
Add Breaking to Ring of Loki
2023-09-16 20:00:47 +02:00
Pyromanc3r 93e6a1f7ba Updated Russian localization (#30)
* Updated Russian localization

The mod is now fully translated

* перевод подправлен

* доп. правки

* доп. правки2
2023-07-22 17:05:54 +02:00
梅天佑 1039b52854 Fixes a dupe with the crafting halos
adds a check that will be redundant for 99% of items (#29)
2023-05-17 22:17:37 +02:00
quentin452 33a26a5059 Fix tps lag in orespawn dimensions caused by the onSpawn methods (#28)
* Fix tps lag introduced by onSpawn methods

Especially in Orespawn dimensions like unstable dimension theses methods destroys tps before

Tested in my modpack

spark profiler before : ~ 13 ms
https://spark.lucko.me/6KkG1Tq4Su

spark profiler after :  ~ 8.5 ms
https://spark.lucko.me/6m2vv9Hb1X

However, originals versions may be more appropriate in some situations where you need to find all players in a given area rather than the closest player.

* Revert "Fix tps lag introduced by onSpawn methods"

This reverts commit 76a23a28db.

* Fix tps lags in orespawn dimension
2023-05-05 20:02:07 +02:00
Dane Strandboge 5ba45cb86d Fix Lexica Botania handling of GT tools (#27)
* fix tool handling in lexicon, improve oredict display

* update buildscript

* fix missed wrapper update, manually fix formatting (since no spotless)
2023-05-01 22:38:21 +02:00
Батьків Нестор-Євген Васильович 2f47326c7f Fix ring of loki range (#26)
Moves the player closer to the target in question so that some items' range safety checks will pass with the ring's extended reach.
2023-04-28 20:16:35 +02:00
Батьків Нестор-Євген Васильович 876b18328d Ring of loki improvement (#25)
* fix deps

* make ring trigger block activation

* remove runtime dep

* AdReSs ReVieW
2023-04-24 20:24:17 +02:00
Martin Robertz 391406e1de update gradle+BS 2023-03-17 19:34:41 +01:00
Zereff06 dfaa6dde5a Mobs not spawning on blocks (#23)
and config to disable this
2023-02-06 21:31:32 +01:00
Raven Szewczyk c14b5d4ddb [ci skip] upgraded build system 2023-01-31 09:51:31 +00:00
Jason Mitchell c90e492a66 [ci skip] Update buildscript to RetroFuturaGradle 2023-01-29 10:49:19 -08:00
AlexCatze 8a5fa6c441 Make flowers enabled by default (#22)
PR like #21 but for flowers. This will helpful to players, who using this fork of botania outside of any modpacks. This will not affect GTNH modpack(and other modpacks) because they are alredy have Botania.cfg. Also in config descripton sayed that this option should be 2 by default: "The quantity of Botania flower patches to generate in the world, defaults to 2, the lower the number the less patches generate.".
2023-01-03 18:11:43 +01:00
AlexCatze 3caf8954ad Make default recipes enabled by default (#21)
As said in description of this option, this is expert option. And, i think, recipes should be enabled by default for non-expert users. Modpack author will disable it, if needed. But it will be hard for common user to adress why there are no recipes.
2023-01-01 13:32:32 +01:00
Maxim 09ccf50fde Fix accidental double toggle of ring of loki (#20) 2022-12-30 00:17:34 +01:00
jss2a98ajandMartin Robertz 54f79398b1 Prevent Botania's bauble item tooltips breaking in some situations (#19)
* Fixed bauble tooltips breaking with certain bindings

Prevents some items tooltips and in-inventory rendering from breaking if the Baubles key is unbound, bound to a mouse button, or an abnormal keyboard key.

* update BS

Co-authored-by: Martin Robertz <dream-master@gmx.net>
2022-12-28 00:45:29 +01:00
Glease 84e758e450 fix memory leak in ManaNetworkHandler 2022-10-19 10:25:10 -07:00
Martin Robertz 751640ccec Merge pull request #17 from Kiwi233/master
Update zh_CN.lang
2022-09-24 12:40:48 +02:00
[Kiwi233] 4013121abf Update zh_CN.lang 2022-09-24 11:29:02 +08:00
Martin Robertz 9be15c8ecd Merge pull request #16 from GTNewHorizons/QuickFixLoki
Fix Loki Ring text being wrong most of the time on servers
2022-09-20 22:58:00 +02:00
BlueWeabo 0c87c31d1d revert to old text get method 2022-09-20 23:37:10 +03:00
BlueWeabo b25ef783b3 remove unneeded variable 2022-09-20 23:24:30 +03:00
BlueWeabo b2b13d9328 FixLokiText 2022-09-20 19:42:57 +03:00
Martin Robertz 9e0c82ce36 Merge pull request #15 from GTNewHorizons/KeybindForRingOfLoki
Adds a keybind to the Ring of Loki
2022-09-15 22:22:52 +02:00
BlueWeabo b002bbdd44 more ordering
think this is the last one
2022-09-15 21:05:02 +03:00
BlueWeabo d33b0cc836 ordering and fixing server crash 2022-09-15 20:35:53 +03:00
BlueWeabo 5d5277c50b add the keybind 2022-09-14 11:06:21 +03:00
Martin Robertz a3345d26d3 Merge pull request #14 from GTNewHorizons/elven-nbt-revert
Revert partial NBT match for elven recipes
2022-08-24 19:27:40 +02:00
miozune 6dce0d9e7b Revert partial NBT match for elven recipes 2022-08-25 02:05:56 +09:00
Martin Robertz 6826c25e30 Merge pull request #13 from GTNewHorizons/worldgen-black-white
Add whitelist and blacklist for generating flowers / mushrooms
2022-08-19 13:22:34 +02:00
Martin Robertz 528a9a4010 Update settings.gradle 2022-08-19 13:19:10 +02:00
miozune c6f94fabc9 updateBuildScript & disableSpotless 2022-08-19 17:53:25 +09:00
miozune 443aa9733b Revert "updateBuildScript & spotlessApply"
This reverts commit 9bf784e82c.
2022-08-19 16:50:37 +09:00
miozune 9bf784e82c updateBuildScript & spotlessApply 2022-08-19 11:52:26 +09:00
miozune 21ce111286 Add whitelist and blacklist for generating flowers / mushrooms 2022-08-19 11:48:24 +09:00
Jason Mitchell 19a4028e94 [ci skip] Migrate github actions to GTNH-Actions-Workflows 2022-07-16 10:47:08 -07:00
Martin Robertz ef026803d4 Merge pull request #12 from GTNewHorizons/terrapick-harvestlevel
Set harvest level for Terra Shatterer based on mana tier
2022-06-29 18:29:41 +02:00
miozune a5e1140a2b Set harvest level for Terra Shatterer based on mana tier 2022-06-29 19:33:23 +09:00
Martin Robertz 8648533ca9 Merge pull request #11 from GTNewHorizons/elven-dummy
Hide dummy recipes from Elven NEI handler
2022-05-25 23:48:58 +02:00
miozune d9042019e5 address reviews 2022-05-04 13:12:36 +09:00
miozune 538256cc45 ic2 maven 2022-05-02 19:37:23 +09:00
miozune 8b85a621e1 Hide dummy recipes from Elven NEI handler 2022-05-02 19:21:37 +09:00
Martin Robertz 12de9b630d Merge pull request #10 from GTNewHorizons/nbt-again
Remove dependency on GTNH fork of NEI
2022-03-05 12:25:56 +01:00
miozune 7102cc427f Remove dependency on GTNH fork of NEI 2022-02-27 12:51:56 +09:00
Martin Robertz 27053bfeab Merge pull request #4 from GTNewHorizons/nbt-nei
Fix irrelevant flowers show up in NEI
2022-02-25 12:17:48 +01:00
Martin Robertz da9019451b Merge pull request #7 from GTNewHorizons/allow-higher-potion-limit
Remove the >127 potion limit for known bugfixing coremods
2022-02-21 17:35:18 +01:00
Marcel '(Com)Buster' Sondaar b8f7f4ee03 Remove the >127 potion limit for known bugfixing coremods 2022-02-20 22:08:13 +01:00
Martin Robertz fe754d3733 Merge pull request #6 from GTNewHorizons/fix-recipe-ordering
Fix recipe ordering
2022-02-20 13:25:00 +01:00
Marcel '(Com)Buster' Sondaar 8c685b42bc Merge branch 'gtnh-master' into fix-recipe-ordering 2022-02-20 12:56:39 +01:00
Marcel '(Com)Buster' Sondaar a7fb7e7b7d Force recipes with catalysts to be on top of the search queue 2022-02-20 01:35:54 +01:00
miozune c0b8fffc40 Fix irrelevant flowers show up in NEI 2022-02-19 12:17:10 +09:00
Martin Robertz 208c74d877 Merge pull request #3 from GTNewHorizons/maven
update and optimize buildscripts
2022-02-13 13:09:54 +01:00
bombcar 74f0f48fd7 update and optimize buildscripts 2022-02-12 21:30:56 -06:00
Jason Mitchell 548ddfff1f update to explicit dependencies 2022-01-19 08:15:02 -08:00
Jason Mitchell c60e696f13 maven publish buildscript update 2022-01-19 08:14:04 -08:00
Martin Robertz 6a9362fa5e Merge pull request #2 from GTNewHorizons/gtnh
Gtnh
2022-01-01 20:01:06 +01:00
(Com)buster ba438bf6bd Fix a NPE crash in the lexicon search
(cherry picked from commit d7aa7e4241d3a694e56c6c55c0375305a9ee7ace)
2022-01-01 18:57:45 +01:00
(Com)buster bd2be73856 Fixes for recipe editing: lÂexicon in general and apothecary oredicting,itemblocks, and API updates in particular
(cherry picked from commit 594b0bb4622e4662ea5fe454396fb55ad90e55b2)
2022-01-01 18:57:32 +01:00
(Com)buster 3527358443 Make the lexica botanica recipe-change proof
(cherry picked from commit 672394cc6d12b7b8edca922468d1f96284ff5088)
2022-01-01 18:57:23 +01:00
Martin Robertz 0ef2be2398 add bat files to ignore list 2022-01-01 18:55:59 +01:00
Martin Robertz fcab91f992 Merge pull request #1 from GTNewHorizons/upgrade-build-script
Upgrade build script
2021-12-10 14:41:29 +01:00
Johann Bernhardt 6e13ea3fd8 Fix server crash 2021-12-10 13:23:02 +01:00
Johann Bernhardt 8a84eb32e4 Remove unused binary 2021-12-10 12:35:03 +01:00
Johann Bernhardt accc2ecbb5 Remove internal update mechanism because the pack is updated by GTNH team 2021-12-10 12:19:07 +01:00
Johann Bernhardt ade0ef263b Stripped copied dependencies and refactored them into gradle dependencies 2021-12-10 12:04:51 +01:00
Johann Bernhardt c0136f3078 Draft for unified build script 2021-12-10 11:53:51 +01:00
DreamMasterXXL f348b53fb7 add(Botania)libs
add Baubles as lib
2020-07-27 19:54:12 +02:00
DreamMasterXXL dfe4d1e849 fix(Batania)gradle
add newer gradle wrapper
update forge version to 1614
update gitignore
2020-07-27 19:49:56 +02:00
Vasco Lavos eb37715da2 Update contributors.properties 2016-08-30 01:03:06 +01:00
Vasco Lavos 86793652a1 Update contributors.properties 2016-08-10 16:56:41 +01:00
Vasco Lavos 980f854518 Update contributors.properties 2016-07-04 21:10:51 +01:00
Vasco Lavos 82cf90ce4c Update contributors.properties 2016-07-04 16:34:36 +01:00
2516 changed files with 42370 additions and 48973 deletions

No files matched your search

+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
+62
View File
@@ -0,0 +1,62 @@
name: Report Bug
description: "Report a bug."
body:
- type: markdown
attributes:
value: "A bug/crash report with sufficient information and logs to reproduce and track down."
- type: input
id: discord
attributes:
label: Your GTNH Discord Username
description: Leave empty if you don't have one, but this will make it harder to contact you if we need additional info.
placeholder: "Example: Fake#1234"
- type: input
id: version
attributes:
label: Mod Version
description: "What version of the Mod are you using?"
placeholder: "Example: 1.0.0"
validations:
required: true
- type: textarea
id: report
attributes:
label: Bug Report
description: "Relevant information, as well as relevant logs attached such as `logs/fml-client-latest.log."
placeholder: "Example: https://mclo.gs/ OR submit the file to github by dragging it to this textbox."
validations:
required: true
- type: dropdown
id: java
attributes:
label: Java Version
description: What Java version are you using? It's worth mentioning that if you play on Java9+ you should try update to latest minor release (e.g. prefer Java 17.0.6 over 17.0.2) of that version.
options:
- Java 8
- Java 9
- Java 11
- Java 17
- Java 19
- Java 20
- Java 21
- Other (Please Specify)
validations:
required: true
- type: textarea
id: modlist
attributes:
label: Mod List or GTNH Pack Version
description: "List of mods, ideally a minimal reproducible set (can be retrieved from latest.log). If using GTNH please indicate pack version and any changed mods, not the entire modlist."
placeholder: "List of mods or GTNH Pack version goes here"
validations:
required: true
- type: checkboxes
id: final
attributes:
label: Final Checklist
description: Certify that you read things
options:
- label: "I have searched the issues and haven't found a similar issue."
required: true
@@ -0,0 +1,28 @@
name: Feature Request
description: "Request a feature."
body:
- type: markdown
attributes:
value: "Please use this form to request features. We ask you check if it was already requested though"
- type: input
id: discord
attributes:
label: Your GTNH Discord Username
description: Leave empty if you don't have one, but this will make it harder to contact you if we need additional info.
placeholder: "Example: Wumpus#1234"
- type: textarea
id: request
attributes:
label: Feature Request
description: "Relevant information, as well as relevant images"
placeholder: "Example: https://mclo.gs/ OR submit the file to github by dragging it to this textbox."
validations:
required: true
- type: checkboxes
id: final
attributes:
label: Final Checklist
description: Certify that you read things
options:
- label: "I have searched the issues and haven't found a similar issue."
required: true
+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
+38 -61
View File
@@ -1,61 +1,38 @@
## Windows
Thumbs.db
## gradle
/.gradle
/build
## ForgeGradle
/run
## eclipse
/.settings
/.metadata
/.classpath
/.project
/eclipse
/bin
## intellij
/out
/.idea
/atlassian-ide-plugin.xml
/*.ipr
/*.iws
/*.iml
## Private Stuffs
/private.properties
## Jars
*.jar
!/gradle/wrapper/gradle-wrapper.jar
!GardenOfGlass.jar
### OSX (adds a lot of garbage)###
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
.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
.factorypath
addon.local.gradle
addon.local.gradle.kts
addon.late.local.gradle
addon.late.local.gradle.kts
layout.json
+3
View File
@@ -0,0 +1,3 @@
# Any Github changes require admin approval
/.github/** @GTNewHorizons/admin
Binary file not shown.
BIN
View File
Binary file not shown.
-15
View File
@@ -1,18 +1,3 @@
README:
This is williewillus' port and continuation of Botania for Minecraft versions 1.8.x and above
All licensing and distribution rights are exactly as 1.7.10 Botania.
Use at your own risk as bugs may pop up unexpectedly.
As of 2016 02 25, Vazkii has stopped working on Botania. Requests for design changes will still not be accepted here (post them on reddit). Even then, don't expect anything to be added without severe deliberation scrutiny.
Please report all 1.8+ issues to this repository.
These non-CurseForge builds can be openly used in modpacks of any kind, in accordance with the requirements of the license of this mod.
![](https://github.com/Vazkii/Botania/blob/master/web/img/logo.png)
Welcome to the Botania repository.
Binary file not shown.
-6
View File
@@ -1,6 +0,0 @@
{
"pack": {
"pack_format": 2,
"description": "Alternate Botania textures by Futureazoo"
}
}
-2
View File
@@ -1,2 +0,0 @@
sh gradlew
pause
+3 -250
View File
@@ -1,252 +1,5 @@
import groovy.json.JsonSlurper
import groovy.json.JsonOutput
//version: 1707058017
buildscript {
repositories {
mavenCentral()
maven {
name = "forge"
url = "http://files.minecraftforge.net/maven"
}
maven {
name = "sonatype"
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT'
classpath 'com.matthewprenger:CurseGradle:1.0-SNAPSHOT'
}
plugins {
id 'com.gtnewhorizons.gtnhconvention'
}
repositories {
mavenCentral()
maven {
name = "chickenbones"
url = "http://chickenbones.net/maven/"
}
maven {
url "http://dvs1.progwml6.com/files/maven"
}
}
apply plugin: 'net.minecraftforge.gradle.forge'
apply plugin: 'com.matthewprenger.cursegradle'
ext.configFile = file('build.properties')
ext.config = parseConfig(configFile)
ext.priv = parseConfig(file('private.properties'))
version = "${config.version}-${config.build_number}"
group = "vazkii.botania" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = config.mod_name
minecraft {
version = "${config.mc_version}-${config.forge_version}"
runDir = "eclipse/assets"
mappings = "snapshot_20160718"
//This, does the token replacement.
//Though, I reccomend this to be replaced with a token such as @VERSION@
replace 'GRADLE:BUILD', config.build_number
replace 'GRADLE:VERSION', config.version
replaceIn 'LibMisc.java' //I may have missed another file, though I can only find it in here.
useDepAts = true
}
//This here is for SCP
configurations {
sshAntTask
}
//End of the SCP config
dependencies {
compile files(
'Baubles-deobf.jar'
)
deobfCompile "mezz.jei:jei_1.10.2:3.7.8.234"
//and a bit more for SCP
sshAntTask "org.apache.ant:ant-jsch:1.7.1", "jsch:jsch:0.1.29"
}
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
processResources {
// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
// replace version and mcversion
expand 'version': project.version, 'mcversion': project.minecraft.version
}
// copy everything else, thats not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info', '**/psd/**'
}
}
/**
* These, go outside of the processResources {}* Though, this was added with the NEI intergation commit (8bf4680)
*/
task deobfJar(type: Jar) {
from(sourceSets.main.output)
archiveName = "${baseName}.${version}-deobf.${extension}"
}
artifacts {
archives deobfJar
}
/**
* Increments the buildnumber in your config file, and saves it
*/
task incrementBuildNumber(dependsOn: 'reobfJar') << {
config.build_number = (config.build_number.toString().toInteger()) + 1
configFile.withWriter {
config.toProperties().store(it, "")
}
// todo make this flexibile - collection of supported mc versions
file('web/versions.ini').append("\n${version}=${minecraft.version}")
file("${config.dir_repo}/version/${minecraft.version}.txt").write("${version}")
def updateJsonFile = file('version/update.json')
def updateJson = new JsonSlurper().parse(updateJsonFile) as Map
// todo detect if the mcversion is absent
// Add to version section
updateJson."${minecraft.version}"."${version}" = "See https://github.com/williewillus/Botania/releases/${version}"
// Update promos
updateJson.promos."${minecraft.version}-latest" = "${version}"
updateJson.promos."${minecraft.version}-recommended" = "${version}"
updateJsonFile.write(JsonOutput.prettyPrint(JsonOutput.toJson(updateJson)))
}
/* Unused - Forgecraft and web server stuff
// I have no idea what I'm doing
task wtfGradle2(type: Copy) {
from(jar.destinationDir)
into file("${config.dir_output}/wtf")
}
// Seriously, I'm desperate to make this work
task wtfGradle1(type: Delete) {
dependsOn "wtfGradle2"
delete "${config.dir_output}/wtf/${deobfJar.archiveName}"
}
task output(type: Copy) {
dependsOn "wtfGradle1"
from(jar.destinationDir)
into file(config.dir_output)
}
task outputDeobf(type: Copy) {
dependsOn "output"
from(config.dir_output) {
include deobfJar.archiveName
}
into file("${config.dir_output}/deobf")
}
task forgecraft(type: Copy) {
dependsOn "outputDeobf"
from "${config.dir_output}/wtf"
into file(priv.dir_forgecraft)
}
task sort(type: Delete) {
dependsOn "forgecraft"
delete "${config.dir_output}/${deobfJar.archiveName}", "${config.dir_output}/wtf"
}
// This is the upload task from the build.xml
task upload() << {
scp('/files') {
fileset(file: jar.archivePath)
}
scp('/files/deobf') {
fileset(file: deobfJar.archivePath)
}
scp('/') {
fileset(file: 'web/changelog.txt')
fileset(file: 'web/versions.ini')
}
}
// This is deploy_web task
task deployWeb << {
scp('/') {
fileset(dir: 'web') //everything from the web directory
}
}
def scp(String dir, Closure antFileset = {}) {
ant {
taskdef(
name: 'scp',
classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp',
classpath: configurations.sshAntTask.asPath)
String dirstr = priv.scp_dir + dir
Map scpArgs = [
todir : dirstr,
password : priv.scp_pass,
sftp: true,
trust: 'yes'
]
delegate.scp(scpArgs) {
antFileset.delegate = delegate
antFileset()
}
}
}
*/
def parseConfig(File config) {
config.withReader {
def prop = new Properties()
prop.load(it)
return (new ConfigSlurper().parse(prop))
}
}
jar {
//rename the default output, for some better... sanity with scipts
archiveName = "${baseName}-unofficial.${version}.${extension}"
}
curseforge {
apiKey = priv.cfkey
project {
id = "241973"
changelog = """
See https://github.com/williewillus/Botania/releases/tag/${version}
"""
releaseType = "release"
addGameVersion "${minecraft.version}"
relations {
requiredLibrary 'baubles'
}
}
}
//defaultTasks 'clean', 'build', 'sort', 'forgecraft', 'incrementBuildNumber', 'curse', 'upload'
defaultTasks 'clean', 'build', 'incrementBuildNumber', 'curseforge'
-9
View File
@@ -1,9 +0,0 @@
#
#Fri Jul 29 18:40:22 CDT 2016
version=r1.8
dir_output=../Build Output/Botania/
forge_version=12.18.1.2044
mc_version=1.10.2
dir_repo=./
build_number=315
mod_name=Botania
-59
View File
@@ -1,59 +0,0 @@
# Devs
#vazkii=6
wiiv=marimorphosis
dylangk=munchdew
# Cool People
sl1pg8r=endoflame
direwolf20=thermalily
#wayofflowingtime=fallenKanade
wtfgeeks=daybloom
spitefulfox=tainthistle
gideonseymour=arcaneRose
#pahimar=medumone
# Flower Designers
jadedcat=jadedAmaranthus
pokefenn=hydroangeas
finvaara=bubbell
flaxbeard=kekimurus
# Patrons
devinpath=9
cheriekeks=6
orangeninja1=1
disbedan015=14
djcosmic2=3
utoxin=2
evrlost=10
belathus=1
vicceyr=0
superfortress=3
nematrec=15
pika_craft=3
lanman14444=13
noclassdeffound=9
emba=0
jordsta95=6
kei_kouma=15
megatronp=15
thorantin=6
fletchstudios=6
donaber=4
agamemnom=15
dqmhose=13
fma_winry=2
luckylucyf=14
epiczeus=7
fredfrog1234=15
pjfranke=5
_bloop=0
kgevans=15
l0nekitsune=14
swiftlileagle=14
gryphonn=11
loraanicus=10
samerater=8
coolcabbage16=13
eladkay=3
tobiasling=9
+18
View File
@@ -0,0 +1,18 @@
// Add your dependencies here
dependencies {
api('com.github.GTNewHorizons:Baubles-Expanded:2.1.15-GTNH:dev')
api('com.github.GTNewHorizons:GTNHLib:0.6.40:dev')
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.44:api') {transitive=false}
compileOnly('com.github.GTNewHorizons:ForgeMultipart:1.6.8:dev') {transitive=false}
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.7.90-GTNH:dev')
compileOnly('com.github.GTNewHorizons:Railcraft:9.16.33:api') {transitive=false}
compileOnly('com.github.GTNewHorizons:StorageDrawers:2.1.8-GTNH:api') {transitive=false}
compileOnly('curse.maven:cofh-lib-220333:2388748')
compileOnly('curse.maven:minefactory-reloaded-66672:2366150')
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')
compileOnly("com.github.GTNewHorizons:StructureLib:1.4.23:dev")
}
-1
View File
@@ -1 +0,0 @@
sh gradlew deployWeb
-56
View File
@@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="2">
<profile kind="CleanUpProfile" name="BotaniaCleanup" version="2">
<setting id="cleanup.remove_unused_private_fields" value="true"/>
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
<setting id="cleanup.never_use_blocks" value="false"/>
<setting id="cleanup.remove_unused_private_methods" value="true"/>
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
<setting id="cleanup.convert_to_enhanced_for_loop" value="true"/>
<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
<setting id="cleanup.sort_members" value="false"/>
<setting id="cleanup.remove_unused_local_variables" value="true"/>
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
<setting id="cleanup.remove_unused_private_members" value="true"/>
<setting id="cleanup.remove_unnecessary_casts" value="true"/>
<setting id="cleanup.make_parameters_final" value="false"/>
<setting id="cleanup.use_this_for_non_static_field_access" value="true"/>
<setting id="cleanup.remove_private_constructors" value="true"/>
<setting id="cleanup.use_blocks" value="false"/>
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
<setting id="cleanup.always_use_this_for_non_static_field_access" value="false"/>
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="true"/>
<setting id="cleanup.add_default_serial_version_id" value="false"/>
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
<setting id="cleanup.make_variable_declarations_final" value="false"/>
<setting id="cleanup.add_missing_nls_tags" value="false"/>
<setting id="cleanup.format_source_code" value="false"/>
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
<setting id="cleanup.add_missing_override_annotations" value="true"/>
<setting id="cleanup.remove_unused_private_types" value="true"/>
<setting id="cleanup.add_missing_methods" value="false"/>
<setting id="cleanup.make_local_variable_final" value="true"/>
<setting id="cleanup.correct_indentation" value="true"/>
<setting id="cleanup.add_missing_override_annotations_interface_methods" value="true"/>
<setting id="cleanup.remove_unused_imports" value="true"/>
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
<setting id="cleanup.make_private_fields_final" value="true"/>
<setting id="cleanup.add_generated_serial_version_id" value="true"/>
<setting id="cleanup.organize_imports" value="true"/>
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
<setting id="cleanup.sort_members_all" value="false"/>
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
<setting id="cleanup.add_missing_annotations" value="true"/>
<setting id="cleanup.use_parentheses_in_expressions" value="true"/>
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
<setting id="cleanup.use_this_for_non_static_method_access" value="true"/>
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
<setting id="cleanup.add_serial_version_id" value="false"/>
<setting id="cleanup.format_source_code_changes_only" value="false"/>
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
<setting id="cleanup.always_use_blocks" value="true"/>
</profile>
</profiles>
-20
View File
@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="false" context="gettercomment_context" deleted="false" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment"/><template autoinsert="false" context="settercomment_context" deleted="false" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment"/><template autoinsert="false" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment"/><template autoinsert="false" context="filecomment_context" deleted="false" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/**
* This class was created by &lt;Vazkii&gt;. It's distributed as
* part of the ${project_name} Mod. Get the Source Code in github:
* https://github.com/Vazkii/${project_name}
*
* ${project_name} is Open Source and distributed under the
* ${project_name} License: http://botaniamod.net/license.php
*
* File Created @ [${date}, ${time} (GMT)]
*/</template><template autoinsert="false" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment"/><template autoinsert="false" context="fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment"/><template autoinsert="false" context="methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment"/><template autoinsert="false" context="overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment"/><template autoinsert="false" context="delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment"/><template autoinsert="true" context="newtype_context" deleted="false" description="Newly created files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.newtype" name="newtype">${filecomment}
${package_declaration}
${typecomment}
${type_declaration}</template><template autoinsert="true" context="classbody_context" deleted="false" description="Code in new class type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.classbody" name="classbody">
</template><template autoinsert="true" context="interfacebody_context" deleted="false" description="Code in new interface type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name="interfacebody">
</template><template autoinsert="true" context="enumbody_context" deleted="false" description="Code in new enum type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.enumbody" name="enumbody">
</template><template autoinsert="true" context="annotationbody_context" deleted="false" description="Code in new annotation type bodies" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name="annotationbody">
</template><template autoinsert="true" context="catchblock_context" deleted="false" description="Code in new catch blocks" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.catchblock" name="catchblock">// ${todo} Auto-generated catch block
${exception_var}.printStackTrace();</template><template autoinsert="false" context="methodbody_context" deleted="false" description="Code in created method stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodbody" name="methodbody"/><template autoinsert="true" context="constructorbody_context" deleted="false" description="Code in created constructor stubs" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name="constructorbody">${body_statement}
// ${todo} Auto-generated constructor stub</template><template autoinsert="true" context="getterbody_context" deleted="false" description="Code in created getters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.getterbody" name="getterbody">return ${field};</template><template autoinsert="true" context="setterbody_context" deleted="false" description="Code in created setters" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.setterbody" name="setterbody">${field} = ${param};</template></templates>
+194
View File
@@ -0,0 +1,194 @@
# ExampleMod tag to use as Blowdryer (Spotless, etc.) settings version, leave empty to disable.
# LOCAL to test local config updates.
gtnh.settings.blowdryerTag = 0.2.0
# Human-readable mod name, available for mcmod.info population.
modName = Botania
# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
# Conventionally lowercase.
modId = Botania
# Root package of the mod, used to find various classes in other properties,
# mcmod.info substitution, enabling assertions in run tasks, etc.
modGroup = vazkii.botania
# Whether to use modGroup as the maven publishing group.
# When false, com.github.GTNewHorizons is used.
useModGroupForPublishing = false
# Updates your build.gradle and settings.gradle automatically whenever an update is available.
autoUpdateBuildScript = false
# Version of Minecraft to target
minecraftVersion = 1.7.10
# Version of Minecraft Forge to target
forgeVersion = 10.13.4.1614
# Specify an MCP channel for dependency deobfuscation and the deobfParams task.
channel = stable
# Specify an MCP mappings version for dependency deobfuscation and the deobfParams task.
mappingsVersion = 12
# Defines other MCP mappings for dependency deobfuscation.
remoteMappings = https\://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/
# Select a default username for testing your mod. You can always override this per-run by running
# `./gradlew runClient --username=AnotherPlayer`, or configuring this command in your IDE.
developmentEnvironmentUserName = Developer
# Enables using modern Java syntax (up to version 17) via Jabel, while still targeting JVM 8.
# See https://github.com/bsideup/jabel for details on how this works.
enableModernJavaSyntax = true
# Enables injecting missing generics into the decompiled source code for a better coding experience.
# Turns most publicly visible List, Map, etc. into proper List<E>, Map<K, V> types.
enableGenericInjection = false
# Generate a class with a String field for the mod version named as defined below.
# If generateGradleTokenClass is empty or not missing, no such class will be generated.
# If gradleTokenVersion is empty or missing, the field will not be present in the class.
generateGradleTokenClass = vazkii.botania.common.Tags
# Name of the token containing the project's current version to generate/replace.
gradleTokenVersion = VERSION
# [DEPRECATED]
# Multiple source files can be defined here by providing a comma-separated list: Class1.java,Class2.java,Class3.java
# public static final String VERSION = "GRADLETOKEN_VERSION";
# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's
# version in @Mod([...], version = VERSION, [...]).
# Leave these properties empty to skip individual token replacements.
# replaceGradleTokenInFile =
# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can
# leave this property empty.
# Example value: (apiPackage = api) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.api
apiPackage = api
# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/
# There can be multiple files in a space-separated list.
# Example value: mymodid_at.cfg nei_at.cfg
accessTransformersFile = botania_at.cfg
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
usesMixins = false
# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
# Mixin classes will have access to "main" classes, but not the other way around.
separateMixinSourceSet =
# Adds some debug arguments like verbose output and class export.
usesMixinDebug = false
# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise.
mixinPlugin =
# Specify the package that contains all of your Mixins. 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
# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins.
forceEnableMixins = false
# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated into your jar. It is your
# responsibility to check the license and request permission for distribution if required.
usesShadowedDependencies = false
# If disabled, won't remove unused classes from shadowed dependencies. Some libraries use reflection to access
# their own classes, making the minimization unreliable.
minimizeShadowedDependencies = true
# If disabled, won't rename the shadowed classes.
relocateShadowedDependencies = true
# Adds CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
includeWellKnownRepositories = true
# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
# list of strings, with the acceptable keys being(case does not matter):
# cursemaven
# modrinth
excludeWellKnownRepositories =
# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven.
# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables.
# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle.
usesMavenPublishing = true
# Maven repository to publish the mod to.
# mavenPublishUrl = https\://nexus.gtnewhorizons.com/repository/releases/
# Publishing to Modrinth requires you to set the MODRINTH_TOKEN environment variable to your current Modrinth API token.
#
# The project's ID on Modrinth. Can be either the slug or the ID.
# Leave this empty if you don't want to publish to Modrinth.
modrinthProjectId =
# The project's relations on Modrinth. You can use this to refer to other projects on Modrinth.
# Syntax: scope1-type1:name1;scope2-type2:name2;...
# Where scope can be one of [required, optional, incompatible, embedded],
# type can be one of [project, version],
# and the name is the Modrinth project or version slug/id of the other mod.
# Example: required-project:fplib;optional-project:gasstation;incompatible-project:gregtech
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
modrinthRelations =
# Publishing to CurseForge requires you to set the CURSEFORGE_TOKEN environment variable to one of your CurseForge API tokens.
#
# The project's numeric ID on CurseForge. You can find this in the About Project box.
# Leave this empty if you don't want to publish on CurseForge.
curseForgeProjectId =
# The project's relations on CurseForge. You can use this to refer to other projects on CurseForge.
# Syntax: type1:name1;type2:name2;...
# Where type can be one of [requiredDependency, embeddedLibrary, optionalDependency, tool, incompatible],
# and the name is the CurseForge project slug of the other mod.
# Example: requiredDependency:railcraft;embeddedLibrary:cofhlib;incompatible:buildcraft
# Note: UniMixins is automatically set as a required dependency if usesMixins = true.
curseForgeRelations =
# Optional parameter to customize the produced artifacts. Use this to preserve artifact naming when migrating older
# projects. New projects should not use this parameter.
# customArchiveBaseName =
# Optional parameter to have the build automatically fail if an illegal version is used.
# This can be useful if you e.g. only want to allow versions in the form of '1.1.xxx'.
# The check is ONLY performed if the version is a git tag.
# Note: the specified string must be escaped, so e.g. 1\\.1\\.\\d+ instead of 1\.1\.\d+
# versionPattern =
# Uncomment to prevent the source code from being published.
# noPublishedSources = true
# Uncomment this to disable Spotless checks.
# This should only be uncommented to keep it easier to sync with upstream/other forks.
# That is, if there is no other active fork/upstream, NEVER change this.
disableSpotless = true
# Uncomment this to disable Checkstyle checks (currently wildcard import check).
# disableCheckstyle = true
# Override the IDEA build type. Valid values are: "" (leave blank, do not override), "idea" (force use native IDEA build), "gradle"
# (force use delegated build).
# This is meant to be set in $HOME/.gradle/gradle.properties.
# e.g. add "systemProp.org.gradle.project.ideaOverrideBuildType=idea" will override the build type to be native build.
# WARNING: If you do use this option, it will overwrite whatever you have in your existing projects. This might not be what you want!
# Usually there is no need to uncomment this here as other developers do not necessarily use the same build type as you.
# ideaOverrideBuildType = idea
# Whether IDEA should run spotless checks when pressing the Build button.
# This is meant to be set in $HOME/.gradle/gradle.properties.
# ideaCheckSpotlessOnBuild = true
Binary file not shown.
+3 -2
View File
@@ -1,6 +1,7 @@
#Sat May 28 11:56:22 CDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-all.zip
Vendored
+207 -118
View File
@@ -1,162 +1,251 @@
#!/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.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
##
## 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/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# 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##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
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
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
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.
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "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=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# 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 optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-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 Executable → Regular
+94 -90
View File
@@ -1,90 +1,94 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem 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
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
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%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="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
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
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 %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+2
View File
@@ -0,0 +1,2 @@
before_install:
- ./gradlew setupCIWorkspace
-4
View File
@@ -1,4 +0,0 @@
scp_dir=
scp_pass=
cfkey=
dir_forgecraft=../Build Output/Botania/
+2
View File
@@ -0,0 +1,2 @@
repositories {
}
+23
View File
@@ -0,0 +1,23 @@
pluginManagement {
repositories {
maven {
// RetroFuturaGradle
name "GTNH Maven"
url "https://nexus.gtnewhorizons.com/repository/public/"
mavenContent {
includeGroup("com.gtnewhorizons")
includeGroupByRegex("com\\.gtnewhorizons\\..+")
}
}
gradlePluginPortal()
mavenCentral()
mavenLocal()
}
}
plugins {
id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.43'
}
@@ -1,42 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public final class BCLog {
public static final Logger logger = LogManager.getLogger("BuildCraft");
/** Deactivate constructor */
private BCLog() {}
@Deprecated
public static void logErrorAPI(String mod, Throwable error, Class<?> classFile) {
logErrorAPI(error, classFile);
}
public static void logErrorAPI(Throwable error, Class<?> classFile) {
StringBuilder msg = new StringBuilder("API error! Please update your mods. Error: ");
msg.append(error);
StackTraceElement[] stackTrace = error.getStackTrace();
if (stackTrace.length > 0) {
msg.append(", ").append(stackTrace[0]);
}
logger.log(Level.ERROR, msg.toString());
if (classFile != null) {
msg.append("API error: ").append(classFile.getSimpleName()).append(" is loaded from ").append(classFile.getProtectionDomain().getCodeSource().getLocation());
logger.log(Level.ERROR, msg.toString());
}
}
@Deprecated
public static String getVersion() {
return BuildCraftAPI.getVersion();
}
}
@@ -1,52 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Set;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import net.minecraft.block.Block;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public final class BuildCraftAPI {
public static ICoreProxy proxy;
public static final Set<Block> softBlocks = Sets.newHashSet();
public static final HashMap<String, IWorldProperty> worldProperties = Maps.newHashMap();
/** Deactivate constructor */
private BuildCraftAPI() {}
public static String getVersion() {
try {
Class<?> clazz = Class.forName("buildcraft.core.Version");
Method method = clazz.getDeclaredMethod("getVersion");
return String.valueOf(method.invoke(null));
} catch (Exception e) {
return "UNKNOWN VERSION";
}
}
public static IWorldProperty getWorldProperty(String name) {
return worldProperties.get(name);
}
public static void registerWorldProperty(String name, IWorldProperty property) {
if (worldProperties.containsKey(name)) {
BCLog.logger.warn("The WorldProperty key '" + name + "' is being overidden with " + property.getClass().getSimpleName() + "!");
}
worldProperties.put(name, property);
}
public static boolean isSoftBlock(World world, BlockPos pos) {
return worldProperties.get("soft").get(world, pos);
}
}
@@ -1,48 +0,0 @@
package buildcraft.api.core;
import java.util.Map;
import com.google.common.collect.Maps;
import net.minecraftforge.common.config.Property;
/** Use this to access the various config options. It is recommended that you use this as opposed to the variables in
* the mod, as users may only install the modules that they want, and not the one you may have refereed to. */
@Deprecated
public final class ConfigAccessor {
public enum EMod {
CORE,
BUILDERS,
ENERGY,
FACTORY,
ROBITICS,
SILICON,
TRANSPORT
}
private static Map<EMod, IBuildCraftMod> mods = Maps.newHashMap();
private ConfigAccessor() {}
public static Property getOption(EMod mod, String name) {
if (mods.containsKey(mod)) {
return mods.get(mod).getOption(name);
} else {
return null;
}
}
public static boolean getBoolean(EMod mod, String name, boolean defaultBoolean) {
Property prop = getOption(mod, name);
if (prop == null) {
return defaultBoolean;
} else {
return prop.getBoolean(defaultBoolean);
}
}
/** WARNING: INTERNAL USE ONLY! */
public static void addMod(EMod mod, IBuildCraftMod actual) {
mods.put(mod, actual);
}
}
@@ -1,150 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import java.util.Locale;
import java.util.Random;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
/** Use minecraft's EnumDyeColor in as many places as possible. */
@Deprecated
public enum EnumColor implements IStringSerializable {
BLACK,
RED,
GREEN,
BROWN,
BLUE,
PURPLE,
CYAN,
LIGHT_GRAY,
GRAY,
PINK,
LIME,
YELLOW,
LIGHT_BLUE,
MAGENTA,
ORANGE,
WHITE;
public static final EnumColor[] VALUES = values();
public static final String[] DYES = { "dyeBlack", "dyeRed", "dyeGreen", "dyeBrown", "dyeBlue", "dyePurple", "dyeCyan", "dyeLightGray", "dyeGray",
"dyePink", "dyeLime", "dyeYellow", "dyeLightBlue", "dyeMagenta", "dyeOrange", "dyeWhite" };
public static final String[] NAMES = { "Black", "Red", "Green", "Brown", "Blue", "Purple", "Cyan", "LightGray", "Gray", "Pink", "Lime", "Yellow",
"LightBlue", "Magenta", "Orange", "White" };
public static final int[] DARK_HEX = { 0x2D2D2D, 0xA33835, 0x394C1E, 0x5C3A24, 0x3441A2, 0x843FBF, 0x36809E, 0x888888, 0x444444, 0xE585A0,
0x3FAA36, 0xCFC231, 0x7F9AD1, 0xFF64FF, 0xFF6A00, 0xFFFFFF };
public static final int[] LIGHT_HEX = { 0x181414, 0xBE2B27, 0x007F0E, 0x89502D, 0x253193, 0x7e34bf, 0x299799, 0xa0a7a7, 0x7A7A7A, 0xD97199,
0x39D52E, 0xFFD91C, 0x66AAFF, 0xD943C6, 0xEA7835, 0xe4e4e4 };
@SideOnly(Side.CLIENT)
private static ResourceLocation iconSheet;
@SideOnly(Side.CLIENT)
private static TextureAtlasSprite[] brushSprites;
public int getDarkHex() {
return DARK_HEX[ordinal()];
}
public int getLightHex() {
return LIGHT_HEX[ordinal()];
}
public static EnumColor fromId(int id) {
if (id < 0 || id >= VALUES.length) {
return WHITE;
}
return VALUES[id];
}
public static EnumColor fromDye(String dyeTag) {
for (int id = 0; id < DYES.length; id++) {
if (DYES[id].equals(dyeTag)) {
return VALUES[id];
}
}
return null;
}
public static EnumColor fromName(String name) {
for (int id = 0; id < NAMES.length; id++) {
if (NAMES[id].equals(name)) {
return VALUES[id];
}
}
return null;
}
public static EnumColor getRand() {
return VALUES[new Random().nextInt(VALUES.length)];
}
public EnumColor getNext() {
EnumColor next = VALUES[(ordinal() + 1) % VALUES.length];
return next;
}
public EnumColor getPrevious() {
EnumColor previous = VALUES[(ordinal() + VALUES.length - 1) % VALUES.length];
return previous;
}
public EnumColor inverse() {
return EnumColor.VALUES[15 - ordinal()];
}
public String getTag() {
return "color." + name().replace("_", ".").toLowerCase(Locale.ENGLISH);
}
public String getBasicTag() {
return name().replace("_", ".").toLowerCase(Locale.ENGLISH);
}
@Nonnull
@Override
public String getName() {
return NAMES[ordinal()];
}
public String getLocalizedName() {
return I18n.translateToLocal(getTag());
}
public String getDye() {
return DYES[ordinal()];
}
@Override
public String toString() {
String s = name().replace("_", " ");
String[] words = s.split(" ");
StringBuilder b = new StringBuilder();
for (String word : words) {
b.append(word.charAt(0)).append(word.substring(1).toLowerCase(Locale.ENGLISH)).append(" ");
}
return b.toString().trim();
}
@SideOnly(Side.CLIENT)
public static void registerSprites(TextureAtlasSprite[] sprites) {
brushSprites = sprites;
}
@SideOnly(Side.CLIENT)
public TextureAtlasSprite getSprite() {
return brushSprites[ordinal()];
}
}
@@ -1,118 +0,0 @@
package buildcraft.api.core;
import java.util.Locale;
import java.util.Map;
import com.google.common.collect.Maps;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTPrimitive;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IStringSerializable;
import io.netty.buffer.ByteBuf;
public enum EnumPipePart implements IStringSerializable,INetworkLoadable_BC8<EnumPipePart> {
DOWN(EnumFacing.DOWN),
UP(EnumFacing.UP),
NORTH(EnumFacing.NORTH),
SOUTH(EnumFacing.SOUTH),
WEST(EnumFacing.WEST),
EAST(EnumFacing.EAST),
/** CENTER, UNKNOWN and ALL are all valid uses of this constant. */
CENTER(null);
private static final Map<EnumFacing, EnumPipePart> facingMap = Maps.newEnumMap(EnumFacing.class);
private static final Map<String, EnumPipePart> nameMap = Maps.newHashMap();
private static final int MAX_VALUES = values().length;
public final EnumFacing face;
static {
for (EnumPipePart part : values()) {
nameMap.put(part.name(), part);
if (part.face != null) facingMap.put(part.face, part);
}
}
public static EnumPipePart fromFacing(EnumFacing face) {
if (face == null) return EnumPipePart.CENTER;
return facingMap.get(face);
}
public static EnumPipePart[] validFaces() {
return new EnumPipePart[] { DOWN, UP, NORTH, SOUTH, WEST, EAST };
}
public static EnumPipePart fromMeta(int meta) {
if (meta < 0 || meta >= MAX_VALUES) return EnumPipePart.CENTER;
return values()[meta];
}
private EnumPipePart(EnumFacing face) {
this.face = face;
}
public int getIndex() {
if (face == null) return 6;
return face.getIndex();
}
@Override
public String getName() {
return name().toLowerCase(Locale.ROOT);
}
public EnumPipePart next() {
switch (this) {
case DOWN:
return EAST;
case EAST:
return NORTH;
case NORTH:
return SOUTH;
case SOUTH:
return UP;
case UP:
return WEST;
case WEST:
return DOWN;
default:
return DOWN;
}
}
public EnumPipePart opposite() {
if (this == CENTER) return CENTER;
return fromFacing(face.getOpposite());
}
public static EnumPipePart readFromNBT(NBTBase base) {
if (base == null) return CENTER;
if (base instanceof NBTTagString) {
NBTTagString nbtString = (NBTTagString) base;
String string = nbtString.getString();
return nameMap.containsKey(string) ? nameMap.get(string) : CENTER;
} else {
byte ord = ((NBTPrimitive) base).getByte();
if (ord < 0 || ord > 6) return CENTER;
return values()[ord];
}
}
public NBTBase writeToNBT() {
return new NBTTagString(name());
}
@Override
public EnumPipePart readFromByteBuf(ByteBuf buf) {
byte ord = buf.readByte();
return fromMeta(ord);
}
@Override
public void writeToByteBuf(ByteBuf buf) {
buf.writeByte(ordinal());
}
}
@@ -1,17 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import net.minecraft.util.math.BlockPos;
/** To be implemented by TileEntities able to provide a square area on the world, typically BuildCraft markers. */
public interface IAreaProvider {
BlockPos min();
BlockPos max();
/** Remove from the world all objects used to define the area. */
void removeFromWorld();
}
@@ -1,20 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import net.minecraft.util.math.BlockPos;
public interface IBox extends IZone {
IBox expand(int amount);
IBox contract(int amount);
BlockPos min();
BlockPos max();
void createLaserData();
}
@@ -1,7 +0,0 @@
package buildcraft.api.core;
import net.minecraftforge.common.config.Property;
public interface IBuildCraftMod {
Property getOption(String name);
}
@@ -1,14 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import java.lang.ref.WeakReference;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.WorldServer;
public interface ICoreProxy {
WeakReference<EntityPlayer> getBuildCraftPlayer(WorldServer world);
}
@@ -1,13 +0,0 @@
package buildcraft.api.core;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IIconProvider {
public TextureAtlasSprite getIcon(int iconIndex);
@SideOnly(Side.CLIENT)
public void registerIcons(TextureMap iconRegister);
}
@@ -1,26 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import net.minecraft.item.ItemStack;
public interface IInvSlot {
/** Returns the slot number of the underlying Inventory.
*
* @return the slot number */
int getIndex();
boolean canPutStackInSlot(ItemStack stack);
boolean canTakeStackFromSlot(ItemStack stack);
boolean isItemValidForSlot(ItemStack stack);
ItemStack decreaseStackInSlot(int amount);
ItemStack getStackInSlot();
void setStackInSlot(ItemStack stack);
}
@@ -1,14 +0,0 @@
package buildcraft.api.core;
import net.minecraft.nbt.NBTBase;
/** @param <T> The type that will be loaded from and saved too. This essentially allows Immutable objects to be safely
* loaded without helper methods everywhere. However you are allowed to return this if you are a mutable
* object */
public interface INBTLoadable_BC8<T> {
/** @return An object that has the properties loaded. WARNIG! This might be the same object as the one this method
* was called on! (You should always replace the object you have stored with whatever this returns) */
T readFromNBT(NBTBase nbt);
NBTBase writeToNBT();
}
@@ -1,12 +0,0 @@
package buildcraft.api.core;
import net.minecraft.nbt.NBTTagCompound;
/** Use {@link INBTLoadable_BC8} instead of this, as this gives you more control over what NBT goes where, and what
* objects are allowed to do. */
@Deprecated
public interface INBTStoreable {
void readFromNBT(NBTTagCompound tag);
void writeToNBT(NBTTagCompound tag);
}
@@ -1,9 +0,0 @@
package buildcraft.api.core;
import io.netty.buffer.ByteBuf;
public interface INetworkLoadable_BC8<T> {
T readFromByteBuf(ByteBuf buf);
void writeToByteBuf(ByteBuf buf);
}
@@ -1,15 +0,0 @@
package buildcraft.api.core;
import java.util.List;
import net.minecraft.util.math.BlockPos;
/** To be implemented by TileEntities able to provide a path on the world, typically BuildCraft path markers. */
public interface IPathProvider {
List<BlockPos> getPath();
/**
* Remove from the world all objects used to define the path.
*/
void removeFromWorld();
}
@@ -1,21 +0,0 @@
/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public License 1.0, or MMPL. Please check the contents
* of the license located in http://www.mod-buildcraft.com/MMPL-1.0.txt */
package buildcraft.api.core;
import io.netty.buffer.ByteBuf;
/** Use {@link INetworkLoadable_BC8} instead, as that gives you more control over how you use objects */
@Deprecated
public interface ISerializable {
/** Serializes the state to the stream
*
* @param data */
void writeData(ByteBuf data);
/** Deserializes the state from the stream
*
* @param data */
void readData(ByteBuf data);
}
@@ -1,14 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface IWorldProperty {
boolean get(World world, BlockPos pos);
void clear();
}
@@ -1,26 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import java.util.Random;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
public interface IZone {
/** Returns the smallest possible distance that the index would have to be changed by in order for
* {@link #contains(Vec3d)} to return true. If the position is already inside then this will return 0 */
double distanceTo(BlockPos index);
/** Returns {@link #distanceTo(BlockPos)} but squared. Usually this will be quicker to calculate. */
double distanceToSquared(BlockPos index);
/** Returns true if the point is enclosed by this zone, such that none of the coordinates lie outside the range
* specified by this zone. */
boolean contains(Vec3d point);
/** Gets a random position that {@link #contains(Vec3d)} will return true. */
BlockPos getRandomBlockPos(Random rand);
}
@@ -1,39 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import java.util.Arrays;
public final class JavaTools {
private JavaTools() {
}
public static <T> T[] concat(T[] first, T[] second) {
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
public static int[] concat(int[] first, int[] second) {
int[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
public static float[] concat(float[] first, float[] second) {
float[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
public static String surroundWithQuotes(String stringToSurroundWithQuotes) {
return String.format("\"%s\"", stringToSurroundWithQuotes);
}
public static String stripSurroundingQuotes(String stringToStripQuotes) {
return stringToStripQuotes.replaceAll("^\"|\"$", "");
}
}
@@ -1,68 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import net.minecraft.world.World;
public class SafeTimeTracker {
private long lastMark = Long.MIN_VALUE;
private long duration = -1;
private long randomRange = 0;
private long lastRandomDelay = 0;
private long internalDelay = 1;
/** Only use this if the delay time changes (say, if you use this to determine when a refining should be complete */
public SafeTimeTracker() {
}
public SafeTimeTracker(long delay) {
internalDelay = delay;
}
/** In many situations, it is a bad idea to have all objects of the same kind to be waiting for the exact same
* amount of time, as that can lead to some situation where they're all synchronized and got to work all at the same
* time. When created with a random range, the mark that is set when reaching the expect delay will be added with a
* random number between [0, range[, meaning that the event will take between 0 and range more tick to run. */
public SafeTimeTracker(long delay, long random) {
internalDelay = delay;
randomRange = random;
}
public boolean markTimeIfDelay(World world) {
return markTimeIfDelay(world, internalDelay);
}
/** Return true if a given delay has passed since last time marked was called successfully. */
public boolean markTimeIfDelay(World world, long delay) {
if (world == null) {
return false;
}
long currentTime = world.getTotalWorldTime();
if (currentTime < lastMark) {
lastMark = currentTime;
return false;
} else if (lastMark + delay + lastRandomDelay <= currentTime) {
duration = currentTime - lastMark;
lastMark = currentTime;
lastRandomDelay = (int) (Math.random() * randomRange);
return true;
} else {
return false;
}
}
public long durationOfLastDelay() {
return duration > 0 ? duration : 0;
}
public void markTime(World world) {
lastMark = world.getTotalWorldTime();
}
}
@@ -1,126 +0,0 @@
/** Copyright (c) 2011-2015, 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.core;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
/** This class is used whenever stacks needs to be stored as keys. */
public final class StackKey {
public final ItemStack stack;
public final FluidStack fluidStack;
public StackKey(FluidStack fluidStack) {
this(null, fluidStack);
}
public StackKey(ItemStack stack) {
this(stack, null);
}
public StackKey(ItemStack stack, FluidStack fluidStack) {
this.stack = stack;
this.fluidStack = fluidStack;
}
public static StackKey stack(Item item, int amount, int damage) {
return new StackKey(new ItemStack(item, amount, damage));
}
public static StackKey stack(Block block, int amount, int damage) {
return new StackKey(new ItemStack(block, amount, damage));
}
public static StackKey stack(Item item) {
return new StackKey(new ItemStack(item, 1, 0));
}
public static StackKey stack(Block block) {
return new StackKey(new ItemStack(block, 1, 0));
}
public static StackKey stack(ItemStack itemStack) {
return new StackKey(itemStack);
}
public static StackKey fluid(Fluid fluid, int amount) {
return new StackKey(new FluidStack(fluid, amount));
}
public static StackKey fluid(Fluid fluid) {
return new StackKey(new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME));
}
public static StackKey fluid(FluidStack fluidStack) {
return new StackKey(fluidStack);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || o.getClass() != StackKey.class) {
return false;
}
StackKey k = (StackKey) o;
if ((stack == null ^ k.stack == null) || (fluidStack == null ^ k.fluidStack == null)) {
return false;
}
if (stack != null) {
if (stack.getItem() != k.stack.getItem() || stack.getHasSubtypes() && stack.getItemDamage() != k.stack.getItemDamage() || !objectsEqual(
stack.getTagCompound(), k.stack.getTagCompound())) {
return false;
}
}
if (fluidStack != null) {
if (fluidStack.getFluid() != k.fluidStack.getFluid() || fluidStack.amount != k.fluidStack.amount || !objectsEqual(
fluidStack.tag, k.fluidStack.tag)) {
return false;
}
}
return true;
}
@Override
public int hashCode() {
int result = 7;
if (stack != null) {
result = 31 * result + stack.getItem().hashCode();
result = 31 * result + stack.getItemDamage();
result = 31 * result + objectHashCode(stack.getTagCompound());
}
result = 31 * result + 7;
if (fluidStack != null) {
result = 31 * result + FluidRegistry.getFluidID(fluidStack.getFluid());
result = 31 * result + fluidStack.amount;
result = 31 * result + objectHashCode(fluidStack.tag);
}
return result;
}
private boolean objectsEqual(Object o1, Object o2) {
if (o1 == null && o2 == null) {
return true;
} else if (o1 == null || o2 == null) {
return false;
} else {
return o1.equals(o2);
}
}
private int objectHashCode(Object o) {
return o != null ? o.hashCode() : 0;
}
public StackKey copy() {
return new StackKey(stack != null ? stack.copy() : null, fluidStack != null ? fluidStack.copy() : null);
}
}
@@ -1,10 +0,0 @@
/** Copyright (c) 2011-2015, 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 = "2.0", owner = "BuildCraft|Core", provides = "BuildCraftAPI|core")
package buildcraft.api.core;
import net.minecraftforge.fml.common.API;
@@ -1,27 +0,0 @@
/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public License 1.0, or MMPL. Please check the contents
* of the license located in http://www.mod-buildcraft.com/MMPL-1.0.txt */
package buildcraft.api.core.render;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
/* This interface designates a block as a state machine responsible for culling For implementation details look into
* FakeBlock implementation */
public interface ICullable {
// Side Rendering States
// They are used to effectively cull obstructed sides while processing facades.
// Make sure your implementation is correct otherwise expect FPS drop
void setRenderSide(EnumFacing side, boolean render);
void setRenderAllSides();
boolean shouldSideBeRendered(IBlockAccess blockAccess, BlockPos pos, int side);
void setRenderMask(int mask);
}
@@ -1,7 +0,0 @@
package buildcraft.api.core.render;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
public interface ITextureStateManager {
void set(TextureAtlasSprite icon);
}
@@ -1,18 +0,0 @@
/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public License 1.0, or MMPL. Please check the contents
* of the license located in http://www.mod-buildcraft.com/MMPL-1.0.txt */
package buildcraft.api.core.render;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
public interface ITextureStates extends ICullable {
ITextureStateManager getTextureState();
TextureAtlasSprite getIcon(int side, int meta);
Block getBlock();
}
@@ -1,54 +0,0 @@
/** Copyright (c) 2011-2015, 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.gates;
import java.util.List;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import buildcraft.api.statements.IActionInternal;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.ITriggerInternal;
public abstract class GateExpansionController {
public final IGateExpansion type;
public final TileEntity pipeTile;
public GateExpansionController(IGateExpansion type, TileEntity pipeTile) {
this.pipeTile = pipeTile;
this.type = type;
}
public IGateExpansion getType() {
return type;
}
public boolean isActive() {
return false;
}
public void tick(IGate gate) {}
public void startResolution() {}
public boolean resolveAction(IStatement action, int count) {
return false;
}
public boolean isTriggerActive(IStatement trigger, IStatementParameter[] parameters) {
return false;
}
public void addTriggers(List<ITriggerInternal> list) {}
public void addActions(List<IActionInternal> list) {}
public void writeToNBT(NBTTagCompound nbt) {}
public void readFromNBT(NBTTagCompound nbt) {}
}
@@ -1,61 +0,0 @@
/** Copyright (c) 2011-2015, 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.gates;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.google.common.collect.HashBiMap;
import net.minecraft.item.ItemStack;
public final class GateExpansions {
private static final Map<String, IGateExpansion> expansions = new HashMap<String, IGateExpansion>();
private static final ArrayList<IGateExpansion> expansionIDs = new ArrayList<IGateExpansion>();
private static final Map<IGateExpansion, ItemStack> recipes = HashBiMap.create();
private GateExpansions() {}
public static void registerExpansion(IGateExpansion expansion) {
registerExpansion(expansion.getUniqueIdentifier(), expansion);
}
public static void registerExpansion(String identifier, IGateExpansion expansion) {
expansions.put(identifier, expansion);
expansionIDs.add(expansion);
}
public static void registerExpansion(IGateExpansion expansion, ItemStack addedRecipe) {
registerExpansion(expansion.getUniqueIdentifier(), expansion);
recipes.put(expansion, addedRecipe);
}
public static IGateExpansion getExpansion(String identifier) {
return expansions.get(identifier);
}
public static Set<IGateExpansion> getExpansions() {
Set<IGateExpansion> set = new HashSet<IGateExpansion>();
set.addAll(expansionIDs);
return set;
}
public static Map<IGateExpansion, ItemStack> getRecipesForPostInit() {
return recipes;
}
// The code below is used by networking.
public static IGateExpansion getExpansionByID(int id) {
return expansionIDs.get(id);
}
public static int getExpansionID(IGateExpansion expansion) {
return expansionIDs.indexOf(expansion);
}
}
@@ -1,30 +0,0 @@
/** Copyright (c) 2011-2015, 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.gates;
import java.util.List;
import buildcraft.api.statements.IStatement;
import buildcraft.api.statements.IStatementParameter;
import buildcraft.api.statements.StatementSlot;
import buildcraft.api.statements.containers.ISidedStatementContainer;
import buildcraft.api.transport.IPipe;
public interface IGate extends ISidedStatementContainer {
@Deprecated
void setPulsing(boolean pulse);
IPipe getPipe();
List<IStatement> getTriggers();
List<IStatement> getActions();
List<StatementSlot> getActiveActions();
List<IStatementParameter> getTriggerParameters(int index);
List<IStatementParameter> getActionParameters(int index);
}
@@ -1,34 +0,0 @@
/** Copyright (c) 2011-2015, 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.gates;
import java.util.List;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IGateExpansion {
String getUniqueIdentifier();
String getDisplayName();
GateExpansionController makeController(TileEntity pipeTile);
@SideOnly(Side.CLIENT)
void textureStitch(TextureMap map);
@SideOnly(Side.CLIENT)
IGateStaticRenderState getRenderState();
public interface IGateStaticRenderState {
List<BakedQuad> bake(VertexFormat format);
}
}
@@ -1,8 +0,0 @@
/** Copyright (c) 2011-2015, 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 = "4.1", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|gates")
package buildcraft.api.gates;
import net.minecraftforge.fml.common.API;
@@ -1,9 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
public class ActionState {
}
@@ -1,12 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
public interface IActionExternal extends IStatement {
void actionActivate(TileEntity target, EnumFacing side, IStatementContainer source, IStatementParameter[] parameters);
}
@@ -1,11 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
public interface IActionInternal extends IStatement {
void actionActivate(IStatementContainer source, IStatementParameter[] parameters);
}
@@ -1,19 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import java.util.Collection;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
public interface IActionProvider {
/** Returns the list of actions that are available from the statement container holding the gate. */
Collection<IActionInternal> getInternalActions(IStatementContainer container);
/** Returns the list of actions available to a gate next to the given block. */
Collection<IActionExternal> getExternalActions(EnumFacing side, TileEntity tile);
}
@@ -1,9 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
public interface IActionReceptor {
void actionActivated(IStatement statement, IStatementParameter[] parameters);
}
@@ -1,13 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import java.util.List;
public interface IOverrideDefaultStatements {
List<ITriggerExternal> overrideTriggers();
List<IActionExternal> overrideActions();
}
@@ -1,36 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IStatement {
/** Every statement needs a unique tag, it should be in the format of "&lt;modid&gt;:&lt;name&gt;.
*
* @return the unique id */
String getUniqueTag();
/** Return the maximum number of parameter this statement can have, 0 if none. */
int maxParameters();
/** Return the minimum number of parameter this statement can have, 0 if none. */
int minParameters();
/** Return the statement description in the UI */
String getDescription();
/** Create parameters for the statement. */
IStatementParameter createParameter(int index);
/** This returns the statement after a left rotation. Used in particular in blueprints orientation. */
IStatement rotateLeft();
/** This should return the icon for this statement, suitable for rending directly into a GUI. This should refer to a
* texture on the map block texture map. */
@SideOnly(Side.CLIENT)
TextureAtlasSprite getGuiSprite();
}
@@ -1,12 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import net.minecraft.tileentity.TileEntity;
/** This is implemented by objects containing Statements, such as Gates and TileEntities. */
public interface IStatementContainer {
TileEntity getTile();
}
@@ -1,36 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public interface IStatementParameter {
/** Every parameter needs a unique tag, it should be in the format of "&lt;modid&gt;:&lt;name&gt;".
*
* @return the unique id */
String getUniqueTag();
@SideOnly(Side.CLIENT)
TextureAtlasSprite getIcon();
ItemStack getItemStack();
/** Return the parameter description in the UI */
String getDescription();
void onClick(IStatementContainer source, IStatement stmt, ItemStack stack, StatementMouseClick mouse);
void readFromNBT(NBTTagCompound compound);
void writeToNBT(NBTTagCompound compound);
/** This returns the parameter after a left rotation. Used in particular in blueprints orientation. */
IStatementParameter rotateLeft();
}
@@ -1,14 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
public interface ITriggerExternal extends IStatement {
boolean isTriggerActive(TileEntity target, EnumFacing side, IStatementContainer source, IStatementParameter[] parameters);
}
@@ -1,16 +0,0 @@
package buildcraft.api.statements;
import net.minecraft.util.EnumFacing;
/** This interface can be used by tiles to override external trigger behaviour.
*
* Please use wisely. */
public interface ITriggerExternalOverride {
public enum Result {
TRUE,
FALSE,
IGNORE
}
Result override(EnumFacing side, IStatementContainer source, IStatementParameter[] parameters);
}
@@ -1,11 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
public interface ITriggerInternal extends IStatement {
boolean isTriggerActive(IStatementContainer source, IStatementParameter[] parameters);
}
@@ -1,20 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import java.util.Collection;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
public interface ITriggerProvider {
/** Returns the list of triggers that are available from the object holding the gate. */
Collection<ITriggerInternal> getInternalTriggers(IStatementContainer container);
/** Returns the list of triggers available to a gate next to the given block. */
Collection<ITriggerExternal> getExternalTriggers(EnumFacing side, TileEntity tile);
}
@@ -1,177 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import buildcraft.api.core.BCLog;
public final class StatementManager {
public static Map<String, IStatement> statements = new HashMap<String, IStatement>();
public static Map<String, Class<? extends IStatementParameter>> parameters = new HashMap<String, Class<? extends IStatementParameter>>();
private static List<ITriggerProvider> triggerProviders = new LinkedList<ITriggerProvider>();
private static List<IActionProvider> actionProviders = new LinkedList<IActionProvider>();
/** Deactivate constructor */
private StatementManager() {}
public static void registerTriggerProvider(ITriggerProvider provider) {
if (provider != null && !triggerProviders.contains(provider)) {
triggerProviders.add(provider);
}
}
public static void registerActionProvider(IActionProvider provider) {
if (provider != null && !actionProviders.contains(provider)) {
actionProviders.add(provider);
}
}
public static void registerStatement(IStatement statement) {
statements.put(statement.getUniqueTag(), statement);
}
public static void registerParameterClass(Class<? extends IStatementParameter> param) {
parameters.put(createParameter(param).getUniqueTag(), param);
}
@Deprecated
public static void registerParameterClass(String name, Class<? extends IStatementParameter> param) {
parameters.put(name, param);
}
public static List<ITriggerExternal> getExternalTriggers(EnumFacing side, TileEntity entity) {
List<ITriggerExternal> result;
if (entity instanceof IOverrideDefaultStatements) {
result = ((IOverrideDefaultStatements) entity).overrideTriggers();
if (result != null) {
return result;
}
}
result = new LinkedList<ITriggerExternal>();
for (ITriggerProvider provider : triggerProviders) {
Collection<ITriggerExternal> toAdd = provider.getExternalTriggers(side, entity);
if (toAdd != null) {
for (ITriggerExternal t : toAdd) {
if (!result.contains(t)) {
result.add(t);
}
}
}
}
return result;
}
public static List<IActionExternal> getExternalActions(EnumFacing side, TileEntity entity) {
List<IActionExternal> result = new LinkedList<IActionExternal>();
if (entity instanceof IOverrideDefaultStatements) {
result = ((IOverrideDefaultStatements) entity).overrideActions();
if (result != null) {
return result;
}
}
result = new LinkedList<IActionExternal>();
for (IActionProvider provider : actionProviders) {
Collection<IActionExternal> toAdd = provider.getExternalActions(side, entity);
if (toAdd != null) {
for (IActionExternal t : toAdd) {
if (!result.contains(t)) {
result.add(t);
}
}
}
}
return result;
}
public static List<ITriggerInternal> getInternalTriggers(IStatementContainer container) {
List<ITriggerInternal> result = new LinkedList<ITriggerInternal>();
for (ITriggerProvider provider : triggerProviders) {
Collection<ITriggerInternal> toAdd = provider.getInternalTriggers(container);
if (toAdd != null) {
for (ITriggerInternal t : toAdd) {
if (!result.contains(t)) {
result.add(t);
}
}
}
}
return result;
}
public static List<IActionInternal> getInternalActions(IStatementContainer container) {
List<IActionInternal> result = new LinkedList<IActionInternal>();
for (IActionProvider provider : actionProviders) {
Collection<IActionInternal> toAdd = provider.getInternalActions(container);
if (toAdd != null) {
for (IActionInternal t : toAdd) {
if (!result.contains(t)) {
result.add(t);
}
}
}
}
return result;
}
public static IStatementParameter createParameter(String kind) {
return createParameter(parameters.get(kind));
}
private static IStatementParameter createParameter(Class<? extends IStatementParameter> param) {
try {
return param.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Error error) {
BCLog.logErrorAPI(error, IStatementParameter.class);
throw error;
}
return null;
}
// /**
// * Generally, this function should be called by every mod implementing
// * the Statements API ***as a container*** (that is, adding its own gates)
// * on the client side from a given Item of choice.
// */
// @SideOnly(Side.CLIENT)
// public static void registerIcons(TextureAtlasSpriteRegister register) {
// for (IStatement statement : statements.values()) {
// statement.registerIcons(register);
// }
//
// for (Class<? extends IStatementParameter> parameter : parameters.values()) {
// createParameter(parameter).registerIcons(register);
// }
// }
}
@@ -1,23 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
public final class StatementMouseClick {
private int button;
private boolean shift;
public StatementMouseClick(int button, boolean shift) {
this.button = button;
this.shift = shift;
}
public boolean isShift() {
return shift;
}
public int getButton() {
return button;
}
}
@@ -1,83 +0,0 @@
/** Copyright (c) 2011-2015, 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.statements;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
public class StatementParameterItemStack implements IStatementParameter {
protected ItemStack stack;
@Override
public TextureAtlasSprite getIcon() {
return null;
}
@Override
public ItemStack getItemStack() {
return stack;
}
@Override
public void onClick(IStatementContainer source, IStatement stmt, ItemStack stack, StatementMouseClick mouse) {
if (stack != null) {
this.stack = stack.copy();
this.stack.stackSize = 1;
} else {
this.stack = null;
}
}
@Override
public void writeToNBT(NBTTagCompound compound) {
if (stack != null) {
NBTTagCompound tagCompound = new NBTTagCompound();
stack.writeToNBT(tagCompound);
compound.setTag("stack", tagCompound);
}
}
@Override
public void readFromNBT(NBTTagCompound compound) {
stack = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("stack"));
}
@Override
public boolean equals(Object object) {
if (object instanceof StatementParameterItemStack) {
StatementParameterItemStack param = (StatementParameterItemStack) object;
return ItemStack.areItemStacksEqual(stack, param.stack) && ItemStack.areItemStackTagsEqual(stack, param.stack);
} else {
return false;
}
}
@Override
public String getDescription() {
if (stack != null) {
return stack.getDisplayName();
} else {
return "";
}
}
@Override
public String getUniqueTag() {
return "buildcraft:stack";
}
// @Override
// public void registerIcons(TextureAtlasSpriteRegister iconRegister) {
//
// }
@Override
public IStatementParameter rotateLeft() {
return this;
}
}
@@ -1,32 +0,0 @@
/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public License 1.0, or MMPL. Please check the contents
* of the license located in http://www.mod-buildcraft.com/MMPL-1.0.txt */
package buildcraft.api.statements;
public class StatementSlot {
public IStatement statement;
public IStatementParameter[] parameters;
@Override
public boolean equals(Object o) {
if (o == null || !(o instanceof StatementSlot)) {
return false;
}
StatementSlot s = (StatementSlot) o;
if (s.statement != statement || parameters.length != s.parameters.length) {
return false;
}
for (int i = 0; i < parameters.length; i++) {
IStatementParameter p1 = parameters[i];
IStatementParameter p2 = s.parameters[i];
if (p1 == null && p2 != null) {
return false;
}
if (!(p1.equals(p2))) {
return false;
}
}
return true;
}
}
@@ -1,17 +0,0 @@
package buildcraft.api.statements.containers;
import net.minecraft.util.EnumFacing;
public interface IRedstoneStatementContainer {
/** Get the redstone input from a given side.
*
* @param side The side - use "UNKNOWN" for maximum input.
* @return The redstone input, from 0 to 15. */
int getRedstoneInput(EnumFacing side);
/** Set the redstone input for a given side.
*
* @param side The side - use "UNKNOWN" for all sides.
* @return Whether the set was successful. */
boolean setRedstoneOutput(EnumFacing side, int value);
}
@@ -1,10 +0,0 @@
package buildcraft.api.statements.containers;
import net.minecraft.util.EnumFacing;
import buildcraft.api.statements.IStatementContainer;
/** Created by asie on 3/14/15. */
public interface ISidedStatementContainer extends IStatementContainer {
EnumFacing getSide();
}
@@ -1,8 +0,0 @@
/** Copyright (c) 2011-2015, 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.1", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|statements")
package buildcraft.api.statements;
import net.minecraftforge.fml.common.API;
@@ -1,12 +0,0 @@
package buildcraft.api.transport;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
public interface ICustomPipeConnection {
/** @return How long the connecting pipe should extend for. Values less than -4/16 indicate that the pipe will not
* connect at all, and will render as it it was not connected. */
public float getExtension(World world, BlockPos pos, EnumFacing face, IBlockState state);
}
@@ -1,18 +0,0 @@
package buildcraft.api.transport;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
public interface IInjectable {
boolean canInjectItems(EnumFacing from);
/** Offers an ItemStack for 3addition to the pipe. Will be rejected if the pipe doesn't accept items from that side.
*
* @param stack ItemStack offered for addition. Do not manipulate this!
* @param doAdd If false no actual addition should take place. Implementors should simulate.
* @param from Orientation the ItemStack is offered from.
* @param color The color of the item to be added to the pipe, or null for no color.
* @return Amount of items used from the passed stack. */
int injectItem(ItemStack stack, boolean doAdd, EnumFacing from, EnumDyeColor color);
}
@@ -1,11 +0,0 @@
/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public License 1.0, or MMPL. Please check the contents
* of the license located in http://www.mod-buildcraft.com/MMPL-1.0.txt */
package buildcraft.api.transport;
/** To be implemented by the real item pipe in Transport mod, but leaves knowledge for classes that do not have direct
* dependency on transport. */
public interface IItemPipe {
}
@@ -1,21 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import net.minecraft.util.EnumFacing;
import buildcraft.api.gates.IGate;
public interface IPipe {
IPipeTile getTile();
IGate getGate(EnumFacing side);
boolean hasGate(EnumFacing side);
boolean isWired(PipeWire wire);
boolean isWireActive(PipeWire wire);
}
@@ -1,24 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import net.minecraft.util.EnumFacing;
public interface IPipeConnection {
enum ConnectOverride {
CONNECT,
DISCONNECT,
DEFAULT
}
/** Allows you to override pipe connection logic.
*
* @param type
* @param with
* @return CONNECT to force a connection, DISCONNECT to force no connection, and DEFAULT to let the pipe decide. */
ConnectOverride overridePipeConnection(IPipeTile.PipeType type, EnumFacing with);
}
@@ -1,51 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import net.minecraft.block.Block;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import buildcraft.api.transport.pluggable.PipePluggable;
public interface IPipeTile extends IInjectable {
enum PipeType {
ITEM,
FLUID,
POWER,
STRUCTURE
}
PipeType getPipeType();
World getWorldBC();
/** True if the pipe is connected to the block/pipe in the specific direction
*
* @param with
* @return true if connect */
boolean isPipeConnected(EnumFacing with);
Block getNeighborBlock(EnumFacing dir);
TileEntity getNeighborTile(EnumFacing dir);
IPipe getNeighborPipe(EnumFacing dir);
IPipe getPipe();
int getPipeColor();
PipePluggable getPipePluggable(EnumFacing direction); // Now in IPluggableProvider
boolean hasPipePluggable(EnumFacing direction); // Now in IPluggableProvider
boolean hasBlockingPluggable(EnumFacing direction);
void scheduleNeighborChange();
void scheduleRenderUpdate();
}
@@ -1,14 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
public interface IStripesActivator {
void sendItem(ItemStack itemStack, EnumFacing direction);
void dropItem(ItemStack itemStack, EnumFacing direction);
}
@@ -1,24 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
public interface IStripesHandler {
enum StripesHandlerType {
ITEM_USE,
BLOCK_BREAK
}
StripesHandlerType getType();
boolean shouldHandle(ItemStack stack);
boolean handle(World world, BlockPos pos, EnumFacing direction, ItemStack stack, EntityPlayer player, IStripesActivator activator);
}
@@ -1,9 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import cofh.api.energy.IEnergyHandler;
public interface IStripesPipe extends IPipe, IStripesActivator, IEnergyHandler {}
@@ -1,48 +0,0 @@
package buildcraft.api.transport;
import java.util.Map;
import com.google.common.collect.Maps;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
/** Use this class to register blocks with custom block sizes so that pipes can connect to them properly. Note that you
* do not need to register a custom pipe connection if your block implements ICustomPipeConnection. The registered
* version does not override your own implementation. */
public final class PipeConnectionAPI {
private static final Map<Block, ICustomPipeConnection> connections = Maps.newHashMap();
private static final ICustomPipeConnection NOTHING = new ICustomPipeConnection() {
@Override
public float getExtension(World world, BlockPos pos, EnumFacing face, IBlockState state) {
return 0;
}
};
/** Register a block with a custom connection. Useful if you don't own the block class or are adding it for some-one
*
* @param block The block instance
* @param connection The connection instance */
public static void registerConnection(Block block, ICustomPipeConnection connection) {
connections.put(block, connection);
}
public static void registerConnectionAsNothing(Block block) {
connections.put(block, NOTHING);
}
/** Gets the current custom connection that the block uses. Will be null if nothing has been set. */
public static ICustomPipeConnection getCustomConnection(Block block) {
if (block instanceof ICustomPipeConnection) {
return (ICustomPipeConnection) block;
}
ICustomPipeConnection connection = connections.get(block);
if (connection != null) {
return connection;
}
return null;
}
}
@@ -1,71 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import buildcraft.api.transport.pluggable.PipePluggable;
public abstract class PipeManager {
public static List<IStripesHandler> stripesHandlers = new ArrayList<IStripesHandler>();
public static ArrayList<Class<? extends PipePluggable>> pipePluggables = new ArrayList<Class<? extends PipePluggable>>();
private static Map<String, Class<? extends PipePluggable>> pipePluggableNames = new HashMap<String, Class<? extends PipePluggable>>();
private static Map<Class<? extends PipePluggable>, String> pipePluggableByNames = new HashMap<Class<? extends PipePluggable>, String>();
private static Map<IStripesHandler, Integer> stripesHandlerPriorities = new HashMap<IStripesHandler, Integer>();
@Deprecated
public static boolean canExtractItems(Object extractor, World world, BlockPos pos) {
return true;
}
@Deprecated
public static boolean canExtractFluids(Object extractor, World world, BlockPos pos) {
return true;
}
@Deprecated
public static void registerStripesHandler(IStripesHandler handler) {
registerStripesHandler(handler, 0);
}
/** Register a Stripes Pipe handler.
*
* @param handler The handler.
* @param priority The priority - 0 is normal, higher numbers have higher priority. */
public static void registerStripesHandler(IStripesHandler handler, int priority) {
stripesHandlers.add(handler);
stripesHandlerPriorities.put(handler, priority);
Collections.sort(stripesHandlers, new Comparator<IStripesHandler>() {
@Override
public int compare(IStripesHandler o1, IStripesHandler o2) {
return stripesHandlerPriorities.get(o2) - stripesHandlerPriorities.get(o1);
}
});
}
public static void registerPipePluggable(Class<? extends PipePluggable> pluggable, String name) {
pipePluggables.add(pluggable);
pipePluggableNames.put(name, pluggable);
pipePluggableByNames.put(pluggable, name);
}
public static Class<?> getPluggableByName(String pluggableName) {
return pipePluggableNames.get(pluggableName);
}
public static String getPluggableName(Class<? extends PipePluggable> aClass) {
return pipePluggableByNames.get(aClass);
}
}
@@ -1,73 +0,0 @@
/** Copyright (c) 2011-2015, 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.transport;
import java.util.Locale;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public enum PipeWire {
RED,
BLUE,
GREEN,
YELLOW;
public static Item item;
public static final PipeWire[] VALUES = values();
public PipeWire reverse() {
switch (this) {
case RED:
return YELLOW;
case BLUE:
return GREEN;
case GREEN:
return BLUE;
default:
return RED;
}
}
public String getTag() {
return name().toLowerCase(Locale.ENGLISH) + "PipeWire";
}
public String getColor() {
String name = this.toString().toLowerCase(Locale.ENGLISH);
char first = Character.toUpperCase(name.charAt(0));
return first + name.substring(1);
}
public ItemStack getStack() {
return getStack(1);
}
public ItemStack getStack(int qty) {
if (item == null) {
return null;
} else {
return new ItemStack(item, qty, ordinal());
}
}
public boolean isPipeWire(ItemStack stack) {
if (stack == null) {
return false;
} else if (stack.getItem() != item) {
return false;
} else {
return stack.getItemDamage() == ordinal();
}
}
public static PipeWire fromOrdinal(int ordinal) {
if (ordinal < 0 || ordinal >= VALUES.length) {
return RED;
} else {
return VALUES[ordinal];
}
}
}
@@ -1,8 +0,0 @@
/** Copyright (c) 2011-2015, 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 = "4.1", owner = "BuildCraftAPI|core", provides = "BuildCraftAPI|transport")
package buildcraft.api.transport;
import net.minecraftforge.fml.common.API;
@@ -1,7 +0,0 @@
package buildcraft.api.transport.pluggable;
import net.minecraft.util.EnumFacing;
public interface IConnectionMatrix {
boolean isConnected(EnumFacing face);
}
@@ -1,11 +0,0 @@
package buildcraft.api.transport.pluggable;
import net.minecraft.block.state.IBlockState;
public interface IFacadePluggable {
IBlockState getCurrentState();
boolean isTransparent();
boolean isHollow();
}
@@ -1,9 +0,0 @@
package buildcraft.api.transport.pluggable;
import net.minecraft.util.EnumFacing;
import buildcraft.api.transport.IPipe;
public interface IPipePluggableDynamicRenderer {
void renderDynamicPluggable(IPipe pipe, EnumFacing side, PipePluggable pipePluggable, double x, double y, double z);
}
@@ -1,10 +0,0 @@
package buildcraft.api.transport.pluggable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import buildcraft.api.transport.IPipe;
public interface IPipePluggableItem {
PipePluggable createPipePluggable(IPipe pipe, EnumFacing side, ItemStack stack);
}
@@ -1,9 +0,0 @@
package buildcraft.api.transport.pluggable;
import net.minecraft.util.EnumFacing;
public interface IPipePluggableState {
IConnectionMatrix getPluggableConnections();
PipePluggable getPluggable(EnumFacing face);
}
@@ -1,19 +0,0 @@
package buildcraft.api.transport.pluggable;
import java.util.List;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.util.EnumFacing;
import buildcraft.api.transport.IPipe;
public interface IPipePluggableStaticRenderer {
List<BakedQuad> bakeCutout(IPipeRenderState render, IPipePluggableState pluggableState, IPipe pipe, PipePluggable pluggable, EnumFacing face);
/** Use this if you need to render in the translucent pass. */
public interface Translucent extends IPipePluggableStaticRenderer {
/** For performance return a list that is as small as possible */
List<BakedQuad> bakeTranslucent(IPipeRenderState render, IPipePluggableState pluggableState, IPipe pipe, PipePluggable pluggable,
EnumFacing face);
}
}
@@ -1,5 +0,0 @@
package buildcraft.api.transport.pluggable;
public interface IPipeRenderState {
IConnectionMatrix getPipeConnectionMatrix();
}
Loaded 100 of 2516 files, more files were not shown because too many files have changed in this diff. Show more