Skip to content

Commit

Permalink
Fixed all IC2-same machines
Browse files Browse the repository at this point in the history
- Added custom Recipe maps for Recycler and typical IC2 machines
  • Loading branch information
TheDarkDnKTv committed Feb 8, 2021
1 parent 429d472 commit f492b86
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 104 deletions.
37 changes: 37 additions & 0 deletions src/main/java/gregtechmod/common/recipe/ChancedStack.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package gregtechmod.common.recipe;

import java.util.Optional;
import java.util.Random;

import gregtechmod.api.recipe.ChancedOutput;
import gregtechmod.common.recipe.factory.SimpleRecipeFactory;
import net.minecraft.item.ItemStack;

/**
* @author TheDarkDnKTv
*
*/
public class ChancedStack implements ChancedOutput {
private int chance;
private ItemStack stack;

public ChancedStack(ItemStack stack, int chance) {
this.stack = stack.copy();
this.chance = chance;
}

@Override
public int getChance() {
return chance;
}

@Override
public ItemStack getStack() {
return stack.copy();
}

@Override
public Optional<ItemStack> get(Random random) {
return Optional.ofNullable(random.nextInt(SimpleRecipeFactory.MAX_CHANCE) <= chance ? stack.copy() : null);
}
}
9 changes: 7 additions & 2 deletions src/main/java/gregtechmod/common/recipe/RecipeMaps.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package gregtechmod.common.recipe;

import gregtechmod.api.recipe.RecipeMap;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.common.recipe.factory.SimpleRecipeFactory;
import gregtechmod.common.recipe.maps.MaceratorRecipeMap;
import gregtechmod.common.recipe.maps.IC2RecipeMap;
import gregtechmod.common.recipe.maps.RecyclerRecipeMap;

