diff --git a/overrides/groovy/classes/init/NaqRecipeLogic.groovy b/overrides/groovy/classes/init/NaqRecipeLogic.groovy new file mode 100644 index 0000000..8748d16 --- /dev/null +++ b/overrides/groovy/classes/init/NaqRecipeLogic.groovy @@ -0,0 +1,21 @@ +import gregtech.api.capability.impl.MultiblockFuelRecipeLogic +import gregtech.api.metatileentity.multiblock.RecipeMapMultiblockController +import gregtech.api.GTValues + +public class NaqRecipeLogic extends MultiblockFuelRecipeLogic { + + public NaqRecipeLogic(RecipeMapMultiblockController tileEntity) { + super(tileEntity) + } + + @Override + public int getParallelLimit() { + // No Parallel for Naq Reactors + return 1 + } + + @Override + public boolean isAllowOverclocking() { + return false; + } +} diff --git a/overrides/groovy/classes/init/NaquadahReactor.groovy b/overrides/groovy/classes/init/NaquadahReactor.groovy new file mode 100644 index 0000000..4771f47 --- /dev/null +++ b/overrides/groovy/classes/init/NaquadahReactor.groovy @@ -0,0 +1,153 @@ +import gregtech.api.metatileentity.multiblock.FuelMultiblockController +import gregtech.api.metatileentity.MetaTileEntity +import gregtech.api.metatileentity.interfaces.IGregTechTileEntity +import gregtech.api.metatileentity.multiblock.IMultiblockPart +import gregtech.api.pattern.BlockPattern +import gregtech.api.pattern.FactoryBlockPattern +import gregtech.client.renderer.ICubeRenderer +import gregtech.common.blocks.BlockMetalCasing.MetalCasingType +import gregtech.common.blocks.MetaBlocks +import gregtech.api.recipes.RecipeMap +import net.minecraft.block.state.IBlockState +import gregicality.multiblocks.api.render.GCYMTextures +import gregtech.client.renderer.texture.Textures +import gregtech.api.metatileentity.multiblock.MultiblockAbility +import gregicality.multiblocks.common.block.GCYMMetaBlocks +import gregicality.multiblocks.common.block.blocks.BlockLargeMultiblockCasing +import gregtech.common.blocks.MetaBlocks +import gregtech.common.blocks.BlockGlassCasing +import net.minecraft.util.text.ITextComponent +import net.minecraft.util.text.Style +import net.minecraft.util.text.TextComponentTranslation +import net.minecraft.util.text.TextFormatting +import net.minecraft.util.text.event.HoverEvent +import gregtech.api.util.TextFormattingUtil +import gregtech.api.util.GTUtility +import gregtech.api.GTValues +import net.minecraft.item.ItemStack +import net.minecraft.world.World +import gregtech.client.utils.TooltipHelper +import net.minecraftforge.fml.relauncher.Side +import net.minecraftforge.fml.relauncher.SideOnly + +public class NaquadahReactor extends FuelMultiblockController { + public final int numSpatial + public final IBlockState bottomFiller + public final IBlockState topFiller + public final int tier + + public static final int AMP = 3 + + NaquadahReactor(ResourceLocation metaTileEntityId, RecipeMap recipeMap, int tier, int numSpatial, IBlockState bottomFiller, IBlockState topFiller) { + super(metaTileEntityId, recipeMap, tier) + this.tier = tier + this.numSpatial = numSpatial + this.bottomFiller = bottomFiller + this.topFiller = topFiller + this.recipeMapWorkable = new NaqRecipeLogic(this) + } + + @Override + MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) { + return new NaquadahReactor(metaTileEntityId, recipeMap, tier, numSpatial, bottomFiller, topFiller) + } + + @Override + protected BlockPattern createStructurePattern() { + String[] aisle1 = new String[this.numSpatial + 2] + String[] aisle2 = new String[this.numSpatial + 2] + String[] aisle3 = new String[this.numSpatial + 2] + + aisle1[0] = "CCC" + aisle2[0] = "CCC" + aisle3[0] = "CSC" + + // Loop for numSpatial times, starting from index 1, adding spatials to outside aisles + for (int i = 1; i <= numSpatial; i++) { + aisle1[i] = "PGP" + aisle3[i] = "PGP" + } + // Loop for numSpatial - 1 times, starting from index 1, adding bottomFillers to inside aisle + for (int i = 1; i < numSpatial; i++) { + aisle2[i] = "GBG" + } + // Add top filler + aisle2[numSpatial] = "GTG" + + aisle1[numSpatial + 1] = "CCC" + aisle2[numSpatial + 1] = "CCC" + aisle3[numSpatial + 1] = "CCC" + + return FactoryBlockPattern.start() + .aisle(aisle1) + .aisle(aisle2) + .aisle(aisle3) + .where('S' as char, selfPredicate()) + .where('G' as char, states(getGlassState())) + .where('P' as char, states(blockstate('appliedenergistics2:spatial_pylon'))) // Blockstate works here with no variants + .where('T' as char, states(this.topFiller)) + .where('B' as char, states(this.bottomFiller)) + .where('C' as char, states(getCasingState()).setMinGlobalLimited(10) + .or(abilities(MultiblockAbility.OUTPUT_ENERGY).setExactLimit(1)) + .or(autoAbilities(false, true, true, true, false, false, false))) + .build() + } + + @Override + @SideOnly(Side.CLIENT) + ICubeRenderer getBaseTexture(IMultiblockPart sourcePart) { + return GCYMTextures.MIXER_CASING + } + + @Override + @SideOnly(Side.CLIENT) + protected ICubeRenderer getFrontOverlay() { + return Textures.FUSION_REACTOR_OVERLAY + } + + /* Would use blockstate handler, but does not work with special variants and types here? */ + public IBlockState getCasingState() { + return GCYMMetaBlocks.LARGE_MULTIBLOCK_CASING.getState(BlockLargeMultiblockCasing.CasingType.MIXER_CASING) + } + + public IBlockState getGlassState() { + return MetaBlocks.TRANSPARENT_CASING.getState(BlockGlassCasing.CasingType.FUSION_GLASS) + } + + @Override + @SideOnly(Side.CLIENT) + protected void addDisplayText(List textList) { + if (!isStructureFormed()) { + ITextComponent tooltip = new TextComponentTranslation("gregtech.multiblock.invalid_structure.tooltip") + tooltip.setStyle(new Style().setColor(TextFormatting.GRAY)) + textList.add(new TextComponentTranslation("gregtech.multiblock.invalid_structure") + .setStyle(new Style().setColor(TextFormatting.RED) + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, tooltip)))) + } + else { + long produces = GTValues.V[tier] * AMP + String voltageName = GTValues.VNF[GTUtility.getFloorTierByVoltage(produces)] + TextFormatting.RESET + textList.add(new TextComponentTranslation("gregtech.multiblock.max_energy_per_tick", TextFormattingUtil.formatNumbers(produces), voltageName)) + + if (!recipeMapWorkable.isWorkingEnabled()) { + textList.add(new TextComponentTranslation("gregtech.multiblock.work_paused")) + } else if (recipeMapWorkable.isActive()) { + textList.add(new TextComponentTranslation("gregtech.multiblock.running")) + int currentProgress = (int) (recipeMapWorkable.getProgressPercent() * 100) + textList.add(new TextComponentTranslation("gregtech.multiblock.progress", currentProgress)) + } else { + textList.add(new TextComponentTranslation("gregtech.multiblock.idling")) + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, World player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced) + // Must not import I18n as not available on server + // Must call .toString() otherwise groovy tries to find an override for the + operator + tooltip.add(net.minecraft.client.resources.I18n.format("tooltip.contenttweaker.naquadah_reactor.produces", AMP, GTValues.VNF[tier] + TextFormatting.RESET.toString())) + tooltip.add(TooltipHelper.RAINBOW_SLOW.toString() + net.minecraft.client.resources.I18n.format("gui.contenttweaker.naquadah_reactor.overclock")) + } +} diff --git a/overrides/groovy/classes/preInit/NomiRecipeMaps.groovy b/overrides/groovy/classes/preInit/NomiRecipeMaps.groovy new file mode 100644 index 0000000..59695e6 --- /dev/null +++ b/overrides/groovy/classes/preInit/NomiRecipeMaps.groovy @@ -0,0 +1,7 @@ +import gregtech.api.recipes.RecipeMap +import gregtech.api.recipes.builders.* + +public class NomiRecipeMaps { + public static RecipeMap NAQUADAH_REACTOR_1; + public static RecipeMap NAQUADAH_REACTOR_2; +} diff --git a/overrides/groovy/init/register_multis.groovy b/overrides/groovy/init/register_multis.groovy new file mode 100644 index 0000000..d231cfe --- /dev/null +++ b/overrides/groovy/init/register_multis.groovy @@ -0,0 +1,20 @@ +import gregtech.common.metatileentities.MetaTileEntities +import gregtech.api.recipes.RecipeMap +import io.sommers.packmode.PMConfig + +int naqFirstID + +if (PMConfig.getPackMode() == "normal") { + naqFirstID = 32004 +} else { + naqFirstID = 32003 +} + +/* Blockstate handler with variants works here */ +MetaTileEntities.registerMetaTileEntity(naqFirstID, new NaquadahReactor(new ResourceLocation("multiblocktweaker", "naquadah_reactor_1"), RecipeMap.getByName("naquadah_reactor_1"), 7, 3, blockstate('gregtech:meta_block_compressed_8', 'variant=gregtech__duranium'), blockstate('extendedcrafting:trimmed', 'variant=ultimate'))) + +if (PMConfig.getPackMode() == "normal") { + MetaTileEntities.registerMetaTileEntity(++naqFirstID, new NaquadahReactor(new ResourceLocation("multiblocktweaker", "naquadah_reactor_2"), RecipeMap.getByName("naquadah_reactor_2"), 8, 4, blockstate('gregtech:meta_block_compressed_27', 'variant=gregtech__ruthenium_trinium_americium_neutronate'), blockstate('extendedcrafting:storage', 'variant=ultimate'))) +} else { + MetaTileEntities.registerMetaTileEntity(++naqFirstID, new NaquadahReactor(new ResourceLocation("multiblocktweaker", "naquadah_reactor_2"), RecipeMap.getByName("naquadah_reactor_2"), 8, 4, blockstate('gregtech:meta_block_compressed_2006', 'variant=gregtech__taranium'), blockstate('extendedcrafting:storage', 'variant=ultimate'))) +} diff --git a/overrides/groovy/preInit/recipe_maps.groovy b/overrides/groovy/preInit/recipe_maps.groovy new file mode 100644 index 0000000..beae4f6 --- /dev/null +++ b/overrides/groovy/preInit/recipe_maps.groovy @@ -0,0 +1,14 @@ +import gregtech.api.recipes.RecipeMap +import gregtech.api.recipes.builders.* +import gregtech.core.sound.GTSoundEvents +import gregtech.api.gui.GuiTextures + +NomiRecipeMaps.NAQUADAH_REACTOR_1 = new RecipeMap<>("naquadah_reactor_1", 1, 1, 0, 0, new FuelRecipeBuilder(), false) + .setSlotOverlay(false, false, GuiTextures.ATOMIC_OVERLAY_1).setSlotOverlay(false, true, GuiTextures.ATOMIC_OVERLAY_1) + .setSlotOverlay(true, false, GuiTextures.ATOMIC_OVERLAY_1).setSlotOverlay(true, true, GuiTextures.ATOMIC_OVERLAY_1) + .setSound(GTSoundEvents.TURBINE); + +NomiRecipeMaps.NAQUADAH_REACTOR_2 = new RecipeMap<>("naquadah_reactor_2", 1, 1, 0, 0, new FuelRecipeBuilder(), false) + .setSlotOverlay(false, false, GuiTextures.ATOMIC_OVERLAY_1).setSlotOverlay(false, true, GuiTextures.ATOMIC_OVERLAY_1) + .setSlotOverlay(true, false, GuiTextures.ATOMIC_OVERLAY_1).setSlotOverlay(true, true, GuiTextures.ATOMIC_OVERLAY_1) + .setSound(GTSoundEvents.TURBINE); diff --git a/overrides/groovy/runConfig.json b/overrides/groovy/runConfig.json index 0b677b9..5a58e25 100644 --- a/overrides/groovy/runConfig.json +++ b/overrides/groovy/runConfig.json @@ -4,7 +4,13 @@ "version": "1.0.0", "debug": false, "classes": { - "preInit": [] + "preInit": [ + "classes/preInit/" + ], + "init": [ + "classes/init/NaqRecipeLogic.groovy", + "classes/init" + ] }, "loaders": { "preInit": [ diff --git a/overrides/resources/contenttweaker/lang/en_us.lang b/overrides/resources/contenttweaker/lang/en_us.lang index 4986b59..ca14a68 100644 --- a/overrides/resources/contenttweaker/lang/en_us.lang +++ b/overrides/resources/contenttweaker/lang/en_us.lang @@ -391,6 +391,9 @@ item.contenttweaker.pulsatingmesh.name=Pulsating Mesh tile.contenttweaker.simulation_casing.name=Naquadah-Plated Dark Steel Machine Casing tile.contenttweaker.simulation_casing_2.name=Naquadah Machine Casing +gui.contenttweaker.naquadah_reactor.overclock=Does not overclock! +tooltip.contenttweaker.naquadah_reactor.produces=Produces exactly %s amps of %s. + multiblocktweaker.machine.microverse_projector_basic.name=Basic Microverse Projector multiblocktweaker.machine.microverse_projector_advanced.name=Advanced Microverse Projector multiblocktweaker.machine.microverse_projector_advanced_ii.name=Advanced Microverse Projector II diff --git a/overrides/scripts/multiblock_dml.zs b/overrides/scripts/multiblock_dml.zs index bbe1614..a2e4396 100755 --- a/overrides/scripts/multiblock_dml.zs +++ b/overrides/scripts/multiblock_dml.zs @@ -122,8 +122,8 @@ val dml_sim_chamber = Builder.start("dml_sim_chamber", 3100) .where('G', ) .where('O', /* omnium */) .where('-', CTPredicate.getAny()) - .where('C', CTPredicate.states() - | controller.autoAbilities(true, false, true, true, false, false, false)) + .where('C', CTPredicate.states().setMinGlobalLimited(30) + | controller.autoAbilities(true, true, true, true, false, false, false)) .build(); } as IPatternBuilderFunction) .withRecipeMap( @@ -135,9 +135,10 @@ val dml_sim_chamber = Builder.start("dml_sim_chamber", 3100) .build()) .withBaseTexture() .buildAndRegister(); -dml_sim_chamber.hasMaintenanceMechanics = false; +dml_sim_chamber.hasMaintenanceMechanics = true; dml_sim_chamber.hasMufflerMechanics = false; -//dml_sim_chamber.frontOverlay = ; +dml_sim_chamber.canBeDistinct = true; +dml_sim_chamber.frontOverlay = ; //Recipe for Controller // Moved to Groovy diff --git a/overrides/scripts/multiblocks_expert.zs b/overrides/scripts/multiblocks_expert.zs index 08d77df..18c3027 100644 --- a/overrides/scripts/multiblocks_expert.zs +++ b/overrides/scripts/multiblocks_expert.zs @@ -26,14 +26,13 @@ val microverse_projector_basic = Builder.start("mbt:microverse_projector_basic") .withPattern(function(controller as IControllerTile) as IBlockPattern { return FactoryBlockPattern.start() .aisle("CCC", "CVC", "CCC") - .aisle("CCC", "GDG", "CMC") + .aisle("CCC", "GDG", "CCC") .aisle("CSC", "CGC", "CCC") .where('S', controller.self()) .where('G', ) .where('V', ) .where('D', ) - .where('M', CTPredicate.abilities()) - .where("C", CTPredicate.states().setMinGlobalLimited(12) | controller.autoAbilities(true, true, true, true, true, false, false)) + .where("C", CTPredicate.states().setMinGlobalLimited(12) | controller.autoAbilities(true, true, true, true, true, false, true)) .build(); } as IPatternBuilderFunction) .withRecipeMap( @@ -50,7 +49,8 @@ val microverse_projector_basic = Builder.start("mbt:microverse_projector_basic") microverse_projector_basic.hasMufflerMechanics = true; microverse_projector_basic.hasMaintenanceMechanics = true; -//microverse_projector_basic.frontOverlay = ; +microverse_projector_basic.canBeDistinct = true; +microverse_projector_basic.frontOverlay = ; // Advanced Microverse Projector val microverse_projector_advanced = Builder.start("mbt:microverse_projector_advanced") @@ -69,7 +69,7 @@ val microverse_projector_advanced = Builder.start("mbt:microverse_projector_adva "GDDDG", "CVCVC") .aisle( - "CCMCC", + "CCCCC", "GDDDG", "GD DG", "GDDDG", @@ -91,8 +91,7 @@ val microverse_projector_advanced = Builder.start("mbt:microverse_projector_adva .where('D', ) .where('V', ) .where(' ', CTPredicate.getAny()) - .where('M', CTPredicate.abilities()) - .where("C", CTPredicate.states().setMinGlobalLimited(45) | controller.autoAbilities(true, true, true, true, false, false, false)) + .where("C", CTPredicate.states().setMinGlobalLimited(45) | controller.autoAbilities(true, true, true, true, false, false, true)) .build(); } as IPatternBuilderFunction) .withRecipeMap( @@ -108,7 +107,8 @@ val microverse_projector_advanced = Builder.start("mbt:microverse_projector_adva microverse_projector_advanced.hasMufflerMechanics = true; microverse_projector_advanced.hasMaintenanceMechanics = true; -//microverse_projector_advanced.frontOverlay = ; +microverse_projector_advanced.canBeDistinct = true; +microverse_projector_advanced.frontOverlay = ; // Advanced Microverse Projector II val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_advanced_ii") @@ -119,7 +119,7 @@ val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_a " ", " CCCCC ", " CVCVC ", - " CCMCC ", + " CCCCC ", " CVCVC ", " CCCCC ", " ", @@ -190,7 +190,6 @@ val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_a .where('V', ) .where(' ', CTPredicate.getAny()) .where('D', ) - .where('M', CTPredicate.abilities()) .where("C", CTPredicate.states().setMinGlobalLimited(115) | controller.autoAbilities(true, true, true, true, false, false, true)) .build(); } as IPatternBuilderFunction) @@ -207,128 +206,19 @@ val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_a microverse_projector_advanced_ii.hasMufflerMechanics = true; microverse_projector_advanced_ii.hasMaintenanceMechanics = true; -//microverse_projector_advanced_ii.frontOverlay = ; +microverse_projector_advanced_ii.canBeDistinct = true; +microverse_projector_advanced_ii.frontOverlay = ; +.displayName = "Reaction-Safe Casing"; // Naquadah Reactor 1 -.displayName = "Reaction-Safe Casing"; -val naquadah_reactor_1 = Builder.start("naquadah_reactor_1") - .withPattern(function(controller as IControllerTile) as IBlockPattern { - return FactoryBlockPattern.start() - .aisle( - "CCC", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .aisle( - "CCC", - "GNG", - "GNG", - "GOG", - "CCC" - ) - .aisle( - "CSC", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .where('S', controller.self()) - .where('G', ) - .where('P', ) - .where('O', ) - .where('N', ) - .where('C', CTPredicate.states() - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setMaxGlobalLimited(3).setPreviewCount(1) - ) - .build(); - } as IPatternBuilderFunction) - .withRecipeMap( - FactoryRecipeMap.start("naquadah_reactor_1") - .minInputs(1) - .maxInputs(1) - .minOutputs(1) - .maxOutputs(1) - .build()) - .withBaseTexture() - .buildAndRegister(); -naquadah_reactor_1.hasMufflerMechanics = false; -naquadah_reactor_1.hasMaintenanceMechanics = false; -//naquadah_reactor_1.frontOverlay = ; - -naquadah_reactor_1.runOverclockingLogic = function(recipelogic as IRecipeLogic, recipe as IRecipe, negativeEU as bool, maxOverclocks as int) as int[] { - return IRecipeLogic.standardOverclockingLogic(recipe.getEUt() * (negativeEU ? -1 : 1), recipelogic.maxVoltage, recipe.getDuration(), 1, 1, 0); // 1x duration, 1x voltage, 0 overclocks -} as IRunOverclockingLogicFunction; - -.addTooltip(format.yellow("Produces exactly 3A ZPM, does not overclock")); +// Groovy (special generator) // Naquadah Reactor 2 -val naquadah_reactor_2 = Builder.start("naquadah_reactor_2") - .withPattern(function(controller as IControllerTile) as IBlockPattern { - return FactoryBlockPattern.start() - .aisle( - "CCC", - "PGP", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .aisle( - "CCC", - "GNG", - "GNG", - "GNG", - "GOG", - "CCC" - ) - .aisle( - "CSC", - "PGP", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .where('S', controller.self()) - .where('P', ) - .where('G', ) - .where('O', ) - .where('N', ) - .where('C', CTPredicate.states() - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setMaxGlobalLimited(3).setPreviewCount(1) - ) - .build(); - } as IPatternBuilderFunction) - .withRecipeMap( - FactoryRecipeMap.start("naquadah_reactor_2") - .minInputs(1) - .maxInputs(1) - .minOutputs(1) - .maxOutputs(1) - .build()) - .withBaseTexture() - .buildAndRegister(); - -naquadah_reactor_2.hasMufflerMechanics = false; -naquadah_reactor_2.hasMaintenanceMechanics = false; -//naquadah_reactor_2.frontOverlay = ; - -naquadah_reactor_2.runOverclockingLogic = function(recipelogic as IRecipeLogic, recipe as IRecipe, negativeEU as bool, maxOverclocks as int) as int[] { - return IRecipeLogic.standardOverclockingLogic(recipe.getEUt() * (negativeEU ? -1 : 1), recipelogic.maxVoltage, recipe.getDuration(), 1, 1, 0); // 1x duration, 1x voltage, 0 overclocks -} as IRunOverclockingLogicFunction; - -.addTooltip(format.yellow("Produces exactly 3A UV, does not overclock")); +// Groovy (special generator) // Actualization Chamber -val actualization_chamber = Builder.start("actualization_chamber") +val actualization_chamber = Builder.start("actualization_chamber", 32005) .withPattern(function(controller as IControllerTile) as IBlockPattern { return FactoryBlockPattern.start() .aisle("CCC","GGG","CCC") @@ -337,8 +227,8 @@ val actualization_chamber = Builder.start("actualization_chamber") .where('S', controller.self()) .where('O', ) .where('G', ) - .where('C', CTPredicate.states() - | controller.autoAbilities(true, false, true, true, false, false, false) + .where('C', CTPredicate.states().setMinGlobalLimited(9) + | controller.autoAbilities(true, true, true, true, false, false, false) ) .build(); } as IPatternBuilderFunction) @@ -354,11 +244,12 @@ val actualization_chamber = Builder.start("actualization_chamber") .buildAndRegister(); actualization_chamber.hasMufflerMechanics = false; -actualization_chamber.hasMaintenanceMechanics = false; -//actualization_chamber.frontOverlay = ; +actualization_chamber.hasMaintenanceMechanics = true; +actualization_chamber.canBeDistinct = true; +actualization_chamber.frontOverlay = ; // Universal Crystallizer -val universal_crystallizer = Builder.start("universal_crystallizer") +val universal_crystallizer = Builder.start("universal_crystallizer", 32006) .withPattern(function(controller as IControllerTile) as IBlockPattern { return FactoryBlockPattern.start(RelativeDirection.FRONT, RelativeDirection.UP, RelativeDirection.LEFT) .aisle("AAAAAAA", @@ -436,7 +327,8 @@ val universal_crystallizer = Builder.start("universal_crystallizer") universal_crystallizer.hasMufflerMechanics = false; universal_crystallizer.hasMaintenanceMechanics = true; -//universal_crystallizer.frontOverlay = ; +universal_crystallizer.canBeDistinct = true; +universal_crystallizer.frontOverlay = ; // multiblock controller recipes recipes.addShaped("microverse_projector_basic", , [ @@ -458,26 +350,8 @@ recipes.addShaped("microverse_projector_advanced_ii", , - ["NCN", - "GSG", - "PPP"], - { C : , //T5 - G : , - S : , - P : , - N : }); //Omnium Nugget - -makeShaped("naquadah_reactor_2", , - ["NCN", - "GSG", - "PPP"], - { C : , //T6 - G : , - S : , - P : , - N : }); //Omnium Ingot - +// Naquadah Reactor +// Moved to Groovy makeExtremeRecipe5(, ["PPPPP", @@ -1570,37 +1444,32 @@ actualization_chamber.recipeMap * 64) .buildAndRegister(); - // Naquadah Reactor Mk1 Recipes -naquadah_reactor_1.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(938) - .EUt(-393216) + .EUt(393216) .inputs() .outputs() .buildAndRegister(); -naquadah_reactor_1.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(3750) - .EUt(-393216) + .EUt(393216) .inputs() .outputs() .buildAndRegister(); // Naquadah Reactor Mk2 Recipes -naquadah_reactor_2.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(1875) - .EUt(-1572864) + .EUt(1572864) .inputs() .outputs() .buildAndRegister(); -naquadah_reactor_2.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(7500) - .EUt(-1572864) + .EUt(1572864) .inputs() .outputs() .buildAndRegister(); diff --git a/overrides/scripts/multiblocks_normal.zs b/overrides/scripts/multiblocks_normal.zs index 06937fa..1466953 100644 --- a/overrides/scripts/multiblocks_normal.zs +++ b/overrides/scripts/multiblocks_normal.zs @@ -25,14 +25,13 @@ val microverse_projector_basic = Builder.start("mbt:microverse_projector_basic") .withPattern(function(controller as IControllerTile) as IBlockPattern { return FactoryBlockPattern.start() .aisle("CCC", "CVC", "CCC") - .aisle("CCC", "GDG", "CMC") + .aisle("CCC", "GDG", "CCC") .aisle("CSC", "CGC", "CCC") .where('S', controller.self()) .where('G', ) .where('V', ) .where('D', ) - .where('M', CTPredicate.abilities()) - .where("C", CTPredicate.states().setMinGlobalLimited(12) | controller.autoAbilities(true, true, true, true, true, false, false)) + .where("C", CTPredicate.states().setMinGlobalLimited(12) | controller.autoAbilities(true, true, true, true, true, false, true)) .build(); } as IPatternBuilderFunction) .withRecipeMap( @@ -49,7 +48,8 @@ val microverse_projector_basic = Builder.start("mbt:microverse_projector_basic") microverse_projector_basic.hasMufflerMechanics = true; microverse_projector_basic.hasMaintenanceMechanics = true; -//microverse_projector_basic.frontOverlay = ; +microverse_projector_basic.canBeDistinct = true; +microverse_projector_basic.frontOverlay = ; // Advanced Microverse Projector val microverse_projector_advanced = Builder.start("mbt:microverse_projector_advanced") @@ -68,7 +68,7 @@ val microverse_projector_advanced = Builder.start("mbt:microverse_projector_adva "GDDDG", "CVCVC") .aisle( - "CCMCC", + "CCCCC", "GDDDG", "GD DG", "GDDDG", @@ -90,8 +90,7 @@ val microverse_projector_advanced = Builder.start("mbt:microverse_projector_adva .where('D', ) .where('V', ) .where(' ', CTPredicate.getAny()) - .where('M', CTPredicate.abilities()) - .where("C", CTPredicate.states().setMinGlobalLimited(45) | controller.autoAbilities(true, true, true, true, false, false, false)) + .where("C", CTPredicate.states().setMinGlobalLimited(45) | controller.autoAbilities(true, true, true, true, false, false, true)) .build(); } as IPatternBuilderFunction) .withRecipeMap( @@ -107,7 +106,8 @@ val microverse_projector_advanced = Builder.start("mbt:microverse_projector_adva microverse_projector_advanced.hasMufflerMechanics = true; microverse_projector_advanced.hasMaintenanceMechanics = true; -//microverse_projector_advanced.frontOverlay = ; +microverse_projector_advanced.canBeDistinct = true; +microverse_projector_advanced.frontOverlay = ; // Advanced Microverse Projector II val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_advanced_ii") @@ -118,7 +118,7 @@ val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_a " ", " CCCCC ", " CVCVC ", - " CCMCC ", + " CCCCC ", " CVCVC ", " CCCCC ", " ", @@ -189,7 +189,6 @@ val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_a .where('V', ) .where(' ', CTPredicate.getAny()) .where('D', ) - .where('M', CTPredicate.abilities()) .where("C", CTPredicate.states().setMinGlobalLimited(115) | controller.autoAbilities(true, true, true, true, false, false, true)) .build(); } as IPatternBuilderFunction) @@ -206,7 +205,8 @@ val microverse_projector_advanced_ii = Builder.start("mbt:microverse_projector_a microverse_projector_advanced_ii.hasMufflerMechanics = true; microverse_projector_advanced_ii.hasMaintenanceMechanics = true; -//microverse_projector_advanced_ii.frontOverlay = ; +microverse_projector_advanced_ii.canBeDistinct = true; +microverse_projector_advanced_ii.frontOverlay = ; // Creative Tank Provider val creative_tank_provider = Builder.start("mbt:creative_tank_provider") @@ -217,7 +217,7 @@ val creative_tank_provider = Builder.start("mbt:creative_tank_provider") .aisle("CCC", "CSC", "CCC") .where('S', controller.self()) .where('F', ) // Tungstencarbide Frame Box - .where("C", CTPredicate.states().setMinGlobalLimited(15) | controller.autoAbilities(true, false, true, true, false, false, false)) + .where("C", CTPredicate.states().setMinGlobalLimited(15) | controller.autoAbilities(true, true, true, true, false, false, false)) .build(); } as IPatternBuilderFunction) .withRecipeMap( @@ -231,126 +231,16 @@ val creative_tank_provider = Builder.start("mbt:creative_tank_provider") .buildAndRegister(); creative_tank_provider.hasMufflerMechanics = false; -creative_tank_provider.hasMaintenanceMechanics = false; - +creative_tank_provider.hasMaintenanceMechanics = true; +creative_tank_provider.frontOverlay = ; +.displayName = "Reaction-Safe Casing"; // Naquadah Reactor 1 -.displayName = "Reaction-Safe Casing"; -val naquadah_reactor_1 = Builder.start("naquadah_reactor_1") - .withPattern(function(controller as IControllerTile) as IBlockPattern { - return FactoryBlockPattern.start() - .aisle( - "CCC", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .aisle( - "CCC", - "GNG", - "GNG", - "GOG", - "CCC" - ) - .aisle( - "CSC", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .where('S', controller.self()) - .where('G', ) - .where('P', ) - .where('O', ) - .where('N', ) - .where('C', CTPredicate.states() - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setMaxGlobalLimited(3).setPreviewCount(1) - ) - .build(); - } as IPatternBuilderFunction) - .withRecipeMap( - FactoryRecipeMap.start("naquadah_reactor_1") - .minInputs(1) - .maxInputs(1) - .minOutputs(1) - .maxOutputs(1) - .build()) - .withBaseTexture() - .buildAndRegister(); -naquadah_reactor_1.hasMufflerMechanics = false; -naquadah_reactor_1.hasMaintenanceMechanics = false; -//naquadah_reactor_1.frontOverlay = ; - -naquadah_reactor_1.runOverclockingLogic = function(recipelogic as IRecipeLogic, recipe as IRecipe, negativeEU as bool, maxOverclocks as int) as int[] { - return IRecipeLogic.standardOverclockingLogic(recipe.getEUt() * (negativeEU ? -1 : 1), recipelogic.maxVoltage, recipe.getDuration(), 1, 1, 0); // 1x duration, 1x voltage, 0 overclocks -} as IRunOverclockingLogicFunction; - -.addTooltip(format.yellow("Produces exactly 3A ZPM, does not overclock")); +// Groovy (special generator) // Naquadah Reactor 2 -val naquadah_reactor_2 = Builder.start("naquadah_reactor_2") - .withPattern(function(controller as IControllerTile) as IBlockPattern { - return FactoryBlockPattern.start() - .aisle( - "CCC", - "PGP", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .aisle( - "CCC", - "GNG", - "GNG", - "GNG", - "GOG", - "CCC" - ) - .aisle( - "CSC", - "PGP", - "PGP", - "PGP", - "PGP", - "CCC" - ) - .where('S', controller.self()) - .where('P', ) - .where('G', ) - .where('O', ) - .where('N', ) - .where('C', CTPredicate.states() - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setPreviewCount(1) - | CTPredicate.abilities().setMinGlobalLimited(1).setMaxGlobalLimited(3).setPreviewCount(1) - ) - .build(); - } as IPatternBuilderFunction) - .withRecipeMap( - FactoryRecipeMap.start("naquadah_reactor_2") - .minInputs(1) - .maxInputs(1) - .minOutputs(1) - .maxOutputs(1) - .build()) - .withBaseTexture() - .buildAndRegister(); - -naquadah_reactor_2.hasMufflerMechanics = false; -naquadah_reactor_2.hasMaintenanceMechanics = false; -//naquadah_reactor_2.frontOverlay = ; - -naquadah_reactor_2.runOverclockingLogic = function(recipelogic as IRecipeLogic, recipe as IRecipe, negativeEU as bool, maxOverclocks as int) as int[] { - return IRecipeLogic.standardOverclockingLogic(recipe.getEUt() * (negativeEU ? -1 : 1), recipelogic.maxVoltage, recipe.getDuration(), 1, 1, 0); // 1x duration, 1x voltage, 0 overclocks -} as IRunOverclockingLogicFunction; - -.addTooltip(format.yellow("Produces exactly 3A UV, does not overclock")); +// Groovy (special generator) // multiblock controller recipes recipes.addShaped("microverse_projector_basic", , [ @@ -799,35 +689,31 @@ creative_tank_provider.recipeMap // Naquadah Reactor Mk1 Recipes -naquadah_reactor_1.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(938) - .EUt(-393216) + .EUt(393216) .inputs() .outputs() .buildAndRegister(); -naquadah_reactor_1.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(3750) - .EUt(-393216) + .EUt(393216) .inputs() .outputs() .buildAndRegister(); // Naquadah Reactor Mk2 Recipes -naquadah_reactor_2.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(1875) - .EUt(-1572864) + .EUt(1572864) .inputs() .outputs() .buildAndRegister(); -naquadah_reactor_2.recipeMap - .recipeBuilder() +.recipeBuilder() .duration(7500) - .EUt(-1572864) + .EUt(1572864) .inputs() .outputs() .buildAndRegister();