Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/com/newmaa/othtech/common/OTHItemList.java
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ public enum OTHItemList {
OTEBBPlasmaForge,
OTEComputer,
OTEHatchRack,
LargeSteamHatch;
LargeSteamHatch,
MegaThermalCentrifuge; // 乌拉尔山脉热分离厂 - 巨热力离心

private boolean mHasNotBeenSet;
private boolean mDeprecated;
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/com/newmaa/othtech/machine/MachineLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -186,15 +186,17 @@ public static void loadMachines() {
OTHItemList.OTEComputer.set(new OTEComputer(IDs + 60, "OTEComputer", translateToLocal("ote.computer.name")));
OTHItemList.OTEHatchRack
.set(new OTEHatchRack(IDs + 61, "OTEHatchRack", translateToLocal("ote.calc.rank"), 11).getStackForm(1L));
// 模型错位,已无言
// OTHItemList.OTEHatchRack.set(
// new OTEHatchRack(IDs + 114514, "OTESuperHatchRack", translateToLocal("ote.super.calc.rank"), 1, true)
// .getStackForm(1L));

// bug的元凶:没有run()
OTEHatchRack.run();
OTHItemList.NASA
.set(new OTEFireRocketAssembler(IDs + 62, "FireRocketAssembler", translateToLocal("ote.tn.nasa")));
.set(new OTEFireRocketAssembler(IDs + 62, "FireRocketAssembler", translateToLocal("ote.tn.nasa"))); // 模型错位,已无言
OTHItemList.MegaThermalCentrifuge
.set(new OTEMegaThermalCentrifuge(IDs + 64, "MegaThermalCentrifuge", translateToLocal("ote.tn.mtc")));

}

public static void loadMachinePostInit() {
Expand Down
302 changes: 302 additions & 0 deletions src/main/java/com/newmaa/othtech/machine/OTEMegaThermalCentrifuge.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,302 @@
package com.newmaa.othtech.machine;

import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
import static gregtech.api.enums.HatchElement.*;
import static gregtech.api.util.GTStructureUtility.buildHatchAdder;
import static net.minecraft.util.StatCollector.translateToLocal;

import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.util.ForgeDirection;

import org.jetbrains.annotations.NotNull;

import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import com.newmaa.othtech.machine.machineclass.OTHMultiMachineBase;
import com.newmaa.othtech.machine.machineclass.OTHProcessingLogic;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.SoundResource;
import gregtech.api.enums.TAE;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
import gregtech.api.recipe.RecipeMap;
import gregtech.api.recipe.RecipeMaps;
import gregtech.api.recipe.check.CheckRecipeResult;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.MultiblockTooltipBuilder;
import gtPlusPlus.core.block.ModBlocks;
import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock;

public class OTEMegaThermalCentrifuge extends OTHMultiMachineBase<OTEMegaThermalCentrifuge> {

// ===================== Tuning Constants =====================

private static final int MAX_PARALLEL = 1024;

private static final float SPEED_BONUS = 1F / 2F;

private static final float EU_MODIFIER = 1F;

private static final boolean PERFECT_OVERCLOCK = true;

private static final int POLLUTION_PER_SECOND = 500 * 256;

// ===================== Constructors =====================

public OTEMegaThermalCentrifuge(int aID, String aName, String aNameRegional) {
super(aID, aName, aNameRegional);
}

public OTEMegaThermalCentrifuge(String aName) {
super(aName);
}

// ===================== NBT =====================

@Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
}

@Override
public void loadNBTData(final NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
}

// ===================== Machine Parameters =====================

@Override
protected boolean isEnablePerfectOverclock() {
return PERFECT_OVERCLOCK;
}

public int getMaxParallelRecipes() {
return MAX_PARALLEL;
}

protected float getSpeedBonus() {
return SPEED_BONUS;
}

protected float getEuModifier() {
return EU_MODIFIER;
}

@Override
public RecipeMap<?> getRecipeMap() {
return RecipeMaps.thermalCentrifugeRecipes;
}

@Override
public int getPollutionPerSecond(final ItemStack aStack) {
return POLLUTION_PER_SECOND;
}

// ===================== Processing Logic =====================

@Override
protected ProcessingLogic createProcessingLogic() {
return new OTHProcessingLogic() {

@NotNull
@Override
public CheckRecipeResult process() {
setSpeedBonus(getSpeedBonus());
setOverclock(isEnablePerfectOverclock() ? 4 : 2, 4);
setEuModifier(getEuModifier());
return super.process();
}

}.setMaxParallelSupplier(this::getMaxParallelRecipes);
}

// ===================== Structure =====================

@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
repairMachine();
return checkPiece(STRUCTURE_PIECE_MAIN, horizontalOffSet, verticalOffSet, depthOffSet);
}

@Override
public void construct(ItemStack stackSize, boolean hintsOnly) {
this.buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, horizontalOffSet, verticalOffSet, depthOffSet);
}