/**
*
Expand Down Expand Up @@ -40,5 +42,8 @@ public class RecipeMaps {
public static final RecipeMap<SimpleRecipeFactory> MAGIC_FUELS = new RecipeMap<>(1, 1, 0, 1, new SimpleRecipeFactory());

// Fake RecipeMaps
public static final MaceratorRecipeMap MACERATION = new MaceratorRecipeMap(1, 2, 1, 2);
public static final IC2RecipeMap MACERATION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getMaceratorRecipeList);
public static final IC2RecipeMap EXTRACTION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getExtractorRecipeList);
public static final IC2RecipeMap COMPRESSION = new IC2RecipeMap(1, 2, 1, 2, GT_ModHandler::getCompressorRecipeList);
public static final RecyclerRecipeMap RECYCLING = new RecyclerRecipeMap(1, 2, 1, 2);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;

import gregtechmod.api.GregTech_API;
import gregtechmod.api.recipe.ChancedOutput;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.recipe.RecipeFactory;
import gregtechmod.api.recipe.RecipeMap;
import gregtechmod.api.util.GT_RecipeException;
import gregtechmod.common.recipe.ChancedStack;
import gregtechmod.common.recipe.RecipeEntry;
import gregtechmod.common.recipe.RecipeEntry.Match;

Expand Down Expand Up @@ -82,29 +80,4 @@ public Recipe build() {
return recipe;
} throw new GT_RecipeException(errors.toString());
}

static class ChancedStack implements ChancedOutput {
private int chance;
private ItemStack stack;

ChancedStack(ItemStack stack, int chance) {
this.stack = stack.copy();
this.chance = chance;
}

@Override
public int getChance() {
return chance;
}

@Override
public ItemStack getStack() {
return stack.copy();
}

@Override
public Optional<ItemStack> get(Random random) {
return Optional.ofNullable(random.nextInt(MAX_CHANCE) <= chance ? stack.copy() : null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.function.Supplier;

import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.util.GT_Utility;
import gregtechmod.common.recipe.RecipeEntry;

Expand All @@ -14,22 +15,24 @@

import net.minecraft.item.ItemStack;

/**
/** A Recipe map for usual IC2 machines, used as adapter
* @author TheDarkDnKTv
*
*/
public class MaceratorRecipeMap extends DummyRecipeMap {

public MaceratorRecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs) {
public class IC2RecipeMap extends DummyRecipeMap {
private final Map<IRecipeInput, RecipeOutput> recipeList;

public IC2RecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs, Supplier<Map<IRecipeInput, RecipeOutput>> recipeMapGetter) {
super(minInputs, maxInputs, minOutputs, maxOutputs);
this.recipeList = recipeMapGetter.get();
}

@Override
public Recipe findRecipe(List<ItemStack> input) {
for (ItemStack in : input) {
if (GT_Utility.isStackValid(in)) {
ItemStack inValid = in.copy();
for (Entry<IRecipeInput, RecipeOutput> e : GT_ModHandler.getMaceratorRecipeList().entrySet()) {
for (Entry<IRecipeInput, RecipeOutput> e : recipeList.entrySet()) {
if (e.getKey().matches(inValid)) {
inValid.stackSize = e.getKey().getAmount();
return new Recipe(0, 2, 400, false,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package gregtechmod.common.recipe.maps;

import java.util.Collections;
import java.util.List;

import gregtechmod.api.enums.GT_Items;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.util.GT_Utility;
import gregtechmod.common.recipe.ChancedStack;
import gregtechmod.common.recipe.RecipeEntry;

import net.minecraft.item.ItemStack;

/**
* @author TheDarkDnKTv
*
*/
public class RecyclerRecipeMap extends DummyRecipeMap {
public RecyclerRecipeMap(int minInputs, int maxInputs, int minOutputs, int maxOutputs) {
super(minInputs, maxInputs, minOutputs, maxOutputs);
}

@Override
public Recipe findRecipe(List<ItemStack> inputs) {
for (ItemStack slot : inputs) {
if (GT_Utility.isStackValid(slot)) {
ItemStack instance = slot.copy();
instance.stackSize = 1;

ChancedStack st = new ChancedStack(GT_Items.IC2_Scrap.get(1), (GT_ModHandler.getRecyclerOutput(instance, 0) != null) ? 12_50 : 0);
return new Recipe(0, 1, 45, false,
Collections.singleton(RecipeEntry.singleton(instance)),
Collections.emptyList(),
Collections.singleton(st));
}
}

return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
package gregtechmod.common.tileentities.machines.basic;

import java.util.List;

import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.recipe.RecipeMap;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;

public class GT_MetaTileEntity_Compressor extends GT_MetaTileEntity_BasicMachine {

public GT_MetaTileEntity_Compressor(int aID, String mName, List<Recipe> recipeMap) {
public GT_MetaTileEntity_Compressor(int aID, String mName, RecipeMap<?> recipeMap) {
super(aID, mName, recipeMap);
}

public GT_MetaTileEntity_Compressor(List<Recipe> recipeMap) {
public GT_MetaTileEntity_Compressor(RecipeMap<?> recipeMap) {
super(recipeMap);
}

Expand All @@ -28,19 +24,6 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Compressor(recipeLogic.recipeMap);
}

@Override
protected void initRecipeLogic(List<Recipe> recipeMap) {
super.initRecipeLogic(recipeMap);;
recipeLogic.setRecipeProvider(() -> {
ItemStack output = null;
if (mInventory[2] != null && (output = GT_ModHandler.getCompressorOutput(mInventory[2], false, mInventory[3])) != null) {
return new Recipe(mInventory[2].copy(), null, output, null, null, null, 400, 2, 0, false); // TODO add methods get input by output, or all recipe here
}

return null;
});
}

@Override
public int getFrontFacingInactive() {
return 248;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
package gregtechmod.common.tileentities.machines.basic;

import java.util.List;

import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.recipe.RecipeMap;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;

public class GT_MetaTileEntity_Extractor extends GT_MetaTileEntity_BasicMachine {

public GT_MetaTileEntity_Extractor(int aID, String mName, List<Recipe> recipeMap) {
public GT_MetaTileEntity_Extractor(int aID, String mName, RecipeMap<?> recipeMap) {
super(aID, mName, recipeMap);
}

public GT_MetaTileEntity_Extractor(List<Recipe> recipeMap) {
public GT_MetaTileEntity_Extractor(RecipeMap<?> recipeMap) {
super(recipeMap);
}

Expand All @@ -28,19 +24,6 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Extractor(recipeLogic.recipeMap);
}

@Override
protected void initRecipeLogic(List<Recipe> recipeMap) {
super.initRecipeLogic(recipeMap);
recipeLogic.setRecipeProvider(() -> {
ItemStack output = null;
if (mInventory[2] != null && null != (output = GT_ModHandler.getExtractorOutput(mInventory[2], true, mInventory[3]))) {
return new Recipe(mInventory[2].copy(), null, output, null, null, null, 400, 2, 0, true); // TODO add methods get input by output, or all recipe here
}

return null;
});
}

@Override
public int getSideFacingInactive() {
return 242;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,21 @@
package gregtechmod.common.tileentities.machines.basic;

import java.util.List;

import gregtechmod.api.interfaces.IGregTechTileEntity;
import gregtechmod.api.metatileentity.MetaTileEntity;
import gregtechmod.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine;
import gregtechmod.api.recipe.Recipe;
import gregtechmod.api.recipe.RecipeMap;
import gregtechmod.api.util.GT_ModHandler;
import gregtechmod.api.util.GT_Utility;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;

public class GT_MetaTileEntity_Recycler extends GT_MetaTileEntity_BasicMachine {

public GT_MetaTileEntity_Recycler(int aID, String mName, List<Recipe> recipeMap) {
public GT_MetaTileEntity_Recycler(int aID, String mName, RecipeMap<?> recipeMap) {
super(aID, mName, recipeMap);
}

public GT_MetaTileEntity_Recycler(List<Recipe> recipeMap) {
public GT_MetaTileEntity_Recycler(RecipeMap<?> recipeMap) {
super(recipeMap);
}

Expand All @@ -28,25 +26,6 @@ public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_Recycler(recipeLogic.recipeMap);
}

@Override
public void initRecipeLogic(List<Recipe> recipeMap) {
super.initRecipeLogic(recipeMap);
recipeLogic.setRecipeProvider(() -> {
if (GT_Utility.isStackValid(mInventory[2])) {
ItemStack instance = mInventory[2].copy();
instance.stackSize = 1;
return new Recipe(instance, null, null, null, null, null, 45, 1, 0, false) {
@Override
public ItemStack[] getOutputs() {
return new ItemStack[] {GT_ModHandler.getRecyclerOutput(mInputs[0][0], getBaseMetaTileEntity().getRandomNumber(8))}; // FIXME made chanded output in Recipe
}
};
}

return null;
});
}

@Override
public int getFrontFacingInactive() {
return 248;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ public void run() {
new GT_MetaTileEntity_DigitalChest ( 48, "GT_Barrel");
new GT_MetaTileEntity_QuantumChest ( 49, "GT_QuantumChest");
new GT_MetaTileEntity_Macerator ( 50, "GT_Macerator" , RecipeMaps.MACERATION);
// new GT_MetaTileEntity_Extractor ( 51, "GT_Extractor" , Collections.emptyList()); // TODO custom recipes
// new GT_MetaTileEntity_Compressor ( 52, "GT_Compressor" , Collections.emptyList()); // TODO custom recipes
// new GT_MetaTileEntity_Recycler ( 53, "GT_Recycler" , Collections.emptyList()); // TODO custom recipes
new GT_MetaTileEntity_Extractor ( 51, "GT_Extractor" , RecipeMaps.EXTRACTION);
new GT_MetaTileEntity_Compressor ( 52, "GT_Compressor" , RecipeMaps.COMPRESSION);
new GT_MetaTileEntity_Recycler ( 53, "GT_Recycler" , RecipeMaps.RECYCLING);
new GT_MetaTileEntity_E_Furnace ( 54, "GT_E_Furnace" , null);
new GT_MetaTileEntity_Wiremill ( 55, "GT_Wiremill" , RecipeMaps.WIREMILL);
new GT_MetaTileEntity_AlloySmelter ( 56, "GT_AlloySmelter" , RecipeMaps.ALLOY_SMELTING);
Expand Down

0 comments on commit f492b86

Please sign in to comment.