From 92b0fed4d5d74062df1535af5b891fbcbfd33cb3 Mon Sep 17 00:00:00 2001 From: Flanks255 <32142731+Flanks255@users.noreply.github.com> Date: Tue, 18 Jan 2022 19:11:23 -0600 Subject: [PATCH] 1st pass at fixing reconstructor... --- .../api/ActuallyAdditionsAPI.java | 12 ++-- .../mod/blocks/BlockAtomicReconstructor.java | 11 +++- .../mod/config/CommonConfig.java | 2 + .../mod/config/values/ConfigIntValues.java | 7 --- .../mod/crafting/LaserRecipe.java | 15 ++++- .../mod/items/lens/LensColor.java | 3 +- .../mod/items/lens/LensMining.java | 2 +- .../mod/misc/apiimpl/MethodHandler.java | 56 +++++++++++-------- .../tile/TileEntityAtomicReconstructor.java | 5 +- .../actuallyadditions/mod/util/AssetUtil.java | 7 ++- .../mod/util/ResourceReloader.java | 6 ++ 11 files changed, 84 insertions(+), 42 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 8181296ae..cfa42dc58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -41,13 +41,15 @@ public final class ActuallyAdditionsAPI { public static final List CRUSHER_RECIPES = new ArrayList<>(); public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList<>(); // public static final List TREASURE_CHEST_LOOT = new ArrayList<>(); - public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList<>(); + //public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList<>(); public static final List EMPOWERER_RECIPES = new ArrayList<>(); public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap<>(); public static final List SOLID_FUEL_RECIPES = new ArrayList<>(); public static final List PRESSING_RECIPES = new ArrayList<>(); public static final List FERMENTING_RECIPES = new ArrayList<>(); + public static final List CONVERSION_LASER_RECIPES = new ArrayList<>(); + /** * Farmer behaviors are sorted when first accessed, this will not be done until after loading, but do not add behaviors at runtime. */ @@ -260,12 +262,12 @@ public final class ActuallyAdditionsAPI { */ @Deprecated public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse, LensConversion type) { - RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); + //RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); } @Deprecated public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse) { - addReconstructorLensConversionRecipe(input, output, energyUse, lensDefaultConversion); + //addReconstructorLensConversionRecipe(input, output, energyUse, lensDefaultConversion); } /** @@ -279,11 +281,11 @@ public final class ActuallyAdditionsAPI { * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(Ingredient input, ItemStack output, int energyUse, LensConversion type) { - RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); + //RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); } public static void addReconstructorLensConversionRecipe(Ingredient input, ItemStack output, int energyUse) { - addReconstructorLensConversionRecipe(input, output, energyUse, lensDefaultConversion); + //addReconstructorLensConversionRecipe(input, output, energyUse, lensDefaultConversion); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 599f52a34..9e8dfd81a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.mod.blocks.base.FullyDirectionalBlock; import de.ellpeck.actuallyadditions.mod.config.CommonConfig; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityFermentingBarrel; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.Lang; import de.ellpeck.actuallyadditions.mod.util.StackUtil; @@ -89,11 +90,17 @@ public class BlockAtomicReconstructor extends FullyDirectionalBlock.Container im } @Nullable - //@Override - public TileEntity newBlockEntity(IBlockReader worldIn) { + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { return new TileEntityAtomicReconstructor(); } + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + // public BlockState getBaseConstructorState() { // return this.stateContainer.getBaseState().with(FACING, Direction.NORTH); // } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java index 799f97885..526ef22d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java @@ -17,11 +17,13 @@ public class CommonConfig { public static class MACHINES { public static ForgeConfigSpec.IntValue FARMER_AREA; + public static ForgeConfigSpec.IntValue RECONSTRUCTOR_POWER; public static void build() { BUILDER.comment("Machine Settings").push("machineSettings"); FARMER_AREA = BUILDER.comment("The size of the farmer's farming area. Default is 9x9, must be an odd number.").defineInRange("farmerArea", 9, 1, Integer.MAX_VALUE); + RECONSTRUCTOR_POWER = BUILDER.comment("The amount of power the atomic reconstructor can store.").defineInRange("reconstructorPower", 300000, 300000, Integer.MAX_VALUE); BUILDER.pop(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java index a09d6dc8f..dd51e8345 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java @@ -70,13 +70,6 @@ public enum ConfigIntValues { 500, "The size of the booklet's large font in percent. Set to 0 to use defaults from the lang file."), - RECONSTRUCTOR_POWER( - "Atomic Reconstructor Power", - ConfigCategories.MACHINE_VALUES, - 300000, - 300000, - Integer.MAX_VALUE, - "The amount of power the atomic reconstructor can store."), MINING_LENS_USE( "Mining Lens Energy", ConfigCategories.MACHINE_VALUES, diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/LaserRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/LaserRecipe.java index 9b99e75ed..e2f3f7293 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/LaserRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/LaserRecipe.java @@ -1,6 +1,7 @@ package de.ellpeck.actuallyadditions.mod.crafting; import com.google.gson.JsonObject; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import net.minecraft.data.IFinishedRecipe; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -16,6 +17,7 @@ import net.minecraft.world.World; import net.minecraftforge.registries.ForgeRegistryEntry; import javax.annotation.Nullable; +import java.util.Optional; public class LaserRecipe implements IRecipe { @@ -37,10 +39,13 @@ public class LaserRecipe implements IRecipe { } public boolean matches(ItemStack itemStack, int energyIn) { - return itemIngredient.test(itemStack) && (energyIn >= energy); } + public boolean matches(ItemStack itemStack) { + return itemIngredient.test(itemStack); + } + //nah @Override public boolean matches(IInventory pInv, World pLevel) { @@ -77,6 +82,14 @@ public class LaserRecipe implements IRecipe { return ActuallyRecipes.Types.LASER; } + public static Optional getRecipeForStack(ItemStack stack) { + return ActuallyAdditionsAPI.CONVERSION_LASER_RECIPES.stream().filter(recipe -> recipe.matches(stack)).findFirst(); + } + + public boolean validInput(ItemStack stack) { + return getRecipeForStack(stack).isPresent(); + } + public static class Serializer extends ForgeRegistryEntry> implements IRecipeSerializer { @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index d88cfc716..d9807bd29 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -58,7 +58,8 @@ public class LensColor extends Lens { ItemStack returnStack = this.tryConvert(new ItemStack(block), hitState, hitBlock, tile); if (returnStack != null && returnStack.getItem() instanceof BlockItem) { Block toPlace = Block.byItem(returnStack.getItem()); - BlockState state2Place = toPlace.defaultBlockState(); //getStateForPlacement(tile.getWorldObject(), hitBlock, Direction.UP, 0, 0, 0, FakePlayerFactory.getMinecraft((ServerWorld) tile.getWorldObject()), Hand.MAIN_HAND); //TODO + BlockState state2Place = toPlace.defaultBlockState(); + //getStateForPlacement(tile.getWorldObject(), hitBlock, Direction.UP, 0, 0, 0, FakePlayerFactory.getMinecraft((ServerWorld) tile.getWorldObject()), Hand.MAIN_HAND); //TODO tile.getWorldObject().setBlock(hitBlock, state2Place, 2); tile.extractEnergy(ENERGY_USE); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensMining.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensMining.java index cae8c2f19..931236f3b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensMining.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensMining.java @@ -27,7 +27,7 @@ import java.util.List; public class LensMining extends Lens { - public static void init() { + public static void init() { //TODO ohhh boy ActuallyAdditionsAPI.addMiningLensStoneOre("oreCoal", 5000); ActuallyAdditionsAPI.addMiningLensNetherOre("oreNetherCoal", 5000); ActuallyAdditionsAPI.addMiningLensStoneOre("oreIron", 3000); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java index e87427802..f62aa7242 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/apiimpl/MethodHandler.java @@ -14,17 +14,29 @@ import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; +import de.ellpeck.actuallyadditions.mod.blocks.BlockLaserRelay; +import de.ellpeck.actuallyadditions.mod.crafting.LaserRecipe; +import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.potion.Effect; import net.minecraft.potion.EffectInstance; import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3i; import java.util.ArrayList; import java.util.List; +import java.util.Optional; public class MethodHandler implements IMethodHandler { @@ -71,12 +83,12 @@ public class MethodHandler implements IMethodHandler { for (int i = 0; i < effects.length; i++) { if (effects[i].getEffect() == effect.getEffect()) { effects[i] = new EffectInstance(effects[i].getEffect(), effects[i].getDuration() + (addDur - ? effect.getDuration() - : 0), effects[i].getAmplifier() + (addAmp - ? effect.getAmplifier() > 0 - ? effect.getAmplifier() - : 1 - : 0)); + ? effect.getDuration() + : 0), effects[i].getAmplifier() + (addAmp + ? effect.getAmplifier() > 0 + ? effect.getAmplifier() + : 1 + : 0)); } this.addEffectToStack(stack, effects[i]); } @@ -111,13 +123,13 @@ public class MethodHandler implements IMethodHandler { counter--; } return effects.size() > 0 - ? effects.toArray(new EffectInstance[effects.size()]) - : null; + ? effects.toArray(new EffectInstance[effects.size()]) + : null; } @Override public boolean invokeConversionLens(BlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile) { -/* if (hitBlock != null) { + if (hitBlock != null) { int range = 1; int rangeX = 0; int rangeY = 0; @@ -147,12 +159,12 @@ public class MethodHandler implements IMethodHandler { if (state.getBlock() instanceof BlockLaserRelay) { continue; } - LensConversionRecipe recipe = LensRecipeHandler.findMatchingRecipe(new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)), tile.getLens()); - if (recipe != null && tile.getEnergy() >= recipe.getEnergyUsed()) { - ItemStack output = recipe.getOutput(); - if (StackUtil.isValid(output)) { + Optional recipe = LaserRecipe.getRecipeForStack(new ItemStack(state.getBlock())); + if (recipe.isPresent() && tile.getEnergy() >= recipe.get().getEnergy()) { + ItemStack output = recipe.get().getResultItem().copy(); + if (!output.isEmpty()) { tile.getWorldObject().levelEvent(2001, pos, Block.getId(state)); - recipe.transformHook(ItemStack.EMPTY, state, pos, tile); + //recipe.transformHook(ItemStack.EMPTY, state, pos, tile); //TODO empty method if (output.getItem() instanceof BlockItem) { Block toPlace = Block.byItem(output.getItem()); BlockState state2Place = toPlace.defaultBlockState(); //.getStateForPlacement(tile.getWorldObject(), pos, facing, 0, 0, 0, output.getMetadata(), FakePlayerFactory.getMinecraft((WorldServer) tile.getWorldObject()), Hand.MAIN_HAND); //TODO @@ -163,7 +175,7 @@ public class MethodHandler implements IMethodHandler { tile.getWorldObject().setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); } - tile.extractEnergy(recipe.getEnergyUsed()); + tile.extractEnergy(recipe.get().getEnergy()); break; } } @@ -180,12 +192,12 @@ public class MethodHandler implements IMethodHandler { for (ItemEntity item : items) { ItemStack stack = item.getItem(); if (item.isAlive() && StackUtil.isValid(stack) && !item.getPersistentData().getBoolean("aa_cnv")) { - LensConversionRecipe recipe = LensRecipeHandler.findMatchingRecipe(stack, tile.getLens()); - if (recipe != null) { - int itemsPossible = Math.min(tile.getEnergy() / recipe.getEnergyUsed(), stack.getCount()); + Optional recipe = LaserRecipe.getRecipeForStack(stack); + if (recipe.isPresent()) { + int itemsPossible = Math.min(tile.getEnergy() / recipe.get().getEnergy(), stack.getCount()); if (itemsPossible > 0) { - recipe.transformHook(item.getItem(), null, item.blockPosition(), tile); + //recipe.transformHook(item.getItem(), null, item.blockPosition(), tile); //TODO empty method item.remove(); if (stack.getCount() - itemsPossible > 0) { @@ -196,21 +208,21 @@ public class MethodHandler implements IMethodHandler { tile.getWorldObject().addFreshEntity(inputLeft); } - ItemStack outputCopy = recipe.getOutput().copy(); + ItemStack outputCopy = recipe.get().getResultItem().copy(); outputCopy.setCount(itemsPossible); ItemEntity newItem = new ItemEntity(tile.getWorldObject(), item.getX(), item.getY(), item.getZ(), outputCopy); newItem.getPersistentData().putBoolean("aa_cnv", true); tile.getWorldObject().addFreshEntity(newItem); - tile.extractEnergy(recipe.getEnergyUsed() * itemsPossible); + tile.extractEnergy(recipe.get().getEnergy() * itemsPossible); break; } } } } return !hitState.getBlock().isAir(hitState, tile.getWorldObject(), hitBlock); - }*/ + } return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 37c2648a3..8cdbb5687 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks; +import de.ellpeck.actuallyadditions.mod.config.CommonConfig; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -45,7 +46,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple public TileEntityAtomicReconstructor() { super(ActuallyBlocks.ATOMIC_RECONSTRUCTOR.getTileEntityType(), 1); - int power = ConfigIntValues.RECONSTRUCTOR_POWER.getValue(); + int power = CommonConfig.MACHINES.RECONSTRUCTOR_POWER.get(); int recieve = MathHelper.ceil(power * 0.016666F); this.storage = new CustomEnergyStorage(power, recieve, 0); this.lazyEnergy = LazyOptional.of(() -> this.storage); @@ -153,7 +154,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple @Override public IAcceptor getAcceptor() { - return (slot, stack, automation) -> StackUtil.isValid(stack) && stack.getItem() instanceof ILensItem; + return (slot, stack, automation) -> !stack.isEmpty() && stack.getItem() instanceof ILensItem; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index c394bc9bc..f861e90d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -13,6 +13,8 @@ package de.ellpeck.actuallyadditions.mod.util; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.platform.GlStateManager; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.particle.ParticleBeam; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import net.minecraft.client.Minecraft; @@ -30,6 +32,9 @@ import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.fml.network.NetworkRegistry; +import net.minecraftforge.fml.network.PacketDispatcher; +import net.minecraftforge.fml.network.PacketDistributor; public final class AssetUtil { @@ -214,7 +219,7 @@ public final class AssetUtil { data.putFloat("Size", size); data.putInt("MaxAge", maxAge); data.putFloat("Alpha", alpha); - //PacketHandler.THE_NETWORK.sendToAllAround(new PacketServerToClient(data, PacketHandler.LASER_HANDLER), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 96)); //TODO + PacketHandler.THE_NETWORK.send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint(startX, startY, startZ, 96, world.dimension())), new PacketServerToClient(data, PacketHandler.LASER_HANDLER)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ResourceReloader.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ResourceReloader.java index 301f5214a..b2062f056 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ResourceReloader.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ResourceReloader.java @@ -3,11 +3,14 @@ package de.ellpeck.actuallyadditions.mod.util; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.crafting.ActuallyRecipes; +import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.RecipeManager; import net.minecraft.resources.DataPackRegistries; import net.minecraft.resources.IResourceManager; import net.minecraft.resources.IResourceManagerReloadListener; +import java.util.List; + @SuppressWarnings("deprecation") public class ResourceReloader implements IResourceManagerReloadListener { private final DataPackRegistries data; @@ -29,5 +32,8 @@ public class ResourceReloader implements IResourceManagerReloadListener { ActuallyAdditionsAPI.FERMENTING_RECIPES.clear(); ActuallyAdditionsAPI.FERMENTING_RECIPES.addAll(recipeManager.getAllRecipesFor(ActuallyRecipes.Types.FERMENTING)); + + ActuallyAdditionsAPI.CONVERSION_LASER_RECIPES.clear(); + ActuallyAdditionsAPI.CONVERSION_LASER_RECIPES.addAll(recipeManager.getAllRecipesFor(ActuallyRecipes.Types.LASER)); } }