@Override
public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) {
if (this.mMachine) return -1;
int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5);

return this.survivalBuildPiece(
STRUCTURE_PIECE_MAIN,
stackSize,
horizontalOffSet,
verticalOffSet,
depthOffSet,
realBudget,
env,
false,
true);
}

private static final String STRUCTURE_PIECE_MAIN = "main";

private final int horizontalOffSet = 7;
private final int verticalOffSet = 7;
private final int depthOffSet = 0;

private static IStructureDefinition<OTEMegaThermalCentrifuge> STRUCTURE_DEFINITION = null;
private static final String[] description = new String[] {
EnumChatFormatting.AQUA + translateToLocal("otht.con") + ":",
translateToLocal("1 - 消声仓, 能源仓, 输入输出总线, 输入输出仓 : 替换热力加工机械方块, 支持TecTech能源仓") };

@Override
public String[] getStructureDescription(ItemStack stackSize) {
return description;
}

@Override
public IStructureDefinition<OTEMegaThermalCentrifuge> getStructureDefinition() {
if (STRUCTURE_DEFINITION == null) {
STRUCTURE_DEFINITION = StructureDefinition.<OTEMegaThermalCentrifuge>builder()
.addShape(STRUCTURE_PIECE_MAIN, transpose(shapeMain))
.addElement(
'A',
buildHatchAdder(OTEMegaThermalCentrifuge.class)
.atLeast(Energy.or(ExoticEnergy), InputBus, OutputBus, InputHatch, OutputHatch, Muffler)
.adder(OTEMegaThermalCentrifuge::addToMachineList)
.dot(1)
.casingIndex(TAE.GTPP_INDEX(16))
.buildAndChain(ofBlock(ModBlocks.blockCasings2Misc, 0)))

.build();
}
return STRUCTURE_DEFINITION;
}

@Override
public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) {
return super.addToMachineList(aTileEntity, aBaseCasingIndex)
|| addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex);
}

// Structure: 15x15x15 hollow cube of Thermal Processing Casings
// Same layout as OTEMegaFreezerGTpp — controller at front center, layer 7 (0-indexed)
private final String[][] shapeMain = new String[][] {
{ "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAA~AAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "A A",
"A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" },
{ "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA",
"AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" } };

// ===================== Tooltip =====================

@Override
protected MultiblockTooltipBuilder createTooltip() {
final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder();
tt.addMachineType(translateToLocal("ote.tm.mtc.0"))
.addInfo(translateToLocal("ote.tm.mtc.1"))
.addInfo(translateToLocal("ote.tm.mtc.2"))
.addInfo(translateToLocal("ote.tm.mtc.3"))
.addInfo(translateToLocal("ote.tm.mtc.4"))
.addInfo(translateToLocal("ote.tm.mtc.5"))
.addInfo(translateToLocal("oth.tm.pollution"))
.addTecTechHatchInfo()
.addPollutionAmount(POLLUTION_PER_SECOND)
.addSeparator()
.addController(translateToLocal("ote.tn.mtc"))
.beginStructureBlock(15, 15, 15, false)
.addInputBus("AnyInputBus", 1)
.addOutputBus("AnyOutputBus", 1)
.addInputHatch("AnyInputHatch", 1)
.addOutputHatch("AnyOutputHatch", 1)
.addEnergyHatch("AnyEnergyHatch", 1)
.addMufflerHatch("AnyMufflerHatch", 1)
.toolTipFinisher("§a123Technology - §4MegaThermalCentrifuge");
return tt;
}

// ===================== Standard Overrides =====================

@Override
public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new OTEMegaThermalCentrifuge(this.mName);
}

// ===================== Textures =====================

