Merge remote-tracking branch 'origin/master' into bunkers-(for-real)

This commit is contained in:
Vaern 2023-06-09 13:41:19 -07:00
commit 3880daea25
129 changed files with 13762 additions and 6258 deletions

24
.gitignore vendored
View File

@ -20,3 +20,27 @@ build
# other
run
# CurseForge configuration
/curseforge.properties
# Changelog backup
/changelog.bak
screenshots/
saves/
usernamecache.json
options.txt
logs/
doc/
crash-reports/
config/
asm/

View File

@ -1,3 +1,6 @@
import java.nio.file.Files
import java.nio.file.Paths
buildscript {
repositories {
maven { url = 'https://maven.minecraftforge.net/' }
@ -10,6 +13,14 @@ buildscript {
}
apply plugin: 'forge'
apply plugin: 'curseforge'
if(Files.exists(Paths.get("curseforge.properties"))) {
// Load CurseForge configuration
ext.cfprops = parseConfig(file("curseforge.properties"))
}
def version_name = version = mod_version
if(!mod_build_number.isEmpty()) {
version_name = mod_version + "_X" + mod_build_number
@ -114,3 +125,30 @@ task version {
println project.version
}
}
if(Files.exists(Paths.get("curseforge.properties"))) {
curse {
apiKey = cfprops.api_key
projectId = cfprops.project_id
releaseType = "release"
if (Files.exists(Paths.get("changelog"))) {
changelog = String.join("\r\n", Files.readAllLines(Paths.get("changelog")))
// Perform a backup of the changelog and create a new file for next changes
doLast {
Files.move(Paths.get("changelog"), Paths.get("changelog.bak"))
Files.createFile(Paths.get("changelog"))
}
}
}
}
// Properties file parsing helper
static def parseConfig(File config) {
config.withReader {
def prop = new Properties()
prop.load(it)
return (new ConfigSlurper().parse(prop))
}
}

17
changelog Normal file
View File

@ -0,0 +1,17 @@
## Added
* Machines now emit soot. Soot collects in units of 4x4 chunks, and spreads into neighboring regions. High levels of soot cause visible smog.
* Gas artillery shells
* Chlorine
* Phosgene
* Mustard gas
* Euphemium capacitor
* Used for schrabidium transmutation, has infinite durability
## Changed
* Updated russian localization
* Mist now spawns cloud particles with the correct color instead of standard white
* HE artillery shells and rockets now turn blocks into slag
## Fixed
* Fixed the TOXIC trait not respecting protection when applying potion effects
* Fixed some armor recipes only accepting polymer and not bakelite

View File

@ -1,14 +1,17 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=4613
mod_build_number=4621
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models, porting),\
\ UFFR (RTGs, guns, casings), Pu-238 (Tom impact effects), Bismarck (chinese localization),\
\ Frooz (models), Minecreep (models), VT-6/24 (models, textures), Pheo (textures, various machines, models, weapons), Vær (gas centrifuges,\
\ better worldgen, ZIRNOX, CP-1 parts, starter guide), Adam29 (liquid petroleum, ethanol, electric furnace),\
\ Pashtet (russian localization), MartinTheDragon (calculator, chunk-based fallout), haru315 (spiral point algorithm),\
\ Sten89 (models), Pixelguru26 (textures), TheBlueHat (textures), Alcater (GUI textures, porting), impbk2002 (project settings),\
\ OvermindDL1 (project settings), TehTemmie (reacher radiation function), Toshayo (satellite loot system, project settings), Silly541 (config for safe ME drives),\
\ Voxelstice (OpenComputers integration, turbine spinup), BallOfEnergy1 (OpenComputers integration), martemen (project settings),\
\ Pvndols (thorium fuel recipe, gas turbine), JamesH2 (blood mechanics, nitric acid), sdddddf80 (recipe configs), SuperCraftAlex (tooltips)
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\
\ porting), UFFR (RTGs, guns, casings, euphemium capacitor), Pu-238 (Tom impact effects), Bismarck\
\ (chinese localization), Frooz (models), Minecreep (models), VT-6/24 (models, textures), Pheo (textures,\
\ various machines, models, weapons), Vær (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide),\
\ Adam29 (liquid petroleum, ethanol, electric furnace), Pashtet (russian localization), MartinTheDragon\
\ (calculator, chunk-based fallout), haru315 (spiral point algorithm), Sten89 (models), Pixelguru26\
\ (textures), TheBlueHat (textures), Alcater (GUI textures, porting), impbk2002 (project settings),\
\ Burningwater202 (laminate glass), OvermindDL1 (project settings), TehTemmie (reacher radiation function),\
\ Toshayo (satellite loot system, project settings, gradle curse task), Silly541 (config for safe ME drives),\
\ Voxelstice (OpenComputers integration, turbine spinup), BallOfEnergy1 (OpenComputers integration), martemen\
\ (project settings), Pvndols (thorium fuel recipe, gas turbine), JamesH2 (blood mechanics, nitric acid,\
\ particle emitter), sdddddf80 (recipe configs, chinese localization), SuperCraftAlex (tooltips)

View File

@ -0,0 +1,41 @@
package com.hbm.blocks;
import java.util.ArrayList;
import java.util.Random;
import com.hbm.lib.RefStrings;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class BlockRemap extends Block implements ILookOverlay {
public Block remapBlock;
public int remapMeta;
protected BlockRemap(Block block, int meta) {
super(Material.tnt);
this.remapBlock = block;
this.remapMeta = meta;
this.setTickRandomly(true);
}
@Override
public Block setBlockName(String name) {
super.setBlockName(name);
this.setBlockTextureName(RefStrings.MODID + ":" + name);
return this;
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
world.setBlock(x, y, z, this.remapBlock, this.remapMeta, 2);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
ILookOverlay.printGeneric(event, "Compatibility block, will convert on update tick.", 0xffff00, 0x404000, new ArrayList());
}
}

View File

@ -13,7 +13,9 @@ import com.hbm.blocks.machine.rbmk.*;
import com.hbm.blocks.network.*;
import com.hbm.blocks.rail.RailNarrowCurve;
import com.hbm.blocks.rail.RailNarrowStraight;
import com.hbm.blocks.rail.RailStandardBuffer;
import com.hbm.blocks.rail.RailStandardCurve;
import com.hbm.blocks.rail.RailStandardRamp;
import com.hbm.blocks.rail.RailStandardStraight;
import com.hbm.blocks.siege.*;
import com.hbm.blocks.test.*;
@ -32,6 +34,7 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockFalling;
import net.minecraft.block.material.*;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
@ -206,8 +209,11 @@ public class ModBlocks {
public static Block block_aluminium;
public static Block block_fluorite;
public static Block block_steel;
public static Block block_tcalloy;
public static Block block_cdalloy;
public static Block block_lead;
public static Block block_bismuth;
public static Block block_cadmium;
public static Block block_coltan;
public static Block block_tantalium;
public static Block block_niobium;
@ -313,10 +319,13 @@ public class ModBlocks {
public static Block reinforced_brick;
public static Block reinforced_ducrete;
public static Block reinforced_glass;
public static Block reinforced_glass_pane;
public static Block reinforced_light;
public static Block reinforced_sand;
public static Block reinforced_lamp_off;
public static Block reinforced_lamp_on;
public static Block reinforced_laminate;
public static Block reinforced_laminate_pane;
public static Block lamp_tritium_green_off;
public static Block lamp_tritium_green_on;
@ -748,6 +757,9 @@ public class ModBlocks {
public static Block machine_fensu;
public static final int guiID_machine_fensu = 99;
public static Block capacitor_bus;
public static Block capacitor_copper;
public static Block machine_coal_off;
public static Block machine_coal_on;
@ -1099,6 +1111,8 @@ public class ModBlocks {
public static Block rail_narrow_curve;
public static Block rail_large_straight;
public static Block rail_large_curve;
public static Block rail_large_ramp;
public static Block rail_large_buffer;
public static Block statue_elb;
public static Block statue_elb_g;
@ -1392,8 +1406,11 @@ public class ModBlocks {
block_aluminium = new BlockBeaconable(Material.iron).setBlockName("block_aluminium").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_aluminium");
block_fluorite = new BlockBeaconable(Material.iron).setBlockName("block_fluorite").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_fluorite");
block_steel = new BlockBeaconable(Material.iron).setBlockName("block_steel").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_steel");
block_tcalloy = new BlockBeaconable(Material.iron).setBlockName("block_tcalloy").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_tcalloy");
block_cdalloy = new BlockBeaconable(Material.iron).setBlockName("block_cdalloy").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_cdalloy");
block_lead = new BlockBeaconable(Material.iron).setBlockName("block_lead").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":block_lead");
block_bismuth = new BlockBeaconable(Material.iron).setBlockName("block_bismuth").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":block_bismuth");
block_cadmium = new BlockBeaconable(Material.iron).setBlockName("block_cadmium").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":block_cadmium");
block_coltan = new BlockBeaconable(Material.iron).setBlockName("block_coltan").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":block_coltan");
block_tantalium = new BlockBeaconable(Material.iron).setBlockName("block_tantalium").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(30.0F).setBlockTextureName(RefStrings.MODID + ":block_tantalium");
block_niobium = new BlockBeaconable(Material.iron).setBlockName("block_niobium").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeMetal).setHardness(5.0F).setResistance(30.0F);
@ -1497,10 +1514,13 @@ public class ModBlocks {
reinforced_brick = new BlockGeneric(Material.rock).setBlockName("reinforced_brick").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(8000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_brick");
reinforced_glass = new BlockNTMGlassCT(0, RefStrings.MODID + ":reinforced_glass", Material.rock).setBlockName("reinforced_glass").setCreativeTab(MainRegistry.blockTab).setLightOpacity(0).setHardness(15.0F).setResistance(200.0F);
reinforced_glass_pane = new BlockNTMGlassPane(0, RefStrings.MODID + ":reinforced_glass_pane", RefStrings.MODID + ":reinforced_glass_pane_edge", Material.rock, false).setBlockName("reinforced_glass_pane").setCreativeTab(MainRegistry.blockTab).setLightOpacity(1).setHardness(15.0F).setResistance(200.0F);
reinforced_light = new BlockGeneric(Material.rock).setBlockName("reinforced_light").setCreativeTab(MainRegistry.blockTab).setLightLevel(1.0F).setHardness(15.0F).setResistance(300.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_light");
reinforced_sand = new BlockGeneric(Material.rock).setBlockName("reinforced_sand").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(400.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_sand");
reinforced_lamp_off = new ReinforcedLamp(Material.rock, false).setBlockName("reinforced_lamp_off").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(300.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_lamp_off");
reinforced_lamp_on = new ReinforcedLamp(Material.rock, true).setBlockName("reinforced_lamp_on").setHardness(15.0F).setResistance(300.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_lamp_on");
reinforced_laminate = new BlockNTMGlassCT(1, RefStrings.MODID + ":reinforced_laminate", Material.rock, true).setBlockName("reinforced_laminate").setCreativeTab(MainRegistry.blockTab).setLightOpacity(0).setHardness(15.0F).setResistance(1000.0F);
reinforced_laminate_pane = new BlockNTMGlassPane(1, RefStrings.MODID + ":reinforced_laminate_pane", RefStrings.MODID + ":reinforced_laminate_pane_edge", Material.rock, true).setBlockName("reinforced_laminate_pane").setCreativeTab(MainRegistry.blockTab).setLightOpacity(1).setHardness(15.0F).setResistance(1000.0F);
lamp_tritium_green_off = new ReinforcedLamp(Material.redstoneLight, false).setBlockName("lamp_tritium_green_off").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":lamp_tritium_green_off");
lamp_tritium_green_on = new ReinforcedLamp(Material.redstoneLight, true).setBlockName("lamp_tritium_green_on").setStepSound(Block.soundTypeGlass).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":lamp_tritium_green_on");
@ -1855,13 +1875,16 @@ public class ModBlocks {
//machine_deuterium = new MachineDeuterium(Material.iron).setBlockName("machine_deuterium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_battery_potato = new MachineBattery(Material.iron, 10000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_battery = new MachineBattery(Material.iron, 1000000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_lithium_battery = new MachineBattery(Material.iron, 50000000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_schrabidium_battery = new MachineBattery(Material.iron, 25000000000L).setBlockName("machine_schrabidium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_dineutronium_battery = new MachineBattery(Material.iron, 1000000000000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_schrabidium_battery = new MachineBattery(Material.iron, 25_000_000_000L).setBlockName("machine_schrabidium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_dineutronium_battery = new MachineBattery(Material.iron, 1_000_000_000_000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_fensu = new MachineFENSU(Material.iron).setBlockName("machine_fensu").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fensu");
capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
capacitor_copper = new MachineCapacitor(Material.iron, 1_000_000L).setBlockName("capacitor_copper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper");
machine_coal_off = new MachineCoal(false).setBlockName("machine_coal_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_coal_on = new MachineCoal(true).setBlockName("machine_coal_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F);
@ -2123,10 +2146,12 @@ public class ModBlocks {
rail_narrow = new RailGeneric().setBlockName("rail_narrow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow");
rail_highspeed = new RailGeneric().setMaxSpeed(1F).setFlexible(false).setBlockName("rail_highspeed").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_highspeed");
rail_booster = new RailBooster().setBlockName("rail_booster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_booster");
rail_narrow_straight = new RailNarrowStraight().setBlockName("rail_narrow_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_narrow_curve = new RailNarrowCurve().setBlockName("rail_narrow_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":block_steel");
rail_large_curve = new RailStandardCurve().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":block_steel");
rail_narrow_straight = new RailNarrowStraight().setBlockName("rail_narrow_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_narrow_curve = new RailNarrowCurve().setBlockName("rail_narrow_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_curve = new RailStandardCurve().setBlockName("rail_large_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_ramp = new RailStandardRamp().setBlockName("rail_large_ramp").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
rail_large_buffer = new RailStandardBuffer().setBlockName("rail_large_buffer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel");
crate = new BlockCrate(Material.wood).setBlockName("crate").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate");
crate_weapon = new BlockCrate(Material.wood).setBlockName("crate_weapon").setStepSound(Block.soundTypeWood).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.consumableTab).setBlockTextureName(RefStrings.MODID + ":crate_weapon");
@ -2528,8 +2553,11 @@ public class ModBlocks {
GameRegistry.registerBlock(block_beryllium, block_beryllium.getUnlocalizedName());
GameRegistry.registerBlock(block_cobalt, block_cobalt.getUnlocalizedName());
GameRegistry.registerBlock(block_steel, block_steel.getUnlocalizedName());
GameRegistry.registerBlock(block_tcalloy, block_tcalloy.getUnlocalizedName());
GameRegistry.registerBlock(block_cdalloy, block_cdalloy.getUnlocalizedName());
GameRegistry.registerBlock(block_lead, block_lead.getUnlocalizedName());
GameRegistry.registerBlock(block_bismuth, block_bismuth.getUnlocalizedName());
GameRegistry.registerBlock(block_cadmium, block_cadmium.getUnlocalizedName());
GameRegistry.registerBlock(block_coltan, block_coltan.getUnlocalizedName());
GameRegistry.registerBlock(block_tantalium, block_tantalium.getUnlocalizedName());
GameRegistry.registerBlock(block_niobium, block_niobium.getUnlocalizedName());
@ -2641,10 +2669,13 @@ public class ModBlocks {
GameRegistry.registerBlock(asphalt_light, ItemBlockBlastInfo.class, asphalt_light.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_brick, ItemBlockBlastInfo.class, reinforced_brick.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_glass, ItemBlockBlastInfo.class, reinforced_glass.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_glass_pane, ItemBlockBlastInfo.class, reinforced_glass_pane.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_light, ItemBlockBlastInfo.class, reinforced_light.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_sand, ItemBlockBlastInfo.class, reinforced_sand.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_lamp_off, ItemBlockBlastInfo.class, reinforced_lamp_off.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_lamp_on, ItemBlockBlastInfo.class, reinforced_lamp_on.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_laminate, ItemBlockBlastInfo.class, reinforced_laminate.getUnlocalizedName());
GameRegistry.registerBlock(reinforced_laminate_pane,ItemBlockBlastInfo.class, reinforced_laminate_pane.getUnlocalizedName());
//Bricks
GameRegistry.registerBlock(reinforced_stone, ItemBlockBlastInfo.class, reinforced_stone.getUnlocalizedName());
@ -3167,6 +3198,8 @@ public class ModBlocks {
register(machine_schrabidium_battery);
register(machine_dineutronium_battery);
register(machine_fensu);
register(capacitor_bus);
register(capacitor_copper);
GameRegistry.registerBlock(machine_transformer, machine_transformer.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_20, machine_transformer_20.getUnlocalizedName());
GameRegistry.registerBlock(machine_transformer_dnt, machine_transformer_dnt.getUnlocalizedName());
@ -3356,6 +3389,8 @@ public class ModBlocks {
register(rail_narrow_curve);
register(rail_large_straight);
register(rail_large_curve);
register(rail_large_ramp);
register(rail_large_buffer);
//Crate
GameRegistry.registerBlock(crate, crate.getUnlocalizedName());
@ -3444,7 +3479,12 @@ public class ModBlocks {
GameRegistry.registerBlock(b, ItemBlockBase.class, b.getUnlocalizedName());
}
/*private static void register(Block b, Class<? extends ItemBlock> clazz) {
private static void register(Block b, Class<? extends ItemBlock> clazz) {
GameRegistry.registerBlock(b, clazz, b.getUnlocalizedName());
}*/
}
public static void addRemap(String unloc, Block block, int meta) {
Block remap = new BlockRemap(block, meta).setBlockName(unloc);
register(remap, ItemBlockRemap.class);
}
}

View File

@ -22,19 +22,23 @@ public class BlockNTMGlass extends BlockBreakable {
this.doesDrop = doesDrop;
}
@Override
public int quantityDropped(Random rand) {
return doesDrop ? 1 : 0;
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderBlockPass() {
return renderLayer;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
protected boolean canSilkHarvest() {
return true;
}

View File

@ -0,0 +1,52 @@
package com.hbm.blocks.generic;
import java.util.Random;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPane;
import net.minecraft.block.material.Material;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockNTMGlassPane extends BlockPane
{
int renderLayer;
boolean doesDrop = false;
//NOTE when you have eclipse make the constructor for you it *WILL BE 'protected'* so make sure to make this public like below.
/*public BlockNTMGlassPane(String flatFaceTextureName, String rimTextureName,
Material mat, boolean bool) {
super(flatFaceTextureName, rimTextureName, mat, bool);
// TODO Auto-generated constructor stub
this.setLightOpacity(1);
this.opaque = true;
}*/
public BlockNTMGlassPane(int layer, String name, String rimTextureName, Material material, boolean doesDrop) {
super(name, rimTextureName, material, false);
this.renderLayer = layer;
this.doesDrop = doesDrop;
this.opaque = true;
this.setLightOpacity(1);
}
@Override
public boolean canPaneConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir) {
Block b = world.getBlock(x, y, z);
return super.canPaneConnectTo(world, x, y, z, dir) || b instanceof BlockNTMGlass;
}
@Override
@SideOnly(Side.CLIENT)
public int getRenderBlockPass() {
return renderLayer;
}
@Override
public int quantityDropped(Random rand) {
return doesDrop ? 1 : 0;
}
}

View File

@ -47,8 +47,8 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.iconTop = new IIcon[3];
this.iconSide = new IIcon[3];
this.iconTop = new IIcon[4];
this.iconSide = new IIcon[4];
this.iconTop[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_iron");
this.iconSide[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_iron");
@ -56,14 +56,17 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
this.iconSide[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_desh");
this.iconTop[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top");
this.iconSide[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side");
this.iconTop[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_wood");
this.iconSide[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_wood");
}
@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
for(int i = 0; i < getSubCount(); ++i) {
list.add(new ItemStack(item, 1, i));
}
list.add(new ItemStack(item, 1, 3));
list.add(new ItemStack(item, 1, 0));
list.add(new ItemStack(item, 1, 1));
list.add(new ItemStack(item, 1, 2));
}
@Override
@ -84,7 +87,7 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
}
public int getCapacity(int meta) {
return meta == 0 ? 10_000 : meta == 1 ? 100_000 : meta == 2 ? 1_000_000 : 0;
return meta == 3 ? 100 : meta == 0 ? 10_000 : meta == 1 ? 100_000 : meta == 2 ? 1_000_000 : 0;
}
@Override
@ -242,7 +245,7 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
@Override
public int getSubCount() {
return 3;
return 4;
}
@Override
@ -286,4 +289,14 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
list.add(String.format("%,d", stack.stackTagCompound.getInteger("stack")) + " / " + String.format("%,d", getCapacity(stack.getItemDamage())));
}
}
@Override
public boolean hasComparatorInputOverride() {
return true;
}
@Override
public int getComparatorInputOverride(World world, int x, int y, int z, int side) {
return ((TileEntityMassStorage) world.getTileEntity(x, y, z)).redstone;
}
}

View File

@ -0,0 +1,233 @@
package com.hbm.blocks.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.IPersistentInfoProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.IPersistentNBT;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BobMathUtil;
import com.hbm.util.I18nUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import api.hbm.energy.IEnergyUser;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.stats.StatList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineCapacitor extends BlockContainer implements ILookOverlay, IPersistentInfoProvider {
@SideOnly(Side.CLIENT) public IIcon iconTop;
@SideOnly(Side.CLIENT) public IIcon iconSide;
@SideOnly(Side.CLIENT) public IIcon iconBottom;
@SideOnly(Side.CLIENT) public IIcon iconInnerTop;
@SideOnly(Side.CLIENT) public IIcon iconInnerSide;
protected long power;
public MachineCapacitor(Material mat, long power) {
super(mat);
this.power = power;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
super.registerBlockIcons(iconRegister);
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":capacitor_copper_top");
this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":capacitor_copper_side");
this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":capacitor_copper_bottom");
this.iconInnerTop = iconRegister.registerIcon(RefStrings.MODID + ":capacitor_copper_inner_top");
this.iconInnerSide = iconRegister.registerIcon(RefStrings.MODID + ":capacitor_copper_inner_side");
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override public int getRenderType() { return renderID; }
@Override public boolean isOpaqueCube() { return false; }
@Override public boolean renderAsNormalBlock() { return false; }
@Override
public int onBlockPlaced(World world, int x, int y, int z, int side, float fX, float fY, float fZ, int meta) {
return side;
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCapacitor(this.power);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityCapacitor))
return;
TileEntityCapacitor battery = (TileEntityCapacitor) te;
List<String> text = new ArrayList();
text.add(BobMathUtil.getShortNumber(battery.getPower()) + " / " + BobMathUtil.getShortNumber(battery.getMaxPower()) + "HE");
double percent = (double) battery.getPower() / (double) battery.getMaxPower();
int charge = (int) Math.floor(percent * 10_000D);
int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8);
text.add("&[" + color + "&]" + (charge / 100D) + "%");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
@Override
public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.YELLOW + "" + BobMathUtil.getShortNumber(persistentTag.getLong("power")) + "/" + BobMathUtil.getShortNumber(persistentTag.getLong("maxPower")) + "HE");
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
return IPersistentNBT.getDrops(world, x, y, z, this);
}
@Override
public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) {
if(!player.capabilities.isCreativeMode) {
harvesters.set(player);
this.dropBlockAsItem(world, x, y, z, meta, 0);
harvesters.set(null);
}
}
@Override
public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) {
player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1);
player.addExhaustion(0.025F);
}
public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyUser, INBTPacketReceiver, IPersistentNBT {
public long power;
protected long maxPower;
public TileEntityCapacitor() { }
public TileEntityCapacitor(long maxPower) {
this.maxPower = maxPower;
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
ForgeDirection opp = ForgeDirection.getOrientation(this.getBlockMetadata());
ForgeDirection dir = opp.getOpposite();
BlockPos pos = new BlockPos(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
boolean didStep = false;
ForgeDirection last = null;
while(worldObj.getBlock(pos.getX(), pos.getY(), pos.getZ()) == ModBlocks.capacitor_bus) {
ForgeDirection current = ForgeDirection.getOrientation(worldObj.getBlockMetadata(pos.getX(), pos.getY(), pos.getZ()));
if(!didStep) last = current;
didStep = true;
if(last != current) {
pos = null;
break;
}
pos = pos.offset(current);
}
if(pos != null && last != null) {
this.tryUnsubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ());
this.sendPower(worldObj, pos.getX(), pos.getY(), pos.getZ(), last);
}
this.trySubscribe(worldObj, xCoord + opp.offsetX, yCoord+ opp.offsetY, zCoord + opp.offsetZ, opp);
NBTTagCompound data = new NBTTagCompound();
data.setLong("power", power);
data.setLong("maxPower", maxPower);
INBTPacketReceiver.networkPack(this, data, 15);
}
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
this.power = nbt.getLong("power");
}
@Override
public long getPower() {
return power;
}
@Override
public long getMaxPower() {
return maxPower;
}
@Override
public ConnectionPriority getPriority() {
return ConnectionPriority.LOW;
}
@Override
public void setPower(long power) {
this.power = power;
}
@Override
public boolean canConnect(ForgeDirection dir) {
return dir == ForgeDirection.getOrientation(this.getBlockMetadata());
}
@Override
public void writeNBT(NBTTagCompound nbt) {
NBTTagCompound data = new NBTTagCompound();
data.setLong("power", power);
data.setLong("maxPower", maxPower);
nbt.setTag(NBT_PERSISTENT_KEY, data);
}
@Override
public void readNBT(NBTTagCompound nbt) {
NBTTagCompound data = nbt.getCompoundTag(NBT_PERSISTENT_KEY);
this.power = data.getLong("power");
this.maxPower = data.getLong("maxPower");
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.power = nbt.getLong("power");
this.maxPower = nbt.getLong("maxPower");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setLong("power", power);
nbt.setLong("maxPower", maxPower);
}
}
}

View File

@ -0,0 +1,50 @@
package com.hbm.blocks.machine;
import com.hbm.lib.RefStrings;
import api.hbm.energy.IEnergyConnectorBlock;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineCapacitorBus extends Block implements IEnergyConnectorBlock {
@SideOnly(Side.CLIENT) private IIcon topIcon;
public MachineCapacitorBus(Material mat) {
super(mat);
}
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister p_149651_1_) {
this.blockIcon = p_149651_1_.registerIcon(RefStrings.MODID + ":capacitor_bus_side");
this.topIcon = p_149651_1_.registerIcon(RefStrings.MODID + ":capacitor_bus_out");
}
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return side == meta ? topIcon : blockIcon;
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
int l = BlockPistonBase.determineOrientation(world, x, y, z, player);
world.setBlockMetadataWithNotify(x, y, z, l, 2);
}
@Override
public boolean canConnect(IBlockAccess world, int x, int y, int z, ForgeDirection dir) {
int meta = world.getBlockMetadata(x, y, z);
ForgeDirection busDir = ForgeDirection.getOrientation(meta);
return dir == busDir;
}
}

View File

@ -19,7 +19,7 @@ public interface IRailNTM {
* Motion ends up being *-1 if the train is going in reverse, still pointing forwards despite the speed being negative.
* Also features a double[] wrapper with size 1 which holds the speed value that overshoots the rail.
* */
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info);
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context);
/** Returns that rail's gauge. Trains will derail if the gauge does not match. */
public TrackGauge getGauge(World world, int x, int y, int z);
@ -41,4 +41,22 @@ public interface IRailNTM {
public RailContext dist(double d) { this.overshoot = d; return this; }
public RailContext pos(BlockPos d) { this.pos = d; return this; }
}
/** A wrapper for additional information like stopping on rails and what type of check we're doing */
public static class MoveContext {
public RailCheckType type;
public boolean collision = false; //if a buffer stop or similar applies
public double overshoot; //how much of the travel distance was cut shor
public MoveContext(RailCheckType type) {
this.type = type;
}
}
public static enum RailCheckType {
CORE,
FRONT,
BACK,
OTHER
}
}

View File

@ -38,7 +38,7 @@ public class RailNarrowCurve extends BlockDummyable implements IRailNTM {
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info) {
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}

View File

@ -59,7 +59,7 @@ public class RailNarrowStraight extends BlockDummyable implements IRailNTM {
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info) {
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}

View File

@ -0,0 +1,57 @@
package com.hbm.blocks.rail;
import com.hbm.blocks.BlockDummyable;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class RailStandardBuffer extends BlockDummyable implements IRailNTM {
public RailStandardBuffer() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return null;
}
@Override
public int getRenderType() {
return 0;
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 2, 2, 1, 0};
}
@Override
public int getOffset() {
return 2;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
}
// TBI
@Override
public Vec3 getSnappingPos(World world, int x, int y, int z, double trainX, double trainY, double trainZ) {
return null;
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) {
return null;
}
@Override
public TrackGauge getGauge(World world, int x, int y, int z) {
return TrackGauge.STANDARD;
}
}

View File

@ -4,6 +4,7 @@ import com.hbm.blocks.BlockDummyable;
import com.hbm.lib.Library;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
@ -24,9 +25,11 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM {
return null;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return 0;
return renderID;
}
@Override
@ -35,7 +38,7 @@ public class RailStandardCurve extends BlockDummyable implements IRailNTM {
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info) {
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}

View File

