Merge branch 'HbmMods:master' into master

This commit is contained in:
Bufka2011 2025-09-18 13:31:33 -06:00 committed by GitHub
commit c25adf5014
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 419 additions and 4159 deletions

View File

@ -1,10 +1,10 @@
## Changed
* Added a (LEGACY) tag to the schrabidium transmutator
* Existing schrabidium transmutators are now way slower
* get souped
* Removed the schraranium tooltip mentioning the transmutator
* Changed the last remaining recipes that use the old steel pipes item, as well as the recipe for the steel pipes
* Any remaining steel pipes can be either smelted in a crucible or shredded
* Added more QMAW pages
* Removed most old particle accelerator blocks from the creative inventory
* All dual wielded guns now render more accurately when dropped instead of only showing one gun
* Added support for left handed guns (currently unused)*
* Removed the presentations for the old particle accelerator and schottky diode
## Fixed
* Fixed various issues with the localization
* Fixed wood burner only being able to create one ash pile per item burned, even when that item yields more, creating a backlog in the internal ash value
* Fixed some QMAW link icons not having the correct block lighting applied

View File

@ -1841,13 +1841,13 @@ public class ModBlocks {
machine_exposure_chamber = new MachineExposureChamber(Material.iron).setBlockName("machine_exposure_chamber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium");
machine_radgen = new MachineRadGen(Material.iron).setBlockName("machine_radgen").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_radgen");
hadron_plating = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating");
hadron_plating_blue = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_blue").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_blue");
hadron_plating_black = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_black").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_black");
hadron_plating_yellow = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_yellow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_yellow");
hadron_plating_striped = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_striped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_striped");
hadron_plating_voltz = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_voltz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_voltz");
hadron_plating_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_plating_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_glass");
hadron_plating = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating");
hadron_plating_blue = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_blue").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_blue");
hadron_plating_black = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_black").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_black");
hadron_plating_yellow = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_yellow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_yellow");
hadron_plating_striped = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_striped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_striped");
hadron_plating_voltz = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_voltz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_voltz");
hadron_plating_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_plating_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_glass");
hadron_coil_alloy = new BlockHadronCoil(Material.iron, 10).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_alloy").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_alloy");
hadron_coil_gold = new BlockHadronCoil(Material.iron, 25).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_gold");
hadron_coil_neodymium = new BlockHadronCoil(Material.iron, 50).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_neodymium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_neodymium");
@ -1857,16 +1857,16 @@ public class ModBlocks {
hadron_coil_starmetal = new BlockHadronCoil(Material.iron, 1000).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_starmetal").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_starmetal");
hadron_coil_chlorophyte = new BlockHadronCoil(Material.iron, 2500).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_chlorophyte").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_chlorophyte");
hadron_coil_mese = new BlockHadronCoil(Material.iron, 10000).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_mese").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_mese");
hadron_power = new BlockHadronPower(Material.iron, 1000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_10m = new BlockHadronPower(Material.iron, 10000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_100m = new BlockHadronPower(Material.iron, 100000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_100m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_1g = new BlockHadronPower(Material.iron, 1000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_1g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_10g = new BlockHadronPower(Material.iron, 10000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_diode = new BlockHadronDiode(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_diode").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
hadron_analysis = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis");
hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass");
hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_access");
hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_core");
hadron_power = new BlockHadronPower(Material.iron, 1000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_10m = new BlockHadronPower(Material.iron, 10000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_100m = new BlockHadronPower(Material.iron, 100000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_100m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_1g = new BlockHadronPower(Material.iron, 1000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_1g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_10g = new BlockHadronPower(Material.iron, 10000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_diode = new BlockHadronDiode(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_diode").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
hadron_analysis = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_analysis");
hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass");
hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_access");
hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_core");
pa_source = new BlockPASource().setStepSound(Block.soundTypeMetal).setBlockName("pa_source").setHardness(5.0F).setResistance(10.0F);
pa_beamline = new BlockPABeamline().setStepSound(Block.soundTypeMetal).setBlockName("pa_beamline").setHardness(5.0F).setResistance(10.0F);

View File

@ -7,6 +7,7 @@ import static net.minecraftforge.common.util.ForgeDirection.WEST;
import com.hbm.lib.RefStrings;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -20,23 +21,23 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockChain extends Block {
public class BlockChain extends Block implements INBTBlockTransformable {
@SideOnly(Side.CLIENT)
private IIcon iconEnd;
public BlockChain(Material mat) {
super(mat);
}
public boolean isOpaqueCube() {
return false;
}
public boolean renderAsNormalBlock() {
return false;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
public int getRenderType() {
@ -47,7 +48,7 @@ public class BlockChain extends Block {
public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
@ -60,14 +61,14 @@ public class BlockChain extends Block {
if(world.isSideSolid(x, y - 1, z, ForgeDirection.UP, false) || (world.getBlock(x, y - 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y - 1, z)))
return this.blockIcon;
return this.iconEnd;
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return null;
}
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
func_149797_b(world.getBlockMetadata(x, y, z));
@ -76,11 +77,11 @@ public class BlockChain extends Block {
}
public void func_149797_b(int meta) {
float f = 0.125F;
if(meta == 0) {
this.minX = 3 * f;
this.minY = 0;
this.minZ = 3 * f;
@ -109,24 +110,24 @@ public class BlockChain extends Block {
this.setBlockBounds(0.0F, 0.0F, 3 * f, f, 1.0F, 5 * f);
}
}
@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
this.setBlockBoundsBasedOnState(world, x, y, z);
return super.getSelectedBoundingBoxFromPool(world, x, y, z);
}
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) || world.getBlock(x, y + 1, z) == this)
return true;
return world.isSideSolid(x - 1, y, z, EAST ) ||
world.isSideSolid(x + 1, y, z, WEST ) ||
world.isSideSolid(x, y, z - 1, SOUTH) ||
world.isSideSolid(x, y, z + 1, NORTH);
}
public int onBlockPlaced(World world, int x, int y, int z, int side, float p_149660_6_, float p_149660_7_, float p_149660_8_, int meta)
{
int j1 = meta;
@ -142,12 +143,12 @@ public class BlockChain extends Block {
if(side == 5 && world.isSideSolid(x - 1, y, z, EAST))
j1 = 5;
if(j1 == 0) {
if(world.getBlock(x, y + 1, z) == this)
return world.getBlockMetadata(x, y + 1, z);
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN))
return 0;
}
@ -155,30 +156,30 @@ public class BlockChain extends Block {
if(j1 == 0) {
if(world.isSideSolid(x, y, z + 1, NORTH))
j1 = 2;
if(world.isSideSolid(x, y, z - 1, SOUTH))
j1 = 3;
if(world.isSideSolid(x + 1, y, z, WEST))
j1 = 4;
if(world.isSideSolid(x - 1, y, z, EAST))
j1 = 5;
}
return j1;
}
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
int l = world.getBlockMetadata(x, y, z);
boolean flag = false;
if(world.getBlock(x, y + 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y + 1, z)) {
super.onNeighborBlockChange(world, x, y, z, block);
return;
}
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) && world.getBlockMetadata(x, y, z) == 0) {
super.onNeighborBlockChange(world, x, y, z, block);
return;
@ -201,4 +202,12 @@ public class BlockChain extends Block {
super.onNeighborBlockChange(world, x, y, z, block);
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
if (coordBaseMode == 0) return meta;
if (meta == 0) return meta;
if (meta == 1) return meta;
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -13,6 +13,7 @@ import com.hbm.tileentity.network.TileEntityCableBaseNT;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -37,7 +38,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import java.util.ArrayList;
import java.util.List;
public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, ILookOverlay, ITooltipProvider {
public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, INBTBlockTransformable, ILookOverlay, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlayGauge;
@ -84,6 +85,11 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass,
this.addStandardInfo(stack, player, list, ext);
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
@ -178,5 +184,6 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass,
if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaLastSecond;
return null;
}
}
}

View File

@ -13,6 +13,7 @@ import com.hbm.render.block.RenderBlockMultipass;
import com.hbm.tileentity.network.TileEntityPipeBaseNT;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -37,7 +38,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, ILookOverlay, ITooltipProvider {
public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, INBTBlockTransformable, ILookOverlay, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlay;
@SideOnly(Side.CLIENT) protected IIcon overlayGauge;
@ -108,6 +109,11 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL
return IBlockMultiPass.getRenderType();
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public static class TileEntityPipeGauge extends TileEntityPipeBaseNT implements SimpleComponent, CompatHandler.OCComponent, IRORValueProvider {

View File

@ -87,7 +87,7 @@ public class WorldConfig {
public static int dungeonStructure = 64;
public static int relayStructure = 500;
public static int satelliteStructure = 500;
public static int factoryStructure = 1000;
// public static int factoryStructure = 1000;
public static int dudStructure = 500;
public static int spaceshipStructure = 1000;
public static int barrelStructure = 5000;
@ -210,7 +210,7 @@ public class WorldConfig {
dungeonStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.04_dungeonSpawn", "Spawn library dungeon on every nTH chunk", 64);
relayStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.05_relaySpawn", "Spawn relay on every nTH chunk", 500);
satelliteStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.06_satelliteSpawn", "Spawn satellite dish on every nTH chunk", 500);
factoryStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.09_factorySpawn", "Spawn factory on every nTH chunk", 1000);
// factoryStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.09_factorySpawn", "Spawn factory on every nTH chunk", 1000);
dudStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.10_dudSpawn", "Spawn dud on every nTH chunk", 500);
spaceshipStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.11_spaceshipSpawn", "Spawn spaceship on every nTH chunk", 1000);
barrelStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.12_barrelSpawn", "Spawn waste tank on every nTH chunk", 5000);
@ -251,7 +251,7 @@ public class WorldConfig {
dungeonStructure = CommonConfig.setDefZero(dungeonStructure, 1000);
relayStructure = CommonConfig.setDefZero(relayStructure, 1000);
satelliteStructure = CommonConfig.setDefZero(satelliteStructure, 1000);
factoryStructure = CommonConfig.setDefZero(factoryStructure, 1000);
// factoryStructure = CommonConfig.setDefZero(factoryStructure, 1000);
dudStructure = CommonConfig.setDefZero(dudStructure, 1000);
spaceshipStructure = CommonConfig.setDefZero(spaceshipStructure, 1000);
barrelStructure = CommonConfig.setDefZero(barrelStructure, 1000);

View File

@ -290,13 +290,13 @@ public class HbmWorldGen implements IWorldGenerator {
}
}
if(WorldConfig.factoryStructure > 0 && rand.nextInt(WorldConfig.factoryStructure) == 0) {
int x = i + rand.nextInt(16);
int z = j + rand.nextInt(16);
int y = world.getHeightValue(x, z);
new Factory().generate(world, rand, x, y, z);
}
// if(WorldConfig.factoryStructure > 0 && rand.nextInt(WorldConfig.factoryStructure) == 0) {
// int x = i + rand.nextInt(16);
// int z = j + rand.nextInt(16);
// int y = world.getHeightValue(x, z);
//
// new Factory().generate(world, rand, x, y, z);
// }
if(WorldConfig.dudStructure > 0 && rand.nextInt(WorldConfig.dudStructure) == 0) {
int x = i + 8 + rand.nextInt(16);

View File

@ -89,6 +89,12 @@ public class ModEventHandlerRenderer {
ModelRenderer box = getBoxFromType(renderer, EnumPlayerPart.LEFT_ARM);
box.isHidden = true;
}
if(renderGun.isLeftHanded()) {
partsHidden[EnumPlayerPart.LEFT_ARM.ordinal()] = true;
partsHidden[EnumPlayerPart.RIGHT_ARM.ordinal()] = true;
getBoxFromType(renderer, EnumPlayerPart.LEFT_ARM).isHidden = true;
getBoxFromType(renderer, EnumPlayerPart.RIGHT_ARM).isHidden = true;
}
}
}
@ -121,6 +127,7 @@ public class ModEventHandlerRenderer {
RenderPlayer renderer = event.renderer;
boolean akimbo = false;
boolean leftHand = false;
ItemStack held = player.getHeldItem();
@ -128,9 +135,8 @@ public class ModEventHandlerRenderer {
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(held, IItemRenderer.ItemRenderType.EQUIPPED);
if(customRenderer instanceof ItemRenderWeaponBase) {
ItemRenderWeaponBase renderGun = (ItemRenderWeaponBase) customRenderer;
if(renderGun.isAkimbo()) {
akimbo = true;
}
if(renderGun.isAkimbo()) akimbo = true;
if(renderGun.isLeftHanded()) leftHand = true;
}
}
@ -148,6 +154,23 @@ public class ModEventHandlerRenderer {
}
}
if(leftHand) {
ModelBiped biped = renderer.modelBipedMain;
renderer.modelArmorChestplate.bipedLeftArm.rotateAngleY = renderer.modelArmor.bipedLeftArm.rotateAngleY = biped.bipedLeftArm.rotateAngleY =
0.1F + biped.bipedHead.rotateAngleY;
renderer.modelArmorChestplate.bipedRightArm.rotateAngleY = renderer.modelArmor.bipedRightArm.rotateAngleY = biped.bipedRightArm.rotateAngleY =
-0.5F + biped.bipedHead.rotateAngleY;
if(!isManly) {
AbstractClientPlayer acp = (AbstractClientPlayer) player;
Minecraft.getMinecraft().getTextureManager().bindTexture(acp.getLocationSkin());
biped.bipedLeftArm.isHidden = false;
biped.bipedLeftArm.render(0.0625F);
biped.bipedRightArm.isHidden = false;
biped.bipedRightArm.render(0.0625F);
}
}
if(isManly) {
if(manlyModel == null)
manlyModel = new ModelMan();
@ -200,6 +223,11 @@ public class ModEventHandlerRenderer {
ModelBiped biped = renderer.modelBipedMain;
renderer.modelArmorChestplate.bipedLeftArm.rotateAngleY = renderer.modelArmor.bipedLeftArm.rotateAngleY = biped.bipedLeftArm.rotateAngleY = 0.1F + biped.bipedHead.rotateAngleY;
}
if(renderGun.isLeftHanded()) {
ModelBiped biped = renderer.modelBipedMain;
renderer.modelArmorChestplate.bipedLeftArm.rotateAngleY = renderer.modelArmor.bipedLeftArm.rotateAngleY = biped.bipedLeftArm.rotateAngleY = 0.1F + biped.bipedHead.rotateAngleY;
renderer.modelArmorChestplate.bipedRightArm.rotateAngleY = renderer.modelArmor.bipedRightArm.rotateAngleY = biped.bipedRightArm.rotateAngleY = -0.5F + biped.bipedHead.rotateAngleY;
}
}
}
}
@ -216,7 +244,7 @@ public class ModEventHandlerRenderer {
if(customRenderer instanceof ItemRenderWeaponBase) {
ItemRenderWeaponBase renderWeapon = (ItemRenderWeaponBase) customRenderer;
if(renderWeapon.isAkimbo()) {
if(renderWeapon.isAkimbo() || renderWeapon.isLeftHanded()) {
GL11.glPushMatrix();
renderer.modelBipedMain.bipedLeftArm.isHidden = false;
renderer.modelBipedMain.bipedLeftArm.postRender(0.0625F);
@ -235,8 +263,14 @@ public class ModEventHandlerRenderer {
GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(-0.9375F, -0.0625F, 0.0F);
renderWeapon.setupThirdPersonAkimbo(held);
renderWeapon.renderEquippedAkimbo(held);
if(renderWeapon.isLeftHanded()) {
GL11.glTranslatef(0.1875F, 0F, 0.0F);
renderWeapon.setupThirdPerson(held);
renderWeapon.renderEquippedAkimbo(held);
} else {
renderWeapon.setupThirdPersonAkimbo(held);
renderWeapon.renderEquippedAkimbo(held);
}
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}

View File

@ -83,6 +83,8 @@ public class StructureManager {
public static final NBTStructure plane1 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_1.nbt"));
public static final NBTStructure plane2 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_2.nbt"));
public static final NBTStructure factory = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/factory.nbt"));
public static final NBTStructure spire = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/spire.nbt"));
// public static final NBTStructure test_rot = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-rot.nbt"));

View File

@ -1,6 +1,7 @@
package com.hbm.qmaw.components;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import com.hbm.qmaw.GuiQMAW;
import com.hbm.qmaw.ManualElement;
@ -64,6 +65,7 @@ public class QComponentLink extends ManualElement {
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
Minecraft mc = Minecraft.getMinecraft();
GL11.glRotated(180, 1, 0, 0);
RenderHelper.enableStandardItemLighting();
@ -71,6 +73,7 @@ public class QComponentLink extends ManualElement {
itemRender.renderItemAndEffectIntoGUI(this.font, mc.renderEngine, this.icon, x, y - 1);
itemRender.renderItemOverlayIntoGUI(this.font, mc.renderEngine, this.icon, x, y - 1, null);
RenderHelper.disableStandardItemLighting();
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glPopMatrix();

View File

@ -193,6 +193,27 @@ public class ItemRenderDANI extends ItemRenderWeaponBase {
ResourceManager.bio_revolver.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
@Override
public void renderEntity(ItemStack stack) {
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glPushMatrix();
GL11.glTranslated(-2, 1, 0);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.dani_lunar_tex);
ResourceManager.bio_revolver.renderAll();
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(2, 1, 0);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.dani_celestial_tex);
ResourceManager.bio_revolver.renderAll();
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
}
@Override
public void renderOther(ItemStack stack, ItemRenderType type) {

View File

@ -238,6 +238,34 @@ public class ItemRenderEOTT extends ItemRenderWeaponBase {
public void renderModTable(ItemStack stack, int index) {
renderOther(stack, ItemRenderType.INVENTORY);
}
@Override
public void renderEntity(ItemStack stack) {
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glPushMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.eott_tex);
GL11.glTranslated(-1, 1, 0);
ResourceManager.aberrator.renderPart("Gun");
ResourceManager.aberrator.renderPart("Hammer");
ResourceManager.aberrator.renderPart("Magazine");
ResourceManager.aberrator.renderPart("Slide");
ResourceManager.aberrator.renderPart("Sight");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(1, 1, 0);
ResourceManager.aberrator.renderPart("Gun");
ResourceManager.aberrator.renderPart("Hammer");
ResourceManager.aberrator.renderPart("Magazine");
ResourceManager.aberrator.renderPart("Slide");
ResourceManager.aberrator.renderPart("Sight");
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
}
@Override
public void renderOther(ItemStack stack, ItemRenderType type) {

View File

@ -19,7 +19,7 @@ public class ItemRenderHeavyRevolver extends ItemRenderWeaponBase {
public ItemRenderHeavyRevolver(ResourceLocation texture) {
this.texture = texture;
}
@Override
protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.25F; }

View File

@ -180,6 +180,28 @@ public class ItemRenderMareslegAkimbo extends ItemRenderWeaponBase {
public void renderModTable(ItemStack stack, int index) {
renderOther(stack, ItemRenderType.INVENTORY);
}
@Override
public void renderEntity(ItemStack stack) {
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glPushMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.maresleg_tex);
GL11.glTranslated(-1, 1, 0);
ResourceManager.maresleg.renderPart("Gun");
ResourceManager.maresleg.renderPart("Lever");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(1, 1, 0);
ResourceManager.maresleg.renderPart("Gun");
ResourceManager.maresleg.renderPart("Lever");
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
}
@Override
public void renderOther(ItemStack stack, ItemRenderType type) {

View File

@ -195,6 +195,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_FLAT);
}
@Override
public void renderEntity(ItemStack stack) {
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH);

View File

@ -33,8 +33,9 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer {
public static final ResourceLocation laser_flash = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/laser_flash.png");
public static float interp;
public boolean isAkimbo() { return false; }
public boolean isLeftHanded() { return false; }
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
@ -53,7 +54,8 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer {
GL11.glEnable(GL11.GL_CULL_FACE);
switch(type) {
case EQUIPPED_FIRST_PERSON: setupFirstPerson(item); renderFirstPerson(item); break;
case EQUIPPED: setupThirdPerson(item); renderEquipped(item); break;
case EQUIPPED:
if(isLeftHanded()) break; setupThirdPerson(item); renderEquipped(item); break;
case INVENTORY: setupInv(item); renderInv(item); break;
case ENTITY: setupEntity(item); renderEntity(item); break;
}

View File

@ -90,9 +90,9 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement
if(type == EnumAshType.COAL) ashLevelCoal += burn;
if(type == EnumAshType.MISC) ashLevelMisc += burn;
int threshold = 2000;
if(processAsh(ashLevelWood, EnumAshType.WOOD, threshold)) ashLevelWood -= threshold;
if(processAsh(ashLevelCoal, EnumAshType.COAL, threshold)) ashLevelCoal -= threshold;
if(processAsh(ashLevelMisc, EnumAshType.MISC, threshold)) ashLevelMisc -= threshold;
while(processAsh(ashLevelWood, EnumAshType.WOOD, threshold)) ashLevelWood -= threshold;
while(processAsh(ashLevelCoal, EnumAshType.COAL, threshold)) ashLevelCoal -= threshold;
while(processAsh(ashLevelMisc, EnumAshType.MISC, threshold)) ashLevelMisc -= threshold;
this.maxBurnTime = this.burnTime = burn;
ItemStack container = slots[0].getItem().getContainerItem(slots[0]);

View File

@ -23,6 +23,14 @@ public class MobUtil {
/**Unlike the above two, the Double is interpreted as minimum soot level, instead of armor slot **/
public static HashMap<Double, List<WeightedRandomObject>> slotPoolGuns = new HashMap<>();
//slop pools
public static Map<Integer, List<WeightedRandomObject>> slotPoolGunsTier1 = new HashMap<>();
public static Map<Integer, List<WeightedRandomObject>> slotPoolGunsTier2 = new HashMap<>();
public static Map<Integer, List<WeightedRandomObject>> slotPoolGunsTier3 = new HashMap<>();
public static Map<Integer, List<WeightedRandomObject>> slotPoolMasks = new HashMap<>();
public static Map<Integer, List<WeightedRandomObject>> slotPoolHelms = new HashMap<>();
public static Map<Integer, List<WeightedRandomObject>> slotPoolTierArmor = new HashMap<>();
public static Map<Integer, List<WeightedRandomObject>> slotPoolMelee = new HashMap<>();
public static void intializeMobPools(){
slotPoolCommon.put(4, createSlotPool(8000, new Object[][]{ //new slots, smooth, brushed, no wrinkles // old slots, wrinkled, rusty, not smooth
@ -111,6 +119,72 @@ public class MobUtil {
{ModItems.wrench, 20}
}));
//For action block
slotPoolGunsTier1.put(0, createSlotPool(0, new Object[][]{
{ModItems.gun_light_revolver, 16}, {ModItems.gun_greasegun, 8}, {ModItems.gun_maresleg, 2}
}));
slotPoolGunsTier2.put(0, createSlotPool(0, new Object[][]{
{ModItems.gun_uzi, 10}, {ModItems.gun_maresleg, 8}, {ModItems.gun_henry, 12}, {ModItems.gun_heavy_revolver, 4}, {ModItems.gun_flaregun, 4}, {ModItems.gun_carbine, 4}
}));
slotPoolGunsTier3.put(0, createSlotPool(0, new Object[][]{
{ModItems.gun_uzi, 25}, {ModItems.gun_spas12, 20}, {ModItems.gun_carbine, 20}, {ModItems.gun_g3, 10}, {ModItems.gun_am180, 5}, {ModItems.gun_stg77, 5}
}));
slotPoolMasks.put(4, createSlotPool(0, new Object[][]{
{ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16},
{ModItems.rag_piss, 4}, {ModItems.goggles, 12}
}));
slotPoolHelms.put(4, createSlotPool(0, new Object[][]{
{ModItems.gas_mask_m65, 16}, {ModItems.gas_mask_olde, 12}, {ModItems.mask_of_infamy, 8},
{ModItems.gas_mask_mono, 8}, {ModItems.robes_helmet, 32}, {ModItems.no9, 16},
{ModItems.cobalt_helmet, 2}, {ModItems.hat, 1}, {ModItems.alloy_helmet, 2},
{ModItems.titanium_helmet, 4}, {ModItems.steel_helmet, 8}
}));
slotPoolTierArmor.put(4, createSlotPool(new Object[][]{
{ModItems.gas_mask_m65, 20},
{ModItems.gas_mask_olde, 15},
{ModItems.steel_helmet, 25},
{ModItems.titanium_helmet, 15},
{ModItems.alloy_helmet, 10},
}));
slotPoolTierArmor.put(3, createSlotPool(new Object[][]{
{ModItems.steel_plate, 30},
{ModItems.titanium_plate, 20},
{ModItems.alloy_plate, 15},
{ModItems.cobalt_plate, 5},
{ModItems.starmetal_plate, 5}
}));
slotPoolTierArmor.put(2, createSlotPool(new Object[][]{
{ModItems.steel_legs, 30},
{ModItems.titanium_legs, 20},
{ModItems.alloy_legs, 15},
{ModItems.cobalt_legs, 5},
{ModItems.zirconium_legs, 5}
}));
slotPoolTierArmor.put(1, createSlotPool(new Object[][]{
{ModItems.steel_boots, 30},
{ModItems.robes_boots, 25},
{ModItems.titanium_boots, 20},
{ModItems.alloy_boots, 15},
{ModItems.hazmat_boots, 10},
{ModItems.cobalt_boots, 5},
}));
slotPoolMelee.put(0, createSlotPool(2000, new Object[][]{
{ModItems.pipe_lead, 40}, {ModItems.crowbar, 35}, {ModItems.wrench, 30},
{ModItems.steel_sword, 25}, {ModItems.titanium_sword, 20},
{ModItems.reer_graar, 20}, {ModItems.stopsign, 15},
{ModItems.lead_gavel, 12}, {ModItems.wrench_flipped, 10},
{ModItems.sopsign, 8}, {ModItems.chernobylsign, 8}
}));
slotPoolAdvRanged = new HashMap<>(slotPoolAdv);
slotPoolAdvRanged.remove(0);

View File

@ -1,679 +0,0 @@
package com.hbm.wiaj.cannery;
import com.hbm.blocks.ModBlocks;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.wiaj.JarScene;
import com.hbm.wiaj.JarScript;
import com.hbm.wiaj.WorldInAJar;
import com.hbm.wiaj.actions.ActionCreateActor;
import com.hbm.wiaj.actions.ActionOffsetBy;
import com.hbm.wiaj.actions.ActionRemoveActor;
import com.hbm.wiaj.actions.ActionRotateBy;
import com.hbm.wiaj.actions.ActionSetBlock;
import com.hbm.wiaj.actions.ActionSetZoom;
import com.hbm.wiaj.actions.ActionWait;
import com.hbm.wiaj.actors.ActorFancyPanel;
import com.hbm.wiaj.actors.ActorFancyPanel.Orientation;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.util.ForgeDirection;
public class CanneryHadron extends CanneryBase {
@Override
public ItemStack getIcon() {
return new ItemStack(ModBlocks.hadron_core);
}
@Override
public String getName() {
return "cannery.hadron";
}
@Override
public CanneryBase[] seeAlso() {
return new CanneryBase[] {
new CannerySchottky()
};
}
@Override
public JarScript createScript() {
WorldInAJar world = new WorldInAJar(25, 5, 25);
JarScript script = new JarScript(world);
// FIRST SCENE: Show and explain the core component
JarScene scene0 = new JarScene(script);
scene0.add(new ActionSetZoom(4, 0));
scene0.add(new ActionSetBlock(12, 2, 12, ModBlocks.hadron_core, ForgeDirection.NORTH.ordinal()));
scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.0")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene0.add(new ActionWait(100));
scene0.add(new ActionRemoveActor(1));
scene0.add(new ActionWait(5));
scene0.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.1")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene0.add(new ActionWait(100));
scene0.add(new ActionRemoveActor(2));
scene0.add(new ActionWait(10));
scene0.add(new ActionCreateActor(3, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 4, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.2")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene0.add(new ActionWait(80));
scene0.add(new ActionRemoveActor(3));
scene0.add(new ActionWait(5));
scene0.add(new ActionRotateBy(-90, 0, 10));
scene0.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 4, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.3")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene0.add(new ActionWait(80));
scene0.add(new ActionRemoveActor(4));
scene0.add(new ActionWait(5));
scene0.add(new ActionRotateBy(90, 0, 10));
// SECOND SCENE: Begin building a coil around the core component
JarScene scene1 = new JarScene(script);
scene1.add(new ActionSetZoom(4, 0));
scene1.add(new ActionSetZoom(-2, 10));
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene1.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 12, ModBlocks.hadron_coil_alloy));
scene1.add(new ActionWait(2));
}
scene1.add(new ActionWait(5));
scene1.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -25, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.4")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(40));
for(Block block : new Block[] {
ModBlocks.hadron_coil_gold,
ModBlocks.hadron_coil_neodymium,
ModBlocks.hadron_coil_magtung,
ModBlocks.hadron_coil_schrabidium,
ModBlocks.hadron_coil_schrabidate,
ModBlocks.hadron_coil_starmetal,
ModBlocks.hadron_coil_chlorophyte,
ModBlocks.hadron_coil_mese
}) {
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene1.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 12, block));
scene1.add(new ActionWait(1));
}
scene1.add(new ActionWait(4));
}
scene1.add(new ActionWait(20));
scene1.add(new ActionRemoveActor(5));
scene1.add(new ActionWait(5));
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene1.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 12, ModBlocks.hadron_plating));
scene1.add(new ActionWait(2));
}
scene1.add(new ActionCreateActor(6, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -40, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.5")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(60));
scene1.add(new ActionRemoveActor(6));
scene1.add(new ActionWait(5));
// THIRD SCENE: Add the Access Terminal and Power Plug
JarScene scene2 = new JarScene(script);
scene2.add(new ActionSetZoom(2, 0));
scene2.add(new ActionWait(5));
for(int i = 7; i >= 0; i--) {
double r = i * Math.PI / 4;
scene2.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 12, ModBlocks.hadron_coil_neodymium));
scene2.add(new ActionWait(1));
}
scene2.add(new ActionWait(20));
scene2.add(new ActionSetBlock(12 - 2, 2, 12, Blocks.air));
scene2.add(new ActionWait(15));
scene2.add(new ActionSetBlock(12 - 2, 2, 12, ModBlocks.hadron_access, ForgeDirection.EAST.ordinal()));
scene2.add(new ActionWait(10));
scene2.add(new ActionCreateActor(7, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 36, 18, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.6")}}, 100)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene2.add(new ActionWait(80));
scene2.add(new ActionRemoveActor(7));
scene2.add(new ActionWait(20));
scene2.add(new ActionSetBlock(12, 2 + 2, 12, Blocks.air));
scene2.add(new ActionWait(15));
scene2.add(new ActionSetBlock(12, 2 + 2, 12, ModBlocks.hadron_power));
scene2.add(new ActionWait(10));
scene2.add(new ActionCreateActor(8, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -45, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.7")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene2.add(new ActionWait(80));
scene2.add(new ActionRemoveActor(8));
scene2.add(new ActionWait(20));
// FOURTH SCENE: Add some coil segments and power them
JarScene scene3 = new JarScene(script);
scene3.add(new ActionSetZoom(2, 0));
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 11, ModBlocks.hadron_coil_neodymium));
scene3.add(new ActionWait(2));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 11, ModBlocks.hadron_plating));
scene3.add(new ActionWait(2));
}
scene3.add(new ActionWait(5));
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 10, ModBlocks.hadron_coil_neodymium));
scene3.add(new ActionWait(2));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 10, ModBlocks.hadron_plating));
scene3.add(new ActionWait(2));
}
scene3.add(new ActionWait(20));
scene3.add(new ActionSetBlock(12, 2 + 2, 10, Blocks.air));
scene3.add(new ActionWait(15));
scene3.add(new ActionSetBlock(12, 2 + 2, 10, ModBlocks.hadron_power));
scene3.add(new ActionWait(10));
scene3.add(new ActionCreateActor(9, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -28, -28, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.8")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene3.add(new ActionWait(40));
scene3.add(new ActionCreateActor(10, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -12, 28, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.math.0")}, {I18nUtil.resolveKey("cannery.hadron.math.1")}}, 0)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene3.add(new ActionWait(40));
scene3.add(new ActionRemoveActor(10));
scene3.add(new ActionWait(5));
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 10, ModBlocks.hadron_coil_starmetal));
scene3.add(new ActionWait(1));
}
scene3.add(new ActionCreateActor(13, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -12, 28, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.math.2")}, {I18nUtil.resolveKey("cannery.hadron.math.3")}}, 0)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene3.add(new ActionWait(80));
scene3.add(new ActionRemoveActor(9));
scene3.add(new ActionWait(10));
scene3.add(new ActionCreateActor(11, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -45, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.9")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene3.add(new ActionWait(80));
scene3.add(new ActionRemoveActor(11));
scene3.add(new ActionWait(5));
scene3.add(new ActionCreateActor(12, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -45, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.10")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene3.add(new ActionWait(80));
scene3.add(new ActionRemoveActor(12));
scene3.add(new ActionWait(10));
scene3.add(new ActionRemoveActor(13));
for(int i = 7; i >= 0; i--) {
double r = i * Math.PI / 4;
scene3.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 10, ModBlocks.hadron_coil_neodymium));
scene3.add(new ActionWait(1));
}
// FIFTH SCENE: Add a bend to the coil
JarScene scene4 = new JarScene(script);
scene4.add(new ActionSetZoom(2, 0));
scene4.add(new ActionOffsetBy(0, 0, 4, 10));
scene4.add(new ActionRotateBy(90, 0, 10));
// BEGIN CORNER SEGMENT
for(int z = 9; z >= 7; z--) {
for(int x = 11; x <= 14; x++) {
if(z == 7 && x == 11) continue;
scene4.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating));
scene4.add(new ActionWait(2));
}
}
for(int z = 9; z >= 6; z--) {
for(int x = 10; x <= 14; x++) {
if(z == 6 && x <= 11) continue;
if(z <= 7 && x == 10) continue;
scene4.add(new ActionSetBlock(x, 1, z, z == 6 || x == 10 || (z == 7 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene4.add(new ActionWait(2));
}
}
for(int z = 9; z >= 6; z--) {
for(int x = 10; x <= 14; x++) {
if(z == 6 && x <= 11) continue;
if(z <= 7 && x == 10) continue;
if(z == 9 && x == 12) continue;
if(z == 8 && x == 12) continue;
if(z == 8 && x == 13) continue;
if(z == 8 && x == 14) continue;
scene4.add(new ActionSetBlock(x, 2, z, z == 6 || x == 10 || (z == 7 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene4.add(new ActionWait(2));
}
}
// END CORNER SEGMENT
scene4.add(new ActionWait(5));
scene4.add(new ActionCreateActor(14, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -8, -35, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.11")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene4.add(new ActionWait(80));
scene4.add(new ActionRemoveActor(14));
scene4.add(new ActionWait(5));
scene4.add(new ActionCreateActor(15, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 24, -16, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.12")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene4.add(new ActionWait(80));
scene4.add(new ActionRemoveActor(15));
scene4.add(new ActionWait(10));
for(int z = 9; z >= 6; z--) {
for(int x = 10; x <= 14; x++) {
if(z == 6 && x <= 11) continue;
if(z <= 7 && x == 10) continue;
scene4.add(new ActionSetBlock(x, 3, z, z == 6 || x == 10 || (z == 7 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene4.add(new ActionWait(2));
}
}
for(int z = 9; z >= 7; z--) {
for(int x = 11; x <= 14; x++) {
if(z == 7 && x == 11) continue;
scene4.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating));
scene4.add(new ActionWait(2));
}
}
scene4.add(new ActionWait(10));
scene4.add(new ActionSetBlock(14, 2 + 2, 8, Blocks.air));
scene4.add(new ActionWait(10));
scene4.add(new ActionSetBlock(14, 2 + 2, 8, ModBlocks.hadron_power));
scene4.add(new ActionWait(10));
// SIXTH SCENE: Reach the Analysis Chamber
JarScene scene5 = new JarScene(script);
scene5.add(new ActionSetZoom(2, 0));
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene5.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 1.5F), 8 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium));
scene5.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene5.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 2.75F), 8 + (int)(Math.cos(r) * 2.75F), ModBlocks.hadron_plating));
scene5.add(new ActionWait(1));
}
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene5.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 1.5F), 8 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium));
scene5.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene5.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 2.75F), 8 + (int)(Math.cos(r) * 2.75F), i == 3 ? ModBlocks.hadron_power : ModBlocks.hadron_plating));
scene5.add(new ActionWait(1));
}
// BEGIN CORNER SEGMENT
for(int x = 17; x <= 19; x++) {
for(int z = 10; z >= 7; z--) {
if(z == 7 && x == 19) continue;
scene5.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating));
scene5.add(new ActionWait(1));
}
}
for(int x = 17; x <= 20; x++) {
for(int z = 10; z >= 6; z--) {
if(z == 6 && x >= 19) continue;
if(z <= 7 && x == 20) continue;
scene5.add(new ActionSetBlock(x, 1, z, z == 6 || x == 20 || (z == 7 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene5.add(new ActionWait(1));
}
}
for(int x = 17; x <= 20; x++) {
for(int z = 10; z >= 6; z--) {
if(z == 6 && x >= 19) continue;
if(z <= 7 && x == 20) continue;
if(z == 9 && x == 18) continue;
if(z == 8 && x == 18) continue;
if(z == 8 && x == 17) continue;
if(z == 10 && x == 18) continue;
scene5.add(new ActionSetBlock(x, 2, z, z == 6 || x == 20 || (z == 7 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene5.add(new ActionWait(1));
}
}
for(int x = 17; x <= 20; x++) {
for(int z = 10; z >= 6; z--) {
if(z == 6 && x >= 19) continue;
if(z <= 7 && x == 20) continue;
scene5.add(new ActionSetBlock(x, 3, z, z == 6 || x == 20 || (z == 7 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene5.add(new ActionWait(1));
}
}
for(int x = 17; x <= 19; x++) {
for(int z = 10; z >= 7; z--) {
if(z == 7 && x == 19) continue;
scene5.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating));
scene5.add(new ActionWait(1));
}
}
// END CORNER SEGMENT
scene5.add(new ActionRotateBy(-90, 0, 5));
scene5.add(new ActionOffsetBy(0, 0, -8, 10));
scene5.add(new ActionRotateBy(-90, 0, 10));
scene5.add(new ActionSetZoom(-1, 10));
for(int z = 11; z <= 20; z++) {
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene5.add(new ActionSetBlock(18 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), z, ModBlocks.hadron_coil_neodymium));
if(z == 11 || z == 20) scene5.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene5.add(new ActionSetBlock(18 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), z, i == 3 && z % 3 == 0 ? ModBlocks.hadron_power : ModBlocks.hadron_plating));
if(z == 11 || z == 20) scene5.add(new ActionWait(1));
}
scene5.add(new ActionWait(z < 13 || z > 18 ? 2 : 1));
}
// SEVENTH SCENE: Actually build the Analysis Chamber
JarScene scene6 = new JarScene(script);
scene6.add(new ActionSetZoom(1, 0));
scene6.add(new ActionSetZoom(1, 10));
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), 13, ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), 13, ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
for(int z = 14; z <= 16; z++) {
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), z, i == 6 ? ModBlocks.hadron_analysis_glass : ModBlocks.hadron_analysis));
scene6.add(new ActionWait(2));
}
}
scene6.add(new ActionWait(10));
scene6.add(new ActionCreateActor(16, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, 0, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.13")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene6.add(new ActionWait(100));
scene6.add(new ActionRemoveActor(16));
scene6.add(new ActionWait(10));
for(int z = 17; z <= 20; z++) {
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 1.5F), 2 + (int)(Math.sin(r) * 1.5F), z, ModBlocks.hadron_coil_neodymium));
if(z == 17 || z == 20) scene6.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene6.add(new ActionSetBlock(12 + (int)(Math.cos(r) * 2.75F), 2 + (int)(Math.sin(r) * 2.75F), z, i == 3 && (z == 18 || z == 20) ? ModBlocks.hadron_power : ModBlocks.hadron_plating));
if(z == 17 || z == 20) scene6.add(new ActionWait(1));
}
scene6.add(new ActionWait(1));
}
scene6.add(new ActionSetZoom(-1, 10));
// BEGIN CORNER SEGMENT
for(int x = 17; x <= 19; x++) {
for(int z = 23; z >= 21; z--) {
if(z == 23 && x == 19) continue;
scene6.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
}
for(int x = 17; x <= 20; x++) {
for(int z = 24; z >= 21; z--) {
if(z == 24 && x >= 19) continue;
if(z >= 23 && x == 20) continue;
scene6.add(new ActionSetBlock(x, 1, z, z == 24 || x == 20 || (z == 23 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
}
for(int x = 17; x <= 20; x++) {
for(int z = 24; z >= 21; z--) {
if(z == 24 && x >= 19) continue;
if(z >= 23 && x == 20) continue;
if(z == 21 && x == 18) continue;
if(z == 22 && x == 18) continue;
if(z == 22 && x == 17) continue;
if(z == 20 && x == 18) continue;
scene6.add(new ActionSetBlock(x, 2, z, z == 24 || x == 20 || (z == 23 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
}
for(int x = 17; x <= 20; x++) {
for(int z = 24; z >= 21; z--) {
if(z == 24 && x >= 19) continue;
if(z >= 23 && x == 20) continue;
scene6.add(new ActionSetBlock(x, 3, z, z == 24 || x == 20 || (z == 23 && x == 19) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
}
for(int x = 17; x <= 19; x++) {
for(int z = 23; z >= 21; z--) {
if(z == 23 && x == 19) continue;
scene6.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
}
// END CORNER SEGMENT
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene6.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 1.5F), 22 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene6.add(new ActionSetBlock(16, 2 + (int)(Math.sin(r) * 2.75F), 22 + (int)(Math.cos(r) * 2.75F), i == 3 ? ModBlocks.hadron_power : ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene6.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 1.5F), 22 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene6.add(new ActionSetBlock(15, 2 + (int)(Math.sin(r) * 2.75F), 22 + (int)(Math.cos(r) * 2.75F), ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
for(int i = 0; i < 8; i++) {
double r = i * Math.PI / 4;
scene6.add(new ActionSetBlock(14, 2 + (int)(Math.sin(r) * 1.5F), 22 + (int)(Math.cos(r) * 1.5F), ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
for(int i = 0; i < 12; i++) {
double r = i * Math.PI / 6;
scene6.add(new ActionSetBlock(14, 2 + (int)(Math.sin(r) * 2.75F), 22 + (int)(Math.cos(r) * 2.75F), i == 3 ? ModBlocks.hadron_power : ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
// BEGIN CORNER SEGMENT
for(int x = 11; x <= 13; x++) {
for(int z = 23; z >= 21; z--) {
if(z == 23 && x == 11) continue;
scene6.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
}
for(int x = 10; x <= 13; x++) {
for(int z = 24; z >= 21; z--) {
if(z == 24 && x <= 11) continue;
if(z >= 23 && x == 10) continue;
scene6.add(new ActionSetBlock(x, 1, z, z == 24 || x == 10 || (z == 23 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
}
for(int x = 10; x <= 13; x++) {
for(int z = 24; z >= 21; z--) {
if(z == 24 && x <= 11) continue;
if(z >= 23 && x == 10) continue;
if(z == 21 && x == 12) continue;
if(z == 22 && x == 12) continue;
if(z == 22 && x == 13) continue;
scene6.add(new ActionSetBlock(x, 2, z, z == 24 || x == 10 || (z == 23 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
}
for(int x = 10; x <= 13; x++) {
for(int z = 24; z >= 21; z--) {
if(z == 24 && x <= 11) continue;
if(z >= 23 && x == 10) continue;
scene6.add(new ActionSetBlock(x, 3, z, z == 24 || x == 10 || (z == 23 && x == 11) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_neodymium));
scene6.add(new ActionWait(1));
}
}
for(int x = 11; x <= 13; x++) {
for(int z = 23; z >= 21; z--) {
if(z == 23 && x == 11) continue;
scene6.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating));
scene6.add(new ActionWait(1));
}
}
// END CORNER SEGMENT
scene6.add(new ActionWait(10));
scene6.add(new ActionCreateActor(17, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -50, new Object[][] {{I18nUtil.resolveKey("cannery.hadron.14")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene6.add(new ActionWait(100));
scene6.add(new ActionRemoveActor(17));
scene6.add(new ActionWait(10));
// ADDENDUM SCENE: Schottky diodes
// ADDENDUM SCENE: Cooling
script
.addScene(scene0)
.addScene(scene1)
.addScene(scene2)
.addScene(scene3)
.addScene(scene4)
.addScene(scene5)
.addScene(scene6);
return script;
}
}

View File

@ -1,250 +0,0 @@
package com.hbm.wiaj.cannery;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import com.hbm.tileentity.machine.TileEntityHadronDiode;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.wiaj.JarScene;
import com.hbm.wiaj.JarScript;
import com.hbm.wiaj.WorldInAJar;
import com.hbm.wiaj.actions.ActionCreateActor;
import com.hbm.wiaj.actions.ActionRemoveActor;
import com.hbm.wiaj.actions.ActionRotateBy;
import com.hbm.wiaj.actions.ActionSetBlock;
import com.hbm.wiaj.actions.ActionSetTile;
import com.hbm.wiaj.actions.ActionSetZoom;
import com.hbm.wiaj.actions.ActionWait;
import com.hbm.wiaj.actors.ActorFancyPanel;
import com.hbm.wiaj.actors.ActorFancyPanel.Orientation;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
public class CannerySchottky extends CanneryBase {
@Override
public ItemStack getIcon() {
return new ItemStack(ModBlocks.hadron_diode);
}
@Override
public String getName() {
return "cannery.schottky";
}
@Override
public CanneryBase[] seeAlso() {
return new CanneryBase[] {
new CanneryHadron()
};
}
@Override
public JarScript createScript() {
WorldInAJar world = new WorldInAJar(5, 5, 5);
JarScript script = new JarScript(world);
// FIRST SCENE: Show and explain the diode
JarScene scene0 = new JarScene(script);
scene0.add(new ActionSetZoom(4, 0));
scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode()));
scene0.add(new ActionSetBlock(2, 2, 2, ModBlocks.hadron_diode));
scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.0")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene0.add(new ActionWait(100));
scene0.add(new ActionRemoveActor(1));
scene0.add(new ActionWait(5));
scene0.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.1")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene0.add(new ActionWait(80));
scene0.add(new ActionRemoveActor(1));
scene0.add(new ActionWait(10));
scene0.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0)
.setColors(colorCopper).setOrientation(Orientation.RIGHT)));
scene0.add(new ActionWait(20));
scene0.add(new ActionRemoveActor(2));
scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; }}));
scene0.add(new ActionWait(10));
scene0.add(new ActionCreateActor(3, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.2")}}, 100)
.setColors(colorCopper).setOrientation(Orientation.RIGHT)));
scene0.add(new ActionWait(60));
scene0.add(new ActionRemoveActor(3));
scene0.add(new ActionWait(10));
scene0.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene0.add(new ActionWait(10));
scene0.add(new ActionRemoveActor(4));
scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.IN; }}));
scene0.add(new ActionWait(5));
scene0.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene0.add(new ActionWait(10));
scene0.add(new ActionRemoveActor(5));
scene0.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; }}));
scene0.add(new ActionWait(10));
scene0.add(new ActionCreateActor(6, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.3")}}, 100)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene0.add(new ActionWait(60));
scene0.add(new ActionRemoveActor(6));
scene0.add(new ActionWait(10));
// SECOND SCENE: Add another entrance and exit
JarScene scene1 = new JarScene(script);
scene1.add(new ActionSetZoom(4, 0));
scene1.add(new ActionRotateBy(180, 0, 10));
scene1.add(new ActionCreateActor(2, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, -14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0)
.setColors(colorCopper).setOrientation(Orientation.RIGHT)));
scene1.add(new ActionWait(10));
scene1.add(new ActionRemoveActor(2));
scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; }}));
scene1.add(new ActionWait(10));
scene1.add(new ActionCreateActor(4, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene1.add(new ActionWait(10));
scene1.add(new ActionRemoveActor(4));
scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; sides[5] = DiodeConfig.IN; }}));
scene1.add(new ActionWait(5));
scene1.add(new ActionCreateActor(5, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 14, 8, new Object[][] {{new ItemStack(ModItems.screwdriver)}}, 0)
.setColors(colorCopper).setOrientation(Orientation.LEFT)));
scene1.add(new ActionWait(10));
scene1.add(new ActionRemoveActor(5));
scene1.add(new ActionSetTile(2, 2, 2, new TileEntityHadronDiode() {{ sides[2] = DiodeConfig.IN; sides[4] = DiodeConfig.OUT; sides[3] = DiodeConfig.IN; sides[5] = DiodeConfig.OUT; }}));
scene1.add(new ActionWait(10));
scene1.add(new ActionRotateBy(-180, 0, 10));
scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.4")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(100));
scene1.add(new ActionRemoveActor(1));
scene1.add(new ActionWait(10));
scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.5")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(100));
scene1.add(new ActionRemoveActor(1));
scene1.add(new ActionWait(10));
scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.6")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(100));
scene1.add(new ActionRemoveActor(1));
scene1.add(new ActionWait(10));
scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.7")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(100));
scene1.add(new ActionRemoveActor(1));
scene1.add(new ActionWait(10));
scene1.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.8")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene1.add(new ActionWait(100));
scene1.add(new ActionRemoveActor(1));
scene1.add(new ActionWait(10));
// THIRD SCENE: Correctly enclose the diode
JarScene scene2 = new JarScene(script);
scene2.add(new ActionSetZoom(4, 0));
scene2.add(new ActionSetZoom(-2, 10));
for(int x = 0; x < 5; x++) {
for(int z = 0; z < 5; z++) {
if((x == 0 || x == 4) && (z == 0 || z == 4)) continue;
scene2.add(new ActionSetBlock(x, 0, z, ModBlocks.hadron_plating));
scene2.add(new ActionWait(1));
}
}
for(int x = 0; x < 5; x++) {
for(int z = 0; z < 5; z++) {
scene2.add(new ActionSetBlock(x, 1, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy));
scene2.add(new ActionWait(1));
}
}
for(int x = 0; x < 5; x++) {
for(int z = 0; z < 5; z++) {
if(x == 2 || z == 2) continue;
scene2.add(new ActionSetBlock(x, 2, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy));
scene2.add(new ActionWait(1));
}
}
scene2.add(new ActionCreateActor(1, new ActorFancyPanel(Minecraft.getMinecraft().fontRenderer, 0, -20, new Object[][] {{I18nUtil.resolveKey("cannery.schottky.9")}}, 200)
.setColors(colorCopper).setOrientation(Orientation.BOTTOM)));
scene2.add(new ActionRotateBy(360, 0, 100));
scene2.add(new ActionRemoveActor(1));
scene2.add(new ActionWait(10));
for(int x = 0; x < 5; x++) {
for(int z = 0; z < 5; z++) {
scene2.add(new ActionSetBlock(x, 3, z, (x == 0 || x == 4) && (z == 0 || z == 4) ? ModBlocks.hadron_plating : ModBlocks.hadron_coil_alloy));
scene2.add(new ActionWait(1));
}
}
for(int x = 0; x < 5; x++) {
for(int z = 0; z < 5; z++) {
if((x == 0 || x == 4) && (z == 0 || z == 4)) continue;
scene2.add(new ActionSetBlock(x, 4, z, ModBlocks.hadron_plating));
scene2.add(new ActionWait(1));
}
}
script
.addScene(scene0)
.addScene(scene1)
.addScene(scene2);
return script;
}
}

View File

@ -23,8 +23,6 @@ public class Jars {
canneries.put(new ComparableStack(ModBlocks.machine_silex), new CannerySILEX());
canneries.put(new ComparableStack(ModBlocks.foundry_channel), new CanneryFoundryChannel());
canneries.put(new ComparableStack(ModBlocks.machine_crucible), new CanneryCrucible());
canneries.put(new ComparableStack(ModBlocks.hadron_core), new CanneryHadron());
canneries.put(new ComparableStack(ModBlocks.hadron_diode), new CannerySchottky());
canneries.put(new ComparableStack(DictFrame.fromOne(ModItems.plant_item, EnumPlantType.MUSTARDWILLOW)), new CanneryWillow());
canneries.put(new ComparableStack(DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.CD0)), new CanneryWillow());

File diff suppressed because it is too large Load Diff

View File

@ -128,7 +128,7 @@ public class NTMWorldGenerator implements IWorldGenerator {
structure = new JigsawPiece("crashed_plane_2", StructureManager.plane2, -8);
spawnWeight = 50;
}});
NBTStructure.registerStructure(0, new SpawnCondition("desert_shack_1") {{
canSpawn = biome -> biome == BiomeGenBase.desert;
structure = new JigsawPiece("desert_shack_1", StructureManager.desert_shack_1, -7);
@ -188,22 +188,22 @@ public class NTMWorldGenerator implements IWorldGenerator {
NBTStructure.registerStructure(0, new SpawnCondition("ruin6") {{
canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt();
structure = new JigsawPiece("NTMRuinsF", StructureManager.ntmruinsF, -1) {{conformToTerrain = true;}};
spawnWeight = 50;
spawnWeight = 35;
}});
NBTStructure.registerStructure(0, new SpawnCondition("ruin7") {{
canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt();
structure = new JigsawPiece("NTMRuinsG", StructureManager.ntmruinsG, -1) {{conformToTerrain = true;}};
spawnWeight = 50;
spawnWeight = 35;
}});
NBTStructure.registerStructure(0, new SpawnCondition("ruin8") {{
canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt();
structure = new JigsawPiece("NTMRuinsH", StructureManager.ntmruinsH, -1) {{conformToTerrain = true;}};
spawnWeight = 50;
spawnWeight = 35;
}});
NBTStructure.registerStructure(0, new SpawnCondition("ruin9") {{
canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt();
structure = new JigsawPiece("NTMRuinsI", StructureManager.ntmruinsI, -1) {{conformToTerrain = true;}};
spawnWeight = 50;
spawnWeight = 35;
}});
NBTStructure.registerStructure(0, new SpawnCondition("ruin10") {{
canSpawn = biome -> !invalidBiomes.contains(biome) && biome.canSpawnLightningBolt();
@ -215,6 +215,11 @@ public class NTMWorldGenerator implements IWorldGenerator {
structure = new JigsawPiece("radio_house", StructureManager.radio_house, -6);
spawnWeight = 30;
}});
NBTStructure.registerStructure(0, new SpawnCondition("factory") {{
canSpawn = flatbiomes::contains;
structure = new JigsawPiece("factory", StructureManager.factory, -6);
spawnWeight = 30;
}});
NBTStructure.registerNullWeight(0, 2, biome -> biome == BiomeGenBase.plains);
NBTStructure.registerNullWeight(0, 4, oceanBiomes::contains);

View File

@ -18,6 +18,7 @@ import com.hbm.world.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;
@ -111,8 +112,8 @@ public class LogicBlockActions {
}
}
}
world.setBlock(x, y, z, ModBlocks.block_steel);
world.setBlock(x, y, z, Blocks.air);
// world.setBlock(x, y, z, ModBlocks.block_steel); this is useless
};
public static Consumer<LogicBlock.TileEntityLogicBlock> FODDER_WAVE = (tile) -> {
@ -134,6 +135,89 @@ public class LogicBlockActions {
}
};
public static Consumer<LogicBlock.TileEntityLogicBlock> SKELETON_GUN_TIER_1 = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
int y = tile.yCoord;
int z = tile.zCoord;
if (tile.phase == 1) {
Vec3NT vec = new Vec3NT(0, 0, 0);
EntitySkeleton mob = new EntitySkeleton(world);
mob.setPositionAndRotation(x, y, z, 0, 0);
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier1, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolRanged, new Random());
world.spawnEntityInWorld(mob);
world.setBlock(x, y, z, Blocks.air);
}
};
public static Consumer<LogicBlock.TileEntityLogicBlock> SKELETON_GUN_TIER_2 = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
int y = tile.yCoord;
int z = tile.zCoord;
if (tile.phase == 1) {
Vec3NT vec = new Vec3NT(0, 0, 0);
EntitySkeleton mob = new EntitySkeleton(world);
mob.setPositionAndRotation(x, y, z, 0, 0);
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier2, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random());
world.spawnEntityInWorld(mob);
world.setBlock(x, y, z, Blocks.air);
}
};
public static Consumer<LogicBlock.TileEntityLogicBlock> SKELETON_GUN_TIER_3 = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
int y = tile.yCoord;
int z = tile.zCoord;
if (tile.phase == 1) {
Vec3NT vec = new Vec3NT(0, 0, 0);
EntitySkeleton mob = new EntitySkeleton(world);
mob.setPositionAndRotation(x, y, z, 0, 0);
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolGunsTier3, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMasks, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolAdvRanged, new Random());
world.spawnEntityInWorld(mob);
world.setBlock(x, y, z, Blocks.air);
}
};
public static Consumer<LogicBlock.TileEntityLogicBlock> ZOMBIE_TIER_1 = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
int y = tile.yCoord;
int z = tile.zCoord;
if (tile.phase == 1) {
Vec3NT vec = new Vec3NT(0, 0, 0);
EntityZombie mob = new EntityZombie(world);
mob.setPositionAndRotation(x, y, z, 0, 0);
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random());
world.spawnEntityInWorld(mob);
world.setBlock(x, y, z, Blocks.air);
}
};
public static Consumer<LogicBlock.TileEntityLogicBlock> ZOMBIE_TIER_2 = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
int y = tile.yCoord;
int z = tile.zCoord;
if (tile.phase == 1) {
Vec3NT vec = new Vec3NT(0, 0, 0);
EntityZombie mob = new EntityZombie(world);
mob.setPositionAndRotation(x, y, z, 0, 0);
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolTierArmor, new Random());
MobUtil.assignItemsToEntity(mob, MobUtil.slotPoolMelee, new Random());
world.spawnEntityInWorld(mob);
world.setBlock(x, y, z, Blocks.air);
}
};
public static Consumer<LogicBlock.TileEntityLogicBlock> PUZZLE_TEST = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
@ -261,8 +345,14 @@ public class LogicBlockActions {
actions.put("PUZZLE_TEST", PUZZLE_TEST);
actions.put("MISSILE_STRIKE", MISSILE_STRIKE);
actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM);
//Mob Block Actions
actions.put("SKELETON_GUN_TIER_1", SKELETON_GUN_TIER_1);
actions.put("SKELETON_GUN_TIER_2", SKELETON_GUN_TIER_2);
actions.put("SKELETON_GUN_TIER_3", SKELETON_GUN_TIER_3);
actions.put("ZOMBIE_TIER_1", ZOMBIE_TIER_1);
actions.put("ZOMBIE_TIER_2", ZOMBIE_TIER_2);
}
}

View File

@ -51,6 +51,14 @@ public class LogicBlockConditions {
return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(5, 5, 5)).isEmpty();
};
public static Function<LogicBlock.TileEntityLogicBlock, Boolean> PLAYER_CUBE_25 = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
int y = tile.yCoord;
int z = tile.zCoord;
return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(25, 25, 25)).isEmpty();
};
public static Function<LogicBlock.TileEntityLogicBlock, Boolean> REDSTONE = (tile) -> {
World world = tile.getWorldObj();
int x = tile.xCoord;
@ -90,6 +98,7 @@ public class LogicBlockConditions {
conditions.put("EMPTY", EMPTY);
conditions.put("ABERRATOR", ABERRATOR);
conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5);
conditions.put("PLAYER_CUBE_25", PLAYER_CUBE_25);
conditions.put("REDSTONE", REDSTONE);
conditions.put("PUZZLE_TEST", PUZZLE_TEST);
}

