From 98a6ca6552f710a5c4008aa8144da7baa891bb46 Mon Sep 17 00:00:00 2001 From: TechLord22 <37029404+TechLord22@users.noreply.github.com> Date: Mon, 9 Aug 2021 02:04:08 -0400 Subject: [PATCH] Add Gas Collectors (#68) * add dimension-specific gas collectors --- .../java/gregtech/api/gui/GuiTextures.java | 1 + .../java/gregtech/api/recipes/RecipeMaps.java | 6 + .../builders/GasCollectorRecipeBuilder.java | 68 ++++++++++ .../GasCollectorDimensionProperty.java | 44 +++++++ .../java/gregtech/api/render/Textures.java | 1 + .../java/gregtech/common/ConfigHolder.java | 3 - .../metatileentities/MetaTileEntities.java | 32 ++--- .../electric/MetaTileEntityAirCollector.java | 116 ------------------ .../electric/MetaTileEntityGasCollector.java | 95 ++++++++++++++ .../gregtech/integration/jei/GTJeiPlugin.java | 2 - .../loaders/recipe/MetaTileEntityLoader.java | 2 +- .../recipe/chemistry/ChemistryRecipes.java | 7 ++ .../resources/assets/gregtech/lang/en_us.lang | 20 +-- .../machines/gas_collector/overlay_back.png | Bin 0 -> 209 bytes .../gas_collector/overlay_back_active.png | Bin 0 -> 209 bytes .../machines/gas_collector/overlay_bottom.png | Bin 0 -> 279 bytes .../gas_collector/overlay_bottom_active.png | Bin 0 -> 279 bytes .../machines/gas_collector/overlay_front.png | Bin 0 -> 209 bytes .../gas_collector/overlay_front_active.png | Bin 0 -> 209 bytes .../machines/gas_collector/overlay_side.png | Bin 0 -> 209 bytes .../gas_collector/overlay_side_active.png | Bin 0 -> 209 bytes .../machines/gas_collector/overlay_top.png | Bin 0 -> 279 bytes .../gas_collector/overlay_top_active.png | Bin 0 -> 279 bytes .../blocks/overlay/machine/overlay_filter.png | Bin 0 -> 279 bytes .../progress_bar_gas_collector.png | Bin 0 -> 2131 bytes 25 files changed, 250 insertions(+), 147 deletions(-) create mode 100644 src/main/java/gregtech/api/recipes/builders/GasCollectorRecipeBuilder.java create mode 100644 src/main/java/gregtech/api/recipes/recipeproperties/GasCollectorDimensionProperty.java delete mode 100644 src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java create mode 100644 src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityGasCollector.java create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_back.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_back_active.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_bottom.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_bottom_active.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_front.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_front_active.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_side.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_side_active.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_top.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_top_active.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/overlay/machine/overlay_filter.png create mode 100644 src/main/resources/assets/gregtech/textures/gui/progress_bar/progress_bar_gas_collector.png diff --git a/src/main/java/gregtech/api/gui/GuiTextures.java b/src/main/java/gregtech/api/gui/GuiTextures.java index 5988888c12d..6d59d5870c6 100644 --- a/src/main/java/gregtech/api/gui/GuiTextures.java +++ b/src/main/java/gregtech/api/gui/GuiTextures.java @@ -146,6 +146,7 @@ public class GuiTextures { public static final TextureArea PROGRESS_BAR_EXTRACT = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_extract.png"); public static final TextureArea PROGRESS_BAR_EXTRUDER = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_extruder.png"); public static final TextureArea PROGRESS_BAR_FUSION = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_fusion.png"); + public static final TextureArea PROGRESS_BAR_GAS_COLLECTOR = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_gas_collector.png"); public static final TextureArea PROGRESS_BAR_HAMMER = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_hammer.png"); public static final TextureArea PROGRESS_BAR_HAMMER_BASE = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_hammer_base.png"); public static final TextureArea PROGRESS_BAR_LATHE = TextureArea.fullImage("textures/gui/progress_bar/progress_bar_lathe.png"); diff --git a/src/main/java/gregtech/api/recipes/RecipeMaps.java b/src/main/java/gregtech/api/recipes/RecipeMaps.java index da108de966d..755153889d1 100644 --- a/src/main/java/gregtech/api/recipes/RecipeMaps.java +++ b/src/main/java/gregtech/api/recipes/RecipeMaps.java @@ -692,6 +692,12 @@ public class RecipeMaps { .setSlotOverlay(false, false, true, GuiTextures.SCANNER_OVERLAY) .setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, MoveType.HORIZONTAL); + @ZenProperty + public static final RecipeMap GAS_COLLECTOR_RECIPES = new RecipeMap<>("gas_collector", 1, 1, 0, 0, 0, 0, 1, 1, new GasCollectorRecipeBuilder(), false) + .setSlotOverlay(false, false, GuiTextures.INT_CIRCUIT_OVERLAY) + .setSlotOverlay(true, true, GuiTextures.CENTRIFUGE_OVERLAY) + .setProgressBar(GuiTextures.PROGRESS_BAR_GAS_COLLECTOR, MoveType.HORIZONTAL); + @ZenProperty public static final FuelRecipeMap COMBUSTION_GENERATOR_FUELS = new FuelRecipeMap("combustion_generator"); diff --git a/src/main/java/gregtech/api/recipes/builders/GasCollectorRecipeBuilder.java b/src/main/java/gregtech/api/recipes/builders/GasCollectorRecipeBuilder.java new file mode 100644 index 00000000000..d15a598eef7 --- /dev/null +++ b/src/main/java/gregtech/api/recipes/builders/GasCollectorRecipeBuilder.java @@ -0,0 +1,68 @@ +package gregtech.api.recipes.builders; + +import gregtech.api.recipes.Recipe; +import gregtech.api.recipes.RecipeBuilder; +import gregtech.api.recipes.RecipeMap; +import gregtech.api.recipes.recipeproperties.GasCollectorDimensionProperty; +import gregtech.api.util.EnumValidationResult; +import gregtech.api.util.ValidationResult; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.ArrayList; +import java.util.List; + +public class GasCollectorRecipeBuilder extends RecipeBuilder { + + private List dimensionIDs; + + public GasCollectorRecipeBuilder() { + } + + public GasCollectorRecipeBuilder(Recipe recipe, RecipeMap recipeMap) { + super(recipe, recipeMap); + this.dimensionIDs = recipe.getProperty(GasCollectorDimensionProperty.getInstance(), new ArrayList()); + } + + public GasCollectorRecipeBuilder(RecipeBuilder recipeBuilder) { + super(recipeBuilder); + } + + @Override + public GasCollectorRecipeBuilder copy() { + return new GasCollectorRecipeBuilder(this); + } + + @Override + public boolean applyProperty(String key, Object value) { + if (key.equals(GasCollectorDimensionProperty.KEY)) { + this.dimension(((Number) value).intValue()); + return true; + } + return true; + } + + public GasCollectorRecipeBuilder dimension(int dimensionID) { + if (this.dimensionIDs == null) + this.dimensionIDs = new ArrayList<>(); + this.dimensionIDs.add(dimensionID); + return this; + } + + public ValidationResult build() { + Recipe recipe = new Recipe(inputs, outputs, chancedOutputs, fluidInputs, fluidOutputs, + duration, EUt, hidden); + if (!recipe.setProperty(GasCollectorDimensionProperty.getInstance(), dimensionIDs)) { + return ValidationResult.newResult(EnumValidationResult.INVALID, recipe); + } + + return ValidationResult.newResult(finalizeAndValidate(), recipe); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .appendSuper(super.toString()) + .append(GasCollectorDimensionProperty.getInstance().getKey(), dimensionIDs.toString()) + .toString(); + } +} diff --git a/src/main/java/gregtech/api/recipes/recipeproperties/GasCollectorDimensionProperty.java b/src/main/java/gregtech/api/recipes/recipeproperties/GasCollectorDimensionProperty.java new file mode 100644 index 00000000000..63aea499b05 --- /dev/null +++ b/src/main/java/gregtech/api/recipes/recipeproperties/GasCollectorDimensionProperty.java @@ -0,0 +1,44 @@ +package gregtech.api.recipes.recipeproperties; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; + +import java.util.List; + +public class GasCollectorDimensionProperty extends RecipeProperty { + public static final String KEY = "dimension"; + + private static GasCollectorDimensionProperty INSTANCE; + + private GasCollectorDimensionProperty() { + super(KEY, List.class); + } + + public static GasCollectorDimensionProperty getInstance() { + if (INSTANCE == null) + INSTANCE = new GasCollectorDimensionProperty(); + return INSTANCE; + } + + @Override + public void drawInfo(Minecraft minecraft, int x, int y, int color, Object value) { + minecraft.fontRenderer.drawString(I18n.format("gregtech.recipe.dimensions", + value, getDimensionsForRecipe(castValue(value))), x, y, color); + } + + private String getDimensionsForRecipe(List value) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < value.size(); i++) { + builder.append(value.get(i)); + if (i != value.size() - 1) + builder.append(", "); + } + String str = builder.toString(); + + if (str.length() >= 13) { + str = str.substring(0, 10) + ".."; + } + return str; + } + +} diff --git a/src/main/java/gregtech/api/render/Textures.java b/src/main/java/gregtech/api/render/Textures.java index fcf18b8f565..fd800669e3d 100644 --- a/src/main/java/gregtech/api/render/Textures.java +++ b/src/main/java/gregtech/api/render/Textures.java @@ -118,6 +118,7 @@ public class Textures { public static final OrientedOverlayRenderer FLUID_SOLIDIFIER_OVERLAY = new OrientedOverlayRenderer("machines/fluid_solidifier", FRONT); public static final OrientedOverlayRenderer FORGE_HAMMER_OVERLAY = new OrientedOverlayRenderer("machines/forge_hammer", FRONT); public static final OrientedOverlayRenderer FORMING_PRESS_OVERLAY = new OrientedOverlayRenderer("machines/press", FRONT, SIDE, TOP); + public static final OrientedOverlayRenderer GAS_COLLECTOR_OVERLAY = new OrientedOverlayRenderer("machines/gas_collector", FRONT, SIDE, TOP, BOTTOM, BACK); public static final OrientedOverlayRenderer LATHE_OVERLAY = new OrientedOverlayRenderer("machines/lathe", FRONT); public static final OrientedOverlayRenderer MIXER_OVERLAY = new OrientedOverlayRenderer("machines/mixer", FRONT, SIDE, TOP); public static final OrientedOverlayRenderer ORE_WASHER_OVERLAY = new OrientedOverlayRenderer("machines/ore_washer", FRONT, SIDE); diff --git a/src/main/java/gregtech/common/ConfigHolder.java b/src/main/java/gregtech/common/ConfigHolder.java index 87e5db93963..ce9bd6a06f8 100644 --- a/src/main/java/gregtech/common/ConfigHolder.java +++ b/src/main/java/gregtech/common/ConfigHolder.java @@ -113,9 +113,6 @@ public class ConfigHolder { @Config.RequiresMcRestart public static int gasTurbineBonusOutput = 6144; - @Config.Comment("Array of blacklisted dimension IDs in which Air Collector does not work. Default: none") - public static int[] airCollectorDimensionBlacklist = new int[]{}; - public static class VanillaRecipes { @Config.Comment("Whether to make glass related recipes harder. Default: true") diff --git a/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java b/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java index f5d5484f8e6..b2fa3bfa42f 100644 --- a/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java +++ b/src/main/java/gregtech/common/metatileentities/MetaTileEntities.java @@ -10,18 +10,25 @@ import gregtech.api.render.Textures; import gregtech.api.unification.material.Materials; import gregtech.api.util.GTLog; -import gregtech.common.ConfigHolder; import gregtech.common.metatileentities.electric.*; -import gregtech.common.metatileentities.electric.multiblockpart.*; +import gregtech.common.metatileentities.electric.multiblockpart.MetaTileEntityEnergyHatch; +import gregtech.common.metatileentities.electric.multiblockpart.MetaTileEntityFluidHatch; +import gregtech.common.metatileentities.electric.multiblockpart.MetaTileEntityItemBus; +import gregtech.common.metatileentities.electric.multiblockpart.MetaTileEntityRotorHolder; import gregtech.common.metatileentities.multi.*; import gregtech.common.metatileentities.multi.MetaTileEntityLargeBoiler.BoilerType; import gregtech.common.metatileentities.multi.electric.*; -import gregtech.common.metatileentities.multi.electric.generator.*; +import gregtech.common.metatileentities.multi.electric.generator.MetaTileEntityLargeCombustionEngine; +import gregtech.common.metatileentities.multi.electric.generator.MetaTileEntityLargeTurbine; import gregtech.common.metatileentities.multi.electric.generator.MetaTileEntityLargeTurbine.TurbineType; -import gregtech.common.metatileentities.multi.steam.*; +import gregtech.common.metatileentities.multi.steam.MetaTileEntitySteamGrinder; +import gregtech.common.metatileentities.multi.steam.MetaTileEntitySteamOven; import gregtech.common.metatileentities.steam.*; -import gregtech.common.metatileentities.steam.boiler.*; -import gregtech.common.metatileentities.steam.multiblockpart.*; +import gregtech.common.metatileentities.steam.boiler.SteamCoalBoiler; +import gregtech.common.metatileentities.steam.boiler.SteamLavaBoiler; +import gregtech.common.metatileentities.steam.boiler.SteamSolarBoiler; +import gregtech.common.metatileentities.steam.multiblockpart.MetaTileEntitySteamHatch; +import gregtech.common.metatileentities.steam.multiblockpart.MetaTileEntitySteamItemBus; import gregtech.common.metatileentities.storage.*; import net.minecraft.util.ResourceLocation; @@ -97,6 +104,7 @@ public class MetaTileEntities { public static final SimpleMachineMetaTileEntity[] MASS_FABRICATOR = new SimpleMachineMetaTileEntity[GTValues.V.length - 1]; public static final SimpleMachineMetaTileEntity[] REPLICATOR = new SimpleMachineMetaTileEntity[GTValues.V.length - 1]; public static final SimpleMachineMetaTileEntity[] SCANNER = new SimpleMachineMetaTileEntity[GTValues.V.length - 1]; + public static final SimpleMachineMetaTileEntity[] GAS_COLLECTOR = new SimpleMachineMetaTileEntity[GTValues.V.length - 1]; //GENERATORS SECTION public static final SimpleGeneratorMetaTileEntity[] COMBUSTION_GENERATOR = new SimpleGeneratorMetaTileEntity[4]; @@ -180,7 +188,6 @@ public class MetaTileEntities { public static MetaTileEntityWorkbench WORKBENCH; public static final MetaTileEntityPump[] PUMP = new MetaTileEntityPump[8]; public static final MetaTileEntityBlockBreaker[] BLOCK_BREAKER = new MetaTileEntityBlockBreaker[4]; - public static final MetaTileEntityAirCollector[] AIR_COLLECTOR = new MetaTileEntityAirCollector[6]; public static final MetaTileEntityItemCollector[] ITEM_COLLECTOR = new MetaTileEntityItemCollector[4]; public static final MetaTileEntityFisher[] FISHER = new MetaTileEntityFisher[4]; @@ -329,7 +336,8 @@ public static void init() { // Unpacker, IDs 530-544 registerSimpleMetaTileEntity(UNPACKER, 530, "unpacker", RecipeMaps.UNPACKER_RECIPES, Textures.UNPACKER_OVERLAY); - // Free Range, IDs 545-559 + // Gas Collectors, IDs 545-559 + registerSimpleMetaTileEntity(GAS_COLLECTOR, 545, "gas_collector", RecipeMaps.GAS_COLLECTOR_RECIPES, Textures.GAS_COLLECTOR_OVERLAY, false); // Polarizer, IDs 560-574 registerSimpleMetaTileEntity(POLARIZER, 560, "polarizer", RecipeMaps.POLARIZER_RECIPES, Textures.POLARIZER_OVERLAY); @@ -526,14 +534,6 @@ public static void init() { PUMP[2] = GregTechAPI.registerMetaTileEntity(1532, new MetaTileEntityPump(gregtechId("pump.hv"), 3)); PUMP[3] = GregTechAPI.registerMetaTileEntity(1533, new MetaTileEntityPump(gregtechId("pump.ev"), 4)); - // Air Collectors, IDs 1545-1559 - AIR_COLLECTOR[0] = GregTechAPI.registerMetaTileEntity(1545, new MetaTileEntityAirCollector(gregtechId("air_collector.lv"), 1)); - AIR_COLLECTOR[1] = GregTechAPI.registerMetaTileEntity(1546, new MetaTileEntityAirCollector(gregtechId("air_collector.mv"), 2)); - AIR_COLLECTOR[2] = GregTechAPI.registerMetaTileEntity(1547, new MetaTileEntityAirCollector(gregtechId("air_collector.hv"), 3)); - AIR_COLLECTOR[3] = GregTechAPI.registerMetaTileEntity(1548, new MetaTileEntityAirCollector(gregtechId("air_collector.ev"), 4)); - AIR_COLLECTOR[4] = GregTechAPI.registerMetaTileEntity(1549, new MetaTileEntityAirCollector(gregtechId("air_collector.iv"), 5)); - AIR_COLLECTOR[5] = GregTechAPI.registerMetaTileEntity(1550, new MetaTileEntityAirCollector(gregtechId("air_collector.luv"), 6)); - // Super / Quantum Chests, IDs 1560-1574 for (int i = 0; i < 5; i++) { String voltageName = GTValues.VN[i + 1].toLowerCase(); diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java deleted file mode 100644 index 76efb8e2dbf..00000000000 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityAirCollector.java +++ /dev/null @@ -1,116 +0,0 @@ -package gregtech.common.metatileentities.electric; - -import codechicken.lib.render.CCRenderState; -import codechicken.lib.render.pipeline.IVertexOperation; -import codechicken.lib.vec.Matrix4; -import gregtech.api.GTValues; -import gregtech.api.capability.impl.FluidTankList; -import gregtech.api.gui.ModularUI; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.MetaTileEntityHolder; -import gregtech.api.metatileentity.TieredMetaTileEntity; -import gregtech.api.render.Textures; -import gregtech.api.unification.material.Materials; -import gregtech.common.ConfigHolder; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; - -import javax.annotation.Nullable; -import java.util.List; -import java.util.stream.IntStream; - -public class MetaTileEntityAirCollector extends TieredMetaTileEntity { - private static final int PRODUCTION_CYCLE_LENGTH = 20; - - public MetaTileEntityAirCollector(ResourceLocation metaTileEntityId, int tier) { - super(metaTileEntityId, tier); - } - - @Override - public MetaTileEntity createMetaTileEntity(MetaTileEntityHolder holder) { - return new MetaTileEntityAirCollector(metaTileEntityId, getTier()); - } - - @Override - protected FluidTankList createExportFluidHandler() { - return new FluidTankList(false, new FluidTank(32000)); - } - - @Override - public void update() { - super.update(); - - if (!getWorld().isRemote) { - long energyToConsume = GTValues.V[getTier()]; - if (checkDimension() && checkOpenSides() && getOffsetTimer() % PRODUCTION_CYCLE_LENGTH == 0L && energyContainer.getEnergyStored() >= energyToConsume) { - int fluidAmount = getCollectedFluidAmount(); - FluidStack fluidStack = Materials.Air.getFluid(fluidAmount); - if (exportFluids.fill(fluidStack, false) == fluidAmount) { - exportFluids.fill(fluidStack, true); - energyContainer.removeEnergy(energyToConsume); - } - } - if (getOffsetTimer() % 5 == 0) { - pushFluidsIntoNearbyHandlers(getFrontFacing()); - } - } - } - - private boolean checkOpenSides() { - EnumFacing frontFacing = getFrontFacing(); - for (EnumFacing side : EnumFacing.VALUES) { - if (side == frontFacing) continue; - if (getWorld().isAirBlock(getPos().offset(side))) - return true; - } - return false; - } - - private boolean checkDimension() { - int dimensionId = getWorld().provider.getDimension(); - return IntStream.of(ConfigHolder.airCollectorDimensionBlacklist).noneMatch(x -> x == dimensionId); - } - - private int getCollectedFluidAmount() { - return 500 * (1 << getTier()); - } - - @Override - public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) { - super.renderMetaTileEntity(renderState, translation, pipeline); - EnumFacing frontFacing = getFrontFacing(); - for (EnumFacing side : EnumFacing.VALUES) { - if (side.getAxis().isHorizontal()) { - Textures.AIR_VENT_OVERLAY.renderSided(side, renderState, translation, pipeline); - } else { - Textures.FILTER_OVERLAY.renderSided(side, renderState, translation, pipeline); - } - } - Textures.PIPE_OUT_OVERLAY.renderSided(frontFacing, renderState, translation, pipeline); - } - - @Override - protected ModularUI createUI(EntityPlayer entityPlayer) { - return null; - } - - @Override - protected boolean openGUIOnRightClick() { - return false; - } - - @Override - public void addInformation(ItemStack stack, @Nullable World player, List tooltip, boolean advanced) { - tooltip.add(I18n.format("gregtech.machine.air_collector.tooltip")); - tooltip.add(I18n.format("gregtech.machine.air_collector.collection_speed", getCollectedFluidAmount(), PRODUCTION_CYCLE_LENGTH)); - tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_in", energyContainer.getInputVoltage(), GTValues.VN[getTier()])); - tooltip.add(I18n.format("gregtech.universal.tooltip.energy_storage_capacity", energyContainer.getEnergyCapacity())); - tooltip.add(I18n.format("gregtech.universal.tooltip.fluid_storage_capacity", exportFluids.getTankAt(0).getCapacity())); - } -} diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityGasCollector.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityGasCollector.java new file mode 100644 index 00000000000..af5a8098a14 --- /dev/null +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityGasCollector.java @@ -0,0 +1,95 @@ +package gregtech.common.metatileentities.electric; + +import gregtech.api.capability.IEnergyContainer; +import gregtech.api.capability.IMultipleTankHandler; +import gregtech.api.capability.impl.RecipeLogicEnergy; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.MetaTileEntityHolder; +import gregtech.api.metatileentity.SimpleMachineMetaTileEntity; +import gregtech.api.recipes.MatchingMode; +import gregtech.api.recipes.Recipe; +import gregtech.api.recipes.RecipeMap; +import gregtech.api.recipes.RecipeMaps; +import gregtech.api.recipes.recipeproperties.GasCollectorDimensionProperty; +import gregtech.api.render.OrientedOverlayRenderer; +import gregtech.api.render.Textures; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.items.IItemHandlerModifiable; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class MetaTileEntityGasCollector extends SimpleMachineMetaTileEntity { + + private int currentDimension; + + public MetaTileEntityGasCollector(ResourceLocation metaTileEntityId, RecipeMap recipeMap, OrientedOverlayRenderer renderer, int tier, boolean hasFrontFacing) { + super(metaTileEntityId, recipeMap, renderer, tier, hasFrontFacing); + } + + @Override + public MetaTileEntity createMetaTileEntity(MetaTileEntityHolder holder) { + return new MetaTileEntityGasCollector(this.metaTileEntityId, RecipeMaps.GAS_COLLECTOR_RECIPES, Textures.GAS_COLLECTOR_OVERLAY, this.getTier(), hasFrontFacing()); + } + + @Override + public void update() { + super.update(); + if (getOffsetTimer() % 20 == 0) + this.currentDimension = this.getWorld().provider.getDimension(); + } + + @Override + protected RecipeLogicEnergy createWorkable(RecipeMap recipeMap) { + final RecipeLogicEnergy result = new GasCollectorRecipeLogic(this, RecipeMaps.GAS_COLLECTOR_RECIPES, () -> energyContainer); + result.enableOverclockVoltage(); + return result; + } + + protected int getCurrentDimension() { + return this.currentDimension; + } + + private class GasCollectorRecipeLogic extends RecipeLogicEnergy { + + public GasCollectorRecipeLogic(MetaTileEntity metaTileEntity, RecipeMap recipeMap, Supplier energyContainer) { + super(metaTileEntity, recipeMap, energyContainer); + } + + @Override + protected void trySearchNewRecipe() { + long maxVoltage = getMaxVoltage(); + Recipe currentRecipe = null; + IItemHandlerModifiable importInventory = getInputInventory(); + IMultipleTankHandler importFluids = getInputTank(); + if (previousRecipe != null && previousRecipe.matches(false, importInventory, importFluids)) { + //if previous recipe still matches inputs, try to use it + currentRecipe = previousRecipe; + } else { + boolean dirty = checkRecipeInputsDirty(importInventory, importFluids); + if (dirty || forceRecipeRecheck) { + this.forceRecipeRecheck = false; + //else, try searching new recipe for given inputs + currentRecipe = findRecipe(maxVoltage, importInventory, importFluids, MatchingMode.DEFAULT); + if (currentRecipe != null) { + List recipeDimensions = currentRecipe.getProperty(GasCollectorDimensionProperty.getInstance(), new ArrayList<>()); + boolean isDimensionValid = false; + for (Integer dimension : recipeDimensions) { + if (dimension == getCurrentDimension()) { + this.previousRecipe = currentRecipe; + isDimensionValid = true; + break; + } + } + if (!isDimensionValid) + currentRecipe = null; + } + } + } + if (currentRecipe != null && setupAndConsumeRecipeInputs(currentRecipe)) { + setupRecipe(currentRecipe); + } + } + } +} diff --git a/src/main/java/gregtech/integration/jei/GTJeiPlugin.java b/src/main/java/gregtech/integration/jei/GTJeiPlugin.java index 3634b7a1cd1..c83a11c1ab6 100755 --- a/src/main/java/gregtech/integration/jei/GTJeiPlugin.java +++ b/src/main/java/gregtech/integration/jei/GTJeiPlugin.java @@ -17,7 +17,6 @@ import gregtech.api.recipes.machines.RecipeMapFurnace; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.MaterialRegistry; -import gregtech.api.unification.material.Materials; import gregtech.api.unification.material.properties.PropertyKey; import gregtech.api.worldgen.config.OreDepositDefinition; import gregtech.api.worldgen.config.WorldGenRegistry; @@ -149,7 +148,6 @@ public void register(IModRegistry registry) { registry.addRecipeCatalyst(MetaTileEntities.LARGE_TITANIUM_BOILER.getStackForm(), semiFluidMapId); registry.addRecipeCatalyst(MetaTileEntities.LARGE_TUNGSTENSTEEL_BOILER.getStackForm(), semiFluidMapId); - registry.addIngredientInfo(Objects.requireNonNull(Materials.Air.getFluid(1000)), VanillaTypes.FLUID, I18n.format("gregtech.machine.air_collector.jei_description")); registry.addIngredientInfo(Objects.requireNonNull(MetaItems.FLUID_CELL.getStackForm()), VanillaTypes.ITEM, I18n.format("gregtech.item.fluid_cell.jei_description")); String primitiveBlastId = GTValues.MODID + ":" + "primitive_blast_furnace"; diff --git a/src/main/java/gregtech/loaders/recipe/MetaTileEntityLoader.java b/src/main/java/gregtech/loaders/recipe/MetaTileEntityLoader.java index 22e12a7b89e..555dc27cb03 100644 --- a/src/main/java/gregtech/loaders/recipe/MetaTileEntityLoader.java +++ b/src/main/java/gregtech/loaders/recipe/MetaTileEntityLoader.java @@ -425,10 +425,10 @@ public static void init() { registerMachineRecipe(MetaTileEntities.MASS_FABRICATOR, "CFC", "QMQ", "CFC", 'M', HULL, 'Q', CABLE_QUAD, 'C', BETTER_CIRCUIT, 'F', FIELD_GENERATOR); registerMachineRecipe(MetaTileEntities.REPLICATOR, "EFE", "CMC", "EQE", 'M', HULL, 'Q', CABLE_QUAD, 'C', BETTER_CIRCUIT, 'F', FIELD_GENERATOR, 'E', EMITTER); registerMachineRecipe(MetaTileEntities.SCANNER, "CEC", "WHW", "CSC", 'C', BETTER_CIRCUIT, 'E', EMITTER, 'W', CABLE, 'H', HULL, 'S', SENSOR); + registerMachineRecipe(MetaTileEntities.GAS_COLLECTOR, "WFW", "PHP", "WCW", 'W', Blocks.IRON_BARS, 'F', MetaItems.FLUID_FILTER, 'P', PUMP, 'H', HULL, 'C', CIRCUIT); registerMachineRecipe(MetaTileEntities.PUMP, "WGW", "GMG", "TGT", 'M', HULL, 'W', CIRCUIT, 'G', PUMP, 'T', PIPE_LARGE); registerMachineRecipe(MetaTileEntities.FISHER, "WTW", "PMP", "TGT", 'M', HULL, 'W', CIRCUIT, 'G', PUMP, 'T', MOTOR, 'P', PISTON); - registerMachineRecipe(MetaTileEntities.AIR_COLLECTOR, "WFW", "PHP", "WCW", 'W', Blocks.IRON_BARS, 'F', MetaItems.ITEM_FILTER, 'P', PUMP, 'H', HULL, 'C', CIRCUIT); registerMachineRecipe(MetaTileEntities.ITEM_COLLECTOR, "MRM", "RHR", "CWC", 'M', MOTOR, 'R', ROTOR, 'H', HULL, 'C', CIRCUIT, 'W', CABLE); registerMachineRecipe(MetaTileEntities.BLOCK_BREAKER, "MGM", "CHC", "WSW", 'M', MOTOR, 'H', HULL, 'C', CIRCUIT, 'W', CABLE, 'S', Blocks.CHEST, 'G', GRINDER); diff --git a/src/main/java/gregtech/loaders/recipe/chemistry/ChemistryRecipes.java b/src/main/java/gregtech/loaders/recipe/chemistry/ChemistryRecipes.java index b43e5540af5..e1ffb83b49d 100644 --- a/src/main/java/gregtech/loaders/recipe/chemistry/ChemistryRecipes.java +++ b/src/main/java/gregtech/loaders/recipe/chemistry/ChemistryRecipes.java @@ -1,5 +1,6 @@ package gregtech.loaders.recipe.chemistry; +import gregtech.api.recipes.ingredients.IntCircuitIngredient; import net.minecraft.init.Items; import static gregtech.api.recipes.RecipeMaps.*; @@ -78,5 +79,11 @@ public static void init() { .output(ingot, RedAlloy, 2) .blastFurnaceTemp(1200) .duration(884).EUt(120).buildAndRegister(); + + GAS_COLLECTOR_RECIPES.recipeBuilder() + .notConsumable(new IntCircuitIngredient(1)) + .fluidOutputs(Air.getFluid(1000)) + .dimension(0) + .duration(20).EUt(16).buildAndRegister(); } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 82ee8097de2..092410f3f6d 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -1927,6 +1927,7 @@ recipemap.semi_fluid_generator.name=Semi Fluid Fuels recipemap.plasma_generator.name=Plasma Generator recipemap.circuit_assembler.name=Circuit Assembler recipemap.mass_fabricator.name=Mass Fabricator +recipemap.gas_collector.name=Gas Collector behaviour.hoe=Can till dirt behaviour.soft_hammer=Activates and Deactivates Machines @@ -3079,15 +3080,15 @@ tile.hermetic_casing.hermetic_casing_uv.name=Hermetic Casing VIII tile.hermetic_casing.hermetic_casing_max.name=Hermetic Casing IX #Air Collectors -gregtech.machine.air_collector.lv.name=Basic Air Collector -gregtech.machine.air_collector.mv.name=Advanced Air Collector -gregtech.machine.air_collector.hv.name=Advanced Air Collector II -gregtech.machine.air_collector.ev.name=Advanced Air Collector III -gregtech.machine.air_collector.iv.name=Atmosphere Collector -gregtech.machine.air_collector.luv.name=Atmosphere Collector II -gregtech.machine.air_collector.tooltip=Collects air from adjacent blocks at the expense of energy -gregtech.machine.air_collector.collection_speed=Produces %,d L of Air every %,d ticks -gregtech.machine.air_collector.jei_description=The Air Collector collects air from adjacent blocks for a little bit of EU +gregtech.machine.gas_collector.lv.name=Basic Gas Collector +gregtech.machine.gas_collector.mv.name=Advanced Gas Collector +gregtech.machine.gas_collector.hv.name=Advanced Gas Collector II +gregtech.machine.gas_collector.ev.name=Advanced Gas Collector III +gregtech.machine.gas_collector.iv.name=Atmosphere Collector +gregtech.machine.gas_collector.luv.name=Atmosphere Collector II +gregtech.machine.gas_collector.zpm.name=Atmosphere Collector III +gregtech.machine.gas_collector.uv.name=Atmosphere Collector IV +gregtech.machine.gas_collector.tooltip=Collects gas from adjacent blocks at the expense of energy, depending on the dimension #Fisher gregtech.machine.fisher.lv.name=Basic Fisher @@ -3478,6 +3479,7 @@ gregtech.recipe.chance=Chance: %s%% +%s%%/tier gregtech.recipe.blast_furnace_temperature=Temperature: %,dK (%s) gregtech.recipe.explosive=Explosive: %s gregtech.recipe.eu_to_start=Energy To Start: %sEU +gregtech.recipe.dimensions=Dimensions: %s gregtech.fluid.click_to_fill=§7Click with a empty fluid container to fill it from tank. gregtech.fluid.click_to_fill.shift=§7(Shift-clicking will fill all containers in your hand) diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_back.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_back.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff62200602339d405e76673d3aef603f1c68fa8 GIT binary patch literal 209 zcmV;?051QDP)4>P&k58O0p~qj4`OS(nhiw(E4CzQA%N&rcv`eKP^&9@~Ql4c|8OG zF-GaVzXdF%&~An`_+iK&EZood%n*XK)=r6>bI3XG-|;Meg9~^7>lP$#2QxGz00000 LNkvXXu0mjf)e=+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_back_active.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_back_active.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff62200602339d405e76673d3aef603f1c68fa8 GIT binary patch literal 209 zcmV;?051QDP)4>P&k58O0p~qj4`OS(nhiw(E4CzQA%N&rcv`eKP^&9@~Ql4c|8OG zF-GaVzXdF%&~An`_+iK&EZood%n*XK)=r6>bI3XG-|;Meg9~^7>lP$#2QxGz00000 LNkvXXu0mjf)e=+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_bottom.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bf79a979cd982881df2f0fe56d7578564c94f3 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPggKE-o$(q3=?GYk)#aJY5_^EKVPte3tjH0#B=a==2wg z!3X#@7+F7173%crkiFyGTQKRFyUeT8)iM+8?VA(Rdaf`xe-#mSy0PF&RDGO}rX&M{ zar4ZFd(#FVdQ&MBb@0F`TL-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_bottom_active.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_bottom_active.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bf79a979cd982881df2f0fe56d7578564c94f3 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPggKE-o$(q3=?GYk)#aJY5_^EKVPte3tjH0#B=a==2wg z!3X#@7+F7173%crkiFyGTQKRFyUeT8)iM+8?VA(Rdaf`xe-#mSy0PF&RDGO}rX&M{ zar4ZFd(#FVdQ&MBb@0F`TL-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_front.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_front.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff62200602339d405e76673d3aef603f1c68fa8 GIT binary patch literal 209 zcmV;?051QDP)4>P&k58O0p~qj4`OS(nhiw(E4CzQA%N&rcv`eKP^&9@~Ql4c|8OG zF-GaVzXdF%&~An`_+iK&EZood%n*XK)=r6>bI3XG-|;Meg9~^7>lP$#2QxGz00000 LNkvXXu0mjf)e=+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_front_active.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_front_active.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff62200602339d405e76673d3aef603f1c68fa8 GIT binary patch literal 209 zcmV;?051QDP)4>P&k58O0p~qj4`OS(nhiw(E4CzQA%N&rcv`eKP^&9@~Ql4c|8OG zF-GaVzXdF%&~An`_+iK&EZood%n*XK)=r6>bI3XG-|;Meg9~^7>lP$#2QxGz00000 LNkvXXu0mjf)e=+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_side.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_side.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff62200602339d405e76673d3aef603f1c68fa8 GIT binary patch literal 209 zcmV;?051QDP)4>P&k58O0p~qj4`OS(nhiw(E4CzQA%N&rcv`eKP^&9@~Ql4c|8OG zF-GaVzXdF%&~An`_+iK&EZood%n*XK)=r6>bI3XG-|;Meg9~^7>lP$#2QxGz00000 LNkvXXu0mjf)e=+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_side_active.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_side_active.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff62200602339d405e76673d3aef603f1c68fa8 GIT binary patch literal 209 zcmV;?051QDP)4>P&k58O0p~qj4`OS(nhiw(E4CzQA%N&rcv`eKP^&9@~Ql4c|8OG zF-GaVzXdF%&~An`_+iK&EZood%n*XK)=r6>bI3XG-|;Meg9~^7>lP$#2QxGz00000 LNkvXXu0mjf)e=+h literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_top.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bf79a979cd982881df2f0fe56d7578564c94f3 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPggKE-o$(q3=?GYk)#aJY5_^EKVPte3tjH0#B=a==2wg z!3X#@7+F7173%crkiFyGTQKRFyUeT8)iM+8?VA(Rdaf`xe-#mSy0PF&RDGO}rX&M{ zar4ZFd(#FVdQ&MBb@0F`TL-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_top_active.png b/src/main/resources/assets/gregtech/textures/blocks/machines/gas_collector/overlay_top_active.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bf79a979cd982881df2f0fe56d7578564c94f3 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPggKE-o$(q3=?GYk)#aJY5_^EKVPte3tjH0#B=a==2wg z!3X#@7+F7173%crkiFyGTQKRFyUeT8)iM+8?VA(Rdaf`xe-#mSy0PF&RDGO}rX&M{ zar4ZFd(#FVdQ&MBb@0F`TL-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/overlay/machine/overlay_filter.png b/src/main/resources/assets/gregtech/textures/blocks/overlay/machine/overlay_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bf79a979cd982881df2f0fe56d7578564c94f3 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G^tAk28_ZrvZCAbW|YuPggKE-o$(q3=?GYk)#aJY5_^EKVPte3tjH0#B=a==2wg z!3X#@7+F7173%crkiFyGTQKRFyUeT8)iM+8?VA(Rdaf`xe-#mSy0PF&RDGO}rX&M{ zar4ZFd(#FVdQ&MBb@0F`TL-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/gui/progress_bar/progress_bar_gas_collector.png b/src/main/resources/assets/gregtech/textures/gui/progress_bar/progress_bar_gas_collector.png new file mode 100644 index 0000000000000000000000000000000000000000..c54fe1e11898fe0c4fcd2b7eed1971e93cd74839 GIT binary patch literal 2131 zcmcIlX-pJn7+#B5Jcy{6QrpmR&_;-}bL{LjVI{z#3$ndYsJBKJ5Hbf~D zp-1eNd^z8o&Tyhr$?~EVD7{V>L@N~W30@b=l>iyBfN)7W(5wU8Vx8ErL^05h9pRe)~Gqm#_DOzrlPGFORxab z0zyaVDK$;AbiXcWZxp#QU;2FZ{OMyWU}X60xC)2X#A27tx} zc&$xmCAk5%S#CT0b6CgYtUgt|UlpO(@+wTH(Xp6DMN^ngXC*K|(K=eAqxGDYM-iT5 zY@*xA!alJ(*+PK3ghCYgS530$5Zz{xhdEdIx*4*=C`@(DDz{+7q`kRhn zIbW|EP|jCm0R8x1+n=1hLFn|`dx`)geMa&9FiEt@9@Y&K3t^_8+g$k5#7k`XbEOZW z@c*OqKw7yXRwx8;aN?*h7~D5v{6)e4Td)3akBy@NIGl05WpKE{hv0Yy0;G1s;hURt z{Hj9n0-0(|w3wFfn0?%Ni5S&5DrC*^&C!ijju7QR=5WZb@rhTa7A)e%UF9sMQ*D=a z=}SkGrUa!P%9Kot-O8eSc6@?eX(}+1uUFE;jb%d?_}(pO8?pv~^C2`4GYX z-gCd!yAgkx%>zwvH>sqNAGTa4$G%$}HSA_jVOj;Yv?(quG%+!5yztSiqe=UY4TalL zT=B9Y-(2k3Vr;qRy-_lq`jpKvT28!v@m6_=qH_L<6{jNFR{z$nI=y2RnU!{@Vt>`$ z=wWl7wxdudxu z>g;0E*t{8)ri{dUj~-=(}*jU-gvDcc44zVr`}_ZJ#h>Coc`y!q;)Ij2q)@t zr_L_hOjk$kw;lUCZA9}0A^H4-V)K&7G3RIIw?(bdzR0CNnBIOrzq51_`tjxP2RHwU zuDy6qT0gwAwDp79>JL>N3N+4W>4?(38lB7SY3YfvN}t5lpe(b?Uno6aDim3Pu(=U&k*e(Pb@%!9io gxzs