@ -0,0 +1,133 @@
package com.hbm.blocks.rail;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.lib.Library;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class RailStandardRamp extends BlockDummyable implements IRailNTM {
public RailStandardRamp() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return null;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return renderID;
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 2, 2, 1, 0};
}
@Override
public int getOffset() {
return 2;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
this.setBlockBounds(0F, 0F, 0F, 1F, 0.125F, 1F);
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
@Override
public Vec3 getSnappingPos(World world, int x, int y, int z, double trainX, double trainY, double trainZ) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, 0, 0, 0, 0, new RailContext());
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}
/* Very simple function determining the snapping position and adding the motion value to it, if desired. */
public Vec3 snapAndMove(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return Vec3.createVectorHelper(trainX, trainY, trainZ);
int cX = pos[0];
int cY = pos[1];
int cZ = pos[2];
int meta = world.getBlockMetadata(cX, cY, cZ) - this.offset;
ForgeDirection dir = ForgeDirection.getOrientation(meta);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
Vec3 vec = Vec3.createVectorHelper(trainX, trainY, trainZ);
if(speed == 0) {
//return vec;
}
if(dir == Library.POS_X || dir == Library.NEG_X) {
double targetX = trainX;
if(motionX > 0) {
targetX += speed;
info.yaw(-90F);
} else {
targetX -= speed;
info.yaw(90F);
}
double dist = (cX + 0.5 - targetX + 2.5) / 5;
vec.xCoord = MathHelper.clamp_double(targetX, cX - 2, cX + 3);
vec.yCoord = MathHelper.clamp_double(dir == Library.POS_X ? cY + dist : cY + 1 - dist, cY, cY + 1);
vec.zCoord = cZ + 0.5 + rot.offsetZ * 0.5;
info.dist(Math.abs(targetX - vec.xCoord) * Math.signum(speed));
info.pos(new BlockPos(cX + (motionX * speed > 0 ? 3 : -3), cY + (motionX * speed > 0 ^ dir == Library.POS_X ? 1 : 0), cZ));
} else {
double targetZ = trainZ;
if(motionZ > 0) {
targetZ += speed;
info.yaw(0F);
} else {
targetZ -= speed;
info.yaw(180F);
}
double dist = (cZ + 0.5 - targetZ + 2.5) / 5;
vec.xCoord = cX + 0.5 + rot.offsetX * 0.5;
vec.yCoord = MathHelper.clamp_double(dir == Library.POS_Z ? cY + dist : cY + 1 - dist, cY, cY + 1);
vec.zCoord = MathHelper.clamp_double(targetZ, cZ - 2,cZ + 3);
info.dist(Math.abs(targetZ - vec.zCoord) * Math.signum(speed));
info.pos(new BlockPos(cX, cY + (motionZ * speed > 0 ^ dir == Library.POS_Z ? 1 : 0), cZ + (motionZ * speed > 0 ? 3 : -3)));
}
return vec;
}
@Override
public TrackGauge getGauge(World world, int x, int y, int z) {
return TrackGauge.STANDARD;
}
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, getDimensions(), x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {1, -1, 2, 2, 1, 0}, x, y, z, dir);
}
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, getDimensions(), this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {1, -1, 2, 2, 1, 0}, this, dir);
}
}

View File

@ -4,6 +4,7 @@ import com.hbm.blocks.BlockDummyable;
import com.hbm.lib.Library;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
@ -24,9 +25,11 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
return null;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType() {
return 0;
return renderID;
}
@Override
@ -56,7 +59,7 @@ public class RailStandardStraight extends BlockDummyable implements IRailNTM {
}
@Override
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info) {
public Vec3 getTravelLocation(World world, int x, int y, int z, double trainX, double trainY, double trainZ, double motionX, double motionY, double motionZ, double speed, RailContext info, MoveContext context) {
return snapAndMove(world, x, y, z, trainX, trainY, trainZ, motionX, motionY, motionZ, speed, info);
}

View File

@ -36,6 +36,7 @@ public class WorldConfig {
public static int bedrockIronSpawn = 100;
public static int bedrockCopperSpawn = 200;
public static int bedrockBoraxSpawn = 50;
public static int bedrockChlorocalciteSpawn = 35;
public static int bedrockAsbestosSpawn = 50;
public static int bedrockNiobiumSpawn = 50;
public static int bedrockTitaniumSpawn = 100;
@ -153,6 +154,7 @@ public class WorldConfig {
bedrockNiterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B11_bedrockNiterWeight", "Spawn weight for niter bedrock ore", 50);
bedrockFluoriteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B12_bedrockFluoriteWeight", "Spawn weight for fluorite bedrock ore", 50);
bedrockRedstoneSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B13_bedrockRedstoneWeight", "Spawn weight for redstone bedrock ore", 50);
bedrockChlorocalciteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.B14_bedrockbChlorocalciteWeight", "Spawn weight for chlorocalcite bedrock ore", 35);
ironClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C00_ironClusterSpawn", "Amount of iron cluster veins per chunk", 4);
titaniumClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C01_titaniumClusterSpawn", "Amount of titanium cluster veins per chunk", 2);

View File

@ -54,8 +54,8 @@ public class ArmorRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.robes_boots, 1), new Object[] { "R R", "P P", 'R', ModItems.rag, 'P', ModItems.plate_polymer });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.security_helmet, 1), new Object[] { "SSS", "IGI", 'S', STEEL.plate(), 'I', ModItems.plate_polymer, 'G', KEY_ANYPANE });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.security_plate, 1), new Object[] { "KWK", "IKI", "WKW", 'K', ModItems.plate_kevlar, 'I', POLYMER.ingot(), 'W', new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.security_legs, 1), new Object[] { "IWI", "K K", "W W", 'K', ModItems.plate_kevlar, 'I', POLYMER.ingot(), 'W', new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.security_plate, 1), new Object[] { "KWK", "IKI", "WKW", 'K', ModItems.plate_kevlar, 'I', ANY_PLASTIC.ingot(), 'W', new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.security_legs, 1), new Object[] { "IWI", "K K", "W W", 'K', ModItems.plate_kevlar, 'I', ANY_PLASTIC.ingot(), 'W', new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.security_boots, 1), new Object[] { "P P", "I I", 'P', STEEL.plate(), 'I', ModItems.plate_polymer });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dnt_helmet, 1), new Object[] { "EEE", "EE ", 'E', DNT.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.dnt_plate, 1), new Object[] { "EE ", "EEE", "EEE", 'E', DNT.ingot() });
@ -68,7 +68,7 @@ public class ArmorRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.t45_plate, 1), new Object[] { "MPM", "TBT", "PPP", 'M', ModItems.motor, 'P', ModItems.plate_armor_titanium, 'T', ModItems.gas_empty, 'B', ModItems.titanium_plate });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.t45_legs, 1), new Object[] { "MPM", "PBP", "P P", 'M', ModItems.motor, 'P', ModItems.plate_armor_titanium, 'B', ModItems.titanium_legs });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.t45_boots, 1), new Object[] { "P P", "PBP", 'P', ModItems.plate_armor_titanium, 'B', ModItems.titanium_boots });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ajr_helmet, 1), new Object[] { "PPC", "PBP", "IXI", 'P', ModItems.plate_armor_ajr, 'C', ModItems.circuit_targeting_tier4, 'I', POLYMER.ingot(), 'X', ModItems.gas_mask_m65, 'B', ModItems.alloy_helmet });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ajr_helmet, 1), new Object[] { "PPC", "PBP", "IXI", 'P', ModItems.plate_armor_ajr, 'C', ModItems.circuit_targeting_tier4, 'I', ANY_PLASTIC.ingot(), 'X', ModItems.gas_mask_m65, 'B', ModItems.alloy_helmet });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ajr_plate, 1), new Object[] { "MPM", "TBT", "PPP", 'M', ModItems.motor_desh, 'P', ModItems.plate_armor_ajr, 'T', ModItems.gas_empty, 'B', ModItems.alloy_plate });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ajr_legs, 1), new Object[] { "MPM", "PBP", "P P", 'M', ModItems.motor_desh, 'P', ModItems.plate_armor_ajr, 'B', ModItems.alloy_legs });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ajr_boots, 1), new Object[] { "P P", "PBP", 'P', ModItems.plate_armor_ajr, 'B', ModItems.alloy_boots });
@ -81,9 +81,9 @@ public class ArmorRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.bj_plate_jetpack, 1), new Object[] { "NFN", "TPT", "ICI", 'N', ModItems.plate_armor_lunar, 'F', ModItems.fins_quad_titanium, 'T', new ItemStack(ModItems.fluid_tank_full, 1, Fluids.XENON.getID()), 'P', ModItems.bj_plate, 'I', ModItems.mp_thruster_10_xenon, 'C', ModItems.crystal_phosphorus });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.bj_legs, 1), new Object[] { "MBM", "NSN", "N N", 'N', ModItems.plate_armor_lunar, 'M', ModItems.motor_desh, 'S', ModItems.starmetal_legs, 'B', ModBlocks.block_starmetal });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.bj_boots, 1), new Object[] { "N N", "BSB", 'N', ModItems.plate_armor_lunar, 'S', ModItems.starmetal_boots, 'B', ModBlocks.block_starmetal });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_helmet, 1), new Object[] { "PPC", "PBP", "IFI", 'P', ModItems.plate_armor_hev, 'C', ModItems.circuit_targeting_tier4, 'B', ModItems.titanium_helmet, 'I', ModItems.plate_polymer, 'F', ModItems.gas_mask_filter });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_plate, 1), new Object[] { "MPM", "IBI", "PPP", 'P', ModItems.plate_armor_hev, 'B', ModItems.titanium_plate, 'I', POLYMER.ingot(), 'M', ModItems.motor_desh });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_legs, 1), new Object[] { "MPM", "IBI", "P P", 'P', ModItems.plate_armor_hev, 'B', ModItems.titanium_legs, 'I', POLYMER.ingot(), 'M', ModItems.motor_desh });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_helmet, 1), new Object[] { "PPC", "PBP", "IFI", 'P', ModItems.plate_armor_hev, 'C', ModItems.circuit_targeting_tier4, 'B', ModItems.titanium_helmet, 'I', ANY_PLASTIC.ingot(), 'F', ModItems.gas_mask_filter });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_plate, 1), new Object[] { "MPM", "IBI", "PPP", 'P', ModItems.plate_armor_hev, 'B', ModItems.titanium_plate, 'I', ANY_PLASTIC.ingot(), 'M', ModItems.motor_desh });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_legs, 1), new Object[] { "MPM", "IBI", "P P", 'P', ModItems.plate_armor_hev, 'B', ModItems.titanium_legs, 'I', ANY_PLASTIC.ingot(), 'M', ModItems.motor_desh });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.hev_boots, 1), new Object[] { "P P", "PBP", 'P', ModItems.plate_armor_hev, 'B', ModItems.titanium_boots });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.fau_helmet, 1), new Object[] { "PWP", "PBP", "FSF", 'P', ModItems.plate_armor_fau, 'W', new ItemStack(Blocks.wool, 1, 14), 'B', ModItems.starmetal_helmet, 'F', ModItems.gas_mask_filter, 'S', ModItems.pipes_steel });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.fau_plate, 1), new Object[] { "MCM", "PBP", "PSP", 'M', ModItems.motor_desh, 'C', ModItems.demon_core_closed, 'P', ModItems.plate_armor_fau, 'B', ModItems.starmetal_plate, 'S', ModBlocks.ancient_scrap });
@ -162,7 +162,7 @@ public class ArmorRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gas_mask_olde, 1), new Object[] { "PPP", "GPG", " F ", 'G', KEY_ANYPANE, 'P', Items.leather, 'F', IRON.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gas_mask_mono, 1), new Object[] { " P ", "PPP", " F ", 'P', ModItems.plate_polymer, 'F', IRON.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mask_of_infamy, 1), new Object[] { "III", "III", " I ", 'I', IRON.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ashglasses, 1), new Object[] { "I I", "GPG", 'I', ModItems.plate_polymer, 'G', ModBlocks.glass_ash, 'P', POLYMER.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ashglasses, 1), new Object[] { "I I", "GPG", 'I', ModItems.plate_polymer, 'G', ModBlocks.glass_ash, 'P', ANY_PLASTIC.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mask_rag, 1), new Object[] { "RRR", 'R', ModItems.rag_damp });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mask_piss, 1), new Object[] { "RRR", 'R', ModItems.rag_piss });

View File

