Merge pull request #1551 from draknyte1/Fix-Shitty-PA-Handling

Added a better way for the Processing Array to handle recipes.
Now addons can register machines to the PA.
This commit is contained in:
Alkalus 2020-04-06 21:50:46 +01:00 committed by GitHub
commit e9ac987f04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 197 additions and 177 deletions

View file

@ -0,0 +1,31 @@
package gregtech.api.util;
import java.util.HashMap;
import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
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));
}
}

View file

@ -9,7 +9,9 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
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 net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
@ -69,93 +71,12 @@ public class GT_MetaTileEntity_AdvancedProcessingArray extends GT_MetaTileEntity
return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "AdvancedProcessingArray.png");
}
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("press")) {
return GT_Recipe.GT_Recipe_Map.sPressRecipes;
} 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;
}

View file

@ -9,7 +9,9 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
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 net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
@ -64,93 +66,12 @@ public class GT_MetaTileEntity_ProcessingArray extends GT_MetaTileEntity_MultiBl
return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, getLocalName(), "ProcessingArray.png");
}
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("press")) {
return GT_Recipe.GT_Recipe_Map.sPressRecipes;
} 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;
}

View file

@ -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, 368, GT_Recipe.GT_Recipe_Map.sCentrifugeRecipes);
// Electrolyzer
registerMapBetweenRange(371, 378, GT_Recipe.GT_Recipe_Map.sElectrolyzerRecipes);
// Assembler
registerMapBetweenRange(211, 218, GT_Recipe.GT_Recipe_Map.sAssemblerRecipes);
// Compressor
registerMapBetweenRange(241, 248, GT_Recipe.GT_Recipe_Map.sCompressorRecipes);
//Extractor
registerMapBetweenRange(271, 278, GT_Recipe.GT_Recipe_Map.sExtractorRecipes);
//Macerator
registerMapBetweenRange(301, 308, GT_Recipe.GT_Recipe_Map.sMaceratorRecipes);
// Microwave (New)
registerMapBetweenRange(311, 318, GT_Recipe.GT_Recipe_Map.sMicrowaveRecipes);
//Recycler
registerMapBetweenRange(331, 338, GT_Recipe.GT_Recipe_Map.sRecyclerRecipes);
//Thermal Centrifuge
registerMapBetweenRange(381, 388, GT_Recipe.GT_Recipe_Map.sThermalCentrifugeRecipes);
// Ore Washer
registerMapBetweenRange(391, 398, GT_Recipe.GT_Recipe_Map.sOreWasherRecipes);
// Chemical Reactor
registerMapBetweenRange(421, 428, GT_Recipe.GT_Recipe_Map.sChemicalRecipes);
// Chemical Bath
registerMapBetweenRange(541, 548, GT_Recipe.GT_Recipe_Map.sChemicalBathRecipes);
// Magnetic Seperator
registerMapBetweenRange(561, 568, GT_Recipe.GT_Recipe_Map.sElectroMagneticSeparatorRecipes);
// Autoclave
registerMapBetweenRange(571, 578, GT_Recipe.GT_Recipe_Map.sAutoclaveRecipes);
// Mixer
registerMapBetweenRange(581, 588, GT_Recipe.GT_Recipe_Map.sMixerRecipes);
// Forge Hammer
registerMapBetweenRange(611, 618, GT_Recipe.GT_Recipe_Map.sHammerRecipes);
// Sifter
registerMapBetweenRange(641, 648, GT_Recipe.GT_Recipe_Map.sSifterRecipes);
// Extruder
registerMapBetweenRange(281, 288, GT_Recipe.GT_Recipe_Map.sExtruderRecipes);
// Laser Engraver
registerMapBetweenRange(591, 598, GT_Recipe.GT_Recipe_Map.sLaserEngraverRecipes);
// Bender
registerMapBetweenRange(221, 228, GT_Recipe.GT_Recipe_Map.sBenderRecipes);
// Wiremill
registerMapBetweenRange(351, 358, GT_Recipe.GT_Recipe_Map.sWiremillRecipes);
// Arc Furnace
registerMapBetweenRange(651, 658, GT_Recipe.GT_Recipe_Map.sArcFurnaceRecipes);
// Plasma Arc Furnace
registerMapBetweenRange(661, 668, GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes);
// Brewery
registerMapBetweenRange(491, 498, GT_Recipe.GT_Recipe_Map.sBrewingRecipes);
// Canner
registerMapBetweenRange(231, 238, GT_Recipe.GT_Recipe_Map.sCannerRecipes);
// Cutter
registerMapBetweenRange(251, 258, GT_Recipe.GT_Recipe_Map.sCutterRecipes);
// Fermenter
registerMapBetweenRange(501, 508, GT_Recipe.GT_Recipe_Map.sFermentingRecipes);
// Fluid Extractor
registerMapBetweenRange(511, 518, GT_Recipe.GT_Recipe_Map.sFluidExtractionRecipes);
// Fluid Solidifier
registerMapBetweenRange(521, 528, GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes);
// Lathe
registerMapBetweenRange(291, 298, GT_Recipe.GT_Recipe_Map.sLatheRecipes);
// Boxinator
registerMapBetweenRange(401, 408, GT_Recipe.GT_Recipe_Map.sBoxinatorRecipes);
// Unboxinator
registerMapBetweenRange(411, 408, GT_Recipe.GT_Recipe_Map.sUnboxinatorRecipes);
// Polarizer
registerMapBetweenRange(551, 558, GT_Recipe.GT_Recipe_Map.sPolarizerRecipes);
// Printer
registerMapBetweenRange(321, 328, GT_Recipe.GT_Recipe_Map.sPrinterRecipes);
// Fluid Canner
registerMapBetweenRange(431, 438, GT_Recipe.GT_Recipe_Map.sFluidCannerRecipes);
// Fluid Heater
registerMapBetweenRange(621, 628, GT_Recipe.GT_Recipe_Map.sFluidHeaterRecipes);
// Distillery
registerMapBetweenRange(531, 538, GT_Recipe.GT_Recipe_Map.sDistilleryRecipes);
// Slicer
registerMapBetweenRange(631, 638, GT_Recipe.GT_Recipe_Map.sSlicerRecipes);
// Matter Amplifier
registerMapBetweenRange(471, 478, GT_Recipe.GT_Recipe_Map.sAmplifiers);
// Circuit Assembler
registerMapBetweenRange(1180, 1187, GT_Recipe.GT_Recipe_Map.sCircuitAssemblerRecipes);
// Alloy Smelter
registerMapBetweenRange(201, 208, GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes);
// Forming Press
registerMapBetweenRange(601, 608, 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);
}
}
}

