aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.properties2
-rw-r--r--src/main/java/gregtech/GT_Mod.java1
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java1
-rw-r--r--src/main/java/gregtech/api/enums/Textures.java5
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java5
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java2
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java5
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java14
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java3
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java15
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Casings8.java6
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java189
-rw-r--r--src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java4
-rw-r--r--src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java9
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java1
-rw-r--r--src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java1
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MAGICAL.pngbin0 -> 622 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER.pngbin0 -> 382 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE.pngbin0 -> 389 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE_GLOW.pngbin0 -> 379 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_GLOW.pngbin0 -> 378 bytes
21 files changed, 255 insertions, 8 deletions
diff --git a/build.properties b/build.properties
index 7742be8ce7..ce66df0e6d 100644
--- a/build.properties
+++ b/build.properties
@@ -1,6 +1,6 @@
minecraft.version=1.7.10
forge.version=10.13.4.1614-1.7.10
-gt.version=5.09.38.02
+gt.version=5.09.38.03
structurelib.version=1.0.6
ae2.version=rv3-beta-22
applecore.version=1.7.10-1.2.1+107.59407
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java
index 777cea09e5..1fff51b4c4 100644
--- a/src/main/java/gregtech/GT_Mod.java
+++ b/src/main/java/gregtech/GT_Mod.java
@@ -81,6 +81,7 @@ import static gregtech.api.enums.GT_Values.MOD_ID_FR;
" required-after:" + StructureLib.MOD_ID + ";" +
" after:dreamcraft;" +
" after:Forestry;" +
+ " after:gendustry;" +
" after:PFAAGeologica;" +
" after:Thaumcraft;" +
" after:Railcraft;" +
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
index a77a0de902..8dcf5fe129 100644
--- a/src/main/java/gregtech/api/enums/ItemList.java
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -843,6 +843,7 @@ public enum ItemList implements IItemContainer {
Casing_MiningBlackPlutonium,
Casing_Advanced_Rhodium_Palladium,
Casing_Advanced_Iridium,
+ Casing_Magical,
Hull_ULV,
Hull_LV,
diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java
index 49aac808d6..e4aa589955 100644
--- a/src/main/java/gregtech/api/enums/Textures.java
+++ b/src/main/java/gregtech/api/enums/Textures.java
@@ -246,6 +246,7 @@ public class Textures {
MACHINE_CASING_MINING_BLACKPLUTONIUM,
MACHINE_CASING_RHODIUM_PALLADIUM,
MACHINE_CASING_IRIDIUM,
+ MACHINE_CASING_MAGICAL,
MACHINE_CASING_FIREBOX_TITANIUM,
MACHINE_CASING_FUSION_COIL,
@@ -533,6 +534,10 @@ public class Textures {
OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW,
OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE,
OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW,
+ OVERLAY_FRONT_RESEARCH_COMPLETER,
+ OVERLAY_FRONT_RESEARCH_COMPLETER_GLOW,
+ OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE,
+ OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE_GLOW,
OVERLAY_TOP_POTIONBREWER,
OVERLAY_TOP_POTIONBREWER_GLOW,
diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
index 5d2a9321c4..fbae0b6752 100644
--- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
+++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
@@ -204,7 +204,10 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank {
}
GT_MetaTileEntity_BasicTank tTank = (GT_MetaTileEntity_BasicTank) mTileEntity.getMetaTileEntity();
IFluidAccess tFillableAccess = IFluidAccess.from(tTank, true);
- return handleFluidSlotClick(tFillableAccess, aPlayer, aMouseclick == 0, true, true);
+ ItemStack tToken = handleFluidSlotClick(tFillableAccess, aPlayer, aMouseclick == 0, true, true);
+ if (mTileEntity.isServerSide() && tToken != null)
+ mTileEntity.markInventoryBeenModified();
+ return tToken;
} else {
return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer);
}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java b/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java
index 437d896800..74ad58c407 100644
--- a/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IHasInventory.java
@@ -5,6 +5,8 @@ import net.minecraft.item.ItemStack;
public interface IHasInventory extends ISidedInventory, IHasWorldObjectAndCoords {
+ default void markInventoryBeenModified() {}
+
/**
* if the Inventory of this TileEntity got modified this tick
*/
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 397d03e0df..41203c3ad2 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -1749,6 +1749,11 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
}
@Override
+ public void markInventoryBeenModified() {
+ mInventoryChanged = true;
+ }
+
+ @Override
public void setGenericRedstoneOutput(boolean aOnOff) {
mRedstone = aOnOff;
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java
index a0fc7abcc7..2ff1e87348 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java
@@ -9,6 +9,7 @@ import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gregtech.api.util.GT_Utility;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.FluidStack;
import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN;
@@ -66,6 +67,19 @@ public class GT_MetaTileEntity_Hatch_Input extends GT_MetaTileEntity_Hatch {
}
@Override
+ public void saveNBTData(NBTTagCompound aNBT) {
+ super.saveNBTData(aNBT);
+ if (mRecipeMap != null)
+ aNBT.setString("recipeMap", mRecipeMap.mUniqueIdentifier);
+ }
+
+ @Override
+ public void loadNBTData(NBTTagCompound aNBT) {
+ super.loadNBTData(aNBT);
+ mRecipeMap = GT_Recipe_Map.sIndexedMappings.getOrDefault(aNBT.getString("recipeMap"), null);
+ }
+
+ @Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
if (aBaseMetaTileEntity.isClientSide()) return true;
aBaseMetaTileEntity.openGUI(aPlayer);
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
index 96667ddb8c..37a98162b8 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
@@ -169,6 +169,8 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch {
aNBT.setBoolean("disableSort", disableSort);
aNBT.setBoolean("disableFilter", disableFilter);
aNBT.setBoolean("disableLimited", disableLimited);
+ if (mRecipeMap != null)
+ aNBT.setString("recipeMap", mRecipeMap.mUniqueIdentifier);
}
@Override
@@ -178,6 +180,7 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch {
disableFilter = aNBT.getBoolean("disableFilter");
if(aNBT.hasKey("disableLimited"))
disableLimited = aNBT.getBoolean("disableLimited");
+ mRecipeMap = GT_Recipe_Map.sIndexedMappings.getOrDefault(aNBT.getString("recipeMap"), null);
}
@Override
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
index 6130adfaef..96018571e9 100644
--- a/src/main/java/gregtech/api/util/GT_Recipe.java
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -572,6 +572,10 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
* Contains all Recipe Maps
*/
public static final Collection<GT_Recipe_Map> sMappings = new ArrayList<>();
+ /**
+ * All recipe maps indexed by their {@link #mUniqueIdentifier}.
+ */
+ public static final Map<String, GT_Recipe_Map> sIndexedMappings = new HashMap<>();
public static final GT_Recipe_Map sOreWasherRecipes = new GT_Recipe_Map(new HashSet<>(500), "gt.recipe.orewasher", "Ore Washing Plant", null, RES_PATH_GUI + "basicmachines/OreWasher", 1, 3, 1, 1, 1, E, 1, E, true, true);
public static final GT_Recipe_Map sThermalCentrifugeRecipes = new GT_Recipe_Map(new HashSet<>(1000), "gt.recipe.thermalcentrifuge", "Thermal Centrifuge", null, RES_PATH_GUI + "basicmachines/ThermalCentrifuge", 1, 3, 1, 0, 2, E, 1, E, true, true);
@@ -653,7 +657,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
public static final GT_Recipe_Map_Fuel sHugeNaquadahReactorFuels = new GT_Recipe_Map_Fuel(new HashSet<>(1), "gt.recipe.fluidnaquadahreactor", "Naquadah Reactor MkIII", null, RES_PATH_GUI + "basicmachines/Default", 1, 1, 0, 0, 1, "Fuel Value: ", 1000, " EU", true, true);
public static final GT_Recipe_Map_Fuel sExtremeNaquadahReactorFuels = new GT_Recipe_Map_Fuel(new HashSet<>(1), "gt.recipe.hugenaquadahreactor", "Naquadah Reactor MkIV", null, RES_PATH_GUI + "basicmachines/Default", 1, 1, 0, 0, 1, "Fuel Value: ", 1000, " EU", true, true);
public static final GT_Recipe_Map_Fuel sUltraHugeNaquadahReactorFuels = new GT_Recipe_Map_Fuel(new HashSet<>(1), "gt.recipe.extrahugenaquadahreactor", "Naquadah Reactor MkV", null, RES_PATH_GUI + "basicmachines/Default", 1, 1, 0, 0, 1, "Fuel Value: ", 1000, " EU", true, true);
- public static final GT_Recipe_Map_Fuel sFluidNaquadahReactorFuels = new GT_Recipe_Map_Fuel(new HashSet<>(1), "gt.recipe.fluidnaquadahreactor", "Fluid Naquadah Reactor", null, RES_PATH_GUI + "basicmachines/Default", 1, 1, 0, 0, 1, "Fuel Value: ", 1000, " EU", true, true);
+ public static final GT_Recipe_Map_Fuel sFluidNaquadahReactorFuels = new GT_Recipe_Map_Fuel(new HashSet<>(1), "gt.recipe.fluidfuelnaquadahreactor", "Fluid Naquadah Reactor", null, RES_PATH_GUI + "basicmachines/Default", 1, 1, 0, 0, 1, "Fuel Value: ", 1000, " EU", true, true);
public static final GT_Recipe_Map_LargeBoilerFakeFuels sLargeBoilerFakeFuels = new GT_Recipe_Map_LargeBoilerFakeFuels();
/**
@@ -686,6 +690,12 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
public final boolean mNEIAllowed, mShowVoltageAmperageInNEI;
/**
+ * Unique identifier for this recipe map. Generated from aUnlocalizedName and a few other parameters.
+ * See constructor for details.
+ */
+ public final String mUniqueIdentifier;
+
+ /**
* Initialises a new type of Recipe Handler.
*
* @param aRecipeList a List you specify as Recipe List. Usually just an ArrayList with a pre-initialised Size.
@@ -717,6 +727,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
GregTech_API.sFluidMappings.add(mRecipeFluidMap);
GregTech_API.sItemStackMappings.add(mRecipeItemMap);
GT_LanguageManager.addStringLocalization(mUnlocalizedName = aUnlocalizedName, aLocalName);
+ mUniqueIdentifier = String.format("%s_%d_%d_%d_%d_%d", aUnlocalizedName, aAmperage, aUsualInputCount, aUsualOutputCount, aMinimalInputFluids, aMinimalInputItems);
+ if (sIndexedMappings.put(mUniqueIdentifier, this) != null)
+ throw new IllegalArgumentException("Duplicate recipe map registered: " + mUniqueIdentifier);
}
public GT_Recipe addRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecial, int[] aOutputChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) {
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java
index e57af3a219..4f719ffeaf 100644
--- a/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java
@@ -14,7 +14,7 @@ public class GT_Block_Casings8 extends GT_Block_Casings_Abstract {
//WATCH OUT FOR TEXTURE ID's
public GT_Block_Casings8() {
super(GT_Item_Casings8.class, "gt.blockcasings8", GT_Material_Casings.INSTANCE);
- for (int i = 0; i < 8; i = (i + 1)) {
+ for (int i = 0; i < 9; i = (i + 1)) {
Textures.BlockIcons.casingTexturePages[1][i+48] = TextureFactory.of(this, i);
}
GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Chemically Inert Machine Casing");
@@ -25,6 +25,7 @@ public class GT_Block_Casings8 extends GT_Block_Casings_Abstract {
GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Europium Reinforced Radiation Proof Machine Casing");
GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Advanced Rhodium Plated Palladium Machine Casing");
GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Advanced Iridium Plated Machine Casing");
+ GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Magical Machine Casing");
ItemList.Casing_Chemically_Inert.set(new ItemStack(this, 1, 0));
ItemList.Casing_Pipe_Polytetrafluoroethylene.set(new ItemStack(this, 1, 1));
@@ -34,6 +35,7 @@ public class GT_Block_Casings8 extends GT_Block_Casings_Abstract {
ItemList.Casing_AdvancedRadiationProof.set(new ItemStack(this, 1, 5));
ItemList.Casing_Advanced_Rhodium_Palladium.set(new ItemStack(this, 1, 6));
ItemList.Casing_Advanced_Iridium.set(new ItemStack(this, 1, 7));
+ ItemList.Casing_Magical.set(new ItemStack(this, 1, 8));
}
@Override
@@ -56,6 +58,8 @@ public class GT_Block_Casings8 extends GT_Block_Casings_Abstract {
return Textures.BlockIcons.MACHINE_CASING_RHODIUM_PALLADIUM.getIcon();
case 7:
return Textures.BlockIcons.MACHINE_CASING_IRIDIUM.getIcon();
+ case 8:
+ return Textures.BlockIcons.MACHINE_CASING_MAGICAL.getIcon();
}
return Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon();
}
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java
new file mode 100644
index 0000000000..b7b73b86b4
--- /dev/null
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java
@@ -0,0 +1,189 @@
+package gregtech.common.items;
+
+import com.google.common.collect.ImmutableMap;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Item;
+import gregtech.api.util.GT_LanguageManager;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/** This class holds cells for non-GT fluids. */
+public class GT_MetaGenerated_Item_98 extends GT_MetaGenerated_Item {
+ public static GT_MetaGenerated_Item_98 INSTANCE;
+
+ /**
+ * Map of internal fluid name to cell type to register for that fluid.
+ *
+ * <p>The fluid at index {@code i} (in entry set iteration order) will be assigned ID {@code i}.
+ *
+ * <p>When adding a fluid, don't forget to make sure that GregTech loads after the mod that adds
+ * that fluid!
+ *
+ * <p>In order to avoid breaking existing worlds, the entries in this list must not be
+ * re-ordered or removed! The only safe modification that can be made to this list is adding new
+ * entries to the end. To remove an entry, pass {@code null} in for the fluid name.
+ */
+ private static final ImmutableMap<String, CellType> FLUIDS =
+ ImmutableMap.<String, CellType>builder()
+ .put("steam", CellType.REGULAR)
+ .put("bacterialsludge", CellType.REGULAR)
+ .put("mutagen", CellType.REGULAR)
+ .put("ender", CellType.REGULAR)
+ .put("endergoo", CellType.REGULAR)
+ .build();
+
+ /**
+ * We support adding two different types of cells.
+ *
+ * <p>Regular cells have capacity 1000 and use the regular cell icon. Molten cells have capacity
+ * 144 and use the molten cell icon.
+ */
+ private enum CellType {
+ REGULAR(1_000, OrePrefixes.cell),
+ MOLTEN(144, OrePrefixes.cellMolten);
+ // We could also add plasma cells (cellPlasma) here if we need to.
+ // Plasma cells look like molten cells, but have 1000 capacity.
+
+ private final int capacity;
+ private final OrePrefixes prefix;
+
+ CellType(int capacity, OrePrefixes prefix) {
+ this.capacity = capacity;
+ this.prefix = prefix;
+ }
+ }
+
+ /** Struct class holding data that we need to properly handle a registered fluid cell item. */
+ private static class RegisteredFluidData {
+ private final Fluid fluid;
+ private final short[] rgba;
+ private final IIconContainer iconContainer;
+
+ private RegisteredFluidData(Fluid fluid, short[] rgba, IIconContainer iconContainer) {
+ this.fluid = fluid;
+ this.rgba = rgba;
+ this.iconContainer = iconContainer;
+ }
+ }
+
+ /**
+ * Map of ID to registered fluid data.
+ *
+ * <p>Only contains IDs that were successfully registered.
+ */
+ private final Map<Integer, RegisteredFluidData> registeredFluidDataMap;
+
+ public GT_MetaGenerated_Item_98() {
+ // For some reason, fluid cells will be rendered only if the metadata ID is less than the
+ // offset. So we will specify maximum offset here.
+ // See: GT_MetaGenerated_Item_Renderer.java
+ super("metaitem.98", (short) 32766, (short) FLUIDS.size());
+
+ INSTANCE = this;
+ registeredFluidDataMap = new HashMap<>();
+
+ int i = -1;
+ for (Map.Entry<String, CellType> entry : FLUIDS.entrySet()) {
+ i++; // Increment first so that we don't accidentally skip doing so with continue
+ String fluidName = entry.getKey();
+ CellType cellType = entry.getValue();
+ if (fluidName == null) {
+ continue;
+ }
+
+ Fluid fluid = FluidRegistry.getFluid(fluidName);
+ if (fluid == null) {
+ // Fluid is not guaranteed to exist.
+ // These fluids are non-GT fluids, so the mod may not be present.
+ continue;
+ }
+
+ ItemStack itemStack = new ItemStack(this, 1, i);
+ FluidStack fluidStack = new FluidStack(fluid, cellType.capacity);
+
+ FluidContainerRegistry.registerFluidContainer(
+ new FluidContainerRegistry.FluidContainerData(
+ fluidStack, itemStack, ItemList.Cell_Empty.get(1L)));
+
+ GT_LanguageManager.addStringLocalization(
+ getUnlocalizedName(itemStack) + ".name",
+ cellType.prefix.mLocalizedMaterialPre + fluid.getLocalizedName(fluidStack) + cellType.prefix.mLocalizedMaterialPost);
+
+ int color = fluid.getColor();
+ short[] rgba = new short[4];
+ rgba[0] = (short) ((color & 0x00FF0000) >> 16);
+ rgba[1] = (short) ((color & 0x0000FF00) >> 8);
+ rgba[2] = (short) (color & 0x000000FF);
+ rgba[3] = (short) ((color & 0xFF000000) >> 24);
+
+ // We'll just steal the icons from Water. They are all the same anyway (except _NULL is broken for cells).
+ IIconContainer iconContainer = Materials.Water.mIconSet.mTextures[cellType.prefix.mTextureIndex];
+ registeredFluidDataMap.put(i, new RegisteredFluidData(fluid, rgba, iconContainer));
+ }
+
+ // We're not going to use these BitSets, so clear them to save memory.
+ mEnabledItems.clear();
+ mVisibleItems.clear();
+ }
+
+ @Override
+ public short[] getRGBa(ItemStack aStack) {
+ RegisteredFluidData fluidData = registeredFluidDataMap.get(aStack.getItemDamage());
+ if (fluidData == null) {
+ return Materials._NULL.mRGBa;
+ }
+
+ return fluidData.rgba;
+ }
+
+ @Override
+ public ItemStack getContainerItem(ItemStack aStack) {
+ return ItemList.Cell_Empty.get(1L);
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) {
+ registeredFluidDataMap.keySet().stream()
+ .map(i -> new ItemStack(this, 1, i))
+ .forEach(aList::add);
+ }
+
+ @Override
+ public final IIcon getIconFromDamage(int aMetaData) {
+ IIconContainer iconContainer = getIconContainer(aMetaData);
+ if (iconContainer != null) {
+ return iconContainer.getIcon();
+ }
+ return null;
+ }
+
+ @Override
+ public IIconContainer getIconContainer(int aMetaData) {
+ RegisteredFluidData fluidData = registeredFluidDataMap.get(aMetaData);
+ if (fluidData == null) {
+ return null;
+ }
+ return fluidData.iconContainer;
+ }
+
+ @Override
+ public int getItemStackLimit(ItemStack aStack) {
+ return 64;
+ }
+}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
index 29f416c9f4..99a65373ae 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
@@ -48,6 +48,7 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
case "craftingLensOrange":
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_SoC2.get(1), 1800, 1920, true);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Simple_SoC.get(1), 300, 64, false);
+ GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Simple_SoC.get(4), 300, 256, false);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_NPIC.get(1), 1800, 30720, true);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_NPIC.get(4), 1800, 122880, true);
break;
@@ -57,7 +58,7 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Ram.get(1), 1200, 120, false);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Ram.get(4), 900, 480, true);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Ram.get(8), 600, 1920, true);
-
+ GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Simple_SoC.get(64), 300, 4096, false);
break;
case "craftingLensRed":
GT_Values.RA.addLaserEngraverRecipe(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Redstone, 1L), GT_Utility.copyAmount(0L, aStack), GT_ModHandler.getModItem("BuildCraft|Silicon", "redstoneChipset", 1L, 0), 50, 120);
@@ -73,6 +74,7 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Chip_CrystalSoC.get(1L), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Chip_CrystalSoC2.get(1), 1200, 80000, true);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_ULPIC.get(2), 600, 30, false);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_ULPIC.get(8), 600, 120, false);
+ GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Simple_SoC.get(16), 300, 1024, false);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Ram.get(16), 600, 7680, true);
GT_Values.RA.addLaserEngraverRecipe(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0L, aStack), ItemList.Circuit_Wafer_Ram.get(32), 600, 30720, true);
break;
diff --git a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
index d9d45e5b5e..5a75a2c480 100644
--- a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
+++ b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
@@ -3107,9 +3107,12 @@ public class GT_MachineRecipeLoader implements Runnable {
GT_Values.RA.addChemicalRecipe(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(11), Materials.Ethylene.getGas(1000), Materials.HydrochloricAcid.getFluid(1000), Materials.VinylChloride.getCells(1), Materials.Empty.getCells(1), 160);
GT_Values.RA.addChemicalRecipe(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(11), Materials.Chlorine.getGas(2000), Materials.HydrochloricAcid.getFluid(1000), Materials.VinylChloride.getCells(1), 160);
- GT_Values.RA.addChemicalRecipe(Materials.Ethylene.getCells(1), Materials.HydrochloricAcid.getCells(1), Materials.Oxygen.getGas(1000), Materials.VinylChloride.getGas(1000), Materials.Water.getCells(1), Materials.Empty.getCells(1), 160);
- GT_Values.RA.addChemicalRecipe(Materials.HydrochloricAcid.getCells(1), Materials.Oxygen.getCells(1), Materials.Ethylene.getGas(1000), Materials.VinylChloride.getGas(1000), Materials.Water.getCells(1), Materials.Empty.getCells(1), 160);
- GT_Values.RA.addChemicalRecipe(Materials.Oxygen.getCells(1), Materials.Ethylene.getCells(1), Materials.HydrochloricAcid.getFluid(1000), Materials.VinylChloride.getGas(1000), Materials.Water.getCells(1), Materials.Empty.getCells(1), 160);
+ GT_Values.RA.addChemicalRecipeForBasicMachineOnly(Materials.Ethylene.getCells(1), Materials.HydrochloricAcid.getCells(1), Materials.Oxygen.getGas(1000), Materials.VinylChloride.getGas(1000), Materials.Water.getCells(1), Materials.Empty.getCells(1), 160, 30);
+ GT_Values.RA.addChemicalRecipeForBasicMachineOnly(Materials.HydrochloricAcid.getCells(1), Materials.Oxygen.getCells(1), Materials.Ethylene.getGas(1000), Materials.VinylChloride.getGas(1000), Materials.Water.getCells(1), Materials.Empty.getCells(1), 160, 30);
+ GT_Values.RA.addChemicalRecipeForBasicMachineOnly(Materials.Oxygen.getCells(1), Materials.Ethylene.getCells(1), Materials.HydrochloricAcid.getFluid(1000), Materials.VinylChloride.getGas(1000), Materials.Water.getCells(1), Materials.Empty.getCells(1), 160, 30);
+
+ GT_Values.RA.addMultiblockChemicalRecipe(new ItemStack[]{GT_Utility.getIntegratedCircuit(2)}, new FluidStack[]{Materials.HydrochloricAcid.getFluid(1000), Materials.Ethylene.getFluid(1000), Materials.Oxygen.getFluid(1000)}, new FluidStack[]{Materials.VinylChloride.getFluid(1000), Materials.Water.getFluid(1000)}, null, 160, 30);
+ GT_Values.RA.addMultiblockChemicalRecipe(new ItemStack[]{GT_Utility.getIntegratedCircuit(24)}, new FluidStack[]{Materials.Chlorine.getFluid(2000), Materials.Ethylene.getFluid(2000), Materials.Oxygen.getFluid(1000)}, new FluidStack[]{Materials.VinylChloride.getFluid(2000), Materials.Water.getFluid(1000)}, null, 240, 30);
GT_Values.RA.addDefaultPolymerizationRecipes(Materials.VinylChloride.mGas, Materials.VinylChloride.getCells(1), Materials.PolyvinylChloride.mStandardMoltenFluid);
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
index 9992b4b691..7ecf7c7de1 100644
--- a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java
@@ -71,6 +71,7 @@ public class GT_Loader_Item_Block_And_Fluid implements Runnable {
new GT_MetaGenerated_Item_01();
new GT_MetaGenerated_Item_02();
new GT_MetaGenerated_Item_03();
+ new GT_MetaGenerated_Item_98();
new GT_MetaGenerated_Item_99();
new GT_MetaGenerated_Tool_01();
new GT_FluidDisplayItem();
diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
index 2c56766162..90a5d603d2 100644
--- a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
+++ b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java
@@ -64,6 +64,7 @@ public class GT_NEI_DefaultHandler extends RecipeMapHandler {
if (mCachedRecipesVersion == GT_Mod.gregtechproxy.getReloadCount() || mCachedRecipes == null || (cache = mCachedRecipes.get()) == null) {
cache = mRecipeMap.mRecipeList.stream() // do not use parallel stream. This is already parallelized by NEI
.filter(r -> !r.mHidden)
+ .sorted()
.map(CachedDefaultRecipe::new)
.collect(Collectors.toList());
// while the NEI parallelize handlers, for each individual handler it still uses sequential execution model
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MAGICAL.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MAGICAL.png
new file mode 100644
index 0000000000..822e0e4147
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_MAGICAL.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER.png
new file mode 100644
index 0000000000..da0ce84a35
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE.png
new file mode 100644
index 0000000000..89277c79d6
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE_GLOW.png
new file mode 100644
index 0000000000..4a8ad42dd8
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_ACTIVE_GLOW.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_GLOW.png
new file mode 100644
index 0000000000..1227d5a7fd
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FRONT_RESEARCH_COMPLETER_GLOW.png
Binary files differ