@ -51,6 +51,9 @@ public class MineralRecipes {
add1To9Pair(ModBlocks.block_polymer, ModItems.ingot_polymer);
add1To9Pair(ModBlocks.block_bakelite, ModItems.ingot_bakelite);
add1To9Pair(ModBlocks.block_rubber, ModItems.ingot_rubber);
add1To9Pair(ModBlocks.block_cadmium, ModItems.ingot_cadmium);
add1To9Pair(ModBlocks.block_tcalloy, ModItems.ingot_tcalloy);
add1To9Pair(ModBlocks.block_cdalloy, ModItems.ingot_cdalloy);
for(int i = 0; i < EnumCokeType.values().length; i++) {
add1To9PairSameMeta(Item.getItemFromBlock(ModBlocks.block_coke), ModItems.coke, i);

View File

@ -210,7 +210,7 @@ public class EntityMappings {
addEntity(EntityCog.class, "entity_stray_cog", 1000);
addEntity(EntitySawblade.class, "entity_stray_saw", 1000);
addEntity(EntityChemical.class, "entity_chemthrower_splash", 1000);
addEntity(EntityMist.class, "entity_mist", 1000);
addEntity(EntityMist.class, "entity_mist", 250, false);
addEntity(EntityItemWaste.class, "entity_item_waste", 100);
addEntity(EntityItemBuoyant.class, "entity_item_buoyant", 100);

View File

@ -16,6 +16,7 @@ import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Gaseous_ART;
import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Liquid;
import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Viscous;
import com.hbm.lib.ModDamageSource;
import com.hbm.main.MainRegistry;
import com.hbm.util.ArmorUtil;
import com.hbm.util.ContaminationUtil;
import com.hbm.util.EntityDamageUtil;
@ -101,10 +102,21 @@ public class EntityMist extends Entity {
} else {
for(int i = 0; i < 2; i++) {
double x = this.boundingBox.minX + rand.nextDouble() * (this.boundingBox.maxX - this.boundingBox.minX);
double x = this.boundingBox.minX + (rand.nextDouble() - 0.5) * (this.boundingBox.maxX - this.boundingBox.minX);
double y = this.boundingBox.minY + rand.nextDouble() * (this.boundingBox.maxY - this.boundingBox.minY);
double z = this.boundingBox.minZ + rand.nextDouble() * (this.boundingBox.maxZ - this.boundingBox.minZ);
worldObj.spawnParticle("cloud", x, y, z, 0, 0, 0);
double z = this.boundingBox.minZ + (rand.nextDouble() - 0.5) * (this.boundingBox.maxZ - this.boundingBox.minZ);
NBTTagCompound fx = new NBTTagCompound();
fx.setString("type", "tower");
fx.setFloat("lift", 0.5F);
fx.setFloat("base", 0.75F);
fx.setFloat("max", 2F);
fx.setInteger("life", 50 + worldObj.rand.nextInt(10));
fx.setInteger("color",this.getType().getColor());
fx.setDouble("posX", x);
fx.setDouble("posY", y);
fx.setDouble("posZ", z);
MainRegistry.proxy.effectNT(fx);
}
}
}
@ -192,11 +204,14 @@ public class EntityMist extends Entity {
@Override
protected void readEntityFromNBT(NBTTagCompound nbt) {
this.setType(Fluids.fromID(nbt.getInteger("type")));
this.setArea(nbt.getFloat("width"), nbt.getFloat("height"));
}
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) {
nbt.setInteger("type", this.getType().getID());
nbt.setFloat("width", this.dataWatcher.getWatchableObjectFloat(11));
nbt.setFloat("height", this.dataWatcher.getWatchableObjectFloat(12));
}
@Override
@ -205,6 +220,12 @@ public class EntityMist extends Entity {
return false;
}
@Override public void moveEntity(double x, double y, double z) { }
@Override public void addVelocity(double x, double y, double z) { }
@Override public void setPosition(double x, double y, double z) {
if(this.ticksExisted == 0) super.setPosition(x, y, z); //honest to fucking god mojang suck my fucking nuts
}
public static SprayStyle getStyleFromType(FluidType type) {
if(type.hasTrait(FT_Viscous.class)) {

View File

@ -5,12 +5,17 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.rail.IRailNTM;
import com.hbm.blocks.rail.IRailNTM.MoveContext;
import com.hbm.blocks.rail.IRailNTM.RailCheckType;
import com.hbm.blocks.rail.IRailNTM.RailContext;
import com.hbm.blocks.rail.IRailNTM.TrackGauge;
import com.hbm.items.ModItems;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.PlayerInformPacket;
import com.hbm.util.ChatBuilder;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
@ -20,15 +25,19 @@ import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public abstract class EntityRailCarBase extends Entity {
public abstract class EntityRailCarBase extends Entity implements ILookOverlay {
public LogicalTrainUnit ltu;
public int ltuIndex = 0;
public boolean isOnRail = true;
private int turnProgress;
/* Clientside position that should be approached with smooth interpolation */
@ -100,14 +109,18 @@ public abstract class EntityRailCarBase extends Entity {
if(neighbor.getCoupledTo(closestNeighborCoupling) != null) continue;
this.couple(closestOwnCoupling, neighbor);
neighbor.couple(closestNeighborCoupling, this);
if(this.ltu != null) this.ltu.dissolve();
if(neighbor.ltu != null) neighbor.ltu.dissolve();
if(this.ltu != null) this.ltu.dissolveTrain();
if(neighbor.ltu != null) neighbor.ltu.dissolveTrain();
player.swingItem();
player.addChatComponentMessage(new ChatComponentText("Coupled " + this.hashCode() + " (" + closestOwnCoupling.name() + ") to " + neighbor.hashCode() + " (" + closestNeighborCoupling.name() + ")"));
return true;
}
}
}
//DEBUG
if(this.ltu != null) {
String id = Integer.toHexString(ltu.hashCode());
@ -151,9 +164,9 @@ public abstract class EntityRailCarBase extends Entity {
this.setRotation(this.rotationYaw, this.rotationPitch);
}
BlockPos anchor = this.getCurentAnchorPos();
Vec3 frontPos = getRelPosAlongRail(anchor, this.getLengthSpan());
Vec3 backPos = getRelPosAlongRail(anchor, -this.getLengthSpan());
BlockPos anchor = this.getCurrentAnchorPos();
Vec3 frontPos = getRelPosAlongRail(anchor, this.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
Vec3 backPos = getRelPosAlongRail(anchor, -this.getLengthSpan(), new MoveContext(RailCheckType.BACK));
this.lastRenderX = this.renderX;
this.lastRenderY = this.renderY;
@ -169,15 +182,15 @@ public abstract class EntityRailCarBase extends Entity {
if(this.coupledFront != null && this.coupledFront.isDead) {
this.coupledFront = null;
if(this.ltu != null) this.ltu.dissolve();
if(this.ltu != null) this.ltu.dissolveTrain();
}
if(this.coupledBack != null && this.coupledBack.isDead) {
this.coupledBack = null;
if(this.ltu != null) this.ltu.dissolve();
if(this.ltu != null) this.ltu.dissolveTrain();
}
if(this.ltu == null && (this.coupledFront == null || this.coupledBack == null)) {
LogicalTrainUnit.generate(this);
LogicalTrainUnit.generateTrain(this);
}
DummyConfig[] definitions = this.getDummies();
@ -194,6 +207,8 @@ public abstract class EntityRailCarBase extends Entity {
double y = posY + rot.yCoord;
double z = posZ + rot.zCoord;
dummy.setPosition(x, y, z);
dummy.setSize(def.width, def.height);
dummy.velocityChanged = true;
worldObj.spawnEntityInWorld(dummy);
this.dummies[i] = dummy;
}
@ -209,17 +224,16 @@ public abstract class EntityRailCarBase extends Entity {
double x = renderX + rot.xCoord;
double y = renderY + rot.yCoord;
double z = renderZ + rot.zCoord;
dummy.setSize(def.width, def.height); // TEMP
dummy.setPosition(x, y, z);
}
}
}
public Vec3 getRelPosAlongRail(BlockPos anchor, double distanceToCover) {
return getRelPosAlongRail(anchor, distanceToCover, this.getGauge(), this.worldObj, Vec3.createVectorHelper(posX, posY, posZ), this.rotationYaw);
public Vec3 getRelPosAlongRail(BlockPos anchor, double distanceToCover, MoveContext context) {
return getRelPosAlongRail(anchor, distanceToCover, this.getGauge(), this.worldObj, Vec3.createVectorHelper(posX, posY, posZ), this.rotationYaw, context);
}
public static Vec3 getRelPosAlongRail(BlockPos anchor, double distanceToCover, TrackGauge gauge, World worldObj, Vec3 next, float yaw) {
public static Vec3 getRelPosAlongRail(BlockPos anchor, double distanceToCover, TrackGauge gauge, World worldObj, Vec3 next, float yaw, MoveContext context) {
if(distanceToCover < 0) {
distanceToCover *= -1;
@ -248,7 +262,7 @@ public abstract class EntityRailCarBase extends Entity {
IRailNTM rail = (IRailNTM) block;
if(it == 1) {
next = rail.getTravelLocation(worldObj, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, new RailContext());
next = rail.getTravelLocation(worldObj, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, new RailContext(), context);
}
boolean flip = distanceToCover < 0;
@ -256,7 +270,7 @@ public abstract class EntityRailCarBase extends Entity {
if(rail.getGauge(worldObj, x, y, z) == gauge) {
RailContext info = new RailContext();
Vec3 prev = next;
next = rail.getTravelLocation(worldObj, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info);
next = rail.getTravelLocation(worldObj, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info, context);
distanceToCover = info.overshoot;
anchor = info.pos;
@ -293,10 +307,50 @@ public abstract class EntityRailCarBase extends Entity {
}
/* Move carts together with links */
for(LogicalTrainUnit ltu : ltus) ltu.combineLinks();
//for(LogicalTrainUnit ltu : ltus) ltu.combineWagons();
/* Move carts with unified speed */
for(LogicalTrainUnit ltu : ltus) ltu.moveLinks();
//for(LogicalTrainUnit ltu : ltus) ltu.moveTrain();
for(LogicalTrainUnit ltu : ltus) {
double speed = ltu.getTotalSpeed();
if(Math.abs(speed) < 0.001) speed = 0;
if(ltu.trains.length == 1) {
EntityRailCarBase train = ltu.trains[0];
BlockPos anchor = new BlockPos(train.posX, train.posY, train.posZ);
Vec3 newPos = train.getRelPosAlongRail(anchor, speed, new MoveContext(RailCheckType.CORE));
if(newPos == null) {
train.derail();
ltu.dissolveTrain();
continue;
}
train.setPosition(newPos.xCoord, newPos.yCoord, newPos.zCoord);
anchor = train.getCurrentAnchorPos();
Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK));
if(frontPos == null || backPos == null) {
train.derail();
ltu.dissolveTrain();
continue;
} else {
ltu.setRenderPos(train, frontPos, backPos);
}
continue;
}
if(speed == 0) {
ltu.combineWagons();
} else {
ltu.moveTrainByApproach(speed);
}
}
}
/** Returns the amount of blocks that the train should move per tick */
@ -306,18 +360,20 @@ public abstract class EntityRailCarBase extends Entity {
public abstract TrackGauge getGauge();
/** Returns the length between the core and one of the bogies */
public abstract double getLengthSpan();
/** Returns the length between the core and the collision points */
public abstract double getCollisionSpan();
/** Returns a collision box, usually smaller than the entity's AABB for rendering, which is used for colliding trains */
public AxisAlignedBB getCollisionBox() {
/*public AxisAlignedBB getCollisionBox() {
return this.boundingBox;
}
}*/
/** Returns a collision box used for block collisions when derailed */
/*@Override public AxisAlignedBB getBoundingBox() {
return this.boundingBox;
}*/
/** Returns the "true" position of the train, i.e. the block it wants to snap to */
public BlockPos getCurentAnchorPos() {
return new BlockPos(posX, posY, posZ);
public BlockPos getCurrentAnchorPos() {
return new BlockPos(posX, posY + 0.25, posZ);
}
public void derail() {
@ -348,7 +404,7 @@ public abstract class EntityRailCarBase extends Entity {
}
/** Invisible entities that make up the dynamic bounding structure of the train, moving as the train rotates. */
public static class BoundingBoxDummyEntity extends Entity {
public static class BoundingBoxDummyEntity extends Entity implements ILookOverlay {
private int turnProgress;
private double trainX;
@ -413,6 +469,13 @@ public abstract class EntityRailCarBase extends Entity {
this.trainZ = posZ;
this.turnProgress = turnProg + 2;
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
Entity e = worldObj.getEntityByID(this.dataWatcher.getWatchableObjectInt(3));
if(e instanceof EntityRailCarBase) {
((EntityRailCarBase) e).printHook(event, world, x, y, z);
}
}
}
public DummyConfig[] getDummies() {
@ -473,52 +536,54 @@ public abstract class EntityRailCarBase extends Entity {
protected EntityRailCarBase trains[];
/** Assumes that the train is an endpoint, i.e. that only one coupling is in use */
public static LogicalTrainUnit generate(EntityRailCarBase train) {
public static LogicalTrainUnit generateTrain(EntityRailCarBase train) {
List<EntityRailCarBase> links = new ArrayList();
Set<EntityRailCarBase> brake = new HashSet();
links.add(train);
brake.add(train);
LogicalTrainUnit ltu = new LogicalTrainUnit();
if(train.coupledFront == null && train.coupledFront == null) {
if(train.coupledFront == null && train.coupledBack == null) {
ltu.trains = new EntityRailCarBase[] {train};
train.ltu = ltu;
train.ltuIndex = 0;
return ltu;
}
EntityRailCarBase prevCar = train;
EntityRailCarBase nextCar = train.coupledBack == null ? train.coupledFront : train.coupledBack;
EntityRailCarBase current = train;
EntityRailCarBase next = null;
while(nextCar != null) {
links.add(nextCar);
brake.add(nextCar);
do {
next = null;
EntityRailCarBase currentCar = nextCar;
nextCar = nextCar.coupledBack == prevCar ? nextCar.coupledFront : nextCar.coupledBack;
prevCar = currentCar;
if(current.coupledFront != null && !brake.contains(current.coupledFront)) next = current.coupledFront;
if(current.coupledBack != null && !brake.contains(current.coupledBack)) next = current.coupledBack;
if(brake.contains(nextCar)) {
break;
}
}
links.add(current);
brake.add(current);
current = next;
} while(next != null);
ltu.trains = new EntityRailCarBase[links.size()];
for(int i = 0; i < ltu.trains.length; i++) {
ltu.trains[i] = links.get(i);
ltu.trains[i].ltu = ltu;
ltu.trains[i].ltuIndex = i;
}
return ltu;
}
public void dissolve() {
/** Removes the LTU from all wagons */
public void dissolveTrain() {
for(EntityRailCarBase train : trains) {
train.ltu = null;
train.ltuIndex = 0;
}
}
public void combineLinks() {
/** Find the center fo the train, then moves all wagons towards that center until the coupling points roughly touch */
public void combineWagons() {
if(trains.length <= 1) return;
@ -529,34 +594,47 @@ public abstract class EntityRailCarBase extends Entity {
for(int i = centerIndex - 1; i >= 0; i--) {
EntityRailCarBase next = trains[i];
moveTo(prev, next);
moveWagonTo(prev, next);
prev = next;
}
prev = center;
for(int i = centerIndex + 1; i < trains.length; i++) {
EntityRailCarBase next = trains[i];
moveTo(prev, next);
moveWagonTo(prev, next);
prev = next;
}
}
public static void moveTo(EntityRailCarBase prev, EntityRailCarBase next) {
TrainCoupling prevCouple = prev.getCouplingFrom(next);
TrainCoupling nextCouple = next.getCouplingFrom(prev);
Vec3 prevLoc = prev.getCouplingPos(prevCouple);
Vec3 nextLoc = next.getCouplingPos(nextCouple);
/** Moves one wagon to ne next until the coupling points roughly touch */
public void moveWagonTo(EntityRailCarBase moveTo, EntityRailCarBase moving) {
TrainCoupling prevCouple = moveTo.getCouplingFrom(moving);
TrainCoupling nextCouple = moving.getCouplingFrom(moveTo);
Vec3 prevLoc = moveTo.getCouplingPos(prevCouple);
Vec3 nextLoc = moving.getCouplingPos(nextCouple);
Vec3 delta = Vec3.createVectorHelper(prevLoc.xCoord - nextLoc.xCoord, 0, prevLoc.zCoord - nextLoc.zCoord);
double len = delta.lengthVector();
len *= 0.25D; //suspension, causes movements to be less rigid
BlockPos anchor = new BlockPos(next.posX, next.posY, next.posZ);
Vec3 trainPos = Vec3.createVectorHelper(next.posX, next.posY, next.posZ);
len *= 0.75; //suspension, causes movements to be less rigid
BlockPos anchor = new BlockPos(moving.posX, moving.posY, moving.posZ);
Vec3 trainPos = Vec3.createVectorHelper(moving.posX, moving.posY, moving.posZ);
float yaw = EntityRailCarBase.generateYaw(prevLoc, nextLoc);
Vec3 newPos = EntityRailCarBase.getRelPosAlongRail(anchor, len, next.getGauge(), next.worldObj, trainPos, yaw);
next.setPosition(newPos.xCoord, newPos.yCoord, newPos.zCoord);
Vec3 newPos = EntityRailCarBase.getRelPosAlongRail(anchor, len, moving.getGauge(), moving.worldObj, trainPos, yaw, new MoveContext(RailCheckType.CORE));
moving.setPosition(newPos.xCoord, newPos.yCoord, newPos.zCoord);
anchor = moving.getCurrentAnchorPos(); //reset origin to new position
Vec3 frontPos = moving.getRelPosAlongRail(anchor, moving.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
Vec3 backPos = moving.getRelPosAlongRail(anchor, -moving.getLengthSpan(), new MoveContext(RailCheckType.BACK));
if(frontPos == null || backPos == null) {
moving.derail();
this.dissolveTrain();
return;
} else {
setRenderPos(moving, frontPos, backPos);
}
}
public void moveLinks() {
/** Generates the speed of the train, then moves the rain along the rail */
@Deprecated public void moveTrain() {
EntityRailCarBase prev = trains[0];
TrainCoupling dir = prev.getCouplingFrom(null);
@ -576,24 +654,30 @@ public abstract class EntityRailCarBase extends Entity {
totalSpeed = maxSpeed * Math.signum(totalSpeed);
}
this.moveTrainBy(totalSpeed);
}
/** Moves the entire train along the rail by a certain speed */
@Deprecated public void moveTrainBy(double totalSpeed) {
for(EntityRailCarBase train : this.trains) {
BlockPos anchor = train.getCurentAnchorPos();
Vec3 corePos = train.getRelPosAlongRail(anchor, totalSpeed);
BlockPos anchor = train.getCurrentAnchorPos();
Vec3 corePos = train.getRelPosAlongRail(anchor, totalSpeed, new MoveContext(RailCheckType.CORE));
if(corePos == null) {
train.derail();
this.dissolve();
this.dissolveTrain();
return;
} else {
train.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord);
anchor = train.getCurentAnchorPos(); //reset origin to new position
Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan());
Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan());
anchor = train.getCurrentAnchorPos(); //reset origin to new position
Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK));
if(frontPos == null || backPos == null) {
train.derail();
this.dissolve();
this.dissolveTrain();
return;
} else {
train.renderX = (frontPos.xCoord + backPos.xCoord) / 2D;
@ -607,5 +691,110 @@ public abstract class EntityRailCarBase extends Entity {
}
}
}
/** Returns the total speed of the LTU, negative if it is backwards compared to the arbitrary "front" wagon */
public double getTotalSpeed() {
EntityRailCarBase prev = trains[0];
double totalSpeed = 0;
double maxSpeed = Double.POSITIVE_INFINITY;
//if the first car is in reverse, flip all subsequent cars as well
boolean reverseTheReverse = prev.getCouplingFrom(null) == TrainCoupling.BACK;
if(trains.length == 1) {
return prev.getCurrentSpeed();
}
for(EntityRailCarBase train : this.trains) {
//if the car's linked indices are the wrong way, it is in reverse and speed applies negatively
boolean reverse = false;
EntityRailCarBase conFront = train.getCoupledTo(TrainCoupling.FRONT);
EntityRailCarBase conBack = train.getCoupledTo(TrainCoupling.BACK);
if(conFront != null && conFront.ltuIndex > train.ltuIndex) reverse = true;
if(conBack != null && conBack.ltuIndex < train.ltuIndex) reverse = true;
reverse ^= reverseTheReverse;
double speed = train.getCurrentSpeed();
if(reverse) speed *= -1;
totalSpeed += speed;
maxSpeed = Math.min(maxSpeed, train.getMaxRailSpeed());
prev = train;
}
if(Math.abs(totalSpeed) > maxSpeed) {
totalSpeed = maxSpeed * Math.signum(totalSpeed);
}
return totalSpeed;
}
/** Determines the "front" wagon based on the movement and moves it, then moves all other wagons towards that */
public void moveTrainByApproach(double speed) {
boolean forward = speed < 0;
double origSpeed = speed;
speed = Math.abs(speed);
EntityRailCarBase previous = null;
EntityRailCarBase first = this.trains[0];
for(int i = forward ? 0 : this.trains.length - 1; forward ? i < this.trains.length : i >= 0; i += forward ? 1 : -1) {
EntityRailCarBase current = this.trains[i];
if(previous == null) {
PacketDispatcher.wrapper.sendToAllAround(new PlayerInformPacket(ChatBuilder.start("" + current.getClass() + " " + origSpeed).color(EnumChatFormatting.RED).flush(), 1),
new TargetPoint(current.dimension, current.posX, current.posY + 1, current.posZ, 50));
boolean inReverse = first.getCouplingFrom(null) == current.getCouplingFrom(null);
int sigNum = inReverse ? -1 : 1;
BlockPos anchor = current.getCurrentAnchorPos();
Vec3 corePos = current.getRelPosAlongRail(anchor, speed * sigNum, new MoveContext(RailCheckType.CORE));
if(corePos == null) {
current.derail();
this.dissolveTrain();
return;
} else {
current.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord);
anchor = current.getCurrentAnchorPos(); //reset origin to new position
Vec3 frontPos = current.getRelPosAlongRail(anchor, current.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
Vec3 backPos = current.getRelPosAlongRail(anchor, -current.getLengthSpan(), new MoveContext(RailCheckType.BACK));
if(frontPos == null || backPos == null) {
current.derail();
this.dissolveTrain();
return;
} else {
setRenderPos(current, frontPos, backPos);
}
}
} else {
this.moveWagonTo(previous, current);
}
previous = current;
}
}
/** Uses the front and back bogey positions to set the render pos and angles of a wagon */
public void setRenderPos(EntityRailCarBase current, Vec3 frontPos, Vec3 backPos) {
current.renderX = (frontPos.xCoord + backPos.xCoord) / 2D;
current.renderY = (frontPos.yCoord + backPos.yCoord) / 2D;
current.renderZ = (frontPos.zCoord + backPos.zCoord) / 2D;
current.prevRotationYaw = current.rotationYaw;
current.rotationYaw = current.movementYaw = generateYaw(frontPos, backPos);
current.motionX = current.rotationYaw / 360D; // hijacking this crap for easy syncing
current.velocityChanged = true;
}
}
@Override
@SideOnly(Side.CLIENT)
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
List<String> text = new ArrayList();
ILookOverlay.printGeneric(event, this.getClass().getSimpleName() + " " + this.hashCode(), 0xffff00, 0x404000, text); //none of this shit is going to work anyway
}
}

View File

@ -16,6 +16,22 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
super(world);
}
@Override
protected void entityInit() {
super.entityInit();
this.dataWatcher.addObject(10, new Integer(0));
}
public int countVacantSlots() {
int slots = 0;
for(int i = 0; i < this.getSizeInventory(); i++) {
if(this.getStackInSlot(i) != null) slots++;
}
return slots;
}
@Override
public ItemStack getStackInSlot(int slot) {
return slots[slot];
@ -37,9 +53,11 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
this.slots[slot] = null;
}
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return itemstack;
}
} else {
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return null;
}
}
@ -49,8 +67,10 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
if(this.slots[slot] != null) {
ItemStack itemstack = this.slots[slot];
this.slots[slot] = null;
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return itemstack;
} else {
if(!this.worldObj.isRemote) this.dataWatcher.updateObject(10, this.countVacantSlots());
return null;
}
}
@ -119,6 +139,8 @@ public abstract class EntityRailCarCargo extends EntityRailCarBase implements II
this.slots[j] = ItemStack.loadItemStackFromNBT(nbttagcompound1);
}
}
this.dataWatcher.updateObject(10, this.countVacantSlots());
}
@Override

View File

@ -19,15 +19,17 @@ public abstract class EntityRailCarElectric extends EntityRailCarRidable {
public int getChargeSlot() { return 0; }
@Override protected void entityInit() {
super.entityInit();
this.dataWatcher.addObject(3, new Integer(0));
}
@Override public boolean canAccelerate() {
return this.getPower() >= this.getPowerConsumption();
return true;
//return this.getPower() >= this.getPowerConsumption();
}
@Override public void consumeFuel() {
this.setPower(this.getPower() - this.getPowerConsumption());
//this.setPower(this.getPower() - this.getPowerConsumption());
}
public void setPower(int power) {

View File

@ -1,6 +1,10 @@
package com.hbm.entity.train;
import com.hbm.util.BobMathUtil;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ILookOverlay;
import com.hbm.main.MainRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -10,6 +14,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
public abstract class EntityRailCarRidable extends EntityRailCarCargo {
@ -80,55 +85,11 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
if(super.interactFirst(player)) return true;
if(worldObj.isRemote) return true;
double nearestDist = Double.POSITIVE_INFINITY;
int nearestSeat = -1;
Vec3[] seats = getPassengerSeats();
for(int i = 0; i < seats.length; i++) {
Vec3 seat = seats[i];
if(seat == null) continue;
if(passengerSeats[i] != null) continue;
seat.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
double x = renderX + seat.xCoord;
double z = renderZ + seat.zCoord;
double deltaX = player.posX - x;
double deltaZ = player.posZ - z;
double radians = -Math.atan2(deltaX, deltaZ);
double degrees = MathHelper.wrapAngleTo180_double(radians * 180D / Math.PI - 90);
double dist = Math.abs(BobMathUtil.angularDifference(degrees, player.rotationYaw));
if(dist < nearestDist) {
nearestDist = dist;
nearestSeat = i;
}
}
if(this.riddenByEntity == null) {
Vec3 seat = getRiderSeatPosition();
seat.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
double x = renderX + seat.xCoord;
double z = renderZ + seat.zCoord;
double deltaX = player.posX - x;
double deltaZ = player.posZ - z;
double radians = -Math.atan2(deltaX, deltaZ);
double degrees = MathHelper.wrapAngleTo180_double(radians * 180D / Math.PI - 90);
double dist = Math.abs(BobMathUtil.angularDifference(degrees, player.rotationYaw));
if(dist < nearestDist) {
nearestDist = dist;
nearestSeat = -1;
}
}
if(nearestDist > 180) return true;
int nearestSeat = this.getNearestSeat(player);
if(nearestSeat == -1) {
player.mountEntity(this);
} else {
} else if(nearestSeat >= 0) {
SeatDummyEntity dummySeat = new SeatDummyEntity(worldObj, this, nearestSeat);
Vec3 passengerSeat = this.getPassengerSeats()[nearestSeat];
passengerSeat.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
@ -144,6 +105,58 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
return true;
}
public int getNearestSeat(EntityPlayer player) {
double nearestDist = Double.POSITIVE_INFINITY;
int nearestSeat = -3;
Vec3[] seats = getPassengerSeats();
Vec3 look = player.getLook(2);
look.xCoord += player.posX;
look.yCoord += player.posY + player.eyeHeight - player.yOffset;
look.zCoord += player.posZ;
for(int i = 0; i < seats.length; i++) {
Vec3 seat = seats[i];
if(seat == null) continue;
if(passengerSeats[i] != null) continue;
seat.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
double x = renderX + seat.xCoord;
double y = renderY + seat.yCoord;
double z = renderZ + seat.zCoord;
Vec3 delta = Vec3.createVectorHelper(look.xCoord - x, look.yCoord - y, look.zCoord - z);
double dist = delta.lengthVector();
if(dist < nearestDist) {
nearestDist = dist;
nearestSeat = i;
}
}
if(this.riddenByEntity == null) {
Vec3 seat = getRiderSeatPosition();
seat.rotateAroundY((float) (-this.rotationYaw * Math.PI / 180));
double x = renderX + seat.xCoord;
double y = renderY + seat.yCoord;
double z = renderZ + seat.zCoord;
Vec3 delta = Vec3.createVectorHelper(look.xCoord - x, look.yCoord - y, look.zCoord - z);
double dist = delta.lengthVector();
if(dist < nearestDist) {
nearestDist = dist;
nearestSeat = -1;
}
}
if(nearestDist > 180) return -2;
return nearestSeat;
}
@Override
public void onUpdate() {
super.onUpdate();
@ -266,4 +279,15 @@ public abstract class EntityRailCarRidable extends EntityRailCarCargo {
}
}
}
@Override
@SideOnly(Side.CLIENT)
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
List<String> text = new ArrayList();
/*text.add("LTU: " + this.ltu);
text.add("Front: " + this.coupledFront);
text.add("Back: " + this.coupledBack);*/
text.add("Nearest seat: " + this.getNearestSeat(MainRegistry.proxy.me()));
ILookOverlay.printGeneric(event, this.getClass().getSimpleName() + " " + this.hashCode(), 0xffff00, 0x404000, text);
}
}

View File

@ -18,7 +18,6 @@ import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
@ -52,11 +51,12 @@ public class TrainCargoTram extends EntityRailCarElectric implements IGUIProvide
@Override public TrackGauge getGauge() { return TrackGauge.STANDARD; }
@Override public double getLengthSpan() { return 1.5; }
@Override public double getCollisionSpan() { return 2.5; }
@Override public Vec3 getRiderSeatPosition() { return Vec3.createVectorHelper(0.375, 2.375, 0.5); }
@Override public boolean shouldRiderSit() { return false; }
@Override public int getSizeInventory() { return 29; }
@Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.getEntityName() : "container.trainTram"; }
@Override public AxisAlignedBB getCollisionBox() { return AxisAlignedBB.getBoundingBox(renderX, renderY, renderZ, renderX, renderY + 1, renderZ).expand(4, 0, 4); }
//@Override public AxisAlignedBB getCollisionBox() { return AxisAlignedBB.getBoundingBox(renderX, renderY, renderZ, renderX, renderY + 1, renderZ).expand(4, 0, 4); }
@Override public double getCouplingDist(TrainCoupling coupling) { return coupling != null ? 2.75 : 0; }
@Override public int getMaxPower() { return this.getPowerConsumption() * 100; }

View File

@ -1,13 +1,30 @@
package com.hbm.entity.train;
import com.hbm.blocks.rail.IRailNTM.TrackGauge;
import org.lwjgl.opengl.GL11;
import net.minecraft.util.AxisAlignedBB;
import com.hbm.blocks.rail.IRailNTM.TrackGauge;
import com.hbm.inventory.gui.GuiInfoContainer;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class TrainCargoTramTrailer extends EntityRailCarCargo {
public class TrainCargoTramTrailer extends EntityRailCarCargo implements IGUIProvider {
/*
*
@ -28,15 +45,12 @@ public class TrainCargoTramTrailer extends EntityRailCarCargo {
@Override public double getMaxRailSpeed() { return 1; }
@Override public TrackGauge getGauge() { return TrackGauge.STANDARD; }
@Override public double getLengthSpan() { return 1.5; }
@Override public int getSizeInventory() { return 29; }
@Override public double getCollisionSpan() { return 2.5; }
@Override public int getSizeInventory() { return 45; }
@Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.getEntityName() : "container.trainTramTrailer"; }
@Override public AxisAlignedBB getCollisionBox() { return AxisAlignedBB.getBoundingBox(renderX, renderY, renderZ, renderX, renderY + 1, renderZ).expand(4, 0, 4); }
//@Override public AxisAlignedBB getCollisionBox() { return AxisAlignedBB.getBoundingBox(renderX, renderY, renderZ, renderX, renderY + 1, renderZ).expand(4, 0, 4); }
@Override public double getCouplingDist(TrainCoupling coupling) { return coupling != null ? 2.75 : 0; }
@Override
public double getCurrentSpeed() {
return 0; //we'll figure out how linked carts work later on - i hope
}
@Override public double getCurrentSpeed() { return 0; }
@Override
public DummyConfig[] getDummies() {
@ -55,4 +69,115 @@ public class TrainCargoTramTrailer extends EntityRailCarCargo {
return true;
}
@Override
public boolean interactFirst(EntityPlayer player) {
if(super.interactFirst(player)) return false;
if(!this.worldObj.isRemote) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, worldObj, this.getEntityId(), 0, 0);
}
return true;
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerTrainCargoTramTrailer(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUITrainCargoTramTrailer(player.inventory, this);
}
/*
* ##### ##### # # ##### ##### ### # # ##### ####
* # # # ## # # # # # ## # # # #
* # # # # # # # ##### # # # # ### ####
* # # # # ## # # # # # ## # # #
* ##### ##### # # # # # ### # # ##### # #
*/
public static class ContainerTrainCargoTramTrailer extends Container {
private TrainCargoTramTrailer train;
public ContainerTrainCargoTramTrailer(InventoryPlayer invPlayer, TrainCargoTramTrailer train) {
this.train = train;
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(train, i * 9 + j, 8 + j * 18, 18 + i * 18));
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 140 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 198));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) {
ItemStack stackCopy = null;
Slot slot = (Slot) this.inventorySlots.get(slotIndex);
if(slot != null && slot.getHasStack()) {
ItemStack stack = slot.getStack();
stackCopy = stack.copy();
if(slotIndex < train.getSizeInventory()) {
if(!this.mergeItemStack(stack, train.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else
if(!this.mergeItemStack(stack, 0, 45, false)) {
return null;
}
if(stack.stackSize == 0) {
slot.putStack((ItemStack) null);
} else {
slot.onSlotChanged();
}
}
return stackCopy;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return train.isUseableByPlayer(player);
}
}
/*
* ##### # # ###
* # # # #
* # ## # # #
* # # # # #
* ##### ##### ###
*/
@SideOnly(Side.CLIENT)
public static class GUITrainCargoTramTrailer extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/vehicles/gui_cargo_tram_trailer.png");
private TrainCargoTramTrailer train;
public GUITrainCargoTramTrailer(InventoryPlayer invPlayer, TrainCargoTramTrailer train) {
super(new ContainerTrainCargoTramTrailer(invPlayer, train));
this.train = train;
this.xSize = 176;
this.ySize = 222;
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.train.hasCustomInventoryName() ? this.train.getInventoryName() : I18n.format(this.train.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float intero, int x, int y) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
}
}
}

View File

@ -0,0 +1,36 @@
package com.hbm.explosion.vanillant.standard;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.interfaces.IBlockMutator;
import com.hbm.inventory.RecipesCommon.MetaBlock;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockMutatorDebris implements IBlockMutator {
protected MetaBlock metaBlock;
public BlockMutatorDebris(Block block) {
this(block, 0);
}
public BlockMutatorDebris(Block block, int meta) {
this.metaBlock = new MetaBlock(block, meta);
}
@Override public void mutatePre(ExplosionVNT explosion, Block block, int meta, int x, int y, int z) { }
@Override public void mutatePost(ExplosionVNT explosion, int x, int y, int z) {
World world = explosion.world;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
Block b = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(b.isNormalCube() && (b != metaBlock.block || world.getBlockMetadata(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ) != metaBlock.meta)) {
world.setBlock(x, y, z, metaBlock.block, metaBlock.meta, 3);
return;
}
}
}
}

View File

@ -64,6 +64,8 @@ public class BlockProcessorStandard implements IBlockProcessor {
block.onBlockExploded(world, blockX, blockY, blockZ, explosion.compat);
if(this.convert != null) this.convert.mutatePre(explosion, block, world.getBlockMetadata(blockX, blockY, blockZ), blockX, blockY, blockZ);
} else {
iterator.remove();
}
}

View File

@ -122,13 +122,13 @@ public class EntityEffectHandler {
private static void handleRadiation(EntityLivingBase entity) {
if(ContaminationUtil.isRadImmune(entity))
return;
World world = entity.worldObj;
if(!world.isRemote) {
if(ContaminationUtil.isRadImmune(entity))
return;
int ix = (int)MathHelper.floor_double(entity.posX);
int iy = (int)MathHelper.floor_double(entity.posY);
int iz = (int)MathHelper.floor_double(entity.posZ);
@ -416,6 +416,10 @@ public class EntityEffectHandler {
}
private static void handleOil(EntityLivingBase entity) {
if(entity.worldObj.isRemote)
return;
int oil = HbmLivingProps.getOil(entity);
if(oil > 0) {

View File

@ -0,0 +1,300 @@
package com.hbm.handler.pollution;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map.Entry;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.monster.IMob;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.event.entity.living.LivingSpawnEvent;
import net.minecraftforge.event.world.WorldEvent;
public class PollutionHandler {
public static final String fileName = "hbmpollution.dat";
public static HashMap<World, PollutionPerWorld> perWorld = new HashMap();
/** Baserate of soot generation for a furnace-equivalent machine per second */
public static final float SOOT_PER_SECOND = 1F / 25F;
///////////////////////
/// UTILITY METHODS ///
///////////////////////
public static void incrementPollution(World world, int x, int y, int z, PollutionType type, float amount) {
PollutionPerWorld ppw = perWorld.get(world);
if(ppw == null) return;
ChunkCoordIntPair pos = new ChunkCoordIntPair(x >> 6, z >> 6);
PollutionData data = ppw.pollution.get(pos);
if(data == null) {
data = new PollutionData();
ppw.pollution.put(pos, data);
}
data.pollution[type.ordinal()] = MathHelper.clamp_float(data.pollution[type.ordinal()] + amount, 0F, 10_000F);
}
public static void decrementPollution(World world, int x, int y, int z, PollutionType type, float amount) {
incrementPollution(world, x, y, z, type, -amount);
}
public static void setPollution(World world, int x, int y, int z, PollutionType type, float amount) {
PollutionPerWorld ppw = perWorld.get(world);
if(ppw == null) return;
ChunkCoordIntPair pos = new ChunkCoordIntPair(x >> 6, z >> 6);
PollutionData data = ppw.pollution.get(pos);
if(data == null) {
data = new PollutionData();
ppw.pollution.put(pos, data);
}
data.pollution[type.ordinal()] = amount;
}
public static float getPollution(World world, int x, int y, int z, PollutionType type) {
PollutionPerWorld ppw = perWorld.get(world);
if(ppw == null) return 0F;
ChunkCoordIntPair pos = new ChunkCoordIntPair(x >> 6, z >> 6);
PollutionData data = ppw.pollution.get(pos);
if(data == null) return 0F;
return data.pollution[type.ordinal()];
}
public static PollutionData getPollutionData(World world, int x, int y, int z) {
PollutionPerWorld ppw = perWorld.get(world);
if(ppw == null) return null;
ChunkCoordIntPair pos = new ChunkCoordIntPair(x >> 6, z >> 6);
PollutionData data = ppw.pollution.get(pos);
return data;
}
//////////////////////
/// EVENT HANDLING ///
//////////////////////
@SubscribeEvent
public void onWorldLoad(WorldEvent.Load event) {
if(!event.world.isRemote) {
WorldServer world = (WorldServer) event.world;
String dirPath = getDataDir(world);
try {
File pollutionFile = new File(dirPath, fileName);
if(pollutionFile != null) {
if(pollutionFile.exists()) {
FileInputStream io = new FileInputStream(pollutionFile);
NBTTagCompound data = CompressedStreamTools.readCompressed(io);
io.close();
perWorld.put(event.world, new PollutionPerWorld(data));
} else {
perWorld.put(event.world, new PollutionPerWorld());
}
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
@SubscribeEvent
public void onWorldUnload(WorldEvent.Unload event) {
if(!event.world.isRemote) perWorld.remove(event.world);
}
@SubscribeEvent
public void onWorldSave(WorldEvent.Save event) {
if(!event.world.isRemote) {
WorldServer world = (WorldServer) event.world;
String dirPath = getDataDir(world);
try {
File pollutionFile = new File(dirPath, fileName);
if(!pollutionFile.exists()) pollutionFile.createNewFile();
NBTTagCompound data = perWorld.get(world).writeToNBT();
CompressedStreamTools.writeCompressed(data, new FileOutputStream(pollutionFile));
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
public String getDataDir(WorldServer world) {
String dir = world.getSaveHandler().getWorldDirectory().getAbsolutePath();
if(world.provider.dimensionId != 0) {
dir += File.separator + "DIM" + world.provider.dimensionId;
}
dir += File.separator + "data";
return dir;
}
//////////////////////////
/// SYSTEM UPDATE LOOP ///
//////////////////////////
int eggTimer = 0;
@SubscribeEvent
public void updateSystem(TickEvent.ServerTickEvent event) {
if(event.side == Side.SERVER && event.phase == Phase.END) {
eggTimer++;
if(eggTimer < 60) return;
eggTimer = 0;
for(Entry<World, PollutionPerWorld> entry : perWorld.entrySet()) {
HashMap<ChunkCoordIntPair, PollutionData> newPollution = new HashMap();
for(Entry<ChunkCoordIntPair, PollutionData> chunk : entry.getValue().pollution.entrySet()) {
int x = chunk.getKey().chunkXPos;
int z = chunk.getKey().chunkZPos;
PollutionData data = chunk.getValue();
float[] pollutionForNeightbors = new float[PollutionType.values().length];
int S = PollutionType.SOOT.ordinal();
int H = PollutionType.HEAVYMETAL.ordinal();
/* CALCULATION */
if(data.pollution[S] > 15) {
pollutionForNeightbors[S] = data.pollution[S] * 0.05F;
data.pollution[S] *= 0.8F;
} else {
data.pollution[S] *= 0.99F;
}
data.pollution[H] *= 0.999F;
/* SPREADING */
//apply new data to self
PollutionData newData = newPollution.get(chunk.getKey());
if(newData == null) newData = new PollutionData();
boolean shouldPut = false;
for(int i = 0; i < newData.pollution.length; i++) {
newData.pollution[i] += data.pollution[i];
if(newData.pollution[i] > 0) shouldPut = true;
}
if(shouldPut) newPollution.put(chunk.getKey(), newData);
//apply neighbor data to neighboring chunks
int[][] offsets = new int[][] {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
for(int[] offset : offsets) {
ChunkCoordIntPair offPos = new ChunkCoordIntPair(x + offset[0], z + offset[1]);
PollutionData offsetData = newPollution.get(offPos);
if(offsetData == null) offsetData = new PollutionData();
shouldPut = false;
for(int i = 0; i < offsetData.pollution.length; i++) {
offsetData.pollution[i] += pollutionForNeightbors[i];
if(offsetData.pollution[i] > 0) shouldPut = true;
}
if(shouldPut) newPollution.put(offPos, offsetData);
}
}
entry.getValue().pollution.clear();
entry.getValue().pollution.putAll(newPollution);
}
}
}
//////////////////////
/// DATA STRUCTURE ///
//////////////////////
public static class PollutionPerWorld {
public HashMap<ChunkCoordIntPair, PollutionData> pollution = new HashMap();
public PollutionPerWorld() { }
public PollutionPerWorld(NBTTagCompound data) {
NBTTagList list = data.getTagList("entries", 10);
for(int i = 0; i < list.tagCount(); i++) {
NBTTagCompound nbt = list.getCompoundTagAt(i);
int chunkX = nbt.getInteger("chunkX");
int chunkZ = nbt.getInteger("chunkZ");
pollution.put(new ChunkCoordIntPair(chunkX, chunkZ), PollutionData.fromNBT(nbt));
}
}
public NBTTagCompound writeToNBT() {
NBTTagCompound data = new NBTTagCompound();
NBTTagList list = new NBTTagList();
for(Entry<ChunkCoordIntPair, PollutionData> entry : pollution.entrySet()) {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("chunkX", entry.getKey().chunkXPos);
nbt.setInteger("chunkZ", entry.getKey().chunkZPos);
entry.getValue().toNBT(nbt);
list.appendTag(nbt);
}
data.setTag("entries", list);
return data;
}
}
public static class PollutionData {
public float[] pollution = new float[PollutionType.values().length];
public static PollutionData fromNBT(NBTTagCompound nbt) {
PollutionData data = new PollutionData();
for(int i = 0; i < PollutionType.values().length; i++) {
data.pollution[i] = nbt.getFloat(PollutionType.values()[i].name().toLowerCase(Locale.US));
}
return data;
}
public void toNBT(NBTTagCompound nbt) {
for(int i = 0; i < PollutionType.values().length; i++) {
nbt.setFloat(PollutionType.values()[i].name().toLowerCase(Locale.US), pollution[i]);
}
}
}
public static enum PollutionType {
SOOT, POISON, HEAVYMETAL, FALLOUT;
}
///////////////////
/// MOB EFFECTS ///
///////////////////
@SubscribeEvent
public void decorateMob(LivingSpawnEvent event) {
World world = event.world;
if(world.isRemote) return;
EntityLivingBase living = event.entityLiving;
PollutionData data = getPollutionData(world, (int) Math.floor(event.x), (int) Math.floor(event.y), (int) Math.floor(event.z));
if(data == null) return;
if(living instanceof IMob) {
if(data.pollution[PollutionType.SOOT.ordinal()] > 15) {
if(living.getEntityAttribute(SharedMonsterAttributes.maxHealth) != null) living.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier("Soot Anger Health Increase", 2D, 1));
if(living.getEntityAttribute(SharedMonsterAttributes.attackDamage) != null) living.getEntityAttribute(SharedMonsterAttributes.attackDamage).applyModifier(new AttributeModifier("Soot Anger Damage Increase", 1.5D, 1));
}
}
}
}

View File

@ -6,7 +6,6 @@ import com.hbm.config.RadiationConfig;
import com.hbm.hazard.modifier.HazardModifier;
import com.hbm.util.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@ -33,7 +32,7 @@ public class HazardTypeHydroactive extends HazardTypeBase {
if(RadiationConfig.disableHydro)
return;
if(item.worldObj.getBlock((int)Math.floor(item.posX), (int)Math.floor(item.posY), (int)Math.floor(item.posZ)).getMaterial() == Material.water) {
if(item.isWet()) {
item.setDead();
item.worldObj.newExplosion(null, item.posX, item.posY + item.height * 0.5, item.posZ, level, false, true);
}

View File

@ -22,6 +22,7 @@ public class FluidContainerRegistry {
public static void register() {
FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.water_bucket), new ItemStack(Items.bucket), Fluids.WATER, 1000));
FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.potionitem), new ItemStack(Items.glass_bottle), Fluids.WATER, 250));
FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(Items.lava_bucket), new ItemStack(Items.bucket), Fluids.LAVA, 1000));
FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.bucket_mud), new ItemStack(Items.bucket), Fluids.WATZ, 1000));
FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.bucket_schrabidic_acid), new ItemStack(Items.bucket), Fluids.SCHRABIDIC, 1000));

View File

@ -209,6 +209,7 @@ public class OreDictManager {
public static final DictFrame LIGCOKE = new DictFrame("LigniteCoke");
public static final DictFrame CINNABAR = new DictFrame("Cinnabar");
public static final DictFrame BORAX = new DictFrame("Borax");
public static final DictFrame CHLOROCALCITE = new DictFrame("Chlorocalcite");
public static final DictFrame VOLCANIC = new DictFrame("Volcanic");
public static final DictFrame HEMATITE = new DictFrame("Hematite");
public static final DictFrame MALACHITE = new DictFrame("Malachite");
@ -345,13 +346,13 @@ public class OreDictManager {
W .ingot(ingot_tungsten) .dust(powder_tungsten) .block(block_tungsten) .ore(ore_tungsten, ore_nether_tungsten, ore_meteor_tungsten) .oreNether(ore_nether_tungsten);
AL .ingot(ingot_aluminium) .dust(powder_aluminium) .plate(plate_aluminium) .block(block_aluminium) .ore(ore_aluminium, ore_meteor_aluminium);
STEEL .ingot(ingot_steel) .dustSmall(powder_steel_tiny) .dust(powder_steel) .plate(plate_steel) .block(block_steel);
TCALLOY .ingot(ingot_tcalloy) .dust(powder_tcalloy);
CDALLOY .ingot(ingot_cdalloy);
TCALLOY .ingot(ingot_tcalloy) .dust(powder_tcalloy) .block(block_tcalloy);
CDALLOY .ingot(ingot_cdalloy) .block(block_cdalloy);
PB .nugget(nugget_lead) .ingot(ingot_lead) .dust(powder_lead) .plate(plate_lead) .block(block_lead) .ore(ore_lead, ore_meteor_lead);
BI .nugget(nugget_bismuth) .ingot(ingot_bismuth) .dust(powder_bismuth);
AS .nugget(nugget_arsenic) .ingot(ingot_arsenic);
CA .ingot(ingot_calcium) .dust(powder_calcium);
CD .ingot(ingot_cadmium) .dust(powder_cadmium);
CD .ingot(ingot_cadmium) .dust(powder_cadmium) .block(block_cadmium);
TA .nugget(nugget_tantalium) .gem(gem_tantalium) .ingot(ingot_tantalium) .dust(powder_tantalium) .block(block_tantalium);
COLTAN .ingot(fragment_coltan) .dust(powder_coltan_ore) .block(block_coltan) .ore(ore_coltan);
NB .nugget(fragment_niobium) .ingot(ingot_niobium) .dustSmall(powder_niobium_tiny) .dust(powder_niobium) .block(block_niobium);
@ -390,6 +391,7 @@ public class OreDictManager {
LIGCOKE .gem(fromOne(coke, EnumCokeType.LIGNITE)) .block(fromOne(block_coke, EnumCokeType.LIGNITE));
CINNABAR .crystal(cinnebar) .gem(cinnebar) .ore(ore_cinnebar, ore_depth_cinnebar);
BORAX .dust(powder_borax) .ore(ore_depth_borax);
CHLOROCALCITE .dust(powder_chlorocalcite);
VOLCANIC .gem(gem_volcanic) .ore(basalt_gem);
HEMATITE .ore(fromOne(stone_resource, EnumStoneType.HEMATITE));
MALACHITE .ore(fromOne(stone_resource, EnumStoneType.MALACHITE));

View File

@ -169,7 +169,6 @@ public class RecipesCommon {
String[] entries = new String[ids.length];
for(int i = 0; i < ids.length; i++) {
entries[i] = OreDictionary.getOreName(ids[i]);
}

View File

@ -1,14 +1,10 @@
package com.hbm.inventory;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.util.AchievementHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class SlotCraftingOutput extends Slot {

View File

@ -254,7 +254,7 @@ public class Fluids {
SYNGAS = new FluidType("SYNGAS", 0x131313, 1, 4, 2, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFFFFFF, 0x131313)).addTraits(GASEOUS);
OXYHYDROGEN = new FluidType("OXYHYDROGEN", 0x483FC1, 0, 4, 2, EnumSymbol.NONE).addTraits(GASEOUS);
RADIOSOLVENT = new FluidType("RADIOSOLVENT", 0xA4D7DD, 3, 3, 0, EnumSymbol.NONE).addTraits(LIQUID, LEADCON, new FT_Corrosive(50), new FT_VentRadiation(0.01F));
CHLORINE = new FluidType("CHLORINE", 0xBAB572, 3, 0, 0, EnumSymbol.OXIDIZER).addContainers(new CD_Gastank(0xBAB572, 0x887B34)).addTraits(GASEOUS, new FT_Corrosive(25), new FT_Poison(true, 1));
CHLORINE = new FluidType("CHLORINE", 0xBAB572, 3, 0, 0, EnumSymbol.OXIDIZER).addContainers(new CD_Gastank(0xBAB572, 0x887B34)).addTraits(GASEOUS, new FT_Corrosive(25));
HEAVYOIL_VACUUM = new FluidType("HEAVYOIL_VACUUM", 0x131214, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).addContainers(new CD_Canister(0x513F39));
REFORMATE = new FluidType("REFORMATE", 0x835472, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).addContainers(new CD_Canister(0xD180D6));
LIGHTOIL_VACUUM = new FluidType("LIGHTOIL_VACUUM", 0x8C8851, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xB46B52));

View File

@ -116,6 +116,8 @@ public class FT_Toxin extends FluidTrait {
@Override
public void poison(EntityLivingBase entity, double intensity) {
if(isProtected(entity)) return;
for(PotionEffect eff : effects) {
entity.addPotionEffect(new PotionEffect(eff.getPotionID(), (int) (eff.getDuration() * intensity), eff.getAmplifier()));
}

View File

@ -9,7 +9,6 @@ import com.hbm.inventory.container.ContainerMixer;
import com.hbm.inventory.recipes.MixerRecipes;
import com.hbm.inventory.recipes.MixerRecipes.MixerRecipe;
import com.hbm.lib.RefStrings;
import com.hbm.packet.AuxButtonPacket;
import com.hbm.packet.NBTControlPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.machine.TileEntityMachineMixer;

View File

@ -99,7 +99,7 @@ public class Mats {
public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setShapes(WIRE, INGOT, DUST, BLOCK);
public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, BLOCK);
public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setShapes(NUGGET, INGOT, DUST, PLATE, CASTPLATE, BLOCK);
public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, df("Bismuth"), 0xB200FF).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK);
public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, BI, 0xB200FF).setShapes(NUGGET, BILLET, INGOT, DUST, BLOCK);
public static final NTMMaterial MAT_ARSENIC = makeSmeltable(3300, AS, 0x6CBABA, 0x242525, 0x558080).setShapes(NUGGET, INGOT);
public static final NTMMaterial MAT_TANTALIUM = makeSmeltable(7300, TA, 0xFFFFFF, 0x1D1D36, 0xA89B74).setShapes(NUGGET, INGOT, DUST, BLOCK);
public static final NTMMaterial MAT_NIOBIUM = makeSmeltable(4100, NB, 0xB76EC9, 0x2F2D42, 0xD576B1).setShapes(NUGGET, DUSTTINY, INGOT, DUST, BLOCK);
@ -107,6 +107,7 @@ public class Mats {
public static final NTMMaterial MAT_COBALT = makeSmeltable(2700, CO, 0xC2D1EE, 0x353554, 0x8F72AE).setShapes(NUGGET, DUSTTINY, BILLET, INGOT, DUST, BLOCK);
public static final NTMMaterial MAT_BORON = makeSmeltable(500, B, 0xBDC8D2, 0x29343E, 0xAD72AE).setShapes(DUSTTINY, INGOT, DUST, BLOCK);
public static final NTMMaterial MAT_CADMIUM = makeSmeltable(4800, CD, 0xFFFADE, 0x350000, 0xA85600).setShapes(INGOT, DUST);
public static final NTMMaterial MAT_OSMIRIDIUM = makeSmeltable(7699, OSMIRIDIUM, 0xDBE3EF, 0x7891BE, 0xACBDD9).setShapes(NUGGET, INGOT, CASTPLATE);
//Alloys
public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setShapes(DUSTTINY, INGOT, DUST, PLATE, CASTPLATE, BLOCK);

View File

@ -986,6 +986,15 @@ public class AssemblerRecipes {
new ComparableStack(ModItems.circuit_red_copper, 3)
}, 200);
makeRecipe(new ComparableStack(ModItems.euphemium_capacitor, 1), new AStack[]
{
new OreDictStack(NB.ingot(), 4),
new ComparableStack(ModItems.redcoil_capacitor, 1),
new ComparableStack(ModItems.ingot_euphemium, 4),
new ComparableStack(ModItems.circuit_tantalium, 6),
new ComparableStack(ModItems.powder_nitan_mix, 18),
}, 600);
makeRecipe(new ComparableStack(ModBlocks.block_cap_nuka, 1), new AStack[] { new ComparableStack(ModItems.cap_nuka, 128) }, 10);
makeRecipe(new ComparableStack(ModBlocks.block_cap_quantum, 1), new AStack[] { new ComparableStack(ModItems.cap_quantum, 128) }, 10);
makeRecipe(new ComparableStack(ModBlocks.block_cap_sparkle, 1), new AStack[] { new ComparableStack(ModItems.cap_sparkle, 128) }, 10);

View File

@ -114,6 +114,16 @@ public class ChemplantRecipes extends SerializableRecipe {
new FluidStack(Fluids.XYLENE, 500),
new FluidStack(Fluids.OXYGEN, 100))
.outputItems(new ItemStack(ModItems.ingot_pet)));*/
//Laminate Glass going here
recipes.add(new ChemRecipe(97, "LAMINATE", 100)
.inputFluids(
new FluidStack(Fluids.XYLENE, 250),
new FluidStack(Fluids.PHOSGENE, 250))
.inputItems(
new ComparableStack(com.hbm.blocks.ModBlocks.reinforced_glass),
new ComparableStack(com.hbm.items.ModItems.bolt_tungsten, 4))
.outputItems(new ItemStack(com.hbm.blocks.ModBlocks.reinforced_laminate)));
recipes.add(new ChemRecipe(94, "PC", 100)
.inputFluids(
new FluidStack(Fluids.XYLENE, 500),
@ -370,6 +380,24 @@ public class ChemplantRecipes extends SerializableRecipe {
.inputItems(new OreDictStack(DIAMOND.dust(), 1))
.inputFluids(new FluidStack(Fluids.XPJUICE, 500))
.outputFluids(new FluidStack(Fluids.ENDERJUICE, 100)));
recipes.add(new ChemRecipe(98, "SHELL_CHLORINE", 100)
.inputItems(
new ComparableStack(ModItems.ammo_arty, 1, 0),
new OreDictStack(ANY_PLASTIC.ingot(), 1))
.inputFluids(new FluidStack(Fluids.CHLORINE, 4000))
.outputItems(new ItemStack(ModItems.ammo_arty, 1, 9)));
recipes.add(new ChemRecipe(99, "SHELL_PHOSGENE", 100)
.inputItems(
new ComparableStack(ModItems.ammo_arty, 1, 0),
new OreDictStack(ANY_PLASTIC.ingot(), 1))
.inputFluids(new FluidStack(Fluids.PHOSGENE, 4000))
.outputItems(new ItemStack(ModItems.ammo_arty, 1, 10)));
recipes.add(new ChemRecipe(100, "SHELL_MUSTARD", 100)
.inputItems(
new ComparableStack(ModItems.ammo_arty, 1, 0),
new OreDictStack(ANY_PLASTIC.ingot(), 1))
.inputFluids(new FluidStack(Fluids.MUSTARDGAS, 4000))
.outputItems(new ItemStack(ModItems.ammo_arty, 1, 11)));
}
public static void registerFuelProcessing() {

View File

@ -44,6 +44,7 @@ public class CombinationRecipes extends SerializableRecipe {
recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.briquette, EnumBriquetteType.LIGNITE)), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.LIGNITE), new FluidStack(Fluids.COALCREOSOTE, 100)));
recipes.put(CINNABAR.crystal(), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.MERCURY, 100)));
recipes.put(CHLOROCALCITE.dust(), new Pair(new ItemStack(ModItems.powder_calcium), new FluidStack(Fluids.CHLORINE, 250)));
recipes.put(new ComparableStack(Items.glowstone_dust), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.CHLORINE, 50)));
recipes.put(new ComparableStack(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.BAUXITE)), new Pair(new ItemStack(ModItems.ingot_aluminium, 2), new FluidStack(Fluids.REDMUD, 250)));

View File

@ -80,13 +80,12 @@ public class LiquefactionRecipes extends SerializableRecipe {
if(recipes.containsKey(comp))
return recipes.get(comp);
String[] dictKeys = comp.getDictKeys();
comp = new ComparableStack(stack.getItem(), 1, OreDictionary.WILDCARD_VALUE);
if(recipes.containsKey(comp))
return recipes.get(comp);
String[] dictKeys = comp.getDictKeys();
for(String key : dictKeys) {
if(recipes.containsKey(key))

View File

@ -513,6 +513,7 @@ public class ModItems {
public static Item powder_paleogenite_tiny;
public static Item powder_impure_osmiridium;
public static Item powder_borax;
public static Item powder_chlorocalcite;
public static Item powder_lanthanium;
public static Item powder_actinium;
@ -552,6 +553,7 @@ public class ModItems {
public static Item tank_steel;
public static Item motor;
public static Item motor_desh;
public static Item motor_bismuth;
public static Item centrifuge_element;
//public static Item centrifuge_tower;
public static Item reactor_core;
@ -1247,6 +1249,7 @@ public class ModItems {
public static Item dosimeter;
public static Item geiger_counter;
public static Item digamma_diagnostic;
public static Item pollution_detector;
public static Item survey_scanner;
public static Item mirror_tool;
public static Item rbmk_tool;
@ -1796,6 +1799,7 @@ public class ModItems {
public static Item energy_core;
public static Item fuse;
public static Item redcoil_capacitor;
public static Item euphemium_capacitor;
public static Item titanium_filter;
//by using these in crafting table recipes, i'm running the risk of making my recipes too greg-ian (which i don't like)
//in the event that i forget about the meaning of the word "sparingly", please throw a brick at my head
@ -2906,6 +2910,7 @@ public class ModItems {
powder_paleogenite_tiny = new Item().setUnlocalizedName("powder_paleogenite_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_paleogenite_tiny");
powder_impure_osmiridium = new Item().setUnlocalizedName("powder_impure_osmiridium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_impure_osmiridium");
powder_borax = new Item().setUnlocalizedName("powder_borax").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_borax");
powder_chlorocalcite = new Item().setUnlocalizedName("powder_chlorocalcite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_chlorocalcite");
fragment_neodymium = new Item().setUnlocalizedName("fragment_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_neodymium");
fragment_cobalt = new Item().setUnlocalizedName("fragment_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cobalt");
@ -2928,6 +2933,7 @@ public class ModItems {
tank_steel = new Item().setUnlocalizedName("tank_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":tank_steel");
motor = new Item().setUnlocalizedName("motor").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor");
motor_desh = new Item().setUnlocalizedName("motor_desh").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor_desh");
motor_bismuth = new Item().setUnlocalizedName("motor_bismuth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":motor_bismuth");
centrifuge_element = new Item().setUnlocalizedName("centrifuge_element").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":centrifuge_element");
//centrifuge_tower = new Item().setUnlocalizedName("centrifuge_tower").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":centrifuge_tower");
reactor_core = new Item().setUnlocalizedName("reactor_core").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":reactor_core");
@ -4405,6 +4411,7 @@ public class ModItems {
energy_core = new ItemBattery(10000000, 0, 1000).setUnlocalizedName("energy_core").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":energy_core");
fuse = new ItemCustomLore().setUnlocalizedName("fuse").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fuse");
redcoil_capacitor = new ItemCapacitor(10).setUnlocalizedName("redcoil_capacitor").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":redcoil_capacitor");
euphemium_capacitor = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("euphemium_capacitor").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":redcoil_capacitor_euphemium");
titanium_filter = new ItemCapacitor(6 * 60 * 60 * 20).setUnlocalizedName("titanium_filter").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":titanium_filter");
screwdriver = new ItemTooling(ToolType.SCREWDRIVER, 100).setUnlocalizedName("screwdriver");
screwdriver_desh = new ItemTooling(ToolType.SCREWDRIVER, 0).setUnlocalizedName("screwdriver_desh");
@ -4571,6 +4578,7 @@ public class ModItems {
dosimeter = new ItemDosimeter().setUnlocalizedName("dosimeter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":dosimeter");
geiger_counter = new ItemGeigerCounter().setUnlocalizedName("geiger_counter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":geiger_counter");
digamma_diagnostic = new ItemDigammaDiagnostic().setUnlocalizedName("digamma_diagnostic").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":digamma_diagnostic");
pollution_detector = new ItemPollutionDetector().setUnlocalizedName("pollution_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pollution_detector");
survey_scanner = new ItemSurveyScanner().setUnlocalizedName("survey_scanner").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":survey_scanner");
mirror_tool = new ItemMirrorTool().setUnlocalizedName("mirror_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":mirror_tool");
rbmk_tool = new ItemRBMKTool().setUnlocalizedName("rbmk_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":rbmk_tool");
@ -5714,6 +5722,7 @@ public class ModItems {
GameRegistry.registerItem(powder_paleogenite_tiny, powder_paleogenite_tiny.getUnlocalizedName());
GameRegistry.registerItem(powder_impure_osmiridium, powder_impure_osmiridium.getUnlocalizedName());
GameRegistry.registerItem(powder_borax, powder_borax.getUnlocalizedName());
GameRegistry.registerItem(powder_chlorocalcite, powder_chlorocalcite.getUnlocalizedName());
GameRegistry.registerItem(powder_yellowcake, powder_yellowcake.getUnlocalizedName());
GameRegistry.registerItem(powder_beryllium, powder_beryllium.getUnlocalizedName());
GameRegistry.registerItem(powder_dura_steel, powder_dura_steel.getUnlocalizedName());
@ -5985,6 +5994,7 @@ public class ModItems {
GameRegistry.registerItem(tank_steel, tank_steel.getUnlocalizedName());
GameRegistry.registerItem(motor, motor.getUnlocalizedName());
GameRegistry.registerItem(motor_desh, motor_desh.getUnlocalizedName());
GameRegistry.registerItem(motor_bismuth, motor_bismuth.getUnlocalizedName());
GameRegistry.registerItem(centrifuge_element, centrifuge_element.getUnlocalizedName());
//GameRegistry.registerItem(centrifuge_tower, centrifuge_tower.getUnlocalizedName());
//GameRegistry.registerItem(magnet_dee, magnet_dee.getUnlocalizedName());
@ -6429,6 +6439,7 @@ public class ModItems {
//Machine Items
GameRegistry.registerItem(fuse, fuse.getUnlocalizedName());
GameRegistry.registerItem(redcoil_capacitor, redcoil_capacitor.getUnlocalizedName());
GameRegistry.registerItem(euphemium_capacitor, euphemium_capacitor.getUnlocalizedName());
GameRegistry.registerItem(titanium_filter, titanium_filter.getUnlocalizedName());
GameRegistry.registerItem(screwdriver, screwdriver.getUnlocalizedName());
GameRegistry.registerItem(screwdriver_desh, screwdriver_desh.getUnlocalizedName());
@ -6719,6 +6730,7 @@ public class ModItems {
GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName());
GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName());
GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName());
GameRegistry.registerItem(pollution_detector, pollution_detector.getUnlocalizedName());
GameRegistry.registerItem(containment_box, containment_box.getUnlocalizedName());
//Keys and Locks
@ -8101,10 +8113,6 @@ public class ModItems {
addRemap("gas_lpg", gas_full, Fluids.LPG.getID());
}
public static void addRemap(String unloc, int removoingTheseWouldTakeForever, Item item, Enum sub) {
addRemap(unloc, item, sub.ordinal());
}
public static void addRemap(String unloc, Item item, Enum sub) {
addRemap(unloc, item, sub.ordinal());
}

View File

@ -0,0 +1,34 @@
package com.hbm.items.block;
import java.util.List;
import com.hbm.blocks.BlockRemap;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
public class ItemBlockRemap extends ItemBlockBase {
public ItemBlockRemap(Block block) {
super(block);
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean held) {
if(!(entity instanceof EntityPlayer) || !(this.field_150939_a instanceof BlockRemap)) return;
EntityPlayer player = (EntityPlayer) entity;
BlockRemap remap = (BlockRemap) this.field_150939_a;
player.inventory.setInventorySlotContents(slot, new ItemStack(remap.remapBlock, stack.stackSize, remap.remapMeta));
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.RED + "Compatibility item, hold in inventory to convert!");
}
}

View File

@ -94,7 +94,8 @@ public class ItemBedrockOre extends ItemEnumMulti {
TUNGSTEN("Tungsten", 0x2C293C, B_LEAD, B_IRON, B_BISMUTH), //ferberite has iron, raspite has lead, russelite is bismuth tungsten
GOLD("Gold", 0xF9D738, B_LEAD, B_COPPER, B_BISMUTH), //occurs with copper, lead and rare bismuthide
URANIUM("Uranium", 0x868D82, B_LEAD, B_RADIUM, B_POLONIUM), //uranium and its decay products
THORIUM("Thorium", 0x7D401D, B_SILICON, B_URANIUM, B_TECHNETIUM); //thorium occours with uraninite and decay products
THORIUM("Thorium", 0x7D401D, B_SILICON, B_URANIUM, B_TECHNETIUM), //thorium occours with uraninite and decay products
CHLOROCALCITE("Chlorocalcite", 0xCDE036, B_LITHIUM, B_SILICON, B_SILICON); //i guess?
public String oreName;
public int color;

View File

@ -3,6 +3,8 @@ package com.hbm.items.special;
import java.util.List;
import com.hbm.blocks.rail.IRailNTM;
import com.hbm.blocks.rail.IRailNTM.MoveContext;
import com.hbm.blocks.rail.IRailNTM.RailCheckType;
import com.hbm.entity.train.EntityRailCarBase;
import com.hbm.entity.train.TrainCargoTram;
import com.hbm.entity.train.TrainCargoTramTrailer;
@ -76,12 +78,12 @@ public class ItemTrain extends ItemEnumMulti {
if(train != null && train.getGauge() == ((IRailNTM) b).getGauge(world, x, y, z)) {
if(!world.isRemote) {
train.setPosition(x + fx, y + fy, z + fz);
BlockPos anchor = train.getCurentAnchorPos();
BlockPos anchor = train.getCurrentAnchorPos();
train.rotationYaw = entity.rotationYaw;
Vec3 corePos = train.getRelPosAlongRail(anchor, 0);
Vec3 corePos = train.getRelPosAlongRail(anchor, 0, new MoveContext(RailCheckType.CORE));
train.setPosition(corePos.xCoord, corePos.yCoord, corePos.zCoord);
Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan());
Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan());
Vec3 frontPos = train.getRelPosAlongRail(anchor, train.getLengthSpan(), new MoveContext(RailCheckType.FRONT));
Vec3 backPos = train.getRelPosAlongRail(anchor, -train.getLengthSpan(), new MoveContext(RailCheckType.BACK));
train.rotationYaw = train.generateYaw(frontPos, backPos);
world.spawnEntityInWorld(train);
}

View File

@ -0,0 +1,32 @@
package com.hbm.items.tool;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionData;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.PlayerInformPacket;
import com.hbm.util.ChatBuilder;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
public class ItemPollutionDetector extends Item {
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) {
if(!(entity instanceof EntityPlayerMP) || world.getTotalWorldTime() % 10 != 0) return;
PollutionData data = PollutionHandler.getPollutionData(world, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ));
if(data == null) data = new PollutionData();
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Soot: " + data.pollution[PollutionType.SOOT.ordinal()]).color(EnumChatFormatting.RED).flush(), 100), (EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Poison: " + data.pollution[PollutionType.POISON.ordinal()]).color(EnumChatFormatting.RED).flush(), 101), (EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Heavy metal: " + data.pollution[PollutionType.HEAVYMETAL.ordinal()]).color(EnumChatFormatting.RED).flush(), 102), (EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Fallout: " + data.pollution[PollutionType.FALLOUT.ordinal()]).color(EnumChatFormatting.RED).flush(), 103), (EntityPlayerMP) entity);
}
}

View File

@ -2,6 +2,8 @@ package com.hbm.items.tool;
import java.util.List;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.lib.Library;
import net.minecraft.entity.player.EntityPlayer;
@ -30,6 +32,8 @@ public class ItemWandD extends Item {
vnt.setSFX(new ExplosionEffectStandard());
vnt.explode();*/
PollutionHandler.incrementPollution(world, pos.blockX, pos.blockY, pos.blockZ, PollutionType.SOOT, 15);
/*TimeAnalyzer.startCount("setBlock");
world.setBlock(pos.blockX, pos.blockY, pos.blockZ, Blocks.dirt);
TimeAnalyzer.startEndCount("getBlock");

View File

@ -3,7 +3,9 @@ package com.hbm.items.weapon;
import java.util.List;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.BombConfig;
import com.hbm.entity.effect.EntityMist;
import com.hbm.entity.effect.EntityNukeCloudSmall;
import com.hbm.entity.logic.EntityNukeExplosionMK5;
import com.hbm.entity.projectile.EntityArtilleryShell;
@ -12,10 +14,12 @@ import com.hbm.explosion.ExplosionLarge;
import com.hbm.explosion.ExplosionNukeSmall;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard;
import com.hbm.explosion.vanillant.standard.BlockMutatorDebris;
import com.hbm.explosion.vanillant.standard.BlockProcessorStandard;
import com.hbm.explosion.vanillant.standard.EntityProcessorCross;
import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard;
import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.packet.AuxParticlePacketNT;
@ -46,8 +50,7 @@ import net.minecraft.util.MovingObjectPosition.MovingObjectType;
public class ItemAmmoArty extends Item {
public static Random rand = new Random();
public static ArtilleryShell[] itemTypes = new ArtilleryShell[ /* >>> */ 9 /* <<< */ ];
//public static ArtilleryShell[] shellTypes = new ArtilleryShell[ /* >>> */ 8 /* <<< */ ];
public static ArtilleryShell[] itemTypes = new ArtilleryShell[ /* >>> */ 12 /* <<< */ ];
/* item types */
public final int NORMAL = 0;
public final int CLASSIC = 1;
@ -58,6 +61,9 @@ public class ItemAmmoArty extends Item {
public final int MINI_NUKE_MULTI = 6;
public final int PHOSPHORUS_MULTI = 7;
public final int CARGO = 8;
public final int CHLORINE = 9;
public final int PHOSGENE = 10;
public final int MUSTARD = 11;
/* non-item shell types */
public ItemAmmoArty() {
@ -78,6 +84,9 @@ public class ItemAmmoArty extends Item {
list.add(new ItemStack(item, 1, MINI_NUKE_MULTI));
list.add(new ItemStack(item, 1, NUKE));
list.add(new ItemStack(item, 1, CARGO));
list.add(new ItemStack(item, 1, CHLORINE));
list.add(new ItemStack(item, 1, PHOSGENE));
list.add(new ItemStack(item, 1, MUSTARD));
}
@Override
@ -195,7 +204,7 @@ public class ItemAmmoArty extends Item {
ExplosionVNT xnt = new ExplosionVNT(shell.worldObj, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, size);
if(breaksBlocks) {
xnt.setBlockAllocator(new BlockAllocatorStandard(48));
xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop());
xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop().withBlockEffect(new BlockMutatorDebris(ModBlocks.block_slag, 1)));
}
xnt.setEntityProcessor(new EntityProcessorCross(7.5D).withRangeMod(rangeMod));
xnt.setPlayerProcessor(new PlayerProcessorStandard());
@ -298,6 +307,60 @@ public class ItemAmmoArty extends Item {
}
}};
/* GAS */
this.itemTypes[CHLORINE] = new ArtilleryShell("ammo_arty_chlorine", SpentCasing.COLOR_CASE_16INCH) {
public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) {
shell.killAndClear();
Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize();
shell.worldObj.createExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 5F, false);
EntityMist mist = new EntityMist(shell.worldObj);
mist.setType(Fluids.CHLORINE);
mist.setPosition(mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord - 3, mop.hitVec.zCoord - vec.zCoord);
mist.setArea(15, 7.5F);
shell.worldObj.spawnEntityInWorld(mist);
}
};
this.itemTypes[PHOSGENE] = new ArtilleryShell("ammo_arty_phosgene", SpentCasing.COLOR_CASE_16INCH_NUKE) {
public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) {
shell.killAndClear();
Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize();
shell.worldObj.createExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 5F, false);
for(int i = 0; i < 3; i++) {
EntityMist mist = new EntityMist(shell.worldObj);
mist.setType(Fluids.PHOSGENE);
double x = mop.hitVec.xCoord - vec.xCoord;
double z = mop.hitVec.zCoord - vec.zCoord;
if(i > 0) {
x += rand.nextGaussian() * 15;
z += rand.nextGaussian() * 15;
}
mist.setPosition(x, mop.hitVec.yCoord - vec.yCoord - 5, z);
mist.setArea(15, 10);
shell.worldObj.spawnEntityInWorld(mist);
}
}
};
this.itemTypes[MUSTARD] = new ArtilleryShell("ammo_arty_mustard_gas", SpentCasing.COLOR_CASE_16INCH_NUKE) {
public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) {
shell.killAndClear();
Vec3 vec = Vec3.createVectorHelper(shell.motionX, shell.motionY, shell.motionZ).normalize();
shell.worldObj.createExplosion(shell, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, 5F, false);
for(int i = 0; i < 5; i++) {
EntityMist mist = new EntityMist(shell.worldObj);
mist.setType(Fluids.MUSTARDGAS);
double x = mop.hitVec.xCoord - vec.xCoord;
double z = mop.hitVec.zCoord - vec.zCoord;
if(i > 0) {
x += rand.nextGaussian() * 25;
z += rand.nextGaussian() * 25;
}
mist.setPosition(x, mop.hitVec.yCoord - vec.yCoord - 5, z);
mist.setArea(20, 10);
shell.worldObj.spawnEntityInWorld(mist);
}
}
};
/* CLUSTER SHELLS */
this.itemTypes[PHOSPHORUS_MULTI] = new ArtilleryShell("ammo_arty_phosphorus_multi", SpentCasing.COLOR_CASE_16INCH_PHOS) {
public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { ItemAmmoArty.this.itemTypes[PHOSPHORUS].onImpact(shell, mop); }

View File

@ -2,12 +2,14 @@ package com.hbm.items.weapon;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.entity.projectile.EntityArtilleryRocket;
import com.hbm.explosion.ExplosionChaos;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.explosion.ExplosionNukeSmall;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard;
import com.hbm.explosion.vanillant.standard.BlockMutatorDebris;
import com.hbm.explosion.vanillant.standard.BlockProcessorStandard;
import com.hbm.explosion.vanillant.standard.EntityProcessorCross;
import com.hbm.explosion.vanillant.standard.ExplosionEffectStandard;
@ -143,7 +145,7 @@ public class ItemAmmoHIMARS extends Item {
ExplosionVNT xnt = new ExplosionVNT(rocket.worldObj, mop.hitVec.xCoord - vec.xCoord, mop.hitVec.yCoord - vec.yCoord, mop.hitVec.zCoord - vec.zCoord, size);
if(breaksBlocks) {
xnt.setBlockAllocator(new BlockAllocatorStandard(48));
xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop());
xnt.setBlockProcessor(new BlockProcessorStandard().setNoDrop().withBlockEffect(new BlockMutatorDebris(ModBlocks.block_slag, 1)));
}
xnt.setEntityProcessor(new EntityProcessorCross(7.5).withRangeMod(rangeMod));
xnt.setPlayerProcessor(new PlayerProcessorStandard());

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings {
public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (4613)";
public static final String VERSION = "1.0.27 BETA (4621)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -777,6 +777,7 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerBlockHandler(new RenderRTTY());
RenderingRegistry.registerBlockHandler(new RenderDiFurnaceExtension());
RenderingRegistry.registerBlockHandler(new RenderSplitter());
RenderingRegistry.registerBlockHandler(new RenderCapacitor());
RenderingRegistry.registerBlockHandler(new RenderFoundryBasin());
RenderingRegistry.registerBlockHandler(new RenderFoundryMold());
@ -786,6 +787,9 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerBlockHandler(new RenderNarrowStraightRail());
RenderingRegistry.registerBlockHandler(new RenderNarrowCurveRail());
RenderingRegistry.registerBlockHandler(new RenderStandardStraightRail());
RenderingRegistry.registerBlockHandler(new RenderStandardCurveRail());
RenderingRegistry.registerBlockHandler(new RenderStandardRampRail());
RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_dynamite.getRenderType(), ResourceManager.charge_dynamite));
RenderingRegistry.registerBlockHandler(new RenderBlockRotated(ModBlocks.charge_c4.getRenderType(), ResourceManager.charge_c4));

View File

@ -189,6 +189,7 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModItems.motor, 2), new Object[] { " R ", "ICI", "ITI", 'R', ModItems.wire_red_copper, 'T', ModItems.coil_copper_torus, 'I', IRON.plate(), 'C', ModItems.coil_copper });
addRecipeAuto(new ItemStack(ModItems.motor, 2), new Object[] { " R ", "ICI", " T ", 'R', ModItems.wire_red_copper, 'T', ModItems.coil_copper_torus, 'I', STEEL.plate(), 'C', ModItems.coil_copper });
addRecipeAuto(new ItemStack(ModItems.motor_desh, 1), new Object[] { "PCP", "DMD", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', ModItems.coil_gold_torus, 'D', DESH.ingot(), 'M', ModItems.motor });
addRecipeAuto(new ItemStack(ModItems.motor_bismuth, 1), new Object[] { "BCB", "SDS", "BCB", 'B', BI.nugget(), 'C', ModBlocks.hadron_coil_alloy, 'S', STEEL.plateCast(), 'D', DURA.ingot() });
//addRecipeAuto(new ItemStack(ModItems.centrifuge_element, 1), new Object[] { " T ", "WTW", "RMR", 'R', ModItems.wire_red_copper, 'T', ModItems.tank_steel, 'M', ModItems.motor, 'W', ModItems.coil_tungsten });
//addRecipeAuto(new ItemStack(ModItems.centrifuge_tower, 1), new Object[] { "LL", "EE", "EE", 'E', ModItems.centrifuge_element, 'L', KEY_BLUE });
//addRecipeAuto(new ItemStack(ModItems.reactor_core, 1), new Object[] { "LNL", "N N", "LNL", 'N', getReflector(), 'L', PB.plate() });
@ -294,6 +295,7 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 0), new Object[] { "ICI", "CLC", "ICI", 'I', TI.ingot(), 'C', ModBlocks.crate_steel, 'L', ModItems.circuit_copper });
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 1), new Object[] { "PCP", "PMP", "PPP", 'P', DESH.ingot(), 'C', ModItems.circuit_red_copper, 'M', new ItemStack(ModBlocks.mass_storage, 1, 0) });
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 2), new Object[] { "PCP", "PMP", "PPP", 'P', ANY_RESISTANTALLOY.ingot(), 'C', ModItems.circuit_gold, 'M', new ItemStack(ModBlocks.mass_storage, 1, 1) });
addRecipeAuto(new ItemStack(ModBlocks.mass_storage, 1, 3), new Object[] { "PPP", "PIP", "PPP", 'P', KEY_PLANKS, 'I', IRON.plate() });
addRecipeAuto(new ItemStack(ModBlocks.machine_autocrafter, 1), new Object[] { "SCS", "MWM", "SCS", 'S', STEEL.plate(), 'C', ModItems.circuit_copper, 'M', ModItems.motor, 'W', Blocks.crafting_table });
addRecipeAuto(new ItemStack(ModBlocks.machine_waste_drum, 1), new Object[] { "LRL", "BRB", "LRL", 'L', PB.ingot(), 'B', Blocks.iron_bars, 'R', ModItems.rod_quad_empty });
addRecipeAuto(new ItemStack(ModBlocks.machine_press, 1), new Object[] { "IRI", "IPI", "IBI", 'I', IRON.ingot(), 'R', Blocks.furnace, 'B', IRON.block(), 'P', Blocks.piston });
@ -433,6 +435,8 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_brick), 4), new Object[] { "FBF", "BFB", "FBF", 'F', Blocks.iron_bars, 'B', ModBlocks.brick_concrete });
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.brick_compound), 4), new Object[] { "FBF", "BTB", "FBF", 'F', ModItems.bolt_tungsten, 'B', ModBlocks.reinforced_brick, 'T', ANY_TAR.any() });
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_glass), 4), new Object[] { "FBF", "BFB", "FBF", 'F', Blocks.iron_bars, 'B', Blocks.glass });
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_glass_pane), 16), new Object[] { " ", "GGG", "GGG", 'G', ModBlocks.reinforced_glass});
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_laminate_pane), 16), new Object[] { " ", "LLL", "LLL", 'L', ModBlocks.reinforced_laminate});
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_light), 1), new Object[] { "FFF", "FBF", "FFF", 'F', Blocks.iron_bars, 'B', Blocks.glowstone });
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_lamp_off), 1), new Object[] { "FFF", "FBF", "FFF", 'F', Blocks.iron_bars, 'B', Blocks.redstone_lamp });
addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.reinforced_sand), 4), new Object[] { "FBF", "BFB", "FBF", 'F', Blocks.iron_bars, 'B', Blocks.sandstone });
@ -763,10 +767,10 @@ public class CraftingManager {
addShapelessAuto(new ItemStack(ModItems.ams_catalyst_schrabidium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, SA326.dust(), SA326.dust(), SA326.dust(), SA326.dust() });
addShapelessAuto(new ItemStack(ModItems.ams_catalyst_dineutronium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_hagalaz, ModItems.rune_hagalaz, ModItems.rune_thurisaz, ModItems.rune_thurisaz, DNT.dust(), DNT.dust(), DNT.dust(), DNT.dust() });
addRecipeAuto(new ItemStack(ModBlocks.dfc_core, 1), new Object[] { "DLD", "LML", "DLD", 'D', ModItems.ingot_bismuth, 'L', DNT.block(), 'M', KEY_CIRCUIT_BISMUTH });
addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.ingot(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser });
addRecipeAuto(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.ingot(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', new ItemStack(ModBlocks.sellafield, 1, 5), 'L', ModItems.hull_small_steel });
addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.ingot(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', ModItems.pipes_steel });
addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.ingot(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModItems.magnet_circular, 'L', ModItems.crystal_xen });
addRecipeAuto(new ItemStack(ModBlocks.dfc_emitter, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateCast(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', ModItems.crystal_xen, 'L', ModItems.sat_head_laser });
addRecipeAuto(new ItemStack(ModBlocks.dfc_receiver, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateCast(), 'D', ModItems.plate_desh, 'T', ModBlocks.machine_transformer_dnt, 'X', new ItemStack(ModBlocks.sellafield, 1, 5), 'L', ModItems.hull_small_steel });
addRecipeAuto(new ItemStack(ModBlocks.dfc_injector, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateCast(), 'D', CMB.plate(), 'T', ModBlocks.machine_fluidtank, 'X', ModItems.motor, 'L', ModItems.pipes_steel });
addRecipeAuto(new ItemStack(ModBlocks.dfc_stabilizer, 1), new Object[] { "SDS", "TXL", "SDS", 'S', OSMIRIDIUM.plateCast(), 'D', ModItems.plate_desh, 'T', ModItems.singularity_spark, 'X', ModItems.magnet_circular, 'L', ModItems.crystal_xen });
addRecipeAuto(new ItemStack(ModBlocks.barrel_plastic, 1), new Object[] { "IPI", "I I", "IPI", 'I', ModItems.plate_polymer, 'P', AL.plate() });
addRecipeAuto(new ItemStack(ModBlocks.barrel_iron, 1), new Object[] { "IPI", "I I", "IPI", 'I', IRON.plate(), 'P', IRON.ingot() });
addShapelessAuto(new ItemStack(ModBlocks.barrel_iron, 1), new Object[] { ModBlocks.barrel_corroded, ANY_TAR.any() });

View File

@ -58,6 +58,7 @@ import com.hbm.entity.logic.*;
import com.hbm.entity.mob.siege.*;
import com.hbm.handler.*;
import com.hbm.handler.imc.*;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.radiation.ChunkRadiationManager;
import com.hbm.hazard.HazardRegistry;
import com.hbm.inventory.*;
@ -904,6 +905,10 @@ public class MainRegistry {
MinecraftForge.EVENT_BUS.register(radiationSystem);
FMLCommonHandler.instance().bus().register(radiationSystem);
PollutionHandler pollution = new PollutionHandler();
MinecraftForge.EVENT_BUS.register(pollution);
FMLCommonHandler.instance().bus().register(pollution);
if(event.getSide() == Side.CLIENT) {
HbmKeybinds.register();
HbmKeybinds keyHandler = new HbmKeybinds();

View File

@ -478,11 +478,7 @@ public class ModEventHandler {
@SubscribeEvent
public void onLivingUpdate(LivingUpdateEvent event) {
ItemStack[] prevArmor = null;
try {
prevArmor = (ItemStack[]) ReflectionHelper.findField(EntityLivingBase.class, "field_82180_bT", "previousEquipment").get(event.entityLiving);
} catch(Exception e) { }
ItemStack[] prevArmor = event.entityLiving.previousEquipment;
if(event.entityLiving instanceof EntityPlayer && prevArmor != null && event.entityLiving.getHeldItem() != null
&& (prevArmor[0] == null || prevArmor[0].getItem() != event.entityLiving.getHeldItem().getItem())

View File

@ -13,6 +13,10 @@ import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockAshes;
import com.hbm.blocks.rail.IRailNTM;
import com.hbm.blocks.rail.IRailNTM.MoveContext;
import com.hbm.blocks.rail.IRailNTM.RailCheckType;
import com.hbm.blocks.rail.IRailNTM.RailContext;
import com.hbm.config.GeneralConfig;
import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.entity.mob.EntityHunterChopper;
@ -66,6 +70,7 @@ import com.hbm.tileentity.machine.TileEntityNukeFurnace;
import com.hbm.util.I18nUtil;
import com.hbm.util.ItemStackUtil;
import com.hbm.util.LoggingUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.wiaj.GuiWorldInAJar;
import com.hbm.wiaj.cannery.CanneryBase;
import com.hbm.wiaj.cannery.Jars;
@ -104,6 +109,7 @@ import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.Slot;
@ -171,7 +177,9 @@ public class ModEventHandlerClient {
World world = mc.theWorld;
MovingObjectPosition mop = mc.objectMouseOver;
if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK ) {
if(mop != null) {
if(mop.typeOfHit == mop.typeOfHit.BLOCK) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ILookOverlay) {
((ILookOverlay) player.getHeldItem().getItem()).printHook(event, world, mop.blockX, mop.blockY, mop.blockZ);
@ -179,6 +187,13 @@ public class ModEventHandlerClient {
} else if(world.getBlock(mop.blockX, mop.blockY, mop.blockZ) instanceof ILookOverlay) {
((ILookOverlay) world.getBlock(mop.blockX, mop.blockY, mop.blockZ)).printHook(event, world, mop.blockX, mop.blockY, mop.blockZ);
}
} else if(mop.typeOfHit == mop.typeOfHit.ENTITY) {
Entity entity = mop.entityHit;
if(entity instanceof ILookOverlay) {
((ILookOverlay) entity).printHook(event, world, 0, 0, 0);
}
}
}
List<EntityNukeTorex> torex = world.getEntitiesWithinAABB(EntityNukeTorex.class, player.boundingBox.expand(100, 100, 100));
@ -249,12 +264,12 @@ public class ModEventHandlerClient {
boolean flip = distanceToCover < 0;
if(it == 1) {
Vec3 snap = next = rail.getTravelLocation(world, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, info);
Vec3 snap = next = rail.getTravelLocation(world, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, info, new MoveContext(RailCheckType.CORE));
if(i == 0) world.spawnParticle("reddust", snap.xCoord, snap.yCoord + 0.25, snap.zCoord, 0.1, 1, 0.1);
}
Vec3 prev = next;
next = rail.getTravelLocation(world, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info);
next = rail.getTravelLocation(world, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info, new MoveContext(i == 0 ? RailCheckType.FRONT : RailCheckType.BACK));
distanceToCover = info.overshoot;
anchor = info.pos;
if(i == 0) world.spawnParticle("reddust", next.xCoord, next.yCoord + 0.25, next.zCoord, 0, distanceToCover != 0 ? 0.5 : 0, 0);

View File

@ -1,8 +1,10 @@
package com.hbm.main;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GLContext;
import com.hbm.blocks.ICustomBlockHighlight;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.items.armor.IArmorDisableModel;
import com.hbm.items.armor.IArmorDisableModel.EnumPlayerPart;
import com.hbm.packet.PermaSyncHandler;
@ -10,7 +12,9 @@ import com.hbm.render.model.ModelMan;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.entity.RenderManager;
@ -23,6 +27,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
import net.minecraftforge.client.event.EntityViewRenderEvent.FogColors;
import net.minecraftforge.client.event.EntityViewRenderEvent.FogDensity;
import net.minecraftforge.client.event.RenderPlayerEvent;
public class ModEventHandlerRenderer {
@ -318,4 +324,56 @@ public class ModEventHandlerRenderer {
GL11.glPopMatrix();
}
}*/
float renderSoot = 0;
@SubscribeEvent
public void worldTick(WorldTickEvent event) {
if(event.phase == event.phase.START) {
float step = 0.05F;
float soot = PermaSyncHandler.pollution[PollutionType.SOOT.ordinal()];
if(Math.abs(renderSoot - soot) < step) {
renderSoot = soot;
} else if(renderSoot < soot) {
renderSoot += step;
} else if(renderSoot > soot) {
renderSoot -= step;
}
}
}
@SubscribeEvent(priority = EventPriority.LOW)
public void thickenFog(FogDensity event) {
float soot = renderSoot - 35;
if(soot > 0) {
//event.density = Math.min((soot - 5) * 0.01F, 0.5F);
float farPlaneDistance = (float) (Minecraft.getMinecraft().gameSettings.renderDistanceChunks * 16);
float fogDist = farPlaneDistance / (1 + soot * 0.05F);
GL11.glFogf(GL11.GL_FOG_START, 0);
GL11.glFogf(GL11.GL_FOG_END, fogDist);
if(GLContext.getCapabilities().GL_NV_fog_distance) {
GL11.glFogi(34138, 34139);
}
//GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP);
//GL11.glFogf(GL11.GL_FOG_DENSITY, 2F);
event.setCanceled(true);
}
}
@SubscribeEvent(priority = EventPriority.LOW)
public void tintFog(FogColors event) {
float soot = renderSoot - 35;
float sootColor = 0.15F;
float sootReq = 100F;
if(soot > 0) {
float interp = Math.min(soot / sootReq, 1F);
event.red = event.red * (1 - interp) + sootColor * interp;
event.green = event.green * (1 - interp) + sootColor * interp;
event.blue = event.blue * (1 - interp) + sootColor * interp;
}
}
}

View File

@ -1331,6 +1331,10 @@ public class ResourceManager {
public static final IModelCustom splitter = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/splitter.obj"));
public static final IModelCustom rail_narrow_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_narrow.obj"));
public static final IModelCustom rail_narrow_curve = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_narrow_bend.obj"));
public static final IModelCustom rail_standard_straight = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard.obj"));
public static final IModelCustom rail_standard_curve = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_bend.obj"));
public static final IModelCustom rail_standard_ramp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rail_standard_ramp.obj"));
public static final IModelCustom capacitor = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/capacitor.obj"));
public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj"));
public static final IModelCustom charge_c4 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_c4.obj"));

View File

@ -5,6 +5,9 @@ import java.util.HashSet;
import java.util.List;
import com.hbm.handler.ImpactWorldHandler;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionData;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.potion.HbmPotion;
import com.hbm.saveddata.TomSaveData;
@ -21,6 +24,7 @@ import net.minecraft.world.World;
public class PermaSyncHandler {
public static HashSet<Integer> boykissers = new HashSet();
public static float[] pollution = new float[PollutionType.values().length];
public static void writePacket(ByteBuf buf, World world, EntityPlayerMP player) {
@ -42,6 +46,14 @@ public class PermaSyncHandler {
buf.writeShort((short) ids.size());
for(Integer i : ids) buf.writeInt(i);
/// SHITTY MEMES ///
/// POLLUTION ///
PollutionData pollution = PollutionHandler.getPollutionData(world, (int) Math.floor(player.posX), (int) Math.floor(player.posY), (int) Math.floor(player.posZ));
if(pollution == null) pollution = new PollutionData();
for(int i = 0; i < PollutionType.values().length; i++) {
buf.writeFloat(pollution.pollution[i]);
}
/// POLLUTION ///
}
public static void readPacket(ByteBuf buf, World world, EntityPlayer player) {
@ -58,5 +70,11 @@ public class PermaSyncHandler {
int ids = buf.readShort();
for(int i = 0; i < ids; i++) boykissers.add(buf.readInt());
/// SHITTY MEMES ///
/// POLLUTION ///
for(int i = 0; i < PollutionType.values().length; i++) {
pollution[i] = buf.readFloat();
}
/// POLLUTION ///
}
}

View File

@ -0,0 +1,89 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.machine.MachineCapacitor;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.WavefrontObject;
public class RenderCapacitor implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glPushMatrix();
Tessellator tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(1, 1, 1);
MachineCapacitor capacitor = (MachineCapacitor) block;
tessellator.startDrawingQuads();
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "Top", capacitor.iconTop, tessellator, 0, false);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "Side", capacitor.iconSide, tessellator, 0, false);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "Bottom", capacitor.iconBottom, tessellator, 0, false);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "InnerTop", capacitor.iconInnerTop, tessellator, 0, false);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "InnerSide", capacitor.iconInnerSide, tessellator, 0, false);
tessellator.draw();
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
Tessellator tessellator = Tessellator.instance;
MachineCapacitor capacitor = (MachineCapacitor) block;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
float flip = 0;
float rotation = 0;
int meta = world.getBlockMetadata(x, y, z);
if(meta == 0)
flip = (float)Math.PI;
if(meta == 2)
rotation = 90F / 180F * (float) Math.PI;
if(meta == 3)
rotation = 270F / 180F * (float) Math.PI;
if(meta == 4)
rotation = 180F / 180F * (float)Math.PI;
if(rotation != 0F || meta == 5)
flip = (float)Math.PI * 0.5F;
tessellator.addTranslation(x + 0.5F, y + 0.5F, z + 0.5F);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "Top", capacitor.iconTop, tessellator, rotation, flip, true);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "Side", capacitor.iconSide, tessellator, rotation, flip, true);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "Bottom", capacitor.iconBottom, tessellator, rotation, flip, true);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "InnerTop", capacitor.iconInnerTop, tessellator, rotation, flip, true);
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.capacitor, "InnerSide", capacitor.iconInnerSide, tessellator, rotation, flip, true);
tessellator.addTranslation(-x - 0.5F, -y - 0.5F, -z - 0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return MachineCapacitor.renderID;
}
}

View File

@ -0,0 +1,70 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.rail.RailStandardCurve;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.WavefrontObject;
public class RenderStandardCurveRail implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glPushMatrix();
Tessellator tessellator = Tessellator.instance;
GL11.glScaled(0.2, 0.2, 0.2);
GL11.glTranslated(2.5, -0.0625, -1.5);
GL11.glRotated(90, 0, 1, 0);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
int meta = world.getBlockMetadata(x, y, z);
if(meta < 12) return true;
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
float rotation = 0;
if(meta == 15)
rotation = 90F / 180F * (float) Math.PI;
if(meta == 12)
rotation = 180F / 180F * (float) Math.PI;
if(meta == 14)
rotation = 270F / 180F * (float) Math.PI;
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_curve, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return RailStandardCurve.renderID;
}
}

