package mekanism.common; import io.netty.buffer.ByteBuf; import mekanism.api.EnumColor; import mekanism.common.multipart.TransmitterType; import mekanism.common.util.MekanismUtils; import net.minecraft.util.ResourceLocation; /** * Tier information for Mekanism. This currently includes tiers for Energy Cubes and Smelting Factories. * @author aidancbrady * */ public final class Tier { /** The default tiers used in Mekanism. * @author aidancbrady */ public static enum BaseTier { BASIC("Basic", EnumColor.BRIGHT_GREEN), ADVANCED("Advanced", EnumColor.DARK_RED), ELITE("Elite", EnumColor.DARK_BLUE), ULTIMATE("Ultimate", EnumColor.PURPLE), CREATIVE("Creative", EnumColor.BLACK); public String getName() { return name; } public String getLocalizedName() { return MekanismUtils.localize("tier." + getName()); } public EnumColor getColor() { return color; } public boolean isObtainable() { return this != CREATIVE; } private String name; private EnumColor color; private BaseTier(String s, EnumColor c) { name = s; color = c; } } /** * The tiers used by the Energy Cube and their corresponding values. * @author aidancbrady * */ public static enum EnergyCubeTier { BASIC(2000000, 800), ADVANCED(8000000, 3200), ELITE(32000000, 12800), ULTIMATE(128000000, 51200), CREATIVE(Integer.MAX_VALUE, Integer.MAX_VALUE); public double maxEnergy; private double baseMaxEnergy; public double output; private double baseOutput; public static EnergyCubeTier getFromName(String tierName) { for(EnergyCubeTier tier : values()) { if(tierName.contains(tier.getBaseTier().getName())) { return tier; } } Mekanism.logger.error("Invalid tier identifier when retrieving with name."); return BASIC; } protected void loadConfig() { maxEnergy = Mekanism.configuration.get("tier", getBaseTier().getName() + "EnergyCubeMaxEnergy", baseMaxEnergy).getDouble(); output = Mekanism.configuration.get("tier", getBaseTier().getName() + "EnergyCubeOutput", baseOutput).getDouble(); } protected void readConfig(ByteBuf dataStream) { maxEnergy = dataStream.readDouble(); output = dataStream.readDouble(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeDouble(maxEnergy); dataStream.writeDouble(output); } public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } private EnergyCubeTier(double max, double out) { baseMaxEnergy = maxEnergy = max; baseOutput = output = out; } } public static enum InductionCellTier { BASIC(1E9D), ADVANCED(8E9D), ELITE(64E9D), ULTIMATE(512E9D); public double maxEnergy; private double baseMaxEnergy; public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } protected void loadConfig() { maxEnergy = Mekanism.configuration.get("tier", getBaseTier().getName() + "InductionCellMaxEnergy", baseMaxEnergy).getDouble(); } protected void readConfig(ByteBuf dataStream) { maxEnergy = dataStream.readDouble(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeDouble(maxEnergy); } private InductionCellTier(double max) { baseMaxEnergy = maxEnergy = max; } } public static enum InductionProviderTier { BASIC(64000), ADVANCED(512000), ELITE(4096000), ULTIMATE(32768000); public double output; private double baseOutput; public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } protected void loadConfig() { output = Mekanism.configuration.get("tier", getBaseTier().getName() + "InductionProviderOutput", baseOutput).getDouble(); } protected void readConfig(ByteBuf dataStream) { output = dataStream.readDouble(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeDouble(output); } private InductionProviderTier(double out) { baseOutput = output = out; } } /** * The tiers used by the Factory and their corresponding values. * @author aidancbrady * */ public static enum FactoryTier { BASIC(3, new ResourceLocation("mekanism", "gui/factory/GuiBasicFactory.png")), ADVANCED(5, new ResourceLocation("mekanism", "gui/factory/GuiAdvancedFactory.png")), ELITE(7, new ResourceLocation("mekanism", "gui/factory/GuiEliteFactory.png")); public int processes; public ResourceLocation guiLocation; public static FactoryTier getFromName(String tierName) { for(FactoryTier tier : values()) { if(tierName.contains(tier.getBaseTier().getName())) { return tier; } } Mekanism.logger.error("Invalid tier identifier when retrieving with name."); return BASIC; } public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } private FactoryTier(int process, ResourceLocation gui) { processes = process; guiLocation = gui; } } /** * The tiers used by Universal Cables and their corresponding values. * @author aidancbrady * */ public static enum CableTier { BASIC(3200, TransmitterType.UNIVERSAL_CABLE_BASIC), ADVANCED(12800, TransmitterType.UNIVERSAL_CABLE_ADVANCED), ELITE(64000, TransmitterType.UNIVERSAL_CABLE_ELITE), ULTIMATE(320000, TransmitterType.UNIVERSAL_CABLE_ULTIMATE); public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } public int cableCapacity; private int baseCapacity; public TransmitterType type; private CableTier(int capacity, TransmitterType transmitterType) { baseCapacity = cableCapacity = capacity; type = transmitterType; } protected void loadConfig() { cableCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "CableCapacity", baseCapacity).getInt(); } protected void readConfig(ByteBuf dataStream) { cableCapacity = dataStream.readInt(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeInt(cableCapacity); } public static CableTier get(BaseTier tier) { for(CableTier transmitter : values()) { if(transmitter.getBaseTier() == tier) { return transmitter; } } return BASIC; } } /** * The tiers used by Mechanical Pipes and their corresponding values. * @author unpairedbracket * */ public static enum PipeTier { BASIC(1000, 100, TransmitterType.MECHANICAL_PIPE_BASIC), ADVANCED(4000, 400, TransmitterType.MECHANICAL_PIPE_ADVANCED), ELITE(16000, 1600, TransmitterType.MECHANICAL_PIPE_ELITE), ULTIMATE(64000, 6400, TransmitterType.MECHANICAL_PIPE_ULTIMATE); public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } public int pipeCapacity; private int baseCapacity; public int pipePullAmount; private int basePull; public TransmitterType type; private PipeTier(int capacity, int pullAmount, TransmitterType transmitterType) { baseCapacity = pipeCapacity = capacity; basePull = pipePullAmount = pullAmount; type = transmitterType; } protected void loadConfig() { pipeCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "PipeCapacity", baseCapacity).getInt(); pipePullAmount = Mekanism.configuration.get("tier", getBaseTier().getName() + "PipePullAmount", basePull).getInt(); } protected void readConfig(ByteBuf dataStream) { pipeCapacity = dataStream.readInt(); pipePullAmount = dataStream.readInt(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeInt(pipeCapacity); dataStream.writeInt(pipePullAmount); } public static PipeTier get(BaseTier tier) { for(PipeTier transmitter : values()) { if(transmitter.getBaseTier() == tier) { return transmitter; } } return BASIC; } } /** * The tiers used by Pressurized Tubes and their corresponding values. * @author AidanBrady * */ public static enum TubeTier { BASIC(256, 64, TransmitterType.PRESSURIZED_TUBE_BASIC), ADVANCED(1024, 256, TransmitterType.PRESSURIZED_TUBE_ADVANCED), ELITE(4096, 1024, TransmitterType.PRESSURIZED_TUBE_ELITE), ULTIMATE(16384, 4096, TransmitterType.PRESSURIZED_TUBE_ULTIMATE); public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } public int tubeCapacity; private int baseCapacity; public int tubePullAmount; private int basePull; public TransmitterType type; private TubeTier(int capacity, int pullAmount, TransmitterType transmitterType) { baseCapacity = tubeCapacity = capacity; basePull = tubePullAmount = pullAmount; type = transmitterType; } protected void loadConfig() { tubeCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "TubeCapacity", baseCapacity).getInt(); tubePullAmount = Mekanism.configuration.get("tier", getBaseTier().getName() + "TubePullAmount", basePull).getInt(); } protected void readConfig(ByteBuf dataStream) { tubeCapacity = dataStream.readInt(); tubePullAmount = dataStream.readInt(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeInt(tubeCapacity); dataStream.writeInt(tubePullAmount); } public static TubeTier get(BaseTier tier) { for(TubeTier transmitter : values()) { if(transmitter.getBaseTier() == tier) { return transmitter; } } return BASIC; } } /** * The tiers used by Logistical Transporters and their corresponding values. * @author AidanBrady * */ public static enum TransporterTier { BASIC(1, 5, TransmitterType.LOGISTICAL_TRANSPORTER_BASIC), ADVANCED(16, 10, TransmitterType.LOGISTICAL_TRANSPORTER_ADVANCED), ELITE(32, 20, TransmitterType.LOGISTICAL_TRANSPORTER_ELITE), ULTIMATE(64, 50, TransmitterType.LOGISTICAL_TRANSPORTER_ULTIMATE); public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } public int pullAmount; private int basePull; public int speed; private int baseSpeed; public TransmitterType type; private TransporterTier(int pull, int s, TransmitterType transmitterType) { basePull = pullAmount = pull; baseSpeed = speed = s; type = transmitterType; } protected void loadConfig() { pullAmount = Mekanism.configuration.get("tier", getBaseTier().getName() + "TransporterPullAmount", basePull).getInt(); speed = Mekanism.configuration.get("tier", getBaseTier().getName() + "TransporterSpeed", baseSpeed).getInt(); } protected void readConfig(ByteBuf dataStream) { pullAmount = dataStream.readInt(); speed = dataStream.readInt(); } protected void writeConfig(ByteBuf dataStream) { dataStream.writeInt(pullAmount); dataStream.writeInt(speed); } public static TransporterTier get(BaseTier tier) { for(TransporterTier transmitter : values()) { if(transmitter.getBaseTier() == tier) { return transmitter; } } return BASIC; } } public static void loadConfig() { for(CableTier tier : CableTier.values()) { tier.loadConfig(); } for(InductionCellTier tier : InductionCellTier.values()) { tier.loadConfig(); } for(InductionProviderTier tier : InductionProviderTier.values()) { tier.loadConfig(); } for(EnergyCubeTier tier : EnergyCubeTier.values()) { tier.loadConfig(); } for(PipeTier tier : PipeTier.values()) { tier.loadConfig(); } for(TubeTier tier : TubeTier.values()) { tier.loadConfig(); } for(TransporterTier tier : TransporterTier.values()) { tier.loadConfig(); } } public static void readConfig(ByteBuf dataStream) { for(CableTier tier : CableTier.values()) { tier.readConfig(dataStream); } for(InductionCellTier tier : InductionCellTier.values()) { tier.readConfig(dataStream); } for(InductionProviderTier tier : InductionProviderTier.values()) { tier.readConfig(dataStream); } for(EnergyCubeTier tier : EnergyCubeTier.values()) { tier.readConfig(dataStream); } for(PipeTier tier : PipeTier.values()) { tier.readConfig(dataStream); } for(TubeTier tier : TubeTier.values()) { tier.readConfig(dataStream); } for(TransporterTier tier : TransporterTier.values()) { tier.readConfig(dataStream); } } public static void writeConfig(ByteBuf dataStream) { for(CableTier tier : CableTier.values()) { tier.writeConfig(dataStream); } for(InductionCellTier tier : InductionCellTier.values()) { tier.writeConfig(dataStream); } for(InductionProviderTier tier : InductionProviderTier.values()) { tier.writeConfig(dataStream); } for(EnergyCubeTier tier : EnergyCubeTier.values()) { tier.writeConfig(dataStream); } for(PipeTier tier : PipeTier.values()) { tier.writeConfig(dataStream); } for(TubeTier tier : TubeTier.values()) { tier.writeConfig(dataStream); } for(TransporterTier tier : TransporterTier.values()) { tier.writeConfig(dataStream); } } }