118 lines
No EOL
5.2 KiB
JavaScript
118 lines
No EOL
5.2 KiB
JavaScript
/*
|
|
* This JavaScript file can be used to initialize your own solar panels.
|
|
* First off, all methods have return types (they are specified after the "=>")
|
|
* How-to: (or watch the tutorial https://youtu.be/WVr6-3E7lA8 ;3)
|
|
* 1. To create a new panel, you need to make a builder, call panel()=>SolarPanelBuilder to begin the builder chain.
|
|
* 2. Chain elements:
|
|
* - .name("yourname")=>SolarPanelBuilder // mandatory
|
|
* - .height(float)=>SolarPanelBuilder // optional, float value is between [0;1]
|
|
* - .generation("amount")=>SolarPanelBuilder // mandatory, pass the number as a string
|
|
* - .capacity("amount")=>SolarPanelBuilder // mandatory, pass the number as a string
|
|
* - .transfer("amount")=>SolarPanelBuilder // mandatory, pass the number as a string
|
|
* 3. At the end of the chain, call .build()=>SolarPanel (alternatively, .buildAndRegister()=>SolarPanel, to skip step #5)
|
|
* 4. Languages: call after build chain end (operate on panel), start language chain with .langBuilder()=>LanguageBuilder
|
|
* - .put("en_us", "Your Solar Panel Name")=>LanguageBuilder
|
|
* After that, call as many lang assigns as you want:
|
|
* - .put("lang", "Your Solar Panel Name")=>LanguageBuilder
|
|
* End chain with .build()=>SolarPanel
|
|
* 5. Recipes: call after build chain end (operate on panel), start recipe chain with .recipeBuilder()=>RecipeBuilder
|
|
* - .shape(string...)=>RecipeBuilder // Specify the needed string amount (1 string = 1 row)
|
|
* After you specified the recipe shape, bind all ingredients:
|
|
* - .bind('c', item("modid", "item_name"))=>RecipeBuilder
|
|
* End chain with .build(AMOUNT)=>SolarPanel // AMOUNT is the int value (0;64] of items in the recipe output, if omitted, will be defaulted to 1.
|
|
* 6. To register the panel, append .register()=>SolarPanel after ending the chain.
|
|
* 7. Texturing: (all textures are stored in "textures" folder)
|
|
* "yourname_base.png", optionally with "yourname_base.mcmeta" (for animations)
|
|
* "yourname_top.png", optionally with "yourname_top.mcmeta" (for animations)
|
|
*
|
|
* Additional methods & features:
|
|
* - isModLoaded("modid")=>boolean // returns if the specified mod is loaded. Could be useful for setting up mod-dependent solar panels.
|
|
* - you can have a line "import path.to.Class;" to avoid using Java.type("path.to.Class") stuff. Created outside of any functions, declares a new variable with the simple class name.
|
|
* - you can have a line "define a_key !value!" to make the compiler replace all a_key with !value! at runtime.
|
|
*/
|
|
|
|
define english "en_us"
|
|
|
|
var ourMaterial = false;
|
|
|
|
/** This function is called when mod is being constructed */
|
|
function init()
|
|
{
|
|
// Example: (textures are extracted in /textures/ by default), uncomment to try it out! (Requires game restart)
|
|
|
|
/* Comment Start
|
|
|
|
// You might need to use CraftTweaker or something else to make the material obtainable!
|
|
ourMaterial = newMaterial("example")
|
|
.langBuilder()
|
|
.put(english, "Example Material")
|
|
.build();
|
|
|
|
panel()
|
|
.name("example")
|
|
.height(8 / 16.0)
|
|
.generation("8388608")
|
|
.capacity("3355443200")
|
|
.transfer("50331648")
|
|
.buildAndRegister()
|
|
.langBuilder()
|
|
.put(english, "Example Solar Panel")
|
|
.build()
|
|
.recipeBuilder()
|
|
.shape("ppp", "8c8", "8h8")
|
|
.bind('p', item("solarflux", "photovoltaic_cell_6"))
|
|
.bind('8', item("solarflux:sp_8"))
|
|
.bind('c', tag("forge", "storage_blocks/emerald"))
|
|
.bind('h', ourMaterial) // Here we use the newly added material in the recipe!
|
|
.build(2);
|
|
|
|
Comment end*/
|
|
}
|
|
|
|
/*
|
|
* This method is used to register additional recipes
|
|
* Below listed all vanilla options for adding recipes.
|
|
*/
|
|
|
|
function registerRecipes($)
|
|
{
|
|
// IF you have a mod with custom recipe type, register them with the following:
|
|
// $.add(IRecipe<?>)
|
|
// Just don't forget to import the recipe class.
|
|
// To pass an ingredient to a recipe wrap your item()/tag() call in a ingredient().
|
|
// Basically this will create Minecraft Ingredient: ingredient(tag("forge", "storage_blocks/emerald"))
|
|
|
|
if(ourMaterial)
|
|
{
|
|
$.shaped() // Shaped recipe example
|
|
.result(ourMaterial, 2)
|
|
.shape("###", "#$#", "###")
|
|
.map('$', item("solarflux", "ender_glass"))
|
|
.map('#', tag("forge", "rods/blaze"))
|
|
.register();
|
|
|
|
$.shapeless() // Shapeless recipe example
|
|
.result(ourMaterial, 1)
|
|
.add(item("solarflux", "ender_glass"))
|
|
.add(tag("forge", "rods/blaze"))
|
|
.add(tag("forge", "rods/blaze"))
|
|
.add(tag("forge", "rods/blaze"))
|
|
.register();
|
|
|
|
$.stoneCutting() // Stone cutting recipe example
|
|
.result(ourMaterial, 1)
|
|
.input(item("solarflux", "ender_glass"))
|
|
.register();
|
|
|
|
// $.blasting() can be replaced with the following: (they have exactly same construction options)
|
|
// $.smelting()
|
|
// $.campfire()
|
|
// $.smoking()
|
|
$.blasting() // Blasting cutting recipe example
|
|
.result(ourMaterial, 1)
|
|
.input(item("solarflux", "ender_glass"))
|
|
.cookTime(400) // 20 seconds
|
|
.xp(10.0)
|
|
.register();
|
|
}
|
|
} |