View File

@ -0,0 +1,80 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.rail.RailStandardRamp;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.WavefrontObject;
public class RenderStandardRampRail implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glPushMatrix();
Tessellator tessellator = Tessellator.instance;
GL11.glTranslated(0, -0.0625, 0);
GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(0.3, 0.3, 0.3);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_ramp, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
int meta = world.getBlockMetadata(x, y, z);
if(meta < 12) return true;
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
float rotation = 0;
if(meta == 15)
rotation = 90F / 180F * (float) Math.PI;
if(meta == 12)
rotation = 180F / 180F * (float) Math.PI;
if(meta == 14)
rotation = 270F / 180F * (float) Math.PI;
if(meta == 12) tessellator.addTranslation(0.5F, 0F, 0F);
if(meta == 13) tessellator.addTranslation(-0.5F, 0F, 0F);
if(meta == 14) tessellator.addTranslation(0F, 0F, -0.5F);
if(meta == 15) tessellator.addTranslation(0F, 0F, 0.5F);
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_ramp, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
if(meta == 12) tessellator.addTranslation(-0.5F, 0F, 0F);
if(meta == 13) tessellator.addTranslation(0.5F, 0F, 0F);
if(meta == 14) tessellator.addTranslation(0F, 0F, 0.5F);
if(meta == 15) tessellator.addTranslation(0F, 0F, -0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return RailStandardRamp.renderID;
}
}