View File

@ -0,0 +1,11 @@
{
"name": "Blast Furnace",
"icon": ["hbm:tile.machine_difurnace_off", 1, 0],
"trigger": [["hbm:tile.machine_difurnace_off"], ["hbm:tile.machine_difurnace_extension"]],
"title": {
"en_US": "Blast Furnace"
},
"content": {
"en_US": "Simple furnace that can combine two items into one output, usually in the form of an alloy. Needed early on as the first source of [[steel|Steel]], [[red copper|Minecraft Grade Copper]] and [[advanced alloy|Advanced Alloy]]. Does not accept all furnace fuels, only works with hot burning ones like coal, coke or lava buckets. Can be accelerated by placing a blast furnace extension on top, which also makes it more efficient."
}
}

View File

@ -0,0 +1,11 @@
{
"name": "Rotary Furnace",
"icon": ["hbm:tile.machine_rotary_furnace", 1, 0],
"trigger": [["hbm:tile.machine_rotary_furnace"]],
"title": {
"en_US": "Rotary Furnace"
},
"content": {
"en_US": "A type of alloying furnace that can accept multiple item inputs and a fluid and output the result as liquid metal which needs to be cast. Used to make [[weapon steel|Weapon Steel]] and [[saturnite|Saturnite]], and features alternate recipes for [[gunmetal|Gunmetal]] and [[steel|Steel]]. Requires both a solid fuel and [[steam|Steam]] to function, creating [[low-pressure steam|Low-Pressure Steam]] in the process.<br><br>Items can be inserted from the color-coded access points in the back. The input fluid can only be connected to one of the two grey ports on the output side. Steam and low-pressure steam ducts need to be connected to the steam engine on the left. Solid fuel can be inserted through the iron bars at the front. Exhaust smoke can be extracted from the opening at the top, the furnace will emit a smoke plume if not connected to a smoke stack."
}
}

Binary file not shown.