@Override
public ITexture[] getTexture(final IGregTechTileEntity baseMetaTileEntity, final ForgeDirection sideDirection,
final ForgeDirection facing, final int aColorIndex, final boolean active, final boolean aRedstone) {

if (sideDirection == facing) {
if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(16)),
TextureFactory.builder()
.addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active)
.extFacing()
.build() };
return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(16)),
TextureFactory.builder()
.addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced)
.extFacing()
.glow()
.build() };
}
return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(16)) };
}

@SideOnly(Side.CLIENT)
@Override
protected SoundResource getActivitySoundLoop() {
return SoundResource.GT_MACHINES_THERMAL_CENTRIFUGE_LOOP;
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/newmaa/othtech/recipe/RecipesMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,20 @@ public void loadRecipes() {
new ItemStack(Items.redstone, 1), 'C',
GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1), 'D',
GTModHandler.getModItem("Railcraft", "firestone.raw", 1) });
// 乌拉尔山脉热分离厂 - 巨型热力离心机
GTValues.RA.stdBuilder()
.itemOutputs(getGM(IDs + 64, 1))
.itemInputs(
getGM(849, 64), // GT++ Industrial Thermal Centrifuge × 64 x 3
getGM(849, 64),
getGM(849, 64),
ItemList.Electric_Piston_LuV.get(16),
GTOreDictUnificator.get(OrePrefixes.circuit, Materials.Superconductor, 64),
GTUtility.getIntegratedCircuit(17))
.fluidInputs(new FluidStack(FluidRegistry.getFluidID("molten.indalloy140"), 123 * 144))
.duration(123 * 20)
.eut(32000)
.addTo(Assem);
// HV Hatches
TTRecipeAdder.addResearchableAssemblylineRecipe(
getGM(43, 1),
Expand Down
10 changes: 10 additions & 0 deletions src/main/resources/assets/123technology/lang/en_US.lang
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,16 @@ ote.tm.bee.1=An HV Large Apiary. #Really only for bees!
ote.tm.bee.2=Seriously, why not use Industrial Apiaries :)
ote.cm.bee.0=1 - Energy Hatch, Dynamo Hatch or Laser Hatch, Input/Output Bus/Hatch: Replace Plastic Concrete Block.


#MegaThermalCentrifuge
ote.tn.mtc=Ural Mountains Thermal Separation Plant
ote.tm.mtc.0=§lThe Ultimate Soviet Creation - Mega Thermal Centrifuge
ote.tm.mtc.1=§b EU Cost: 100%
ote.tm.mtc.2=§b Speed + 100%
ote.tm.mtc.3=§b Parallel: 1024
ote.tm.mtc.4=§6 Uses GT++ Thermal Processing Casings for structure
ote.tm.mtc.5=§l "The steel torrent of the Urals never ceases — ores are forged into the Motherland's lifeblood in the centrifugal inferno"

#WTFHatch
ote.tm.wtf.0=Stores energy in a global network.
ote.tm.wtf.1=Does not connect to wires. This block can draw EU from the network.
Expand Down
9 changes: 9 additions & 0 deletions src/main/resources/assets/123technology/lang/zh_CN.lang
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,15 @@ ote.tm.bee.1=一个HV的大型蜂箱. #真的只能养蜂!
ote.tm.bee.2=说真的, 为什么不用工业蜂箱呢:)
ote.cm.bee.0=1 - 能源仓, 动力仓或者激光仓, 输入输出总线/仓: 替换塑料混凝土方块

#MegaThermalCentrifuge
ote.tn.mtc=乌拉尔山脉热分离厂
ote.tm.mtc.0=§l苏维埃的终极造物 - 巨型热力离心机
ote.tm.mtc.1=§b EU消耗: 100%
ote.tm.mtc.2=§b 速度 + 100%
ote.tm.mtc.3=§b 并行: 1024
ote.tm.mtc.4=§6 使用GT++热处理机械方块搭建结构
ote.tm.mtc.5=§l 「乌拉尔山脉的钢铁洪流不会停歇,矿石在离心烈焰中化为祖国的养料」

#WTFHatch
ote.tm.wtf.0=将能量存储于全局网络中, 上限为2^(2^31)EU.
ote.tm.wtf.1=不连接导线. 此方块可以从网络中抽取EU.
Expand Down
Loading