View File

@ -0,0 +1,75 @@
package com.hbm.render.block;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.rail.RailStandardStraight;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.obj.WavefrontObject;
public class RenderStandardStraightRail implements ISimpleBlockRenderingHandler {
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
GL11.glPushMatrix();
Tessellator tessellator = Tessellator.instance;
GL11.glTranslated(0, -0.0625, 0);
GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(0.3, 0.3, 0.3);
tessellator.startDrawingQuads();
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_straight, block.getIcon(1, 0), tessellator, 0, false);
tessellator.draw();
GL11.glPopMatrix();
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
int meta = world.getBlockMetadata(x, y, z);
if(meta < 12) return true;
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
tessellator.setColorOpaque_F(1, 1, 1);
float rotation = 0;
if(meta == 14 || meta == 15) rotation = 90F / 180F * (float) Math.PI;
if(meta == 12) tessellator.addTranslation(0.5F, 0F, 0F);
if(meta == 13) tessellator.addTranslation(-0.5F, 0F, 0F);
if(meta == 14) tessellator.addTranslation(0F, 0F, -0.5F);
if(meta == 15) tessellator.addTranslation(0F, 0F, 0.5F);
tessellator.addTranslation(x + 0.5F, y, z + 0.5F);
ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.rail_standard_straight, block.getIcon(1, 0), tessellator, rotation, true);
tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F);
if(meta == 12) tessellator.addTranslation(-0.5F, 0F, 0F);
if(meta == 13) tessellator.addTranslation(0.5F, 0F, 0F);
if(meta == 14) tessellator.addTranslation(0F, 0F, 0.5F);
if(meta == 15) tessellator.addTranslation(0F, 0F, -0.5F);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
@Override
public int getRenderId() {
return RailStandardStraight.renderID;
}
}

View File

@ -2,10 +2,15 @@ package com.hbm.render.entity.item;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
public class RenderTrainCargoTramTrailer extends Render {
@ -31,6 +36,76 @@ public class RenderTrainCargoTramTrailer extends Render {
ResourceManager.train_cargo_tram_trailer.renderAll();
GL11.glEnable(GL11.GL_CULL_FACE);
int slots = entity.getDataWatcher().getWatchableObjectInt(10);
if(slots > 0) {
EntityItem dummy = new EntityItem(entity.worldObj, 0, 0, 0, new ItemStack(ModBlocks.crate));
dummy.hoverStart = 0.0F;
RenderItem.renderInFrame = true;
double scale = 2;
GL11.glScaled(scale, scale, scale);
if(slots <= 5) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.375D, 0.0D, 0.0F, 0.0F);
} else if(slots <= 10) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.1D, 0.375D, 0.25D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.1D, 0.375D, -0.25D, 0.0F, 0.0F);
} else if(slots <= 15) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.1D, 0.375D, 0.0D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.1D, 0.375D, 0.375D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.1D, 0.375D, -0.375D, 0.0F, 0.0F);
} else if(slots <= 20) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.3D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, -0.2D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, 0.2D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.3D, 0.0F, 0.0F);
} else if(slots <= 25) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.6D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.0D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, -0.5D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, 0.2D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.3D, 0.0F, 0.0F);
} else if(slots <= 30) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.6D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.0D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, -0.5D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, 0.5D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.1D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.6D, 0.0F, 0.0F);
} else if(slots <= 35) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.4D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.0D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, -0.4D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, 0.3D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.1D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.5D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.6875D, -0.25D, 0.0F, 0.0F);
} else if(slots <= 40) {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.4D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.0D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, -0.4D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, 0.3D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.1D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.5D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.6875D, -0.25D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.6875D, 0.15D, 0.0F, 0.0F);
} else {
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.4D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, 0.0D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.2D, 0.375D, -0.4D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, 0.3D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.1D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.2D, 0.375D, -0.5D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.6875D, -0.25D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, 0.0D, 0.6875D, 0.15D, 0.0F, 0.0F);
RenderManager.instance.renderEntityWithPosYaw(dummy, -0.1D, 0.375D, 0.8D, 0.0F, 0.0F);
}
RenderItem.renderInFrame = false;
}
GL11.glPopMatrix();
}

View File

@ -20,8 +20,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
public class RendererObjTester extends TileEntitySpecialRenderer {

View File

@ -7,6 +7,8 @@ import java.util.List;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.container.ContainerCrucible;
import com.hbm.inventory.gui.GUICrucible;
import com.hbm.inventory.material.MaterialShapes;
@ -169,6 +171,8 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord, zCoord + 0.5D + dir.offsetZ * 1.875D), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 1, zCoord + 0.5, 50));
}
PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND / 2F);
}
/* pour recipe stack */
@ -207,6 +211,8 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord, zCoord + 0.5D + dir.offsetZ * 1.875D), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 1, zCoord + 0.5, 50));
}
PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND / 2F);
}
/* clean up stacks */

View File

@ -2,6 +2,8 @@ package com.hbm.tileentity.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.MachineDiFurnace;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.container.ContainerDiFurnace;
import com.hbm.inventory.gui.GUIDiFurnace;
import com.hbm.inventory.recipes.BlastFurnaceRecipes;
@ -212,6 +214,8 @@ public class TileEntityDiFurnace extends TileEntityMachineBase implements IGUIPr
fuel = 0;
}
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * (extension ? 3 : 1));
} else {
progress = 0;
}

View File

@ -1,6 +1,8 @@
package com.hbm.tileentity.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.module.ModuleBurnTime;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
@ -74,6 +76,7 @@ public abstract class TileEntityFireboxBase extends TileEntityMachineBase implem
if(this.heatEnergy < getMaxHeat()) {
burnTime--;
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 3);
}
this.wasOn = true;

View File

@ -2,6 +2,8 @@ package com.hbm.tileentity.machine;
import java.util.List;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.container.ContainerFurnaceCombo;
import com.hbm.inventory.fluid.Fluids;
@ -119,6 +121,8 @@ public class TileEntityFurnaceCombination extends TileEntityMachineBase implemen
if(worldObj.getTotalWorldTime() % 10 == 0) this.worldObj.playSoundEffect(this.xCoord, this.yCoord + 1, this.zCoord, "hbm:weapon.flamethrowerShoot", 0.25F, 0.5F);
}
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 3);
} else {
this.progress = 0;
}

View File

@ -1,5 +1,7 @@
package com.hbm.tileentity.machine;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.UpgradeManager;
import com.hbm.inventory.container.ContainerFurnaceIron;
import com.hbm.inventory.gui.GUIFurnaceIron;
@ -104,6 +106,7 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI
this.progress = 0;
this.markDirty();
}
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND);
} else {
this.progress = 0;
}

View File

@ -2,6 +2,8 @@ package com.hbm.tileentity.machine;
import java.util.List;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.container.ContainerFurnaceSteel;
import com.hbm.inventory.gui.GUIFurnaceSteel;
import com.hbm.tileentity.IGUIProvider;
@ -67,6 +69,7 @@ public class TileEntityFurnaceSteel extends TileEntityMachineBase implements IGU
progress[i] += burn;
this.heat -= burn;
this.wasOn = true;
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 2);
}
lastItems[i] = slots[i];

View File

@ -1,5 +1,7 @@
package com.hbm.tileentity.machine;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.inventory.container.ContainerOilburner;
@ -71,6 +73,8 @@ public class TileEntityHeaterOilburner extends TileEntityMachineBase implements
this.heatEnergy += heat * toBurn;
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * burnRate * 0.5F);
shouldCool = false;
}
}

View File

@ -3,8 +3,6 @@ package com.hbm.tileentity.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidSource;
import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.Fluids;

View File

@ -5,6 +5,8 @@ import java.io.IOException;
import com.google.gson.JsonObject;
import com.google.gson.stream.JsonWriter;
import com.hbm.blocks.machine.MachineCoal;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
import com.hbm.inventory.FluidContainerRegistry;
@ -290,6 +292,8 @@ public class TileEntityMachineCoal extends TileEntityLoadedBase implements ISide
if(burnTime > 0) {
burnTime--;
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND);
if(tank.getFill() > 0) {
tank.setFill(tank.getFill() - 1);

View File

@ -1,6 +1,8 @@
package com.hbm.tileentity.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerCombustionEngine;
import com.hbm.inventory.fluid.FluidType;
@ -84,6 +86,8 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachineBase imp
this.power += toBurn * (trait.getCombustionEnergy() / 10_000D) * eff;
fill -= toBurn;
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * setting * 0.1F);
if(toBurn > 0) {
wasOn = true;
}

View File

@ -166,7 +166,7 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl
power = Library.chargeTEFromItems(slots, 0, power, maxPower);
this.updateConnections();
if(worldObj.getTotalWorldTime() % 40 == 0) this.updateConnections();
this.consumption = 50;
this.maxProgress = 100;

View File

