Skip to content

Commit

Permalink
Added a better way for the Processing Array to handle recipes.
Browse files Browse the repository at this point in the history
Blood-Asp/GT5-Unofficial#1551
add missing Packer machines back
  • Loading branch information
Dream-Master committed Apr 6, 2020
1 parent 018903f commit 6319dac
Show file tree
Hide file tree
Showing 5 changed files with 210 additions and 108 deletions.
3 changes: 3 additions & 0 deletions src/main/java/gregtech/api/enums/ItemList.java
Original file line number Diff line number Diff line change
Expand Up @@ -1168,6 +1168,9 @@ public enum ItemList implements IItemContainer {
Machine_HV_Boxinator,
Machine_EV_Boxinator,
Machine_IV_Boxinator,
Machine_LuV_Boxinator,
Machine_ZPM_Boxinator,
Machine_UV_Boxinator,

Machine_LV_Unboxinator,
Machine_MV_Unboxinator,
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/gregtech/api/util/GT_ProcessingArray_Manager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package gregtech.api.util;

import gregtech.api.util.GT_Recipe.GT_Recipe_Map;

import java.util.HashMap;

public class GT_ProcessingArray_Manager {

private static final HashMap<Integer, String> mMetaKeyMap = new HashMap<Integer, String>();
private static final HashMap<String, GT_Recipe_Map> mRecipeCache = new HashMap<String, GT_Recipe_Map>();

public static boolean registerRecipeMapForMeta(int aMeta, GT_Recipe_Map aMap) {
if (aMeta < 0 || aMeta > Short.MAX_VALUE || aMap == null) {
return false;
}
if (mMetaKeyMap.containsKey(aMeta)) {
return false;
}
String aMapNameKey = aMap.mUnlocalizedName;
mMetaKeyMap.put(aMeta, aMapNameKey);
if (!mRecipeCache.containsKey(aMapNameKey)) {
mRecipeCache.put(aMapNameKey, aMap);
}
return true;
}

public static GT_Recipe_Map getRecipeMapForMeta(int aMeta) {
return mRecipeCache.get(mMetaKeyMap.get(aMeta));
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
package gregtech.common.tileentities.machines.multi;

import static gregtech.api.enums.GT_Values.VN;
import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine.isValidForLowGravity;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang3.ArrayUtils;

import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
Expand All @@ -22,7 +12,9 @@
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_ProcessingArray_Manager;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GT_Utility;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
Expand All @@ -32,6 +24,15 @@
import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import org.apache.commons.lang3.ArrayUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static gregtech.api.enums.GT_Values.VN;
import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine.isValidForLowGravity;

public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_MultiBlockBase {

Expand Down Expand Up @@ -101,93 +102,13 @@ public void remoteRecipeCheck() {
}
*/

public GT_Recipe.GT_Recipe_Map getRecipeMap() {
if (mInventory[1] == null) return null;
String tmp = mInventory[1].getUnlocalizedName().replaceAll("gt\\.blockmachines\\.basicmachine\\.", "");
if (tmp.startsWith("centrifuge")) {
return GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes;
} else if (tmp.startsWith("electrolyzer")) {
return GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes;
} else if (tmp.startsWith("alloysmelter")) {
return GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes;
} else if (tmp.startsWith("assembler")) {
return GT_Recipe.GT_Recipe_Map.sAssemblerRecipes;
} else if (tmp.startsWith("compressor")) {
return GT_Recipe.GT_Recipe_Map.sCompressorRecipes;
} else if (tmp.startsWith("extractor")) {
return GT_Recipe.GT_Recipe_Map.sExtractorRecipes;
} else if (tmp.startsWith("macerator")) {
return GT_Recipe.GT_Recipe_Map.sMaceratorRecipes;
} else if (tmp.startsWith("recycler")) {
return GT_Recipe.GT_Recipe_Map.sRecyclerRecipes;
} else if (tmp.startsWith("thermalcentrifuge")) {
return GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes;
} else if (tmp.startsWith("orewasher")) {
return GT_Recipe.GT_Recipe_Map.sOreWasherRecipes;
} else if (tmp.startsWith("chemicalreactor")) {
return GT_Recipe.GT_Recipe_Map.sChemicalRecipes;
} else if (tmp.startsWith("chemicalbath")) {
return GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes;
} else if (tmp.startsWith("electromagneticseparator")) {
return GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes;
} else if (tmp.startsWith("autoclave")) {
return GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes;
} else if (tmp.startsWith("mixer")) {
return GT_Recipe.GT_Recipe_Map.sMixerRecipes;
} else if (tmp.startsWith("hammer")) {
return GT_Recipe.GT_Recipe_Map.sHammerRecipes;
} else if (tmp.startsWith("sifter")) {
return GT_Recipe.GT_Recipe_Map.sSifterRecipes;
} else if (tmp.startsWith("extruder")) {
return GT_Recipe.GT_Recipe_Map.sExtruderRecipes;
} else if (tmp.startsWith("laserengraver")) {
return GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes;
} else if (tmp.startsWith("bender")) {
return GT_Recipe.GT_Recipe_Map.sBenderRecipes;
} else if (tmp.startsWith("wiremill")) {
return GT_Recipe.GT_Recipe_Map.sWiremillRecipes;
} else if (tmp.startsWith("arcfurnace")) {
return GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes;
} else if (tmp.startsWith("brewery")) {
return GT_Recipe.GT_Recipe_Map.sBrewingRecipes;
} else if (tmp.startsWith("canner")) {
return GT_Recipe.GT_Recipe_Map.sCannerRecipes;
} else if (tmp.startsWith("cutter")) {
return GT_Recipe.GT_Recipe_Map.sCutterRecipes;
} else if (tmp.startsWith("fermenter")) {
return GT_Recipe.GT_Recipe_Map.sFermentingRecipes;
} else if (tmp.startsWith("fluidextractor")) {
return GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes;
} else if (tmp.startsWith("fluidsolidifier")) {
return GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes;
} else if (tmp.startsWith("lathe")) {
return GT_Recipe.GT_Recipe_Map.sLatheRecipes;
} else if (tmp.startsWith("boxinator")) {
return GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes;
} else if (tmp.startsWith("unboxinator")) {
return GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes;
} else if (tmp.startsWith("polarizer")) {
return GT_Recipe.GT_Recipe_Map.sPolarizerRecipes;
} else if(tmp.startsWith("press")){
return GT_Recipe.GT_Recipe_Map.sPressRecipes;
} else if (tmp.startsWith("plasmaarcfurnace")) {
return GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes;
} else if (tmp.startsWith("printer")) {
return GT_Recipe.GT_Recipe_Map.sPrinterRecipes;
} else if (tmp.startsWith("fluidcanner")) {
return GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes;
} else if (tmp.startsWith("fluidheater")) {
return GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes;
} else if (tmp.startsWith("distillery")) {
return GT_Recipe.GT_Recipe_Map.sDistilleryRecipes;
} else if (tmp.startsWith("slicer")) {
return GT_Recipe.GT_Recipe_Map.sSlicerRecipes;
} else if (tmp.startsWith("amplifier")) {
return GT_Recipe.GT_Recipe_Map.sAmplifiers;
} else if (tmp.startsWith("circuitassembler")) {
return GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes;
public GT_Recipe_Map getRecipeMap() {
if (isCorrectMachinePart(mInventory[1])) {
GT_Recipe_Map aTemp = GT_ProcessingArray_Manager.getRecipeMapForMeta(mInventory[1].getItemDamage());
if (aTemp != null) {
return aTemp;
}
}

return null;
}

Expand Down Expand Up @@ -256,7 +177,7 @@ public boolean checkRecipe(ItemStack aStack) {

if (!mMachine.equals(mInventory[1].getUnlocalizedName())) mLastRecipe = null;
mMachine = mInventory[1].getUnlocalizedName();

ArrayList<FluidStack> tFluidList = getStoredFluids();
FluidStack[] tFluids = (FluidStack[]) tFluidList.toArray(new FluidStack[tFluidList.size()]);
if (mSeparate) {
Expand All @@ -280,7 +201,7 @@ public boolean checkRecipe(ItemStack aStack) {
}
return false;
}

public boolean processRecipe(ItemStack[] tInputs, FluidStack[] tFluids, GT_Recipe.GT_Recipe_Map map) {
if (tInputs.length > 0 || tFluids.length > 0) {
GT_Recipe tRecipe = map.findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, gregtech.api.enums.GT_Values.V[tTier], tFluids, tInputs);
Expand Down Expand Up @@ -371,7 +292,7 @@ public boolean processRecipe(ItemStack[] tInputs, FluidStack[] tFluids, GT_Recip
}
return false;
}

public static ItemStack[] clean(final ItemStack[] v) {
List<ItemStack> list = new ArrayList<ItemStack>(Arrays.asList(v));
list.removeAll(Collections.singleton(null));
Expand Down Expand Up @@ -405,19 +326,19 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a
}
return tAmount >= 14;
}

@Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
aNBT.setBoolean("mSeparate", mSeparate);
}

@Override
public void loadNBTData(final NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
mSeparate = aNBT.getBoolean("mSeparate");
}

@Override
public final void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
mSeparate = !mSeparate;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
package gregtech.loaders.postload;

import gregtech.api.util.GT_ProcessingArray_Manager;
import gregtech.api.util.GT_Recipe;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;

public class GT_ProcessingArrayRecipeLoader {

public static void registerDefaultGregtechMaps() {

// Centrifuge
registerMapBetweenRange(361, 365, GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes);

// Electrolyzer
registerMapBetweenRange(371, 375, GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes);

// Assembler
registerMapBetweenRange(211, 215, GT_Recipe.GT_Recipe_Map.sAssemblerRecipes);

// Compressor
registerMapBetweenRange(241, 245, GT_Recipe.GT_Recipe_Map.sCompressorRecipes);

//Extractor
registerMapBetweenRange(271, 275, GT_Recipe.GT_Recipe_Map.sExtractorRecipes);

//Macerator
registerMapBetweenRange(301, 305, GT_Recipe.GT_Recipe_Map.sMaceratorRecipes);

// Microwave (New)
registerMapBetweenRange(311, 315, GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes);

//Recycler
registerMapBetweenRange(331, 335, GT_Recipe.GT_Recipe_Map.sRecyclerRecipes);

//Thermal Centrifuge
registerMapBetweenRange(381, 385, GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes);

// Ore Washer
registerMapBetweenRange(391, 395, GT_Recipe.GT_Recipe_Map.sOreWasherRecipes);

// Chemical Reactor
registerMapBetweenRange(421, 425, GT_Recipe.GT_Recipe_Map.sChemicalRecipes);

// Chemical Bath
registerMapBetweenRange(541, 545, GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes);

// Magnetic Seperator
registerMapBetweenRange(561, 565, GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes);

// Autoclave
registerMapBetweenRange(571, 575, GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes);

// Mixer
registerMapBetweenRange(581, 585, GT_Recipe.GT_Recipe_Map.sMixerRecipes);

// Forge Hammer
registerMapBetweenRange(611, 615, GT_Recipe.GT_Recipe_Map.sHammerRecipes);

// Sifter
registerMapBetweenRange(641, 645, GT_Recipe.GT_Recipe_Map.sSifterRecipes);

// Extruder
registerMapBetweenRange(281, 285, GT_Recipe.GT_Recipe_Map.sExtruderRecipes);

// Laser Engraver
registerMapBetweenRange(591, 595, GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes);

// Bender
registerMapBetweenRange(221, 225, GT_Recipe.GT_Recipe_Map.sBenderRecipes);

// Wiremill
registerMapBetweenRange(351, 355, GT_Recipe.GT_Recipe_Map.sWiremillRecipes);

// Arc Furnace
registerMapBetweenRange(651, 655, GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes);

// Plasma Arc Furnace
registerMapBetweenRange(661, 665, GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes);

// Brewery
registerMapBetweenRange(491, 495, GT_Recipe.GT_Recipe_Map.sBrewingRecipes);

// Canner
registerMapBetweenRange(231, 235, GT_Recipe.GT_Recipe_Map.sCannerRecipes);

// Cutter
registerMapBetweenRange(251, 255, GT_Recipe.GT_Recipe_Map.sCutterRecipes);

// Fermenter
registerMapBetweenRange(501, 505, GT_Recipe.GT_Recipe_Map.sFermentingRecipes);

// Fluid Extractor
registerMapBetweenRange(511, 515, GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes);

// Fluid Solidifier
registerMapBetweenRange(521, 525, GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes);

// Lathe
registerMapBetweenRange(291, 295, GT_Recipe.GT_Recipe_Map.sLatheRecipes);

// Boxinator
registerMapBetweenRange(401, 411, GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes);

// Unboxinator
registerMapBetweenRange(411, 421, GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes);

// Polarizer
registerMapBetweenRange(551, 555, GT_Recipe.GT_Recipe_Map.sPolarizerRecipes);

// Printer
registerMapBetweenRange(321, 325, GT_Recipe.GT_Recipe_Map.sPrinterRecipes);

// Fluid Canner
registerMapBetweenRange(431, 435, GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes);

// Fluid Heater
registerMapBetweenRange(621, 625, GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes);

// Distillery
registerMapBetweenRange(531, 535, GT_Recipe.GT_Recipe_Map.sDistilleryRecipes);

// Slicer
registerMapBetweenRange(631, 635, GT_Recipe.GT_Recipe_Map.sSlicerRecipes);

// Matter Amplifier
registerMapBetweenRange(471, 475, GT_Recipe.GT_Recipe_Map.sAmplifiers);

// Circuit Assembler
registerMapBetweenRange(1180, 1187, GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes);

// Alloy Smelter
registerMapBetweenRange(201, 205, GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes);

// Forming Press
registerMapBetweenRange(601, 605, GT_Recipe.GT_Recipe_Map.sPressRecipes);

}

private static final void registerMapBetweenRange(int aMin, int aMax, GT_Recipe_Map aMap) {
for (int i=aMin; i<=aMax;i++) {
GT_ProcessingArray_Manager.registerRecipeMapForMeta(i, aMap);
}
}
}
Loading

0 comments on commit 6319dac

Please sign in to comment.