2024-03-30 18:23:42 +11:00
import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient
import com.nomiceu.nomilabs.groovy.ShapedConversionRecipe
import net.minecraft.item.EnumDyeColor
import gregtech.api.unification.material.MarkerMaterials
import gregtech.api.unification.material.Materials
import gregtech.api.unification.ore.OrePrefix
import static gregtech . api . GTValues . *
// Backport MC 1.14 Dye Mechanics
ore ( 'dyeBlack' ) . remove ( item ( 'minecraft:dye' , 0 ) )
ore ( 'dye' ) . remove ( item ( 'minecraft:dye' , 0 ) )
addShapedConversionRecipe ( metaitem ( 'dye.black' ) , item ( 'minecraft:dye' , 0 ) )
ore ( 'dyeBrown' ) . remove ( item ( 'minecraft:dye' , 3 ) )
ore ( 'dye' ) . remove ( item ( 'minecraft:dye' , 3 ) )
addShapedConversionRecipe ( metaitem ( 'dye.brown' ) , item ( 'minecraft:dye' , 3 ) )
ore ( 'dyeBrown' ) . remove ( item ( 'nuclearcraft:cocoa_solids' ) )
addShapedConversionRecipe ( metaitem ( 'dye.brown' ) , item ( 'nuclearcraft:cocoa_solids' ) )
addShapedConversionRecipe ( metaitem ( 'dye.brown' ) , metaitem ( 'dustCocoa' ) ) ; //NC cocoa solids and vanilla cocoa stop being a dye when turned into GT cocoa dust
ore ( 'dyeBrown' ) . remove ( metaitem ( 'dustMetalMixture' ) )
addShapedConversionRecipe ( metaitem ( 'dye.brown' ) , metaitem ( 'dustMetalMixture' ) )
ore ( 'dyeBlue' ) . remove ( item ( 'minecraft:dye' , 4 ) )
ore ( 'dye' ) . remove ( item ( 'minecraft:dye' , 4 ) )
addShapedConversionRecipe ( metaitem ( 'dye.blue' ) , item ( 'minecraft:dye' , 4 ) )
ore ( 'dyeBlue' ) . remove ( metaitem ( 'gemLazurite' ) )
addShapedConversionRecipe ( metaitem ( 'dye.blue' ) , metaitem ( 'gemLazurite' ) )
ore ( 'dyeBlue' ) . remove ( metaitem ( 'gemSodalite' ) )
addShapedConversionRecipe ( metaitem ( 'dye.blue' ) , metaitem ( 'gemSodalite' ) )
ore ( 'dyeBlue' ) . remove ( metaitem ( 'dustLapis' ) )
addShapedConversionRecipe ( metaitem ( 'dye.blue' ) , metaitem ( 'dustLapis' ) )
ore ( 'dyeBlue' ) . remove ( metaitem ( 'dustLazurite' ) )
addShapedConversionRecipe ( metaitem ( 'dye.blue' ) , metaitem ( 'dustLazurite' ) )
ore ( 'dyeBlue' ) . remove ( metaitem ( 'dustSodalite' ) )
addShapedConversionRecipe ( metaitem ( 'dye.blue' ) , metaitem ( 'dustSodalite' ) )
ore ( 'dyeMagenta' ) . remove ( item ( 'extrautils2:ingredients' , 3 ) )
addShapedConversionRecipe ( metaitem ( 'dye.magenta' ) , item ( 'extrautils2:ingredients' , 3 ) )
ore ( 'dyeWhite' ) . remove ( item ( 'minecraft:dye' , 15 ) )
ore ( 'dye' ) . remove ( item ( 'minecraft:dye' , 15 ) )
addShapedConversionRecipe ( metaitem ( 'dye.white' ) , item ( 'minecraft:dye' , 15 ) )
def dyeHelperMap = [ : ]
for ( def color : EnumDyeColor . values ( ) ) {
2024-05-19 07:22:30 +01:00
dyeHelperMap . put ( color . getName ( ) , ore ( 'dye' + color . getName ( ) . capitalize ( ) ) )
2024-03-30 18:23:42 +11:00
}
// Fix Elevator Redyeing
for ( def entry in dyeHelperMap . entrySet ( ) ) {
2024-05-19 07:22:30 +01:00
crafting . remove ( 'elevatorid:redye_' + entry . key )
crafting . addShapeless ( item ( 'elevatorid:elevator_' + entry . key ) , [ ore ( 'blockElevator' ) , entry . value ] )
2024-03-30 18:23:42 +11:00
}
// Fix Slime Block Redyeing
for ( def color : EnumDyeColor . values ( ) ) {
2024-05-19 07:22:30 +01:00
def name = color . getName ( )
def meta = color . getMetadata ( )
def oreIng = dyeHelperMap . get ( name )
crafting . remove ( 'darkutils:dyed_slime_block_' + name )
crafting . shapedBuilder ( )
. output ( item ( 'darkutils:slime_dyed' , meta ) * 8 )
. matrix ( 'SSS' ,
'SDS' ,
'SSS' )
. key ( 'S' , ore ( 'blockSlime' ) )
. key ( 'D' , oreIng )
. register ( )
2024-03-30 18:23:42 +11:00
}
// Fix Satchel Redeying
addOreDictToOreDict ( ore ( 'dye' ) , dyeHelperMap . values ( ) )
// Re-Generate Chemical Dye Reactor Recipes (Breaks when OreDict Changes for Some Reason)
// Copied with some Groovy Changes from
// https://github.com/GregTechCEu/GregTech/blob/master/src/main/java/gregtech/loaders/recipe/chemistry/ReactorRecipes.java#L619-L626
// Update when they update.
for ( int i = 0 ; i < Materials . CHEMICAL_DYES . length ; i + + ) {
2024-05-19 07:22:30 +01:00
// Technically the amount being 288 doesn't matter, but calling without amount returns Fluid, and we need FluidStack
mods . gregtech . chemical_reactor . removeByOutput ( null , [ Materials . CHEMICAL_DYES [ i ] . getFluid ( 288 ) ] , null , null )
mods . gregtech . chemical_reactor . recipeBuilder ( )
. input ( OrePrefix . dye , MarkerMaterials . Color . VALUES [ i ] )
. inputs ( metaitem ( 'dustSalt' ) * 2 )
. fluidInputs ( fluid ( 'sulfuric_acid' ) * 250 )
. fluidOutputs ( Materials . CHEMICAL_DYES [ i ] . getFluid ( 288 ) )
. duration ( 600 ) . EUt ( VA [ LV ] ) // Original is 24, but not in GTValues, so just increase to 30
. buildAndRegister ( )
2024-03-30 18:23:42 +11:00
}
void addOreDictToOreDict ( OreDictIngredient addTo , Collection < OreDictIngredient > from ) {
2024-05-19 07:22:30 +01:00
for ( def ing in from ) {
for ( def stack in ing ) {
addTo . add ( stack )
}
}
2024-03-30 18:23:42 +11:00
}
void addShapedConversionRecipe ( ItemStack outputStack , ItemStack inputStack ) {
2024-05-19 07:22:30 +01:00
crafting . shapedBuilder ( )
. output ( outputStack )
. matrix ( [ [ inputStack ] ] )
. recipeClassFunction ( ( output , width , height , ingredients ) - > new ShapedConversionRecipe ( output , ingredients , width , height ) )
. register ( )
}