@ -55,7 +55,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
return true;
break;
case 2:
if (stack.getItem() == ModItems.redcoil_capacitor)
if (stack.getItem() == ModItems.redcoil_capacitor || stack.getItem() == ModItems.euphemium_capacitor)
return true;
break;
case 3:
@ -89,7 +89,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
@Override
public boolean canExtractItem(int i, ItemStack stack, int j) {
if (i == 2 && stack.getItem() != null && stack.getItem() == ModItems.redcoil_capacitor && ItemCapacitor.getDura(stack) <= 0) {
if (i == 2 && stack.getItem() != null && (stack.getItem() == ModItems.redcoil_capacitor && ItemCapacitor.getDura(stack) <= 0) || stack.getItem() == ModItems.euphemium_capacitor) {
return true;
}
@ -115,8 +115,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
public boolean canProcess() {
if (power >= 4990000 && slots[0] != null && MachineRecipes.mODE(slots[0], OreDictManager.U.ingot()) && slots[2] != null
&& slots[2].getItem() == ModItems.redcoil_capacitor
&& ItemCapacitor.getDura(slots[2]) > 0
&& (slots[2].getItem() == ModItems.redcoil_capacitor && ItemCapacitor.getDura(slots[2]) > 0 || slots[2].getItem() == ModItems.euphemium_capacitor)
&& (slots[1] == null || (slots[1] != null && slots[1].getItem() == VersatileConfig.getTransmutatorItem()
&& slots[1].stackSize < slots[1].getMaxStackSize()))) {
return true;
@ -146,7 +145,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
} else {
slots[1].stackSize++;
}
if (slots[2] != null) {
if (slots[2] != null && slots[2].getItem() == ModItems.redcoil_capacitor) {
ItemCapacitor.setDura(slots[2], ItemCapacitor.getDura(slots[2]) - 1);
}
@ -195,6 +194,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
}
}
@Override
public AudioWrapper createAudioLoop() {
return MainRegistry.proxy.getLoopedSound("hbm:weapon.tauChargeLoop", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F);
}
@ -205,6 +205,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
this.trySubscribe(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir);
}
@Override
public void onChunkUnload() {
if(audio != null) {
@ -213,6 +214,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB
}
}
@Override
public void invalidate() {
super.invalidate();

View File

@ -1,5 +1,7 @@
package com.hbm.tileentity.machine.oil;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.container.ContainerMachineCoker;
import com.hbm.inventory.fluid.Fluids;
@ -98,6 +100,8 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl
tanks[0].setFill(tanks[0].getFill() - fillReq);
}
}
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 20);
}
for(DirPos pos : getConPos()) {

View File

@ -2,6 +2,8 @@ package com.hbm.tileentity.machine.oil;
import java.util.List;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
@ -157,6 +159,8 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements
if(worldObj.getTotalWorldTime() % 3 == 0)
this.worldObj.playSoundEffect(this.xCoord, this.yCoord + 11, this.zCoord, "hbm:weapon.flamethrowerShoot", 1.5F, 0.75F);
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 5);
}
}
}

View File

@ -7,6 +7,8 @@ import java.util.Random;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
@ -320,6 +322,8 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements
this.markDirty();
}
if(worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 5);
this.power -= 5;
}

View File

@ -4,7 +4,6 @@ import java.util.List;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.MainRegistry;
import com.hbm.util.ContaminationUtil;
import com.hbm.util.ContaminationUtil.ContaminationType;
import com.hbm.util.ContaminationUtil.HazardType;
@ -12,7 +11,6 @@ import com.hbm.util.ContaminationUtil.HazardType;
import api.hbm.block.IPileNeutronReceiver;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Vec3;

View File

@ -21,6 +21,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
private int stack = 0;
public boolean output = false;
private int capacity;
public int redstone = 0;
@SideOnly(Side.CLIENT) public ItemStack type;
@ -43,6 +44,13 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
if(!worldObj.isRemote) {
int newRed = this.getStockpile() * 15 / this.capacity;
if(newRed != this.redstone) {
this.redstone = newRed;
this.markDirty();
}
if(slots[0] != null && slots[0].getItem() == ModItems.fluid_barrel_infinite) {
this.stack = this.getCapacity();
}
@ -132,6 +140,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
this.stack = nbt.getInteger("stack");
this.output = nbt.getBoolean("output");
this.capacity = nbt.getInteger("capacity");
this.redstone = nbt.getByte("redstone");
if(this.capacity <= 0) {
this.capacity = 10_000;
@ -144,6 +153,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa
nbt.setInteger("stack", stack);
nbt.setBoolean("output", output);
nbt.setInteger("capacity", capacity);
nbt.setByte("redstone", (byte) redstone);
}
@Override

View File

@ -27,6 +27,7 @@ public class BedrockOre {
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.IRON, 1), WorldConfig.bedrockIronSpawn);
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.COPPER, 1), WorldConfig.bedrockCopperSpawn);
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.BORAX, 3, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockBoraxSpawn);
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.CHLOROCALCITE, 3, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockChlorocalciteSpawn);
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.ASBESTOS, 2), WorldConfig.bedrockAsbestosSpawn);
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.NIOBIUM, 2, new FluidStack(Fluids.ACID, 500)), WorldConfig.bedrockNiobiumSpawn);
registerBedrockOre(new BedrockOreDefinition(EnumBedrockOre.TITANIUM, 2, new FluidStack(Fluids.SULFURIC_ACID, 500)), WorldConfig.bedrockTitaniumSpawn);

View File

@ -4,11 +4,9 @@ import java.util.Random;
import com.hbm.blocks.BlockEnums.EnumBiomeType;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockStalagmite;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.BiomeGenBase.TempCategory;

View File

@ -18,3 +18,6 @@ public net.minecraft.client.settings.KeyBinding field_151474_i # pr
# GuiMainMenu
public net.minecraft.client.gui.GuiMainMenu field_73975_c # splashText
# EntityLivingBase
public net.minecraft.entity.EntityLivingBase field_82180_bT # previousEquipment

View File

@ -942,11 +942,14 @@ item.ammo_9mm_du.name=9mm Patrone (DU)
item.ammo_9mm_rocket.name=9mm Rakete
item.ammo_arty.name=16" Artilleriegranate
item.ammo_arty_cargo.name=16" Artilleriegranate (Expresslieferung)
item.ammo_arty_chlorine.name=16" Artilleriegranate (Chlorgas)
item.ammo_arty_classic.name=16" Artilleriegranate (Das Factorio-Spezial)
item.ammo_arty_he.name=16" Artilleriegranate (HE)
item.ammo_arty_mini_nuke.name=16" Mikroatomgranate
item.ammo_arty_mini_nuke_multi.name=16" Mehrfach-Mikroatomgranate
item.ammo_arty_mustard_gas.name=16" Artilleriegranate (Senfgas)
item.ammo_arty_nuke.name=16" Atomare Artilleriegranate
item.ammo_arty_phosgene.name=16" Artilleriegranate (Phosgen)
item.ammo_arty_phosphorus.name=16" Phosphor-Artilleriegranate
item.ammo_arty_phosphorus_multi.name=16" Mehrfach-Phosphor-Artilleriegranate
item.ammo_cell.name=Energiezelle
@ -2242,6 +2245,7 @@ item.mold_base.name=Blanke Gussform
item.mold.name=Gussform
item.morning_glory.name=Zaunwinde
item.motor.name=Motor
item.motor_bismuth.name=Bismuth-Motor
item.motor_desh.name=Desh-Motor
item.mp_c_1.name=Stufe 1 Zielsucher-Schaltkreis
item.mp_c_2.name=Stufe 2 Zielsucher-Schaltkreis
@ -2470,6 +2474,7 @@ item.oil_tar.wax.name=Chloriertes Petroleumwachs
item.oil_tar.wood.name=Holzteer
item.ore.asbestos=Asbest
item.ore.borax=Borax
item.ore.chlorocalcite=Chlorokalzit
item.ore.copper=Kupfer
item.ore.gold=Gold
item.ore.iron=Eisen
@ -2642,6 +2647,7 @@ item.powder_caesium.name=Caesiumstaub
item.powder_calcium.name=Kalziumstaub
item.powder_cerium.name=Cerstaub
item.powder_cerium_tiny.name=Kleiner Haufen Cerstaub
item.powder_chlorocalcite.name=Chlorokalzit
item.powder_chlorophyte.name=Grünalgenstaub
item.powder_cloud.name=Wolkenrückstände
item.powder_co60.name=Kobalt-60-Staub
@ -3429,6 +3435,7 @@ tile.block_beryllium.name=Berylliumblock
tile.block_bismuth.name=Bismutblock
tile.block_boron.name=Borblock
tile.block_c4.name=C4-Block
tile.block_cadmium.name=Cadmiumblock
tile.block_cap_fritz.name=Fritz-Kola Kronkorkenblock
tile.block_cap_korl.name=Korl Kronkorkenblock
tile.block_cap_nuka.name=Nuka Kronkorkenblock
@ -3437,6 +3444,7 @@ tile.block_cap_rad.name=S~Cola RAD Kronkorkenblock
tile.block_cap_sparkle.name=S~Cola Kronkorkenblock
tile.block_cap_star.name=Sunset Sarsaparilla Kronkorkenblock
tile.block_cap_sunset.name=Sunset Sarsaparilla Sternkronkorkenblock
tile.block_cdalloy.name=Cadmiumstahlblock
tile.block_cobalt.name=Kobaltblock
tile.block_coke.coal.name=Kohlekoksblock
tile.block_coke.lignite.name=Braunkohlekoksblock
@ -3504,6 +3512,7 @@ tile.block_starmetal.name=§9Sternenmetallblock§r
tile.block_steel.name=Stahlblock
tile.block_sulfur.name=Schwefelblock
tile.block_tantalium.name=Tantalblock
tile.block_tcalloy.name=Technetiumstahlblock
tile.block_thorium.name=Thorium-232-Block
tile.block_thorium_fuel.name=Thoriumkernbrennstoffblock
tile.block_titanium.name=Titanblock

View File

@ -1522,11 +1522,14 @@ item.ammo_9mm_du.name=9mm Round (DU)
item.ammo_9mm_rocket.name=9mm Rocket
item.ammo_arty.name=16" Artillery Shell
item.ammo_arty_cargo.name=16" Express Delivery Artillery Shell
item.ammo_arty_chlorine.name=16" Chlorine Gas Artillery Shell
item.ammo_arty_classic.name=16" Artillery Shell (The Factorio Special)
item.ammo_arty_he.name=16" High Explosive Artillery Shell
item.ammo_arty_mini_nuke.name=16" Micro Nuclear Artillery Shell
item.ammo_arty_mini_nuke_multi.name=16" Multi Micro Nuclear Artillery Shell
item.ammo_arty_mustard_gas.name=16" Mustard Gas Artillery Shell
item.ammo_arty_nuke.name=16" Nuclear Artillery Shell
item.ammo_arty_phosgene.name=16" Phosgene Artillery Shell
item.ammo_arty_phosphorus.name=16" Phosphorus Shell
item.ammo_arty_phosphorus_multi.name=16" Multi Phosphorus Shell
item.ammo_cell.name=Energy Cell
@ -2305,6 +2308,8 @@ item.energy_core.name=Makeshift Energy Core
item.entanglement_kit.name=Entanglement Kit
item.entanglement_kit.desc=Teleporter crafting item.$Enables dimension-shifting via a$beryllium-enhanced resource scanner.
item.euphemium_boots.name=Euphemium Boots
item.euphemium_capacitor.name=Euphemium Capacitor
item.euphemium_capacitor.desc=Permits passive dispersion of accumulated positive energy.
item.euphemium_helmet.name=Euphemium Helmet
item.euphemium_kit.name=Euphemium Kit
item.euphemium_legs.name=Euphemium Leggings
@ -2913,6 +2918,7 @@ item.mold_base.name=Blank Foundry Mold
item.mold.name=Foundry Mold
item.morning_glory.name=Morning Glory
item.motor.name=Motor
item.motor_bismuth.name=Bismuth Motor
item.motor_desh.name=Desh Motor
item.mp_c_1.name=Tier 1 Missile Targeting Circuit
item.mp_c_2.name=Tier 2 Missile Targeting Circuit
@ -3149,6 +3155,7 @@ item.oil_tar.wax.name=Chlorinated Petroleum Wax
item.oil_tar.wood.name=Wood Tar
item.ore.asbestos=Asbestos
item.ore.borax=Borax
item.ore.chlorocalcite=Chlorocalcite
item.ore.copper=Copper
item.ore.gold=Gold
item.ore.iron=Iron
@ -3367,6 +3374,7 @@ item.powder_caesium.name=Caesium Powder
item.powder_calcium.name=Calcium Powder
item.powder_cerium.name=Cerium Powder
item.powder_cerium_tiny.name=Tiny Pile of Cerium Powder
item.powder_chlorocalcite.name=Chlorocalcite
item.powder_chlorophyte.name=Chlorophyte Powder
item.powder_cloud.name=Cloud Residue
item.powder_co60.name=Cobalt-60 Powder
@ -4237,6 +4245,7 @@ tile.block_beryllium.name=Block of Beryllium
tile.block_bismuth.name=Block of Bismuth
tile.block_boron.name=Block of Boron
tile.block_c4.name=Block of C-4
tile.block_cadmium.name=Block of Cadmium
tile.block_cap_fritz.name=Block of Fritz Cola Bottle Caps
tile.block_cap_korl.name=Block of Korl Bottle Caps
tile.block_cap_nuka.name=Block of Nuka Cola Bottle Caps
@ -4245,6 +4254,7 @@ tile.block_cap_rad.name=Block of S~Cola RAD Bottle Caps
tile.block_cap_sparkle.name=Block of S~Cola Bottle Caps
tile.block_cap_star.name=Block of Sunset Sarsaparilla Star Caps
tile.block_cap_sunset.name=Block of Sunset Sarsaparilla Bottle Caps
tile.block_cdalloy.name=Block of Cadmium Steel
tile.block_cobalt.name=Block of Cobalt
tile.block_coke.coal.name=Block of Coal Coke
tile.block_coke.lignite.name=Block of Lignite Coke
@ -4316,6 +4326,7 @@ tile.block_starmetal.name=§9Block of Starmetal§r
tile.block_steel.name=Block of Steel
tile.block_sulfur.name=Block of Sulfur
tile.block_tantalium.name=Block of Tantalium
tile.block_tcalloy.name=Block of Technetium Steel
tile.block_thorium.name=Block of Thorium-232
tile.block_thorium_fuel.name=Block of Thorium Fuel
tile.block_titanium.name=Block of Titanium
@ -5010,12 +5021,15 @@ tile.reinforced_brick.name=Reinforced Stone
tile.reinforced_brick_stairs.name=Reinforced Stone Stairs
tile.reinforced_ducrete.name=Reinforced Ducrete
tile.reinforced_glass.name=Reinforced Glass
tile.reinforced_glass_pane.name=Reinforced Glass Pane
tile.reinforced_lamp_off.name=Reinforced Lamp
tile.reinforced_lamp_on.name=Reinforced Lamp
tile.reinforced_light.name=Reinforced Glowstone
tile.reinforced_sand.name=Reinforced Sandstone
tile.reinforced_stone.name=Dense Stone
tile.reinforced_stone_stairs.name=Dense Stone Stairs
tile.reinforced_laminate.name=Reinforced Laminate
tile.reinforced_laminate_pane.name=Reinforced Laminate Pane
tile.rejuvinator.name=Rejuvination Device
tile.residue.name=Cloud Residue
tile.safe.name=Safe

View File

@ -2814,6 +2814,9 @@ tile.block_smore.name=Блок с'мора
tile.block_niobium.name=Блок ниобия
tile.block_bakelite.name=Блок бакелита
tile.block_rubber.name=Блок резины
tile.block_cadmium.name=Кадмиевый блок
tile.block_cdalloy.name=Блок кадмиевой стали
tile.block_tcalloy.name=Блок технециевой стали
tile.block_ra226.name=Блок радия-226
tile.block_u233.name=Блок урана-233
@ -2915,6 +2918,7 @@ tile.ore_bedrock.name=Бедроковая руда
item.ore.asbestos=Асбестовая
item.ore.borax=Буровая
item.ore.chlorocalcite=Хлоркальцитовая
item.ore.copper=Медная
item.ore.gold=Золотая
item.ore.iron=Железная
@ -3015,6 +3019,9 @@ tile.plant_tall.weed.name=Конопля
tile.stone_cracked.name=Треснутый камень
tile.reinforced_brick.name=Усиленный камень
tile.reinforced_glass.name=Усиленное стекло
tile.reinforced_glass_pane.name=Усиленная стеклянная панель
tile.reinforced_laminate.name=Усиленный ламинат
tile.reinforced_laminate_pane.name=Усиленная ламинатная панель
tile.reinforced_sand.name=Усиленный песчаник
tile.reinforced_light.name=Усиленный светящийся камень
tile.reinforced_lamp_off.name=Усиленная лампа
@ -3256,6 +3263,7 @@ item.fallout.name=Куча радиоактивных осадков
item.powder_zirconium.name=Циркониевый порошок
item.powder_boron.name=Борный порошок
item.powder_borax.name=Бура
item.powder_chlorocalcite.name=Хлоркальцит
item.powder_boron_tiny.name=Кучка борного порошка
item.powder_at209.name=Порошок астата-209
item.powder_au198.name=Порошок золота-198
@ -3395,6 +3403,7 @@ item.tank_steel.name=Стальной бак
tile.barrel_tcalloy.name=Бочка из технециевой стали
item.motor.name=Мотор
item.motor_desh.name=Деш-мотор
item.motor_bismuth.name=Висмутовый мотор
item.centrifuge_element.name=Элемент центрифуги
item.centrifuge_tower.name=Башня центрифуги
item.reactor_core.name=Активная зона реактора-размножителя

View File

@ -0,0 +1,128 @@
# Blender v2.79 (sub 0) OBJ File: 'capacitor.blend'
# www.blender.org
o InnerSide
v -0.437500 -0.250000 0.437500
v -0.437500 -0.250000 -0.437500
v 0.437500 -0.250000 0.437500
v 0.437500 -0.250000 -0.437500
v -0.437500 0.437500 0.437500
v -0.437500 0.437500 -0.437500
v 0.437500 0.437500 -0.437500
v 0.437500 0.437500 0.437500
vt 0.937500 0.250000
vt 0.062500 0.937500
vt 0.062500 0.250000
vt 0.062500 0.937500
vt 0.937500 0.250000
vt 0.937500 0.937500
vt 0.937500 0.250000
vt 0.062500 0.937500
vt 0.062500 0.250000
vt 0.062500 0.937500
vt 0.937500 0.250000
vt 0.937500 0.937500
vt 0.937500 0.937500
vt 0.062500 0.250000
vt 0.937500 0.937500
vt 0.062500 0.250000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
s off
f 3/1/1 5/2/1 1/3/1
f 2/4/2 7/5/2 4/6/2
f 4/7/3 8/8/3 3/9/3
f 1/10/4 6/11/4 2/12/4
f 3/1/1 8/13/1 5/2/1
f 2/4/2 6/14/2 7/5/2
f 4/7/3 7/15/3 8/8/3
f 1/10/4 5/16/4 6/11/4
o InnerTop
v -0.437500 0.437500 0.437500
v -0.437500 0.437500 -0.437500
v 0.437500 0.437500 -0.437500
v 0.437500 0.437500 0.437500
vt 0.937500 0.937500
vt 0.062500 0.062500
vt 0.937500 0.062500
vt 0.062500 0.937500
vn 0.0000 1.0000 0.0000
s off
f 10/17/5 12/18/5 11/19/5
f 10/17/5 9/20/5 12/18/5
o Side
v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 0.500000
v 0.500000 -0.500000 -0.500000
v 0.500000 0.500000 -0.500000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 1.000000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
s off
f 14/21/6 15/22/6 13/23/6
f 16/24/7 19/25/7 15/26/7
f 20/27/8 17/28/8 19/29/8
f 18/30/9 13/31/9 17/32/9
f 14/21/6 16/33/6 15/22/6
f 16/24/7 20/34/7 19/25/7
f 20/27/8 18/35/8 17/28/8
f 18/30/9 14/36/9 13/31/9
o Top
v -0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 0.500000
v 0.500000 0.500000 -0.500000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vn 0.0000 1.0000 0.0000
s off
f 22/37/10 23/38/10 24/39/10
f 22/37/10 21/40/10 23/38/10
o Bottom
v -0.500000 -0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 0.500000
v 0.500000 -0.500000 -0.500000
v -0.500000 -0.250000 0.500000
v -0.500000 -0.250000 -0.500000
v 0.500000 -0.250000 0.500000
v 0.500000 -0.250000 -0.500000
vt 1.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
s off
f 28/41/11 25/42/11 26/43/11
f 30/44/12 31/45/12 32/46/12
f 28/41/11 27/47/11 25/42/11
f 30/44/12 29/48/12 31/45/12

View File