View file

@ -28,6 +28,7 @@ import gregtech.common.tileentities.machines.steam.*;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_Locker;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumTank;
import gregtech.loaders.postload.GT_ProcessingArrayRecipeLoader;
import ic2.core.Ic2Items;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@ -1199,6 +1200,8 @@ public class GT_Loader_MetaTileEntities implements Runnable {
ItemList.Processing_Array.set(new GT_MetaTileEntity_ProcessingArray(1199, "multimachine.processingarray", "Processing Array").getStackForm(1L));
GT_ModHandler.addCraftingRecipe(ItemList.Processing_Array.get(1L, new Object[0]), bitsd, new Object[]{"CTC", "FMF", "CBC", 'M', ItemList.Hull_EV, 'B', OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.Elite), 'F', ItemList.Robot_Arm_EV, 'T', ItemList.Energy_LapotronicOrb});
GT_ProcessingArrayRecipeLoader.registerDefaultGregtechMaps();
ItemList.Advanced_Processing_Array.set(new GT_MetaTileEntity_AdvancedProcessingArray(1188, "multimachine.advancedprocessingarray", "Advanced Processing Array").getStackForm(1L));
GT_ModHandler.addCraftingRecipe(ItemList.Advanced_Processing_Array.get(1L, new Object[0]), bitsd, new Object[]{"RRR", "CPC", "CPC", 'R', ItemList.Robot_Arm_LuV, 'C', OrePrefixes.circuit.get(Materials.Master), 'P', ItemList.Processing_Array});