@ -0,0 +1,757 @@
# Blender v2.79 (sub 0) OBJ File: 'rail_standard_straight.blend'
# www.blender.org
o Plane.001
v 1.000000 0.062500 -0.187500
v 1.000000 0.062500 0.187500
v -1.000000 0.062500 0.187500
v -1.000000 0.062500 -0.187500
v -1.000000 0.000000 0.187500
v 1.000000 0.000000 0.187500
v -1.000000 0.000000 -0.187500
v 1.000000 0.000000 -0.187500
v -1.000000 0.000000 -0.812500
v 1.000000 0.000000 -0.812500
v -1.000000 0.000000 -1.187500
v 1.000000 0.000000 -1.187500
v -1.000000 0.000000 -1.812500
v 1.000000 0.000000 -1.812500
v -1.000000 0.000000 -2.187500
v 1.000000 0.000000 -2.187500
v -1.000000 0.000000 2.187500
v 1.000000 0.000000 2.187500
v -1.000000 0.000000 1.812500
v 1.000000 0.000000 1.812500
v -1.000000 0.000000 1.187500
v 1.000000 0.000000 1.187500
v -1.000000 0.000000 0.812500
v 1.000000 0.000000 0.812500
v -1.000000 0.062500 -1.187500
v -1.000000 0.062500 -0.812500
v 1.000000 0.062500 -0.812500
v 1.000000 0.062500 -1.187500
v -1.000000 0.062500 -2.187500
v -1.000000 0.062500 -1.812500
v 1.000000 0.062500 -1.812500
v 1.000000 0.062500 -2.187500
v -1.000000 0.062500 1.812500
v -1.000000 0.062500 2.187500
v 1.000000 0.062500 2.187500
v 1.000000 0.062500 1.812500
v -1.000000 0.062500 0.812500
v -1.000000 0.062500 1.187500
v 1.000000 0.062500 1.187500
v 1.000000 0.062500 0.812500
v -0.812500 0.062500 2.500000
v 0.812500 0.062500 2.500000
v -0.812500 0.062500 -2.500000
v 0.812500 0.062500 -2.500000
v -0.812500 0.187500 2.500000
v 0.812500 0.187500 2.500000
v -0.812500 0.187500 -2.500000
v 0.812500 0.187500 -2.500000
v 0.750000 0.062500 2.500000
v 0.750000 0.062500 -2.500000
v 0.750000 0.187500 2.500000
v 0.750000 0.187500 -2.500000
v -0.750000 0.062500 -2.500000
v -0.750000 0.062500 2.500000
v -0.750000 0.187500 -2.500000
v -0.750000 0.187500 2.500000
v 0.625000 0.062500 2.062500
v 0.937500 0.062500 2.062500
v 0.625000 0.062500 1.937500
v 0.937500 0.062500 1.937500
v 0.625000 0.125000 2.062500
v 0.937500 0.125000 2.062500
v 0.625000 0.125000 1.937500
v 0.937500 0.125000 1.937500
v -0.937500 0.062500 2.062500
v -0.625000 0.062500 2.062500
v -0.937500 0.062500 1.937500
v -0.625000 0.062500 1.937500
v -0.937500 0.125000 2.062500
v -0.625000 0.125000 2.062500
v -0.937500 0.125000 1.937500
v -0.625000 0.125000 1.937500
v 0.625000 0.062500 1.062500
v 0.937500 0.062500 1.062500
v 0.625000 0.062500 0.937500
v 0.937500 0.062500 0.937500
v 0.625000 0.125000 1.062500
v 0.937500 0.125000 1.062500
v 0.625000 0.125000 0.937500
v 0.937500 0.125000 0.937500
v -0.937500 0.062500 1.062500
v -0.625000 0.062500 1.062500
v -0.937500 0.062500 0.937500
v -0.625000 0.062500 0.937500
v -0.937500 0.125000 1.062500
v -0.625000 0.125000 1.062500
v -0.937500 0.125000 0.937500
v -0.625000 0.125000 0.937500
v 0.625000 0.062500 0.062500
v 0.937500 0.062500 0.062500
v 0.625000 0.062500 -0.062500
v 0.937500 0.062500 -0.062500
v 0.625000 0.125000 0.062500
v 0.937500 0.125000 0.062500
v 0.625000 0.125000 -0.062500
v 0.937500 0.125000 -0.062500
v -0.937500 0.062500 0.062500
v -0.625000 0.062500 0.062500
v -0.937500 0.062500 -0.062500
v -0.625000 0.062500 -0.062500
v -0.937500 0.125000 0.062500
v -0.625000 0.125000 0.062500
v -0.937500 0.125000 -0.062500
v -0.625000 0.125000 -0.062500
v 0.625000 0.062500 -0.937500
v 0.937500 0.062500 -0.937500
v 0.625000 0.062500 -1.062500
v 0.937500 0.062500 -1.062500
v 0.625000 0.125000 -0.937500
v 0.937500 0.125000 -0.937500
v 0.625000 0.125000 -1.062500
v 0.937500 0.125000 -1.062500
v -0.937500 0.062500 -0.937500
v -0.625000 0.062500 -0.937500
v -0.937500 0.062500 -1.062500
v -0.625000 0.062500 -1.062500
v -0.937500 0.125000 -0.937500
v -0.625000 0.125000 -0.937500
v -0.937500 0.125000 -1.062500
v -0.625000 0.125000 -1.062500
v 0.625000 0.062500 -1.937500
v 0.937500 0.062500 -1.937500
v 0.625000 0.062500 -2.062500
v 0.937500 0.062500 -2.062500
v 0.625000 0.125000 -1.937500
v 0.937500 0.125000 -1.937500
v 0.625000 0.125000 -2.062500
v 0.937500 0.125000 -2.062500
v -0.937500 0.062500 -1.937500
v -0.625000 0.062500 -1.937500
v -0.937500 0.062500 -2.062500
v -0.625000 0.062500 -2.062500
v -0.937500 0.125000 -1.937500
v -0.625000 0.125000 -1.937500
v -0.937500 0.125000 -2.062500
v -0.625000 0.125000 -2.062500
v -0.812500 0.062500 -1.500000
v -0.812500 0.062500 -0.500000
v -0.812500 0.062500 0.500000
v -0.812500 0.062500 1.500000
v 0.812500 0.062500 1.500000
v 0.812500 0.062500 0.500000
v 0.812500 0.062500 -0.500000
v 0.812500 0.062500 -1.500000
v -0.812500 0.187500 -1.500000
v -0.812500 0.187500 -0.500000
v -0.812500 0.187500 0.500000
v -0.812500 0.187500 1.500000
v 0.812500 0.187500 1.500000
v 0.812500 0.187500 0.500000
v 0.812500 0.187500 -0.500000
v 0.812500 0.187500 -1.500000
v 0.750000 0.062500 1.500000
v 0.750000 0.062500 0.500000
v 0.750000 0.062500 -0.500000
v 0.750000 0.062500 -1.500000
v 0.750000 0.187500 1.500000
v 0.750000 0.187500 0.500000
v 0.750000 0.187500 -0.500000
v 0.750000 0.187500 -1.500000
v -0.750000 0.062500 -1.500000
v -0.750000 0.062500 -0.500000
v -0.750000 0.062500 0.500000
v -0.750000 0.062500 1.500000
v -0.750000 0.187500 -1.500000
v -0.750000 0.187500 -0.500000
v -0.750000 0.187500 0.500000
v -0.750000 0.187500 1.500000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.500000 0.156250
vt 0.437500 0.656250
vt 0.437500 0.156250
vt 0.531250 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.531250 0.718750
vt 0.500000 0.656250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.406250 0.156250
vt 0.500000 0.656250
vt 0.531250 0.718750
vt 0.500000 0.718750
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.656250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.406250 0.156250
vt 0.406250 0.656250
vt 0.531250 0.718750
vt 0.500000 0.656250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.531250 0.718750
vt 0.500000 0.718750
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.500000 0.718750
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.500000 0.718750
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
s off
f 2/1/1 4/2/1 3/3/1
f 7/4/2 6/5/2 5/6/2
f 11/7/2 10/8/2 9/9/2
f 15/10/2 14/11/2 13/12/2
f 19/13/2 18/14/2 17/15/2
f 23/16/2 22/17/2 21/18/2
f 27/19/1 25/20/1 26/21/1
f 31/22/1 29/23/1 30/24/1
f 35/25/1 33/26/1 34/27/1
f 39/28/1 37/29/1 38/30/1
f 17/31/3 33/32/3 19/33/3
f 10/34/4 26/35/4 9/36/4
f 18/37/4 34/38/4 17/39/4
f 12/40/5 27/41/5 10/8/5
f 20/42/5 35/43/5 18/14/5
f 11/7/6 28/44/6 12/45/6
f 5/46/3 4/47/3 7/48/3
f 19/13/6 36/49/6 20/50/6
f 13/51/3 29/52/3 15/53/3
f 6/54/4 3/55/4 5/56/4
f 21/57/3 37/58/3 23/59/3
f 14/60/4 30/61/4 13/62/4
f 8/63/5 2/64/5 6/5/5
f 22/65/4 38/66/4 21/67/4
f 16/68/5 31/69/5 14/11/5
f 7/4/6 1/70/6 8/71/6
f 24/72/5 39/73/5 22/17/5
f 15/10/6 32/74/6 16/75/6
f 9/76/3 25/77/3 11/78/3
f 23/16/6 40/79/6 24/80/6
f 149/81/5 42/82/5 141/83/5
f 145/84/3 43/85/3 137/86/3
f 49/87/3 157/88/3 153/89/3
f 46/90/4 49/91/4 42/92/4
f 48/93/1 160/94/1 152/95/1
f 42/82/2 153/96/2 141/83/2
f 44/97/6 52/98/6 48/99/6
f 53/100/5 165/101/5 161/102/5
f 45/103/1 168/104/1 148/105/1
f 43/106/2 161/102/2 137/107/2
f 47/108/6 53/109/6 43/110/6
f 41/111/4 56/112/4 45/113/4
f 61/114/3 59/115/3 57/116/3
f 63/117/6 60/118/6 59/119/6
f 62/120/4 57/121/4 58/122/4
f 64/123/5 58/124/5 60/125/5
f 61/114/1 64/123/1 63/117/1
f 69/126/3 67/127/3 65/128/3
f 71/129/6 68/130/6 67/131/6
f 70/132/4 65/133/4 66/134/4
f 72/135/5 66/136/5 68/137/5
f 69/126/1 72/135/1 71/129/1
f 77/138/3 75/139/3 73/140/3
f 79/141/6 76/142/6 75/143/6
f 78/144/4 73/145/4 74/146/4
f 80/147/5 74/148/5 76/149/5
f 77/138/1 80/147/1 79/141/1
f 85/150/3 83/151/3 81/152/3
f 87/153/6 84/154/6 83/155/6
f 86/156/4 81/157/4 82/158/4
f 88/159/5 82/160/5 84/161/5
f 85/150/1 88/159/1 87/153/1
f 93/162/3 91/163/3 89/164/3
f 95/165/6 92/166/6 91/167/6
f 94/168/4 89/169/4 90/170/4
f 96/171/5 90/172/5 92/173/5
f 93/162/1 96/171/1 95/165/1
f 101/174/3 99/175/3 97/176/3
f 103/177/6 100/178/6 99/179/6
f 102/180/4 97/181/4 98/182/4
f 104/183/5 98/184/5 100/185/5
f 101/174/1 104/183/1 103/177/1
f 109/186/3 107/187/3 105/188/3
f 111/189/6 108/190/6 107/191/6
f 110/192/4 105/193/4 106/194/4
f 112/195/5 106/196/5 108/197/5
f 109/186/1 112/195/1 111/189/1
f 117/198/3 115/199/3 113/200/3
f 119/201/6 116/202/6 115/203/6
f 118/204/4 113/205/4 114/206/4
f 120/207/5 114/208/5 116/209/5
f 117/198/1 120/207/1 119/201/1
f 125/210/3 123/211/3 121/212/3
f 127/213/6 124/214/6 123/215/6
f 126/216/4 121/217/4 122/218/4
f 128/219/5 122/220/5 124/221/5
f 125/210/1 128/219/1 127/213/1
f 133/222/3 131/223/3 129/224/3
f 135/225/6 132/226/6 131/227/6
f 134/228/4 129/229/4 130/230/4
f 136/231/5 130/232/5 132/233/5
f 133/222/1 136/231/1 135/225/1
f 140/234/2 54/235/2 41/236/2
f 139/237/2 164/238/2 140/239/2
f 138/240/2 163/241/2 139/242/2
f 137/243/2 162/244/2 138/245/2
f 145/84/1 55/246/1 47/247/1
f 146/248/1 165/249/1 145/250/1
f 147/251/1 166/252/1 146/253/1
f 148/254/1 167/255/1 147/256/1
f 164/257/5 56/258/5 54/235/5
f 163/259/5 168/260/5 164/238/5
f 162/261/5 167/262/5 163/241/5
f 161/263/5 166/264/5 162/244/5
f 144/265/2 50/266/2 44/267/2
f 143/268/2 156/269/2 144/270/2
f 142/271/2 155/272/2 143/273/2
f 141/274/2 154/275/2 142/276/2
f 149/81/1 51/277/1 46/278/1
f 150/279/1 157/280/1 149/281/1
f 151/282/1 158/283/1 150/284/1
f 152/285/1 159/286/1 151/287/1
f 156/288/3 52/289/3 50/290/3
f 155/291/3 160/292/3 156/293/3
f 154/294/3 159/295/3 155/296/3
f 153/297/3 158/298/3 154/299/3
f 45/103/3 140/300/3 41/301/3
f 148/254/3 139/302/3 140/303/3
f 147/251/3 138/304/3 139/305/3
f 146/248/3 137/306/3 138/307/3
f 48/93/5 144/265/5 44/267/5
f 152/285/5 143/268/5 144/270/5
f 151/282/5 142/271/5 143/273/5
f 150/279/5 141/274/5 142/276/5
f 2/1/1 1/70/1 4/2/1
f 7/4/2 8/71/2 6/5/2
f 11/7/2 12/45/2 10/8/2
f 15/10/2 16/75/2 14/11/2
f 19/13/2 20/50/2 18/14/2
f 23/16/2 24/80/2 22/17/2
f 27/19/1 28/44/1 25/20/1
f 31/22/1 32/74/1 29/23/1
f 35/25/1 36/49/1 33/26/1
f 39/28/1 40/79/1 37/29/1
f 17/31/3 34/308/3 33/32/3
f 10/34/4 27/309/4 26/35/4
f 18/37/4 35/310/4 34/38/4
f 12/40/5 28/311/5 27/41/5
f 20/42/5 36/312/5 35/43/5
f 11/7/6 25/20/6 28/44/6
f 5/46/3 3/313/3 4/47/3
f 19/13/6 33/26/6 36/49/6
f 13/51/3 30/314/3 29/52/3
f 6/54/4 2/315/4 3/55/4
f 21/57/3 38/316/3 37/58/3
f 14/60/4 31/317/4 30/61/4
f 8/63/5 1/318/5 2/64/5
f 22/65/4 39/319/4 38/66/4
f 16/68/5 32/320/5 31/69/5
f 7/4/6 4/2/6 1/70/6
f 24/72/5 40/321/5 39/73/5
f 15/10/6 29/23/6 32/74/6
f 9/76/3 26/322/3 25/77/3
f 23/16/6 37/29/6 40/79/6
f 149/81/5 46/278/5 42/82/5
f 145/84/3 47/247/3 43/85/3
f 49/87/3 51/277/3 157/88/3
f 46/90/4 51/323/4 49/91/4
f 48/93/1 52/289/1 160/94/1
f 42/82/2 49/324/2 153/96/2
f 44/97/6 50/325/6 52/98/6
f 53/100/5 55/246/5 165/101/5
f 45/103/1 56/258/1 168/104/1
f 43/106/2 53/100/2 161/102/2
f 47/108/6 55/326/6 53/109/6
f 41/111/4 54/327/4 56/112/4
f 61/114/3 63/117/3 59/115/3
f 63/117/6 64/123/6 60/118/6
f 62/120/4 61/114/4 57/121/4
f 64/123/5 62/120/5 58/124/5
f 61/114/1 62/120/1 64/123/1
f 69/126/3 71/129/3 67/127/3
f 71/129/6 72/135/6 68/130/6
f 70/132/4 69/126/4 65/133/4
f 72/135/5 70/132/5 66/136/5
f 69/126/1 70/132/1 72/135/1
f 77/138/3 79/141/3 75/139/3
f 79/141/6 80/147/6 76/142/6
f 78/144/4 77/138/4 73/145/4
f 80/147/5 78/144/5 74/148/5
f 77/138/1 78/144/1 80/147/1
f 85/150/3 87/153/3 83/151/3
f 87/153/6 88/159/6 84/154/6
f 86/156/4 85/150/4 81/157/4
f 88/159/5 86/156/5 82/160/5
f 85/150/1 86/156/1 88/159/1
f 93/162/3 95/165/3 91/163/3
f 95/165/6 96/171/6 92/166/6
f 94/168/4 93/162/4 89/169/4
f 96/171/5 94/168/5 90/172/5
f 93/162/1 94/168/1 96/171/1
f 101/174/3 103/177/3 99/175/3
f 103/177/6 104/183/6 100/178/6
f 102/180/4 101/174/4 97/181/4
f 104/183/5 102/180/5 98/184/5
f 101/174/1 102/180/1 104/183/1
f 109/186/3 111/189/3 107/187/3
f 111/189/6 112/195/6 108/190/6
f 110/192/4 109/186/4 105/193/4
f 112/195/5 110/192/5 106/196/5
f 109/186/1 110/192/1 112/195/1
f 117/198/3 119/201/3 115/199/3
f 119/201/6 120/207/6 116/202/6
f 118/204/4 117/198/4 113/205/4
f 120/207/5 118/204/5 114/208/5
f 117/198/1 118/204/1 120/207/1
f 125/210/3 127/213/3 123/211/3
f 127/213/6 128/219/6 124/214/6
f 126/216/4 125/210/4 121/217/4
f 128/219/5 126/216/5 122/220/5
f 125/210/1 126/216/1 128/219/1
f 133/222/3 135/225/3 131/223/3
f 135/225/6 136/231/6 132/226/6
f 134/228/4 133/222/4 129/229/4
f 136/231/5 134/228/5 130/232/5
f 133/222/1 134/228/1 136/231/1
f 140/234/2 164/257/2 54/235/2
f 139/237/2 163/259/2 164/238/2
f 138/240/2 162/261/2 163/241/2
f 137/243/2 161/263/2 162/244/2
f 145/84/1 165/101/1 55/246/1
f 146/248/1 166/264/1 165/249/1
f 147/251/1 167/262/1 166/252/1
f 148/254/1 168/260/1 167/255/1
f 164/257/5 168/104/5 56/258/5
f 163/259/5 167/255/5 168/260/5
f 162/261/5 166/252/5 167/262/5
f 161/263/5 165/249/5 166/264/5
f 144/265/2 156/328/2 50/266/2
f 143/268/2 155/329/2 156/269/2
f 142/271/2 154/330/2 155/272/2
f 141/274/2 153/331/2 154/275/2
f 149/81/1 157/88/1 51/277/1
f 150/279/1 158/298/1 157/280/1
f 151/282/1 159/295/1 158/283/1
f 152/285/1 160/292/1 159/286/1
f 156/288/3 160/94/3 52/289/3
f 155/291/3 159/286/3 160/292/3
f 154/294/3 158/283/3 159/295/3
f 153/297/3 157/280/3 158/298/3
f 45/103/3 148/105/3 140/300/3
f 148/254/3 147/256/3 139/302/3
f 147/251/3 146/253/3 138/304/3
f 146/248/3 145/250/3 137/306/3
f 48/93/5 152/95/5 144/265/5
f 152/285/5 151/287/5 143/268/5
f 151/282/5 150/284/5 142/271/5
f 150/279/5 149/281/5 141/274/5

View File

@ -0,0 +1,982 @@
# Blender v2.79 (sub 0) OBJ File: 'rail_standard_curve.blend'
# www.blender.org
o Plane.001
v -1.312500 0.062500 0.500000
v -1.141243 0.062500 -2.858757
v -1.312500 0.187500 0.500000
v -1.141243 0.187500 -2.858757
v -1.097049 0.062500 -2.902951
v -1.097049 0.187500 -2.902951
v -1.250000 0.062500 0.500000
v -1.250000 0.187500 0.500000
v -4.500000 0.062500 -2.687500
v -4.500000 0.062500 -4.312500
v -4.500000 0.187500 -2.687500
v -4.500000 0.187500 -4.312500
v -4.500000 0.062500 -4.250000
v -4.500000 0.187500 -4.250000
v -4.500000 0.062500 -2.750000
v -4.500000 0.187500 -2.750000
v -2.246097 0.062500 -1.753903
v -0.550519 0.187500 -2.138958
v -2.246097 0.187500 -1.753903
v -0.498553 0.187500 -2.173681
v -0.498553 0.062500 -2.173681
v -0.550519 0.062500 -2.138958
v -2.201903 0.062500 -1.798097
v -2.201903 0.187500 -1.798097
v -3.675014 0.062500 -2.578888
v -3.675014 0.187500 -2.578888
v -3.658838 0.062500 -2.639259
v -3.658838 0.187500 -2.639259
v -2.906250 0.062500 -2.260456
v -2.906250 0.187500 -2.260456
v -2.875000 0.062500 -2.314582
v -2.875000 0.187500 -2.314582
v -1.739544 0.062500 -1.093750
v -1.739544 0.187500 -1.093750
v -1.685418 0.062500 -1.125000
v -1.685418 0.187500 -1.125000
v -1.421111 0.062500 -0.324986
v -1.421111 0.187500 -0.324986
v -1.360741 0.062500 -0.341162
v -1.360741 0.187500 -0.341162
v -3.561128 0.187500 -4.220029
v -3.561128 0.062500 -4.220029
v -3.573321 0.187500 -4.158730
v -3.573321 0.062500 -4.158730
v -2.658336 0.187500 -3.946170
v -2.658336 0.062500 -3.946170
v -2.682254 0.187500 -3.888428
v -2.682254 0.062500 -3.888428
v -1.826319 0.187500 -3.501447
v -1.826319 0.062500 -3.501447
v -1.861041 0.187500 -3.449481
v -1.861041 0.062500 -3.449481
v -0.111573 0.062500 -1.317746
v -0.053831 0.062500 -1.341664
v -0.053831 0.187500 -1.341664
v -0.111573 0.187500 -1.317746
v 0.158730 0.062500 -0.426678
v 0.220028 0.062500 -0.438872
v 0.220028 0.187500 -0.438872
v 0.158730 0.187500 -0.426678
v 0.250000 0.062500 0.500000
v 0.312499 0.062500 0.500000
v 0.312499 0.187500 0.500000
v 0.250000 0.187500 0.500000
v -1.501192 0.000000 0.294317
v 0.481698 0.000000 0.033265
v -1.550139 0.000000 -0.077475
v 0.432751 0.000000 -0.338527
v -1.550139 0.062500 -0.077475
v -1.501192 0.062500 0.294317
v 0.481698 0.062500 0.033265
v 0.432751 0.062500 -0.338527
v -1.656608 0.000000 -0.474823
v 0.191151 0.000000 -1.240190
v -1.800115 0.000000 -0.821278
v 0.047645 0.000000 -1.586645
v -1.800115 0.062500 -0.821278
v -1.656608 0.062500 -0.474823
v 0.191151 0.062500 -1.240190
v 0.047645 0.062500 -1.586645
v -2.005797 0.000000 -1.177531
v -0.419090 0.000000 -2.395053
v -2.234083 0.000000 -1.475038
v -0.647376 0.000000 -2.692561
v -2.234083 0.062500 -1.475038
v -2.005797 0.062500 -1.177531
v -0.419090 0.062500 -2.395053
v -0.647376 0.062500 -2.692561
v -2.524962 0.000000 -1.765917
v -1.307439 0.000000 -3.352624
v -2.822469 0.000000 -1.994203
v -1.604947 0.000000 -3.580910
v -2.822469 0.062500 -1.994203
v -2.524962 0.062500 -1.765917
v -1.307439 0.062500 -3.352624
v -1.604947 0.062500 -3.580910
v -3.178722 0.000000 -2.199886
v -2.413356 0.000000 -4.047645
v -3.525177 0.000000 -2.343392
v -2.759810 0.000000 -4.191151
v -3.525177 0.062500 -2.343392
v -3.178722 0.062500 -2.199886
v -2.413356 0.062500 -4.047645
v -2.759810 0.062500 -4.191151
v -3.922526 0.000000 -2.449861
v -3.661473 0.000000 -4.432751
v -4.294317 0.000000 -2.498808
v -4.033265 0.000000 -4.481698
v -4.294317 0.062500 -2.498808
v -3.922526 0.062500 -2.449861
v -3.661473 0.062500 -4.432751
v -4.033265 0.062500 -4.481698
v 0.387101 0.125000 -0.206438
v 0.077275 0.125000 -0.165649
v 0.403417 0.125000 -0.082508
v 0.093590 0.125000 -0.041718
v 0.387101 0.062500 -0.206438
v 0.077275 0.062500 -0.165649
v 0.403417 0.062500 -0.082508
v 0.093590 0.062500 -0.041718
v -1.455542 0.062500 0.162229
v -1.145715 0.062500 0.121439
v -1.471858 0.062500 0.038298
v -1.162031 0.062500 -0.002491
v -1.455542 0.125000 0.162229
v -1.145715 0.125000 0.121439
v -1.471858 0.125000 0.038298
v -1.162031 0.125000 -0.002491
v 0.037737 0.125000 -1.447242
v -0.250975 0.125000 -1.327653
v 0.085573 0.125000 -1.331757
v -0.203139 0.125000 -1.212168
v 0.037737 0.062500 -1.447242
v -0.250975 0.062500 -1.327653
v 0.085573 0.062500 -1.331757
v -0.203139 0.062500 -1.212168
v -1.646701 0.062500 -0.614226
v -1.357989 0.062500 -0.733814
v -1.694537 0.062500 -0.729711
v -1.405824 0.062500 -0.849299
v -1.646701 0.125000 -0.614226
v -1.357989 0.125000 -0.733814
v -1.694537 0.125000 -0.729711
v -1.405824 0.125000 -0.849299
v -0.620866 0.125000 -2.555344
v -0.868788 0.125000 -2.365106
v -0.544770 0.125000 -2.456175
v -0.792693 0.125000 -2.265937
v -0.620866 0.062500 -2.555344
v -0.868788 0.062500 -2.365106
v -0.544770 0.062500 -2.456175
v -0.792693 0.062500 -2.265937
v -2.032308 0.062500 -1.314747
v -1.784385 0.062500 -1.504985
v -2.108403 0.062500 -1.413917
v -1.860480 0.062500 -1.604154
v -2.032308 0.125000 -1.314747
v -1.784385 0.125000 -1.504985
v -2.108403 0.125000 -1.413917
v -1.860480 0.125000 -1.604154
v -1.543825 0.125000 -3.455230
v -1.734063 0.125000 -3.207307
v -1.444656 0.125000 -3.379134
v -1.634893 0.125000 -3.131212
v -1.543825 0.062500 -3.455230
v -1.734063 0.062500 -3.207307
v -1.444656 0.062500 -3.379134
v -1.634893 0.062500 -3.131212
v -2.586083 0.062500 -1.891597
v -2.395845 0.062500 -2.139520
v -2.685253 0.062500 -1.967692
v -2.495015 0.062500 -2.215615
v -2.586083 0.125000 -1.891597
v -2.395845 0.125000 -2.139520
v -2.685253 0.125000 -1.967692
v -2.495015 0.125000 -2.215615
v -2.668243 0.125000 -4.085573
v -2.787832 0.125000 -3.796861
v -2.552758 0.125000 -4.037737
v -2.672346 0.125000 -3.749025
v -2.668243 0.062500 -4.085573
v -2.787832 0.062500 -3.796861
v -2.552758 0.062500 -4.037737
v -2.672346 0.062500 -3.749025
v -3.270289 0.062500 -2.305463
v -3.150701 0.062500 -2.594176
v -3.385775 0.062500 -2.353299
v -3.266186 0.062500 -2.642011
v -3.270289 0.125000 -2.305463
v -3.150701 0.125000 -2.594176
v -3.385775 0.125000 -2.353299
v -3.266186 0.125000 -2.642011
v -3.917492 0.125000 -4.403417
v -3.958282 0.125000 -4.093591
v -3.793562 0.125000 -4.387100
v -3.834351 0.125000 -4.077275
v -3.917492 0.062500 -4.403417
v -3.958282 0.062500 -4.093591
v -3.793562 0.062500 -4.387100
v -3.834351 0.062500 -4.077275
v -4.038298 0.062500 -2.528142
v -3.997509 0.062500 -2.837969
v -4.162229 0.062500 -2.544458
v -4.121440 0.062500 -2.854284
v -4.038298 0.125000 -2.528142
v -3.997509 0.125000 -2.837969
v -4.162229 0.125000 -2.544458
v -4.121440 0.125000 -2.854284
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.156250
vt 0.500000 0.656250
vt 0.531250 0.718750
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.531250 0.718750
vt 0.500000 0.718750
vt 0.531250 0.718750
vt 0.500000 0.656250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.156250
vt 0.437500 0.156250
vt 0.406250 0.656250
vt 0.437500 0.656250
vt 0.437500 0.156250
vt 0.406250 0.656250
vt 0.437500 0.656250
vt 0.593750 0.156250
vt 0.531250 0.656250
vt 0.593750 0.656250
vt 0.500000 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.406250 0.656250
vt 0.437500 0.656250
vt 0.437500 0.156250
vt 0.406250 0.656250
vt 0.437500 0.656250
vt 0.500000 0.156250
vt 0.500000 0.656250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.406250 0.656250
vt 0.437500 0.656250
vt 0.500000 0.156250
vt 0.500000 0.656250
vt 0.593750 0.156250
vt 0.531250 0.656250
vt 0.593750 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.500000 0.156250
vt 0.500000 0.656250
vt 0.531250 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.531250 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.531250 0.156250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.531250 0.156250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.531250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.156250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.531250 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.531250 0.718750
vt 0.500000 0.656250
vt 0.500000 0.718750
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 1.000000
vt 0.218750 0.000000
vt 0.406250 0.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.218750 1.000000
vt 0.187500 0.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 1.000000
vt 0.218750 0.000000
vt 0.406250 0.000000
vt -0.000000 1.000000
vt 0.187500 0.000000
vt 0.187500 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.218750 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.062500
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.062500
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.062500
vt 0.593750 0.125000
vt 0.437500 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.062500
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.062500
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.062500
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.500000 0.718750
vt 0.531250 0.656250
vt 0.500000 0.718750
vt 0.406250 0.156250
vt 0.406250 0.156250
vt 0.531250 0.156250
vt 0.406250 0.156250
vt 0.406250 0.156250
vt 0.593750 0.656250
vt 0.406250 0.156250
vt 0.531250 0.156250
vt 0.531250 0.156250
vt 0.593750 0.656250
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.531250 0.656250
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt -0.000000 0.000000
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vn 0.7730 0.0000 -0.6344
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.6344 0.0000 -0.7730
vn 0.0000 -1.0000 0.0000
vn -0.1305 0.0000 0.9914
vn 0.0000 1.0000 0.0000
vn 0.1305 0.0000 -0.9914
vn 0.3827 0.0000 -0.9239
vn -0.3827 0.0000 0.9239
vn 0.6088 0.0000 -0.7934
vn -0.6088 0.0000 0.7934
vn 0.7934 0.0000 -0.6088
vn -0.7934 0.0000 0.6088
vn 0.9914 0.0000 -0.1305
vn 0.9239 0.0000 -0.3827
vn -0.9239 0.0000 0.3827
vn -0.9914 0.0000 0.1305
vn -0.0980 0.0000 0.9952
vn 0.0980 0.0000 -0.9952
vn 0.2903 0.0000 -0.9569
vn -0.2903 0.0000 0.9569
vn -0.4714 0.0000 0.8819
vn 0.4714 0.0000 -0.8819
vn -0.6344 0.0000 0.7730
vn -0.7730 0.0000 0.6344
vn 0.9569 0.0000 -0.2903
vn 0.8819 0.0000 -0.4714
vn -0.8819 0.0000 0.4714
vn -0.9952 0.0000 0.0980
vn -0.9569 0.0000 0.2903
vn 0.9952 0.0000 -0.0980
vn 0.1305 0.0000 0.9914
vn -0.1305 0.0000 -0.9914
vn 0.3827 0.0000 0.9239
vn -0.3827 0.0000 -0.9239
vn 0.6088 0.0000 0.7934
vn -0.6088 0.0000 -0.7934
vn 0.7934 0.0000 0.6088
vn -0.7934 0.0000 -0.6088
vn 0.9239 0.0000 0.3827
vn -0.9239 0.0000 -0.3827
vn 0.9914 0.0000 0.1305
vn -0.9914 0.0000 -0.1305
s off
f 20/1/1 5/2/1 6/3/1
f 7/4/2 3/5/2 1/6/2
f 10/7/3 14/8/3 12/9/3
f 11/10/3 15/11/3 9/12/3
f 6/13/4 50/14/4 49/15/4
f 35/16/5 17/17/5 23/18/5
f 31/19/5 25/20/5 27/21/5
f 25/22/6 11/23/6 9/24/6
f 11/23/7 28/25/7 16/26/7
f 27/27/5 9/28/5 15/29/5
f 28/25/8 15/29/8 16/26/8
f 23/30/5 29/31/5 31/32/5
f 32/33/9 27/21/9 28/34/9
f 30/35/7 28/34/7 26/36/7
f 29/37/10 26/36/10 25/38/10
f 23/30/11 32/39/11 24/40/11
f 24/40/7 30/41/7 19/42/7
f 30/41/12 17/43/12 19/42/12
f 39/44/5 33/45/5 35/46/5
f 36/47/13 23/18/13 24/48/13
f 33/49/14 19/50/14 17/51/14
f 19/50/7 36/47/7 24/48/7
f 7/52/15 40/53/15 8/54/15
f 40/55/16 35/46/16 36/56/16
f 34/57/7 40/55/7 36/56/7
f 37/58/17 34/57/17 33/59/17
f 8/54/7 38/60/7 3/61/7
f 38/60/18 1/62/18 3/61/18
f 1/63/5 39/64/5 7/52/5
f 43/65/7 45/66/7 41/67/7
f 14/68/7 41/69/7 12/70/7
f 42/71/5 13/72/5 10/73/5
f 44/74/19 14/68/19 13/75/19
f 41/69/20 10/73/20 12/70/20
f 50/76/5 48/77/5 46/78/5
f 45/66/21 42/79/21 41/67/21
f 46/80/5 44/81/5 42/79/5
f 48/82/22 43/65/22 44/83/22
f 51/84/7 6/13/7 49/15/7
f 52/85/23 47/86/23 48/87/23
f 47/86/7 49/88/7 45/89/7
f 49/88/24 46/78/24 45/89/24
f 5/90/5 52/91/5 50/14/5
f 2/92/25 51/84/25 52/93/25
f 54/94/5 22/95/5 21/96/5
f 4/97/7 20/1/7 6/3/7
f 21/98/5 2/99/5 5/2/5
f 22/100/26 4/97/26 2/101/26
f 59/102/27 54/103/27 55/104/27
f 55/105/28 21/96/28 20/106/28
f 18/107/7 55/105/7 20/106/7
f 53/108/29 18/107/29 22/109/29
f 61/110/30 60/111/30 57/112/30
f 56/113/7 59/102/7 55/104/7
f 57/114/31 56/113/31 53/115/31
f 58/116/5 53/117/5 54/103/5
f 64/118/2 62/119/2 63/120/2
f 62/121/5 57/122/5 58/123/5
f 63/124/32 58/123/32 59/125/32
f 60/111/7 63/124/7 59/125/7
f 67/126/5 66/127/5 65/128/5
f 71/129/7 69/130/7 70/131/7
f 65/132/18 69/133/18 67/134/18
f 66/135/33 70/136/33 65/137/33
f 68/138/15 71/139/15 66/127/15
f 67/126/34 72/140/34 68/141/34
f 75/142/5 74/143/5 73/144/5
f 79/145/7 77/146/7 78/147/7
f 73/148/17 77/149/17 75/150/17
f 74/151/35 78/152/35 73/153/35
f 76/154/16 79/155/16 74/143/16
f 75/142/36 80/156/36 76/157/36
f 81/158/5 84/159/5 82/160/5
f 87/161/7 85/162/7 86/163/7
f 81/164/14 85/165/14 83/166/14
f 82/167/37 86/168/37 81/169/37
f 84/170/13 87/171/13 82/160/13
f 83/172/38 88/173/38 84/159/38
f 91/174/5 90/175/5 89/176/5
f 95/177/7 93/178/7 94/179/7
f 89/180/12 93/181/12 91/182/12
f 90/183/39 94/184/39 89/185/39
f 92/186/11 95/187/11 90/175/11
f 91/174/40 96/188/40 92/189/40
f 97/190/5 100/191/5 98/192/5
f 102/193/7 104/194/7 101/195/7
f 97/196/10 101/197/10 99/198/10
f 98/199/41 102/200/41 97/201/41
f 100/202/9 103/203/9 98/192/9
f 99/204/42 104/194/42 100/191/42
f 107/205/5 106/206/5 105/207/5
f 111/208/7 109/209/7 110/210/7
f 105/211/6 109/212/6 107/213/6
f 106/214/43 110/215/43 105/216/43
f 108/217/8 111/218/8 106/206/8
f 107/205/44 112/219/44 108/220/44
f 125/221/18 123/222/18 121/223/18
f 114/224/7 115/225/7 113/226/7
f 113/226/15 119/227/15 117/228/15
f 115/225/33 120/229/33 119/230/33
f 114/224/34 117/231/34 118/232/34
f 116/233/18 118/234/18 120/235/18
f 127/236/34 124/237/34 123/238/34
f 126/239/33 121/240/33 122/241/33
f 128/242/15 122/243/15 124/244/15
f 125/221/7 128/242/7 127/236/7
f 141/245/17 139/246/17 137/247/17
f 130/248/7 131/249/7 129/250/7
f 129/250/16 135/251/16 133/252/16
f 131/249/35 136/253/35 135/254/35
f 130/248/36 133/255/36 134/256/36
f 132/257/17 134/258/17 136/259/17
f 143/260/36 140/261/36 139/262/36
f 142/263/35 137/264/35 138/265/35
f 144/266/16 138/267/16 140/268/16
f 141/245/7 144/266/7 143/260/7
f 157/269/14 155/270/14 153/271/14
f 148/272/7 145/273/7 146/274/7
f 145/273/13 151/275/13 149/276/13
f 147/277/37 152/278/37 151/279/37
f 146/274/38 149/280/38 150/281/38
f 148/272/14 150/282/14 152/283/14
f 159/284/38 156/285/38 155/286/38
f 158/287/37 153/288/37 154/289/37
f 160/290/13 154/291/13 156/292/13
f 157/269/7 160/290/7 159/284/7
f 173/293/12 171/294/12 169/295/12
f 162/296/7 163/297/7 161/298/7
f 161/298/11 167/299/11 165/300/11
f 163/297/39 168/301/39 167/302/39
f 162/296/40 165/303/40 166/304/40
f 164/305/12 166/306/12 168/307/12
f 175/308/40 172/309/40 171/310/40
f 174/311/39 169/312/39 170/313/39
f 176/314/11 170/315/11 172/316/11
f 173/293/7 176/314/7 175/308/7
f 189/317/10 187/318/10 185/319/10
f 178/320/7 179/321/7 177/322/7
f 177/322/9 183/323/9 181/324/9
f 179/321/41 184/325/41 183/326/41
f 178/320/42 181/327/42 182/328/42
f 180/329/10 182/330/10 184/331/10
f 191/332/42 188/333/42 187/334/42
f 190/335/41 185/336/41 186/337/41
f 192/338/9 186/339/9 188/340/9
f 191/332/7 190/335/7 192/338/7
f 205/341/6 203/342/6 201/343/6
f 194/344/7 195/345/7 193/346/7
f 193/346/8 199/347/8 197/348/8
f 195/345/43 200/349/43 199/350/43
f 194/344/44 197/351/44 198/352/44
f 196/353/6 198/354/6 200/355/6
f 207/356/44 204/357/44 203/358/44
f 206/359/43 201/360/43 202/361/43
f 208/362/8 202/363/8 204/364/8
f 207/356/7 206/359/7 208/362/7
f 20/1/1 21/98/1 5/2/1
f 7/4/2 8/365/2 3/5/2
f 10/7/3 13/366/3 14/8/3
f 11/10/3 16/367/3 15/11/3
f 6/13/4 5/90/4 50/14/4
f 35/16/5 33/368/5 17/17/5
f 31/19/5 29/369/5 25/20/5
f 25/22/6 26/370/6 11/23/6
f 11/23/7 26/370/7 28/25/7
f 27/27/5 25/371/5 9/28/5
f 28/25/8 27/27/8 15/29/8
f 23/30/5 17/372/5 29/31/5
f 32/33/9 31/19/9 27/21/9
f 30/35/7 32/33/7 28/34/7
f 29/37/10 30/35/10 26/36/10
f 23/30/11 31/32/11 32/39/11
f 24/40/7 32/39/7 30/41/7
f 30/41/12 29/373/12 17/43/12
f 39/44/5 37/374/5 33/45/5
f 36/47/13 35/16/13 23/18/13
f 33/49/14 34/375/14 19/50/14
f 19/50/7 34/375/7 36/47/7
f 7/52/15 39/64/15 40/53/15
f 40/55/16 39/44/16 35/46/16
f 34/57/7 38/376/7 40/55/7
f 37/58/17 38/376/17 34/57/17
f 8/54/7 40/53/7 38/60/7
f 38/60/18 37/377/18 1/62/18
f 1/63/5 37/378/5 39/64/5
f 43/65/7 47/379/7 45/66/7
f 14/68/7 43/380/7 41/69/7
f 42/71/5 44/381/5 13/72/5
f 44/74/19 43/380/19 14/68/19
f 41/69/20 42/71/20 10/73/20
f 50/76/5 52/382/5 48/77/5
f 45/66/21 46/80/21 42/79/21
f 46/80/5 48/383/5 44/81/5
f 48/82/22 47/379/22 43/65/22
f 51/84/7 4/384/7 6/13/7
f 52/85/23 51/385/23 47/86/23
f 47/86/7 51/385/7 49/88/7
f 49/88/24 50/76/24 46/78/24
f 5/90/5 2/386/5 52/91/5
f 2/92/25 4/384/25 51/84/25
f 54/94/5 53/387/5 22/95/5
f 4/97/7 18/388/7 20/1/7
f 21/98/5 22/389/5 2/99/5
f 22/100/26 18/388/26 4/97/26
f 59/102/27 58/116/27 54/103/27
f 55/105/28 54/94/28 21/96/28
f 18/107/7 56/390/7 55/105/7
f 53/108/29 56/390/29 18/107/29
f 61/110/30 64/391/30 60/111/30
f 56/113/7 60/392/7 59/102/7
f 57/114/31 60/392/31 56/113/31
f 58/116/5 57/393/5 53/117/5
f 64/118/2 61/394/2 62/119/2
f 62/121/5 61/395/5 57/122/5
f 63/124/32 62/121/32 58/123/32
f 60/111/7 64/391/7 63/124/7
f 67/126/5 68/141/5 66/127/5
f 71/129/7 72/140/7 69/130/7
f 65/132/18 70/396/18 69/133/18
f 66/135/33 71/397/33 70/136/33
f 68/138/15 72/398/15 71/139/15
f 67/126/34 69/130/34 72/140/34
f 75/142/5 76/157/5 74/143/5
f 79/145/7 80/156/7 77/146/7
f 73/148/17 78/399/17 77/149/17
f 74/151/35 79/400/35 78/152/35
f 76/154/16 80/401/16 79/155/16
f 75/142/36 77/146/36 80/156/36
f 81/158/5 83/172/5 84/159/5
f 87/161/7 88/173/7 85/162/7
f 81/164/14 86/402/14 85/165/14
f 82/167/37 87/403/37 86/168/37
f 84/170/13 88/404/13 87/171/13
f 83/172/38 85/162/38 88/173/38
f 91/174/5 92/189/5 90/175/5
f 95/177/7 96/188/7 93/178/7
f 89/180/12 94/405/12 93/181/12
f 90/183/39 95/406/39 94/184/39
f 92/186/11 96/407/11 95/187/11
f 91/174/40 93/178/40 96/188/40
f 97/190/5 99/204/5 100/191/5
f 102/193/7 103/408/7 104/194/7
f 97/196/10 102/409/10 101/197/10
f 98/199/41 103/410/41 102/200/41
f 100/202/9 104/411/9 103/203/9
f 99/204/42 101/195/42 104/194/42
f 107/205/5 108/220/5 106/206/5
f 111/208/7 112/219/7 109/209/7
f 105/211/6 110/412/6 109/212/6
f 106/214/43 111/413/43 110/215/43
f 108/217/8 112/414/8 111/218/8
f 107/205/44 109/209/44 112/219/44
f 125/221/18 127/236/18 123/222/18
f 114/224/7 116/233/7 115/225/7
f 113/226/15 115/225/15 119/227/15
f 115/225/33 116/233/33 120/229/33
f 114/224/34 113/226/34 117/231/34
f 116/233/18 114/224/18 118/234/18
f 127/236/34 128/242/34 124/237/34
f 126/239/33 125/221/33 121/240/33
f 128/242/15 126/239/15 122/243/15
f 125/221/7 126/239/7 128/242/7
f 141/245/17 143/260/17 139/246/17
f 130/248/7 132/257/7 131/249/7
f 129/250/16 131/249/16 135/251/16
f 131/249/35 132/257/35 136/253/35
f 130/248/36 129/250/36 133/255/36
f 132/257/17 130/248/17 134/258/17
f 143/260/36 144/266/36 140/261/36
f 142/263/35 141/245/35 137/264/35
f 144/266/16 142/263/16 138/267/16
f 141/245/7 142/263/7 144/266/7
f 157/269/14 159/284/14 155/270/14
f 148/272/7 147/277/7 145/273/7
f 145/273/13 147/277/13 151/275/13
f 147/277/37 148/272/37 152/278/37
f 146/274/38 145/273/38 149/280/38
f 148/272/14 146/274/14 150/282/14
f 159/284/38 160/290/38 156/285/38
f 158/287/37 157/269/37 153/288/37
f 160/290/13 158/287/13 154/291/13
f 157/269/7 158/287/7 160/290/7
f 173/293/12 175/308/12 171/294/12
f 162/296/7 164/305/7 163/297/7
f 161/298/11 163/297/11 167/299/11
f 163/297/39 164/305/39 168/301/39
f 162/296/40 161/298/40 165/303/40
f 164/305/12 162/296/12 166/306/12
f 175/308/40 176/314/40 172/309/40
f 174/311/39 173/293/39 169/312/39
f 176/314/11 174/311/11 170/315/11
f 173/293/7 174/311/7 176/314/7
f 189/317/10 191/332/10 187/318/10
f 178/320/7 180/329/7 179/321/7
f 177/322/9 179/321/9 183/323/9
f 179/321/41 180/329/41 184/325/41
f 178/320/42 177/322/42 181/327/42
f 180/329/10 178/320/10 182/330/10
f 191/332/42 192/338/42 188/333/42
f 190/335/41 189/317/41 185/336/41
f 192/338/9 190/335/9 186/339/9
f 191/332/7 189/317/7 190/335/7
f 205/341/6 207/356/6 203/342/6
f 194/344/7 196/353/7 195/345/7
f 193/346/8 195/345/8 199/347/8
f 195/345/43 196/353/43 200/349/43
f 194/344/44 193/346/44 197/351/44
f 196/353/6 194/344/6 198/354/6
f 207/356/44 208/362/44 204/357/44
f 206/359/43 205/341/43 201/360/43
f 208/362/8 206/359/8 202/363/8
f 207/356/7 205/341/7 206/359/7

View File

@ -0,0 +1,759 @@
# Blender v2.79 (sub 0) OBJ File: 'rail_standard_ramp.blend'
# www.blender.org
o Plane.001
v 1.000000 0.562500 -0.187500
v 1.000000 0.562500 0.187500
v -1.000000 0.562500 0.187500
v -1.000000 0.562500 -0.187500
v -1.000000 0.500000 0.187500
v 1.000000 0.500000 0.187500
v -1.000000 0.500000 -0.187500
v 1.000000 0.500000 -0.187500
v -1.000000 0.700000 -0.812500
v 1.000000 0.700000 -0.812500
v -1.000000 0.700000 -1.187500
v 1.000000 0.700000 -1.187500
v -1.000000 0.800000 -1.812500
v 1.000000 0.800000 -1.812500
v -1.000000 0.800000 -2.187500
v 1.000000 0.800000 -2.187500
v -1.000000 0.100000 2.187500
v 1.000000 0.100000 2.187500
v -1.000000 0.100000 1.812500
v 1.000000 0.100000 1.812500
v -1.000000 0.300000 1.187500
v 1.000000 0.300000 1.187500
v -1.000000 0.300000 0.812500
v 1.000000 0.300000 0.812500
v -1.000000 0.762500 -1.187500
v -1.000000 0.762500 -0.812500
v 1.000000 0.762500 -0.812500
v 1.000000 0.762500 -1.187500
v -1.000000 0.862500 -2.187500
v -1.000000 0.862500 -1.812500
v 1.000000 0.862500 -1.812500
v 1.000000 0.862500 -2.187500
v -1.000000 0.162500 1.812500
v -1.000000 0.162500 2.187500
v 1.000000 0.162500 2.187500
v 1.000000 0.162500 1.812500
v -1.000000 0.362500 0.812500
v -1.000000 0.362500 1.187500
v 1.000000 0.362500 1.187500
v 1.000000 0.362500 0.812500
v -0.812500 0.062500 2.500000
v 0.812500 0.062500 2.500000
v -0.812500 1.062500 -2.500000
v 0.812500 1.062500 -2.500000
v -0.812500 0.187500 2.500000
v 0.812500 0.187500 2.500000
v -0.812500 1.187500 -2.500000
v 0.812500 1.187500 -2.500000
v 0.750000 0.062500 2.500000
v 0.750000 1.062500 -2.500000
v 0.750000 0.187500 2.500000
v 0.750000 1.187500 -2.500000
v -0.750000 1.062500 -2.500000
v -0.750000 0.062500 2.500000
v -0.750000 1.187500 -2.500000
v -0.750000 0.187500 2.500000
v 0.625000 0.162500 2.062500
v 0.937500 0.162500 2.062500
v 0.625000 0.162500 1.937500
v 0.937500 0.162500 1.937500
v 0.625000 0.225000 2.062500
v 0.937500 0.225000 2.062500
v 0.625000 0.225000 1.937500
v 0.937500 0.225000 1.937500
v -0.937500 0.162500 2.062500
v -0.625000 0.162500 2.062500
v -0.937500 0.162500 1.937500
v -0.625000 0.162500 1.937500
v -0.937500 0.225000 2.062500
v -0.625000 0.225000 2.062500
v -0.937500 0.225000 1.937500
v -0.625000 0.225000 1.937500
v 0.625000 0.362500 1.062500
v 0.937500 0.362500 1.062500
v 0.625000 0.362500 0.937500
v 0.937500 0.362500 0.937500
v 0.625000 0.425000 1.062500
v 0.937500 0.425000 1.062500
v 0.625000 0.425000 0.937500
v 0.937500 0.425000 0.937500
v -0.937500 0.362500 1.062500
v -0.625000 0.362500 1.062500
v -0.937500 0.362500 0.937500
v -0.625000 0.362500 0.937500
v -0.937500 0.425000 1.062500
v -0.625000 0.425000 1.062500
v -0.937500 0.425000 0.937500
v -0.625000 0.425000 0.937500
v 0.625000 0.562500 0.062500
v 0.937500 0.562500 0.062500
v 0.625000 0.562500 -0.062500
v 0.937500 0.562500 -0.062500
v 0.625000 0.625000 0.062500
v 0.937500 0.625000 0.062500
v 0.625000 0.625000 -0.062500
v 0.937500 0.625000 -0.062500
v -0.937500 0.562500 0.062500
v -0.625000 0.562500 0.062500
v -0.937500 0.562500 -0.062500
v -0.625000 0.562500 -0.062500
v -0.937500 0.625000 0.062500
v -0.625000 0.625000 0.062500
v -0.937500 0.625000 -0.062500
v -0.625000 0.625000 -0.062500
v 0.625000 0.762500 -0.937500
v 0.937500 0.762500 -0.937500
v 0.625000 0.762500 -1.062500
v 0.937500 0.762500 -1.062500
v 0.625000 0.825000 -0.937500
v 0.937500 0.825000 -0.937500
v 0.625000 0.825000 -1.062500
v 0.937500 0.825000 -1.062500
v -0.937500 0.762500 -0.937500
v -0.625000 0.762500 -0.937500
v -0.937500 0.762500 -1.062500
v -0.625000 0.762500 -1.062500
v -0.937500 0.825000 -0.937500
v -0.625000 0.825000 -0.937500
v -0.937500 0.825000 -1.062500
v -0.625000 0.825000 -1.062500
v 0.625000 0.862500 -1.937500
v 0.937500 0.862500 -1.937500
v 0.625000 0.862500 -2.062500
v 0.937500 0.862500 -2.062500
v 0.625000 0.925000 -1.937500
v 0.937500 0.925000 -1.937500
v 0.625000 0.925000 -2.062500
v 0.937500 0.925000 -2.062500
v -0.937500 0.862500 -1.937500
v -0.625000 0.862500 -1.937500
v -0.937500 0.862500 -2.062500
v -0.625000 0.862500 -2.062500
v -0.937500 0.925000 -1.937500
v -0.625000 0.925000 -1.937500
v -0.937500 0.925000 -2.062500
v -0.625000 0.925000 -2.062500
v -0.812500 0.862500 -1.500000
v -0.812500 0.662500 -0.500000
v -0.812500 0.462500 0.500000
v -0.812500 0.262500 1.500000
v 0.812500 0.262500 1.500000
v 0.812500 0.462500 0.500000
v 0.812500 0.662500 -0.500000
v 0.812500 0.862500 -1.500000
v -0.812500 0.987500 -1.500000
v -0.812500 0.787500 -0.500000
v -0.812500 0.587500 0.500000
v -0.812500 0.387500 1.500000
v 0.812500 0.387500 1.500000
v 0.812500 0.587500 0.500000
v 0.812500 0.787500 -0.500000
v 0.812500 0.987500 -1.500000
v 0.750000 0.262500 1.500000
v 0.750000 0.462500 0.500000
v 0.750000 0.662500 -0.500000
v 0.750000 0.862500 -1.500000
v 0.750000 0.387500 1.500000
v 0.750000 0.587500 0.500000
v 0.750000 0.787500 -0.500000
v 0.750000 0.987500 -1.500000
v -0.750000 0.862500 -1.500000
v -0.750000 0.662500 -0.500000
v -0.750000 0.462500 0.500000
v -0.750000 0.262500 1.500000
v -0.750000 0.987500 -1.500000
v -0.750000 0.787500 -0.500000
v -0.750000 0.587500 0.500000
v -0.750000 0.387500 1.500000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt 0.218750 1.000000
vt 0.406250 0.000000
vt 0.406250 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt -0.000000 0.000000
vt 0.187500 1.000000
vt -0.000000 1.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.218750 1.000000
vt 0.187500 -0.000000
vt 0.218750 -0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.593750 -0.000000
vt 0.406250 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.406250 0.031250
vt 0.593750 -0.000000
vt 0.593750 0.031250
vt 0.187500 0.000000
vt 0.218750 0.000000
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.656250
vt 0.531250 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.531250 0.656250
vt 0.531250 0.156250
vt 0.531250 0.718750
vt 0.500000 0.656250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.406250 0.156250
vt 0.500000 0.656250
vt 0.531250 0.718750
vt 0.500000 0.718750
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.656250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.406250 0.156250
vt 0.406250 0.656250
vt 0.531250 0.718750
vt 0.500000 0.656250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.531250 0.718750
vt 0.500000 0.718750
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.437500 0.062500
vt 0.406250 0.125000
vt 0.406250 0.062500
vt 0.437500 0.125000
vt 0.593750 0.156250
vt 0.437500 0.156250
vt 0.593750 0.062500
vt 0.437500 0.031250
vt 0.593750 0.031250
vt 0.593750 0.125000
vt 0.625000 0.062500
vt 0.625000 0.125000
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.406250 0.156250
vt 0.437500 0.656250
vt 0.406250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.531250 0.656250
vt 0.500000 0.156250
vt 0.531250 0.156250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.156250
vt 0.500000 0.656250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.437500 0.656250
vt 0.406250 0.156250
vt 0.437500 0.156250
vt 0.500000 0.156250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.500000 0.156250
vt 0.531250 0.656250
vt 0.500000 0.656250
vt 0.593750 0.156250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.531250 0.156250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.593750 0.156250
vt 0.593750 0.656250
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.406250 -0.000000
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.187500 1.000000
vt 0.593750 0.031250
vt 0.593750 0.031250
vt 0.406250 -0.000000
vt 0.593750 0.656250
vt 0.500000 0.718750
vt 0.406250 0.656250
vt 0.531250 0.656250
vt 0.500000 0.718750
vt 0.531250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.406250 0.656250
vt 0.593750 0.656250
vt 0.593750 0.656250
vt 0.593750 0.656250
vt 0.593750 0.656250
vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.9806 0.1961
vn 0.0000 -0.9806 -0.1961
s off
f 2/1/1 4/2/1 3/3/1
f 7/4/2 6/5/2 5/6/2
f 11/7/2 10/8/2 9/9/2
f 15/10/2 14/11/2 13/12/2
f 19/13/2 18/14/2 17/15/2
f 23/16/2 22/17/2 21/18/2
f 27/19/1 25/20/1 26/21/1
f 31/22/1 29/23/1 30/24/1
f 35/25/1 33/26/1 34/27/1
f 39/28/1 37/29/1 38/30/1
f 17/31/3 33/32/3 19/33/3
f 10/34/4 26/35/4 9/36/4
f 18/37/4 34/38/4 17/39/4
f 12/40/5 27/41/5 10/8/5
f 20/42/5 35/43/5 18/14/5
f 11/7/6 28/44/6 12/45/6
f 5/46/3 4/47/3 7/48/3
f 19/13/6 36/49/6 20/50/6
f 13/51/3 29/52/3 15/53/3
f 6/54/4 3/55/4 5/56/4
f 21/57/3 37/58/3 23/59/3
f 14/60/4 30/61/4 13/62/4
f 8/63/5 2/64/5 6/5/5
f 22/65/4 38/66/4 21/67/4
f 16/68/5 31/69/5 14/11/5
f 7/4/6 1/70/6 8/71/6
f 24/72/5 39/73/5 22/17/5
f 15/10/6 32/74/6 16/75/6
f 9/76/3 25/77/3 11/78/3
f 23/16/6 40/79/6 24/80/6
f 141/81/5 46/82/5 42/83/5
f 145/84/3 43/85/3 137/86/3
f 153/87/3 51/88/3 157/89/3
f 46/90/4 49/91/4 42/92/4
f 48/93/7 160/94/7 152/95/7
f 42/83/8 153/96/8 141/81/8
f 44/97/6 52/98/6 48/99/6
f 53/100/5 165/101/5 161/102/5
f 45/103/7 168/104/7 148/105/7
f 43/106/8 161/102/8 137/107/8
f 47/108/6 53/109/6 43/110/6
f 41/111/4 56/112/4 45/113/4
f 61/114/3 59/115/3 57/116/3
f 63/117/6 60/118/6 59/119/6
f 62/120/4 57/121/4 58/122/4
f 64/123/5 58/124/5 60/125/5
f 61/114/1 64/123/1 63/117/1
f 69/126/3 67/127/3 65/128/3
f 71/129/6 68/130/6 67/131/6
f 70/132/4 65/133/4 66/134/4
f 72/135/5 66/136/5 68/137/5
f 69/126/1 72/135/1 71/129/1
f 77/138/3 75/139/3 73/140/3
f 79/141/6 76/142/6 75/143/6
f 78/144/4 73/145/4 74/146/4
f 80/147/5 74/148/5 76/149/5
f 77/138/1 80/147/1 79/141/1
f 85/150/3 83/151/3 81/152/3
f 87/153/6 84/154/6 83/155/6
f 86/156/4 81/157/4 82/158/4
f 88/159/5 82/160/5 84/161/5
f 85/150/1 88/159/1 87/153/1
f 93/162/3 91/163/3 89/164/3
f 95/165/6 92/166/6 91/167/6
f 94/168/4 89/169/4 90/170/4
f 96/171/5 90/172/5 92/173/5
f 93/162/1 96/171/1 95/165/1
f 101/174/3 99/175/3 97/176/3
f 103/177/6 100/178/6 99/179/6
f 102/180/4 97/181/4 98/182/4
f 104/183/5 98/184/5 100/185/5
f 101/174/1 104/183/1 103/177/1
f 109/186/3 107/187/3 105/188/3
f 111/189/6 108/190/6 107/191/6
f 110/192/4 105/193/4 106/194/4
f 112/195/5 106/196/5 108/197/5
f 109/186/1 112/195/1 111/189/1
f 117/198/3 115/199/3 113/200/3
f 119/201/6 116/202/6 115/203/6
f 118/204/4 113/205/4 114/206/4
f 120/207/5 114/208/5 116/209/5
f 117/198/1 120/207/1 119/201/1
f 125/210/3 123/211/3 121/212/3
f 127/213/6 124/214/6 123/215/6
f 126/216/4 121/217/4 122/218/4
f 128/219/5 122/220/5 124/221/5
f 125/210/1 128/219/1 127/213/1
f 133/222/3 131/223/3 129/224/3
f 135/225/6 132/226/6 131/227/6
f 134/228/4 129/229/4 130/230/4
f 136/231/5 130/232/5 132/233/5
f 133/222/1 136/231/1 135/225/1
f 140/234/8 54/235/8 41/236/8
f 139/237/8 164/238/8 140/239/8
f 138/240/8 163/241/8 139/242/8
f 137/243/8 162/244/8 138/245/8
f 145/84/7 55/246/7 47/247/7
f 146/248/7 165/249/7 145/250/7
f 147/251/7 166/252/7 146/253/7
f 148/254/7 167/255/7 147/256/7
f 164/257/5 56/258/5 54/235/5
f 163/259/5 168/260/5 164/238/5
f 162/261/5 167/262/5 163/241/5
f 161/263/5 166/264/5 162/244/5
f 144/265/8 50/266/8 44/267/8
f 143/268/8 156/269/8 144/270/8
f 142/271/8 155/272/8 143/273/8
f 141/274/8 154/275/8 142/276/8
f 149/277/7 51/88/7 46/82/7
f 150/278/7 157/279/7 149/280/7
f 151/281/7 158/282/7 150/283/7
f 152/284/7 159/285/7 151/286/7
f 50/287/3 160/94/3 52/288/3
f 156/289/3 159/285/3 160/290/3
f 155/291/3 158/282/3 159/292/3
f 154/293/3 157/279/3 158/294/3
f 45/103/3 140/295/3 41/296/3
f 148/254/3 139/297/3 140/298/3
f 147/251/3 138/299/3 139/300/3
f 146/248/3 137/301/3 138/302/3
f 44/267/5 152/95/5 144/265/5
f 144/270/5 151/286/5 143/268/5
f 143/273/5 150/283/5 142/271/5
f 142/276/5 149/280/5 141/274/5
f 2/1/1 1/70/1 4/2/1
f 7/4/2 8/71/2 6/5/2
f 11/7/2 12/45/2 10/8/2
f 15/10/2 16/75/2 14/11/2
f 19/13/2 20/50/2 18/14/2
f 23/16/2 24/80/2 22/17/2
f 27/19/1 28/44/1 25/20/1
f 31/22/1 32/74/1 29/23/1
f 35/25/1 36/49/1 33/26/1
f 39/28/1 40/79/1 37/29/1
f 17/31/3 34/303/3 33/32/3
f 10/34/4 27/304/4 26/35/4
f 18/37/4 35/305/4 34/38/4
f 12/40/5 28/306/5 27/41/5
f 20/42/5 36/307/5 35/43/5
f 11/7/6 25/20/6 28/44/6
f 5/46/3 3/308/3 4/47/3
f 19/13/6 33/26/6 36/49/6
f 13/51/3 30/309/3 29/52/3
f 6/54/4 2/310/4 3/55/4
f 21/57/3 38/311/3 37/58/3
f 14/60/4 31/312/4 30/61/4
f 8/63/5 1/313/5 2/64/5
f 22/65/4 39/314/4 38/66/4
f 16/68/5 32/315/5 31/69/5
f 7/4/6 4/2/6 1/70/6
f 24/72/5 40/316/5 39/73/5
f 15/10/6 29/23/6 32/74/6
f 9/76/3 26/317/3 25/77/3
f 23/16/6 37/29/6 40/79/6
f 141/81/5 149/277/5 46/82/5
f 145/84/3 47/247/3 43/85/3
f 153/87/3 49/318/3 51/88/3
f 46/90/4 51/319/4 49/91/4
f 48/93/7 52/288/7 160/94/7
f 42/83/8 49/320/8 153/96/8
f 44/97/6 50/321/6 52/98/6
f 53/100/5 55/246/5 165/101/5
f 45/103/7 56/258/7 168/104/7
f 43/106/8 53/100/8 161/102/8
f 47/108/6 55/322/6 53/109/6
f 41/111/4 54/323/4 56/112/4
f 61/114/3 63/117/3 59/115/3
f 63/117/6 64/123/6 60/118/6
f 62/120/4 61/114/4 57/121/4
f 64/123/5 62/120/5 58/124/5
f 61/114/1 62/120/1 64/123/1
f 69/126/3 71/129/3 67/127/3
f 71/129/6 72/135/6 68/130/6
f 70/132/4 69/126/4 65/133/4
f 72/135/5 70/132/5 66/136/5
f 69/126/1 70/132/1 72/135/1
f 77/138/3 79/141/3 75/139/3
f 79/141/6 80/147/6 76/142/6
f 78/144/4 77/138/4 73/145/4
f 80/147/5 78/144/5 74/148/5
f 77/138/1 78/144/1 80/147/1
f 85/150/3 87/153/3 83/151/3
f 87/153/6 88/159/6 84/154/6
f 86/156/4 85/150/4 81/157/4
f 88/159/5 86/156/5 82/160/5
f 85/150/1 86/156/1 88/159/1
f 93/162/3 95/165/3 91/163/3
f 95/165/6 96/171/6 92/166/6
f 94/168/4 93/162/4 89/169/4
f 96/171/5 94/168/5 90/172/5
f 93/162/1 94/168/1 96/171/1
f 101/174/3 103/177/3 99/175/3
f 103/177/6 104/183/6 100/178/6
f 102/180/4 101/174/4 97/181/4
f 104/183/5 102/180/5 98/184/5
f 101/174/1 102/180/1 104/183/1
f 109/186/3 111/189/3 107/187/3
f 111/189/6 112/195/6 108/190/6
f 110/192/4 109/186/4 105/193/4
f 112/195/5 110/192/5 106/196/5
f 109/186/1 110/192/1 112/195/1
f 117/198/3 119/201/3 115/199/3
f 119/201/6 120/207/6 116/202/6
f 118/204/4 117/198/4 113/205/4
f 120/207/5 118/204/5 114/208/5
f 117/198/1 118/204/1 120/207/1
f 125/210/3 127/213/3 123/211/3
f 127/213/6 128/219/6 124/214/6
f 126/216/4 125/210/4 121/217/4
f 128/219/5 126/216/5 122/220/5
f 125/210/1 126/216/1 128/219/1
f 133/222/3 135/225/3 131/223/3
f 135/225/6 136/231/6 132/226/6
f 134/228/4 133/222/4 129/229/4
f 136/231/5 134/228/5 130/232/5
f 133/222/1 134/228/1 136/231/1
f 140/234/8 164/257/8 54/235/8
f 139/237/8 163/259/8 164/238/8
f 138/240/8 162/261/8 163/241/8
f 137/243/8 161/263/8 162/244/8
f 145/84/7 165/101/7 55/246/7
f 146/248/7 166/264/7 165/249/7
f 147/251/7 167/262/7 166/252/7
f 148/254/7 168/260/7 167/255/7
f 164/257/5 168/104/5 56/258/5
f 163/259/5 167/255/5 168/260/5
f 162/261/5 166/252/5 167/262/5
f 161/263/5 165/249/5 166/264/5
f 144/265/8 156/324/8 50/266/8
f 143/268/8 155/325/8 156/269/8
f 142/271/8 154/326/8 155/272/8
f 141/274/8 153/327/8 154/275/8
f 149/277/7 157/89/7 51/88/7
f 150/278/7 158/294/7 157/279/7
f 151/281/7 159/292/7 158/282/7
f 152/284/7 160/290/7 159/285/7
f 50/287/3 156/328/3 160/94/3
f 156/289/3 155/329/3 159/285/3
f 155/291/3 154/330/3 158/282/3
f 154/293/3 153/331/3 157/279/3
f 45/103/3 148/105/3 140/295/3
f 148/254/3 147/256/3 139/297/3
f 147/251/3 146/253/3 138/299/3
f 146/248/3 145/250/3 137/301/3
f 44/267/5 48/93/5 152/95/5
f 144/270/5 152/284/5 151/286/5
f 143/273/5 151/281/5 150/283/5
f 142/276/5 150/278/5 149/280/5

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Some files were not shown because too many files have changed in this diff Show More