Merge remote-tracking branch 'HbmMods/master'

This commit is contained in:
Vaern 2023-08-13 17:21:08 -07:00
commit 474278cb1b
106 changed files with 7464 additions and 211 deletions

View File

@ -1,27 +1,33 @@
## Added
* Electrolysis machine
* A large machine that can do the chemical plant's electrolysis recipes, as well as crystal processing
* Crystals are turned into molten metals as well as byproducts, the metal can be cast using foundry blocks
* Processing crystals requires nitric acid and yields more than what the centrifuge would give
* Environment suit
* An airtight suit for diving with high radiation resistance
* Relatively cheap, but protection is comparatively low
* Has sprint assist and accelerated diving
* Analysis tool
* A more universal version of the power net analyzer
* Currently only works on fluid networks though
* In addition to seeing links and subscribers, the analysis tool also displays subscriber positions as well as a log (up to 50 entries) of what block received how much fluid
* This should finally give more insight in the bug that rarely causes fluids to disappear
* Leadburster
* A 40mm launcher grenade that doesn't explode, instead it attaches itself to a block and starts firing bullets
* Fires in circles for 2 seconds before it self-destructs
* Congo lake
* A 40mm pump-action grenade launcher with a capacity of 4 rounds
* Lantern
* Cheap and fancy illumination
* Will blind glyphids in a small radius
* Glyphids don't actually have eyes, just don't think about it too much
* Ashpit
* An optional part that can be placed under fireboxes and heating ovens
* Collects ashes, producing one ash pile for every 10 furnace operations worth of fuel
* Ash comes in different types like wood (from planks, logs and saplings), coal (coal, lignite and coke) and generic (everything else)
* Ashes can be used as dyes, for making industrial fertilizer, as low-efficiency furnace fuel or for carbon in the crucible
* Coal ashes can also be centrifuged, returning the flammable content as unburned coal dust as well as a small amount of boron
## Changed
* Bedrock ores now spawn in the nether
* Nether bedrock ores include red phosphorus, quartz and glowstone, all yielding the items directly instead of ores
* All current nether bedrock ores are tier 1 and do not require any bore fluid
* Custom machines now show their recipes in NEI
* All it took was battling NEI's source code for 3 hours and my sanity
* The chlorocalcite centrifugation process now requires 8,000mB of sulfuric acid instead of 100mB of water
* Mixed chlorocalcite solution now requires flux as a reducing agent
* All chlorine producing electrolysis recipes have been moved to the electrolysis machine and can no longer be done in the chemical plant
* If only there was a much simpler recipe that may have existed at some point, life could be a dream
* Zirconium and lithium are now recognized crucible materials
* Glowstone now yields 100mB of chlorine in the combination oven instead of the initial 50mB
* Updated polish and chinese localization
* Flechettes now get stuck in blocks for a few seconds
* NBT kits now display the amount of items in a stack
* Removed the special nuclear meteorite
## Fixed
* Fixed custom machines not sending fluid
* Fixed custom machine item IO not working beyond the first slot
* Fixed the player's arms clipping through the armor model when punching
* Fixed thermos craching config hitting before the config is saved, resulting in an empty config the first time the server is launched
* Fixed heating oven not visually connecting to exhaust pipes
* Fixed loot blocks not correctly rendering items that require multiple render passes
* Fixed special meteorites spawning in worldgen

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=4683
mod_build_number=4690
credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\
\ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models,\

View File

@ -336,6 +336,9 @@ public class ModBlocks {
public static Block lamp_uv_on;
public static Block lamp_demon;
public static Block lantern;
public static Block lantern_behemoth;
public static Block reinforced_stone;
public static Block concrete_smooth;
public static Block concrete_colored;
@ -665,6 +668,7 @@ public class ModBlocks {
public static Block heater_oilburner;
public static Block heater_electric;
public static Block heater_heatex;
public static Block machine_ashpit;
public static Block furnace_iron;
public static Block furnace_steel;
@ -1546,6 +1550,8 @@ public class ModBlocks {
lamp_uv_off = new UVLamp(false).setBlockName("lamp_uv_off").setCreativeTab(MainRegistry.blockTab);
lamp_uv_on = new UVLamp(true).setBlockName("lamp_uv_on").setCreativeTab(null);
lamp_demon = new DemonLamp().setBlockName("lamp_demon").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":lamp_demon");
lantern = new BlockLantern().setBlockName("lantern").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_steel");
lantern_behemoth = new BlockLanternBehemoth().setBlockName("lantern_behemoth").setStepSound(Block.soundTypeMetal).setCreativeTab(null).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_rust");
reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(3000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone");
concrete_smooth = new BlockRadResistant(Material.rock).setBlockName("concrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete");
@ -1555,9 +1561,9 @@ public class ModBlocks {
concrete_asbestos = new BlockGeneric(Material.rock).setBlockName("concrete_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete_asbestos");
concrete_super = new BlockUberConcrete().setBlockName("concrete_super").setCreativeTab(MainRegistry.blockTab).setHardness(150.0F).setResistance(10000.0F);
concrete_super_broken = new BlockFalling(Material.rock).setBlockName("concrete_super_broken").setCreativeTab(MainRegistry.blockTab).setHardness(10.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":concrete_super_broken");
concrete_pillar = new BlockRotatablePillar(Material.rock, RefStrings.MODID + ":concrete_pillar_top").setBlockName("concrete_pillar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(4000.0F).setBlockTextureName(RefStrings.MODID + ":concrete_pillar_side");
brick_concrete = new BlockGeneric(Material.rock).setBlockName("brick_concrete").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete");
brick_concrete_mossy = new BlockGeneric(Material.rock).setBlockName("brick_concrete_mossy").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_mossy");
concrete_pillar = new BlockRotatablePillar(Material.rock, RefStrings.MODID + ":concrete_pillar_top").setBlockName("concrete_pillar").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":concrete_pillar_side");
brick_concrete = new BlockGeneric(Material.rock).setBlockName("brick_concrete").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(5000.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete");
brick_concrete_mossy = new BlockGeneric(Material.rock).setBlockName("brick_concrete_mossy").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(5000.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_mossy");
brick_concrete_cracked = new BlockGeneric(Material.rock).setBlockName("brick_concrete_cracked").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(2000.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_cracked");
brick_concrete_broken = new BlockGeneric(Material.rock).setBlockName("brick_concrete_broken").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(1500.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_broken");
brick_concrete_marked = new BlockWriting(Material.rock, RefStrings.MODID + ":brick_concrete").setBlockName("brick_concrete_marked").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(1500.0F).setBlockTextureName(RefStrings.MODID + ":brick_concrete_marked");
@ -1811,6 +1817,7 @@ public class ModBlocks {
heater_oilburner = new HeaterOilburner().setBlockName("heater_oilburner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
heater_electric = new HeaterElectric().setBlockName("heater_electric").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
heater_heatex = new HeaterHeatex().setBlockName("heater_heatex").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_ashpit = new MachineAshpit().setBlockName("machine_ashpit").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName("stonebrick");
furnace_iron = new FurnaceIron().setBlockName("furnace_iron").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium");
furnace_steel = new FurnaceSteel().setBlockName("furnace_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2697,6 +2704,8 @@ public class ModBlocks {
GameRegistry.registerBlock(lamp_uv_off, lamp_uv_off.getUnlocalizedName());
GameRegistry.registerBlock(lamp_uv_on, lamp_uv_on.getUnlocalizedName());
GameRegistry.registerBlock(lamp_demon, lamp_demon.getUnlocalizedName());
GameRegistry.registerBlock(lantern, lantern.getUnlocalizedName());
GameRegistry.registerBlock(lantern_behemoth, lantern_behemoth.getUnlocalizedName());
//Reinforced Blocks
GameRegistry.registerBlock(asphalt, ItemBlockBlastInfo.class, asphalt.getUnlocalizedName());
@ -3059,6 +3068,7 @@ public class ModBlocks {
GameRegistry.registerBlock(machine_epress, machine_epress.getUnlocalizedName());
register(heater_firebox);
register(heater_oven);
register(machine_ashpit);
register(heater_oilburner);
register(heater_electric);
register(heater_heatex);

View File

@ -0,0 +1,31 @@
package com.hbm.blocks.generic;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.deco.TileEntityLantern;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockLantern extends BlockDummyable {
public BlockLantern() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityLantern();
return null;
}
@Override
public int[] getDimensions() {
return new int[] {4, 0, 0, 0, 0, 0};
}
@Override
public int getOffset() {
return 0;
}
}

View File

@ -0,0 +1,59 @@
package com.hbm.blocks.generic;
import java.util.Random;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.tileentity.IRepairable;
import com.hbm.tileentity.deco.TileEntityLanternBehemoth;
import api.hbm.block.IToolable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class BlockLanternBehemoth extends BlockDummyable implements IToolable, ILookOverlay {
public BlockLanternBehemoth() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityLanternBehemoth();
return null;
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
@Override
public int[] getDimensions() {
return new int[] {4, 0, 0, 0, 0, 0};
}
@Override
public int getOffset() {
return 0;
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.TORCH) return false;
return IRepairable.tryRepairMultiblock(world, x, y, z, this, player);
}
@Override
@SideOnly(Side.CLIENT)
public void printHook(Pre event, World world, int x, int y, int z) {
IRepairable.addGenericOverlay(event, world, x, y, z, this);
}
}

View File

@ -23,7 +23,7 @@ public class HeaterOven extends BlockDummyable implements ITooltipProvider {
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityHeaterOven();
return new TileEntityProxyCombo(true, false, false);
return new TileEntityProxyCombo().inventory().fluid();
}
@Override

View File

@ -0,0 +1,47 @@
package com.hbm.blocks.machine;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityAshpit;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class MachineAshpit extends BlockDummyable implements ITooltipProvider {
public MachineAshpit() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityAshpit();
return new TileEntityProxyCombo().inventory();
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public int[] getDimensions() {
return new int[] {0, 0, 1, 1, 1, 1};
}
@Override
public int getOffset() {
return 1;
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -151,33 +151,26 @@ public class FluidDuctGauge extends FluidDuctBase implements IBlockMultiPass, IL
this.deltaLastSecond = Math.max(nbt.getLong("deltaS"), 0);
}
@Override
public String getComponentName() {
return "ntm_fluid_gauge";
}
@Callback(direct = true, limit = 16)
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getTick(Context context, Arguments args) {
return new Object[] {deltaTick};
public Object[] getTransfer(Context context, Arguments args) {
return new Object[] {deltaTick, deltaSecond};
}
@Callback(direct = true, limit = 16)
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getSecond(Context context, Arguments args) {
return new Object[] {deltaSecond};
public Object[] getFluid(Context context, Arguments args) {
return new Object[] {getType().getName()};
}
@Callback(direct = true, limit = 16)
@Optional.Method(modid = "OpenComputers")
public Object[] getType(Context context, Arguments args) {
return new Object[] {I18nUtil.resolveKey(getType().getUnlocalizedName())};
}
@Callback(direct = true, limit = 16)
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {deltaTick, deltaSecond, I18nUtil.resolveKey(getType().getUnlocalizedName()), xCoord, yCoord, zCoord};
return new Object[] {deltaTick, deltaSecond, getType().getName(), xCoord, yCoord, zCoord};
}
}
}

View File

@ -63,8 +63,9 @@ public class PowderRecipes {
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 8), new Object[] { PB.dust(), S.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 12), new Object[] { CA.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_flux, 16), new Object[] { BORAX.dust(), KEY_SAND });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_fertilizer, 4), new Object[] { CA.dust(), P_RED.dust(), KNO.dust(), S.dust() });
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_fertilizer, 4), new Object[] { ANY_ASH.any(), P_RED.dust(), KNO.dust(), S.dust() });
if(GeneralConfig.enableLBSM && GeneralConfig.enableLBSMSimpleCrafting) {
CraftingManager.addShapelessAuto(new ItemStack(ModItems.powder_advanced_alloy, 4), new Object[] { REDSTONE.dust(), IRON.dust(), COAL.dust(), CU.dust() });

View File

@ -129,6 +129,7 @@ public class ToolRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.mirror_tool), new Object[] { " A ", " IA", "I ", 'A', AL.ingot(), 'I', IRON.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_tool), new Object[] { " A ", " IA", "I ", 'A', PB.ingot(), 'I', IRON.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', ModItems.wire_red_copper, 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', ModItems.battery_su });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.analysis_tool), new Object[] { " G", " S ", "S ", 'G', KEY_ANYPANE, 'S', STEEL.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.kit_toolbox_empty), new Object[] { "CCC", "CIC", 'C', CU.plate(), 'I', IRON.ingot() });

View File

@ -75,6 +75,7 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_karl, 1), new Object[] { "SSW", " MW", 'S', ModItems.hull_small_steel, 'W', ALLOY.plate(), 'M', ModItems.mechanism_launcher_2 });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_quadro, 1), new Object[] { "SSS", "SSS", "CM ", 'S', ModItems.hull_small_steel, 'C', ModItems.circuit_targeting_tier3, 'M', ModItems.mechanism_launcher_2 });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_hk69, 1), new Object[] { "SSI", " MB", 'S', ModItems.hull_small_steel, 'I', IRON.ingot(), 'M', ModItems.mechanism_launcher_1, 'B', ModItems.bolt_tungsten });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_congolake, 1), new Object[] { "HHR", "WLW", 'H', ModItems.hull_small_aluminium, 'R', ModItems.mechanism_rifle_1, 'W', KEY_LOG, 'L', ModItems.mechanism_launcher_1 });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_stinger, 1), new Object[] { "SSW", "CMW", 'S', STEEL.plate(), 'W', TI.plate(), 'C', ModItems.circuit_red_copper, 'M', ModItems.mechanism_launcher_2 });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_stinger_rocket, 4), new Object[] { "SS ", "STI", " IR", 'S', STEEL.plate(), 'T', Item.getItemFromBlock(Blocks.tnt), 'I', AL.plate(), 'R', REDSTONE.dust() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_revolver, 1), new Object[] { "SSM", " RW", 'S', STEEL.plate(), 'W', KEY_PLANKS, 'R', ModItems.wire_aluminium, 'M', ModItems.mechanism_revolver_1 });
@ -261,6 +262,7 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.NUCLEAR), new Object[] { " P ", "GIG", " P ", 'G', ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.HE), 'I', ModItems.neutron_reflector, 'P', PU239.nugget() });
CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.FINNED), new Object[] { "G", "R", 'G', Items.feather, 'R', ModItems.ammo_grenade });
CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.KAMPF), new Object[] { "G", "R", 'G', ModItems.ammo_rocket, 'R', ModItems.ammo_grenade });
CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.LEADBURSTER), new Object[] { "LCL", "CHC", "LML", 'L', ModItems.pellet_buckshot, 'C', ANY_SMOKELESS.dust(), 'H', ModItems.hull_small_aluminium, 'M', ModItems.motor });
//240mm Shells
CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_shell, 4), new Object[] { " T ", "GHG", "CCC", 'T', ModBlocks.tnt, 'G', Items.gunpowder, 'H', ModItems.hull_small_steel, 'C', CU.ingot() });

View File

@ -19,6 +19,7 @@ import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
@ -68,6 +69,7 @@ public class EntityGlyphid extends EntityMob {
@Override
protected Entity findPlayerToAttack() {
if(this.isPotionActive(Potion.blindness)) return null;
EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, useExtendedTargeting() ? 128D : 16D);
return entityplayer != null && this.canEntityBeSeen(entityplayer) ? entityplayer : null;
}
@ -75,11 +77,18 @@ public class EntityGlyphid extends EntityMob {
@Override
protected void updateEntityActionState() {
super.updateEntityActionState();
// hell yeah!!
if(useExtendedTargeting() && this.entityToAttack != null && !this.hasPath()) {
this.setPathToEntity(PathFinderUtils.getPathEntityToEntityPartial(worldObj, this, this.entityToAttack, 16F, true, false, false, true));
if(this.isPotionActive(Potion.blindness)) {
this.entityToAttack = null;
this.setPathToEntity(null);
} else {
// hell yeah!!
if(useExtendedTargeting() && this.entityToAttack != null && !this.hasPath()) {
this.setPathToEntity(PathFinderUtils.getPathEntityToEntityPartial(worldObj, this, this.entityToAttack, 16F, true, false, false, true));
}
}
}
public boolean useExtendedTargeting() {

View File

@ -166,6 +166,7 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
@Override
protected void entityInit() {
super.entityInit();
//style
this.dataWatcher.addObject(16, Byte.valueOf((byte) 0));
//trail
@ -251,11 +252,11 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
if(mop.typeOfHit == mop.typeOfHit.BLOCK) {
boolean hRic = rand.nextInt(100) < config.HBRC;
boolean doesRic = config.doesRicochet || hRic;
boolean doesRic = config.doesRicochet && hRic;
if(!config.isSpectral && !doesRic) {
this.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord);
this.onBlockImpact(mop.blockX, mop.blockY, mop.blockZ);
this.onBlockImpact(mop.blockX, mop.blockY, mop.blockZ, mop.sideHit);
}
if(doesRic) {
@ -302,7 +303,7 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
} else {
if(!worldObj.isRemote) {
this.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord);
onBlockImpact(mop.blockX, mop.blockY, mop.blockZ);
onBlockImpact(mop.blockX, mop.blockY, mop.blockZ, mop.sideHit);
}
}
@ -375,13 +376,13 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
}
//for when a bullet dies by hitting a block
private void onBlockImpact(int bX, int bY, int bZ) {
private void onBlockImpact(int bX, int bY, int bZ, int sideHit) {
if(config.bntImpact != null)
config.bntImpact.behaveBlockHit(this, bX, bY, bZ);
config.bntImpact.behaveBlockHit(this, bX, bY, bZ, sideHit);
if(!worldObj.isRemote) {
if(!config.liveAfterImpact && !config.isSpectral && bY > -1) this.setDead();
if(!config.liveAfterImpact && !config.isSpectral && bY > -1 && !this.inGround) this.setDead();
if(!config.doesPenetrate && bY == -1) this.setDead();
}
@ -472,7 +473,7 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
//for when a bullet dies by hitting an entity
private void onEntityImpact(Entity e) {
onEntityHurt(e);
onBlockImpact(-1, -1, -1);
onBlockImpact(-1, -1, -1, -1);
if(config.bntHit != null)
config.bntHit.behaveEntityHit(this, e);
@ -582,6 +583,6 @@ public class EntityBulletBaseNT extends EntityThrowableInterp implements IBullet
public static interface IBulletHurtBehaviorNT { public void behaveEntityHurt(EntityBulletBaseNT bullet, Entity hit); }
public static interface IBulletHitBehaviorNT { public void behaveEntityHit(EntityBulletBaseNT bullet, Entity hit); }
public static interface IBulletRicochetBehaviorNT { public void behaveBlockRicochet(EntityBulletBaseNT bullet, int x, int y, int z); }
public static interface IBulletImpactBehaviorNT { public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z); }
public static interface IBulletImpactBehaviorNT { public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit); }
public static interface IBulletUpdateBehaviorNT { public void behaveUpdate(EntityBulletBaseNT bullet); }
}

View File

@ -2,6 +2,8 @@ package com.hbm.entity.projectile;
import java.util.List;
import com.hbm.util.TrackerUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
@ -32,7 +34,7 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
public int throwableShake;
protected EntityLivingBase thrower;
private String throwerName;
private int ticksInGround;
public int ticksInGround;
private int ticksInAir;
public EntityThrowableNT(World world) {
@ -41,7 +43,17 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
}
@Override
protected void entityInit() { }
protected void entityInit() {
this.dataWatcher.addObject(2, Byte.valueOf((byte)0));
}
public void setStuckIn(int side) {
this.dataWatcher.updateObject(2, (byte) side);
}
public int getStuckIn() {
return this.dataWatcher.getWatchableObjectByte(2);
}
@Override
@SideOnly(Side.CLIENT)
@ -214,10 +226,6 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
}
}
this.posX += this.motionX * motionMult();
this.posY += this.motionY * motionMult();
this.posZ += this.motionZ * motionMult();
if(mop != null) {
if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && this.worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ) == Blocks.portal) {
this.setInPortal();
@ -226,30 +234,37 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
}
}
float hyp = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
this.rotationYaw = (float) (Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
for(this.rotationPitch = (float) (Math.atan2(this.motionY, (double) hyp) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
;
if(!this.onGround) {
float hyp = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
this.rotationYaw = (float) (Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
for(this.rotationPitch = (float) (Math.atan2(this.motionY, (double) hyp) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) {
;
}
while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
this.prevRotationPitch += 360.0F;
}
while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
this.prevRotationYaw -= 360.0F;
}
while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
this.prevRotationYaw += 360.0F;
}
this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
}
while(this.rotationPitch - this.prevRotationPitch >= 180.0F) {
this.prevRotationPitch += 360.0F;
}
while(this.rotationYaw - this.prevRotationYaw < -180.0F) {
this.prevRotationYaw -= 360.0F;
}
while(this.rotationYaw - this.prevRotationYaw >= 180.0F) {
this.prevRotationYaw += 360.0F;
}
this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
float drag = this.getAirDrag();
double gravity = this.getGravityVelocity();
this.posX += this.motionX * motionMult();
this.posY += this.motionY * motionMult();
this.posZ += this.motionZ * motionMult();
if(this.isInWater()) {
for(int i = 0; i < 4; ++i) {
float f = 0.25F;
@ -264,7 +279,6 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
this.motionZ *= (double) drag;
this.motionY -= gravity;
this.setPosition(this.posX, this.posY, this.posZ);
}
}
@ -280,7 +294,7 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
return 5;
}
public void getStuck(int x, int y, int z) {
public void getStuck(int x, int y, int z, int side) {
this.stuckBlockX = x;
this.stuckBlockY = y;
this.stuckBlockZ = z;
@ -289,6 +303,8 @@ public abstract class EntityThrowableNT extends Entity implements IProjectile {
this.motionX = 0;
this.motionY = 0;
this.motionZ = 0;
this.setStuckIn(side);
TrackerUtil.sendTeleport(worldObj, this);
}
public double getGravityVelocity() {

View File

@ -68,6 +68,7 @@ public class BulletConfigSyncingUtil {
public static int GRENADE_PHOSPHORUS = i++;
public static int GRENADE_TRACER = i++;
public static int GRENADE_KAMPF = i++;
public static int GRENADE_LEADBURSTER = i++;
public static int G12_NORMAL = i++;
public static int G12_INCENDIARY = i++;
@ -365,6 +366,7 @@ public class BulletConfigSyncingUtil {
configSet.put(GRENADE_NUCLEAR, GunGrenadeFactory.getGrenadeNuclearConfig());
configSet.put(GRENADE_TRACER, GunGrenadeFactory.getGrenadeTracerConfig());
configSet.put(GRENADE_KAMPF, GunGrenadeFactory.getGrenadeKampfConfig());
configSet.put(GRENADE_LEADBURSTER, GunGrenadeFactory.getGrenadeLeadbursterConfig());
configSet.put(G12_NORMAL, Gun12GaugeFactory.get12GaugeConfig());
configSet.put(G12_INCENDIARY, Gun12GaugeFactory.get12GaugeFireConfig());

View File

@ -140,6 +140,7 @@ public class BulletConfiguration implements Cloneable {
public static final int STYLE_BLADE = 15;
public static final int STYLE_BARREL = 16;
public static final int STYLE_TAU = 17;
public static final int STYLE_LEADBURSTER = 18;
public static final int PLINK_NONE = 0;
public static final int PLINK_BULLET = 1;

View File

@ -51,6 +51,15 @@ public class FuelHandler implements IFuelHandler {
}
}
if(fuel.getItem() == ModItems.powder_ash) {
int meta = fuel.getItemDamage();
switch(meta) {
case 0: return single / 2;
case 1: return single;
case 2: return single / 2;
}
}
return 0;
}

View File

@ -105,6 +105,7 @@ public class GunConfiguration implements Cloneable {
public static final String RSOUND_SHOTGUN = "hbm:weapon.shotgunReload";
public static final String RSOUND_LAUNCHER = "hbm:weapon.rpgReload";
public static final String RSOUND_GRENADE = "hbm:weapon.hkReload";
public static final String RSOUND_GRENADE_NEW = "hbm:weapon.glReload";
public static final String RSOUND_FATMAN = "hbm:weapon.fatmanReload";
public GunConfiguration silenced() {

View File

@ -146,7 +146,7 @@ public class BulletConfigFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(bullet.worldObj.isRemote)
return;
@ -310,12 +310,19 @@ public class BulletConfigFactory {
}
}
public static void makeFlechette(BulletConfiguration bullet) {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
bulletnt.getStuck(x, y, z, sideHit);
};
}
public static IBulletImpactBehaviorNT getPhosphorousEffect(final int radius, final int duration, final int count, final double motion, float hazeChance) {
IBulletImpactBehaviorNT impact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
List<Entity> hit = bullet.worldObj.getEntitiesWithinAABBExcludingEntity(bullet, AxisAlignedBB.getBoundingBox(bullet.posX - radius, bullet.posY - radius, bullet.posZ - radius, bullet.posX + radius, bullet.posY + radius, bullet.posZ + radius));
@ -357,7 +364,7 @@ public class BulletConfigFactory {
IBulletImpactBehaviorNT impact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
List<Entity> hit = bullet.worldObj.getEntitiesWithinAABBExcludingEntity(bullet, AxisAlignedBB.getBoundingBox(bullet.posX - radius, bullet.posY - radius, bullet.posZ - radius, bullet.posX + radius, bullet.posY + radius, bullet.posZ + radius));

View File

@ -147,6 +147,7 @@ public class Gun20GaugeFactory {
bullet.style = BulletConfiguration.STYLE_FLECHETTE;
bullet.HBRC = 2;
bullet.LBRC = 95;
BulletConfigFactory.makeFlechette(bullet);
bullet.spentCasing = CASING20GAUGE.clone().register("20GaFlech").setColor(0x2847FF, SpentCasing.COLOR_CASE_BRASS);

View File

@ -223,7 +223,7 @@ public class Gun44MagnumFactory {
bullet.effects = new ArrayList();
bullet.effects.add(new PotionEffect(eff));
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");

View File

@ -179,6 +179,7 @@ public class Gun4GaugeFactory {
bullet.style = BulletConfiguration.STYLE_FLECHETTE;
bullet.HBRC = 2;
bullet.LBRC = 95;
BulletConfigFactory.makeFlechette(bullet);
bullet.spentCasing = CASING4GAUGE.clone().register("4GaFlech").setColor(0x1537FF, SpentCasing.COLOR_CASE_4GA);
@ -205,7 +206,7 @@ public class Gun4GaugeFactory {
bullet.effects = new ArrayList();
bullet.effects.add(new PotionEffect(eff));
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");
@ -251,7 +252,7 @@ public class Gun4GaugeFactory {
bullet.trail = 1;
bullet.explosive = 0.0F;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;
@ -283,7 +284,7 @@ public class Gun4GaugeFactory {
bullet.trail = 1;
bullet.explosive = 0.0F;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;

View File

@ -62,7 +62,7 @@ public class Gun50BMGFactory {
bullet.leadChance = 20;
bullet.blockDamage = false;
bullet.bntImpact = (projectile, x, y, z) -> projectile.worldObj.newExplosion(projectile, x, y, z, 2.0F, false, false);
bullet.bntImpact = (projectile, x, y, z, sideHit) -> projectile.worldObj.newExplosion(projectile, x, y, z, 2.0F, false, false);
bullet.spentCasing = CASINGLUNA.clone().register("LunaStock");
@ -76,7 +76,7 @@ public class Gun50BMGFactory {
bullet.ammo.meta = 1;
bullet.incendiary = 10;
bullet.bntImpact = (projectile, x, y, z) -> projectile.worldObj.newExplosion(projectile, x, y, z, 5.0F, true, false);
bullet.bntImpact = (projectile, x, y, z, sideHit) -> projectile.worldObj.newExplosion(projectile, x, y, z, 5.0F, true, false);
bullet.spentCasing = CASINGLUNA.clone().register("LunaInc");
@ -91,7 +91,7 @@ public class Gun50BMGFactory {
bullet.ammo.meta = 2;
bullet.explosive = 25;
bullet.destroysBlocks = true;
bullet.bntImpact = (projectile, x, y, z) -> projectile.worldObj.newExplosion(projectile, x, y, z, 25.0F, true, false);
bullet.bntImpact = (projectile, x, y, z, sideHit) -> projectile.worldObj.newExplosion(projectile, x, y, z, 25.0F, true, false);
bullet.spentCasing = CASINGLUNA.clone().register("LunaExp");
@ -264,7 +264,7 @@ public class Gun50BMGFactory {
bullet.effects = new ArrayList();
bullet.effects.add(new PotionEffect(eff));
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");
@ -368,7 +368,7 @@ public class Gun50BMGFactory {
bulletnt.worldObj.spawnEntityInWorld(meteor);
};
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;
@ -397,6 +397,7 @@ public class Gun50BMGFactory {
bullet.dmgMin = 50;
bullet.dmgMax = 54;
bullet.style = bullet.STYLE_FLECHETTE;
BulletConfigFactory.makeFlechette(bullet);
bullet.spentCasing = CASING50BMG.clone().register("50BMGFlech");
@ -412,6 +413,7 @@ public class Gun50BMGFactory {
bullet.dmgMin = 60;
bullet.dmgMax = 64;
bullet.style = bullet.STYLE_FLECHETTE;
BulletConfigFactory.makeFlechette(bullet);
bullet.bntHit = (bulletnt, hit) -> {
@ -437,6 +439,7 @@ public class Gun50BMGFactory {
bullet.dmgMin = 60;
bullet.dmgMax = 64;
bullet.style = bullet.STYLE_FLECHETTE;
BulletConfigFactory.makeFlechette(bullet);
bullet.bntHit = (bulletnt, hit) -> {

View File

@ -182,7 +182,7 @@ public class Gun556mmFactory {
bullet.effects = new ArrayList();
bullet.effects.add(new PotionEffect(eff));
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");
@ -266,7 +266,7 @@ public class Gun556mmFactory {
bulletnt.worldObj.spawnEntityInWorld(meteor);
};
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;
@ -310,6 +310,7 @@ public class Gun556mmFactory {
bullet.wear = 15;
bullet.style = BulletConfiguration.STYLE_FLECHETTE;
bullet.doesPenetrate = false;
BulletConfigFactory.makeFlechette(bullet);
bullet.spentCasing = CASING556.clone().register("556Flec");
@ -322,6 +323,7 @@ public class Gun556mmFactory {
bullet.ammo = new ComparableStack(ModItems.ammo_556.stackFromEnum(Ammo556mm.FLECHETTE_INCENDIARY));
bullet.incendiary = 5;
BulletConfigFactory.makeFlechette(bullet);
bullet.spentCasing = CASING556.clone().register("556FlecInc");
@ -340,7 +342,7 @@ public class Gun556mmFactory {
bullet.effects = new ArrayList();
bullet.effects.add(new PotionEffect(eff));
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");
@ -395,7 +397,7 @@ public class Gun556mmFactory {
bulletnt.worldObj.spawnEntityInWorld(meteor);
};
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;

View File

@ -134,7 +134,7 @@ public class Gun75BoltFactory {
bullet.effects = new ArrayList();
bullet.effects.add(new PotionEffect(eff));
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaburst");

View File

@ -44,7 +44,7 @@ public class Gun9mmFactory {
config.reloadSoundEnd = false;
config.name = "mp40";
config.manufacturer = EnumGunManufacturer.NAZI;
config.manufacturer = EnumGunManufacturer.ERFURT;
config.config = new ArrayList<Integer>();
config.config.add(BulletConfigSyncingUtil.P9_NORMAL);

View File

@ -84,7 +84,7 @@ public class GunCannonFactory {
bullet.dmgMin = 100;
bullet.dmgMax = 150;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
BulletConfigFactory.nuclearExplosion(bulletnt, x, y, z, ExplosionNukeSmall.PARAMS_TOTS);
};

View File

@ -88,7 +88,7 @@ public class GunDetonatorFactory {
bullet.doesRicochet = false;
bullet.setToBolt(BulletConfiguration.BOLT_LASER);
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
World world = bulletnt.worldObj;
if(!world.isRemote && y > 0) {

View File

@ -431,7 +431,7 @@ public class GunEnergyFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
NBTTagCompound data = new NBTTagCompound();
@ -554,7 +554,7 @@ public class GunEnergyFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
@ -632,7 +632,7 @@ public class GunEnergyFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
@ -721,7 +721,7 @@ public class GunEnergyFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
@ -812,7 +812,7 @@ public class GunEnergyFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
ExplosionChaos.explodeZOMG(bullet.worldObj, (int)Math.floor(bullet.posX), (int)Math.floor(bullet.posY), (int)Math.floor(bullet.posZ), 5);

View File

@ -135,7 +135,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
BulletConfigFactory.nuclearExplosion(bullet, x, y, z, ExplosionNukeSmall.PARAMS_MEDIUM);
}
};
@ -151,7 +151,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
BulletConfigFactory.nuclearExplosion(bullet, x, y, z, ExplosionNukeSmall.PARAMS_LOW);
}
};
@ -167,7 +167,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
BulletConfigFactory.nuclearExplosion(bullet, x, y, z, ExplosionNukeSmall.PARAMS_HIGH);
}
};
@ -187,7 +187,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
BulletConfigFactory.nuclearExplosion(bullet, x, y, z, ExplosionNukeSmall.PARAMS_TOTS);
}
};
@ -203,7 +203,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
BulletConfigFactory.nuclearExplosion(bullet, x, y, z, ExplosionNukeSmall.PARAMS_SAFE);
}
};
@ -220,7 +220,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
@ -252,7 +252,7 @@ public class GunFatmanFactory {
bullet.bntImpact = new IBulletImpactBehaviorNT() {
@Override
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {
@ -503,7 +503,7 @@ public class GunFatmanFactory {
bullet.style = BulletConfiguration.STYLE_BF;
bullet.bntImpact = new IBulletImpactBehaviorNT() {
public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z) {
@Override public void behaveBlockHit(EntityBulletBaseNT bullet, int x, int y, int z, int sideHit) {
if(!bullet.worldObj.isRemote) {

View File

@ -1,7 +1,6 @@
package com.hbm.handler.guncfg;
import java.util.ArrayList;
import com.hbm.entity.projectile.EntityBulletBaseNT;
import com.hbm.explosion.ExplosionNukeSmall;
import com.hbm.handler.BulletConfigSyncingUtil;
import com.hbm.handler.BulletConfiguration;
@ -10,18 +9,28 @@ import com.hbm.handler.GunConfiguration;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems;
import com.hbm.items.ItemAmmoEnums.AmmoGrenade;
import com.hbm.lib.HbmCollection;
import com.hbm.lib.HbmCollection.EnumGunManufacturer;
import com.hbm.packet.AuxParticlePacketNT;
import com.hbm.packet.PacketDispatcher;
import com.hbm.particle.SpentCasing;
import com.hbm.particle.SpentCasing.CasingType;
import com.hbm.render.util.RenderScreenOverlay.Crosshair;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3;
public class GunGrenadeFactory {
private static final CasingEjector EJECTOR_LAUNCHER;
private static final CasingEjector EJECTOR_CONGOLAKE;
private static final SpentCasing CASING40MM;
static {
EJECTOR_LAUNCHER = new CasingEjector().setAngleRange(0.02F, 0.03F).setAfterReload();
EJECTOR_CONGOLAKE = new CasingEjector().setMotion(0.3, 0.1, 0).setAngleRange(0.02F, 0.03F).setDelay(15);
CASING40MM = new SpentCasing(CasingType.STRAIGHT).setScale(4F, 4F, 3F).setBounceMotion(0.02F, 0.03F).setColor(0x777777).setupSmoke(1F, 0.5D, 60, 40);
}
@ -47,25 +56,42 @@ public class GunGrenadeFactory {
config.name = "gPistol";
config.manufacturer = EnumGunManufacturer.H_AND_K;
config.config = new ArrayList<Integer>();
config.config.add(BulletConfigSyncingUtil.GRENADE_NORMAL);
config.config.add(BulletConfigSyncingUtil.GRENADE_HE);
config.config.add(BulletConfigSyncingUtil.GRENADE_INCENDIARY);
config.config.add(BulletConfigSyncingUtil.GRENADE_PHOSPHORUS);
config.config.add(BulletConfigSyncingUtil.GRENADE_CHEMICAL);
config.config.add(BulletConfigSyncingUtil.GRENADE_CONCUSSION);
config.config.add(BulletConfigSyncingUtil.GRENADE_FINNED);
config.config.add(BulletConfigSyncingUtil.GRENADE_SLEEK);
config.config.add(BulletConfigSyncingUtil.GRENADE_NUCLEAR);
config.config.add(BulletConfigSyncingUtil.GRENADE_TRACER);
config.config.add(BulletConfigSyncingUtil.GRENADE_KAMPF);
config.config = HbmCollection.grenade;
config.durability = 300;
config.ejector = EJECTOR_LAUNCHER;
return config;
}
public static GunConfiguration getCongoConfig() {
GunConfiguration config = new GunConfiguration();
config.rateOfFire = 20;
config.roundsPerCycle = 1;
config.gunMode = GunConfiguration.MODE_NORMAL;
config.firingMode = GunConfiguration.FIRE_MANUAL;
config.reloadDuration = 20;
config.firingDuration = 0;
config.ammoCap = 4;
config.reloadType = GunConfiguration.RELOAD_SINGLE;
config.allowsInfinity = true;
config.crosshair = Crosshair.L_CIRCUMFLEX;
config.firingSound = "hbm:weapon.glShoot";
config.reloadSound = GunConfiguration.RSOUND_GRENADE_NEW;
config.name = "congoLake";
config.manufacturer = EnumGunManufacturer.NAWS;
config.config = HbmCollection.grenade;
config.durability = 2500;
config.ejector = EJECTOR_CONGOLAKE;
return config;
}
public static BulletConfiguration getGrenadeConfig() {
@ -211,7 +237,7 @@ public class GunGrenadeFactory {
bullet.velocity = 4;
bullet.explosive = 0.0F;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
BulletConfigFactory.nuclearExplosion(bulletnt, x, y, z, ExplosionNukeSmall.PARAMS_TOTS);
};
@ -253,4 +279,101 @@ public class GunGrenadeFactory {
return bullet;
}
public static BulletConfiguration getGrenadeLeadbursterConfig() {
BulletConfiguration bullet = BulletConfigFactory.standardGrenadeConfig();
bullet.ammo = new ComparableStack(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.LEADBURSTER));
bullet.spread = 0.0F;
bullet.gravity = 0.01D;
bullet.explosive = 0F;
bullet.style = BulletConfiguration.STYLE_LEADBURSTER;
bullet.doesRicochet = false;
bullet.doesPenetrate = true;
bullet.vPFX = "";
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
switch(sideHit) {
case 0: bulletnt.rotationPitch = (float) (90); break;
case 1: bulletnt.rotationPitch = (float) (-90); break;
case 2: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = 0; break;
case 3: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = (float) 180; break;
case 4: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = 90; break;
case 5: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = (float) -90; break;
}
Vec3 vec = Vec3.createVectorHelper(0, 0, 1);
vec.rotateAroundX((float) (bulletnt.rotationPitch * Math.PI / 180D));
vec.rotateAroundY((float) (bulletnt.rotationYaw * Math.PI / 180));
double offset = 0.1;
bulletnt.posX -= vec.xCoord * offset;
bulletnt.posY -= vec.yCoord * offset;
bulletnt.posZ -= vec.zCoord * offset;
bulletnt.ticksExisted = 0;
bulletnt.getStuck(x, y, z, sideHit);
};
bullet.bntUpdate = (bulletnt) -> {
if(bulletnt.worldObj.isRemote) return;
switch(bulletnt.getStuckIn()) {
case 0: bulletnt.rotationPitch = (float) (90); break;
case 1: bulletnt.rotationPitch = (float) (-90); break;
case 2: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = 0; break;
case 3: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = (float) 180; break;
case 4: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = 90; break;
case 5: bulletnt.rotationPitch = 0; bulletnt.rotationYaw = (float) -90; break;
}
if(bulletnt.ticksInGround < 20) return;
int timer = bulletnt.ticksInGround - 20;
Vec3 offset = Vec3.createVectorHelper(0, 0, -0.5);
offset.rotateAroundX((float) (bulletnt.rotationPitch * Math.PI / 180D));
offset.rotateAroundY((float) (bulletnt.rotationYaw * Math.PI / 180));
if(bulletnt.ticksExisted >= 100) {
bulletnt.setDead();
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "largeexplode");
data.setFloat("size", 1F);
data.setByte("count", (byte)1);
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, bulletnt.posX + offset.xCoord, bulletnt.posY + offset.yCoord, bulletnt.posZ + offset.zCoord), new TargetPoint(bulletnt.dimension, bulletnt.posX, bulletnt.posY, bulletnt.posZ, 50));
}
if(timer > 60) return;
bulletnt.worldObj.playSoundEffect(bulletnt.posX, bulletnt.posY, bulletnt.posZ, "hbm:weapon.silencerShoot", 2F, 1F);
for(int i = 0; i < 5; i++) {
Vec3 vec = Vec3.createVectorHelper(0, 1, 0);
vec.rotateAroundX((float) Math.toRadians(11.25 * i));
vec.rotateAroundZ((float) -Math.toRadians(13 * timer));
vec.rotateAroundX((float) (bulletnt.rotationPitch * Math.PI / 180D));
vec.rotateAroundY((float) (bulletnt.rotationYaw * Math.PI / 180));
EntityBulletBaseNT pellet = new EntityBulletBaseNT(bulletnt.worldObj, BulletConfigSyncingUtil.R556_NORMAL);
double dist = 0.5;
double off = 0.5;
pellet.setPosition(bulletnt.posX + vec.xCoord * dist + offset.xCoord * off, bulletnt.posY + vec.yCoord * dist + offset.yCoord * off, bulletnt.posZ + vec.zCoord * dist + offset.zCoord * off);
double vel = 0.5;
pellet.motionX = vec.xCoord * vel;
pellet.motionY = vec.yCoord * vel;
pellet.motionZ = vec.zCoord * vel;
float hyp = MathHelper.sqrt_double(pellet.motionX * pellet.motionX + pellet.motionZ * pellet.motionZ);
pellet.prevRotationYaw = pellet.rotationYaw = (float) (Math.atan2(pellet.motionX, pellet.motionZ) * 180.0D / Math.PI);
pellet.prevRotationPitch = pellet.rotationPitch = (float) (Math.atan2(pellet.motionY, (double) hyp) * 180.0D / Math.PI);
bulletnt.worldObj.spawnEntityInWorld(pellet);
}
};
return bullet;
}
}

View File

@ -124,7 +124,7 @@ public class GunNPCFactory {
bullet.vPFX = "reddust";
bullet.damageType = ModDamageSource.s_laser;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;
@ -252,7 +252,7 @@ public class GunNPCFactory {
if(target != null) {
if(bullet.getDistanceSqToEntity(target) < 5) {
bullet.getConfig().bntImpact.behaveBlockHit(bullet, -1, -1, -1);
bullet.getConfig().bntImpact.behaveBlockHit(bullet, -1, -1, -1, -1);
bullet.setDead();
return;
}
@ -306,7 +306,7 @@ public class GunNPCFactory {
}
};
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
bulletnt.worldObj.playSoundEffect(bulletnt.posX, bulletnt.posY, bulletnt.posZ, "hbm:entity.ufoBlast", 5.0F, 0.9F + bulletnt.worldObj.rand.nextFloat() * 0.2F);
bulletnt.worldObj.playSoundEffect(bulletnt.posX, bulletnt.posY, bulletnt.posZ, "fireworks.blast", 5.0F, 0.5F);

View File

@ -127,7 +127,7 @@ public class GunOSIPRFactory {
};
bullet.bntImpact = (ball, x, y, z) -> {
bullet.bntImpact = (ball, x, y, z, sideHit) -> {
final Block block = ball.worldObj.getBlock(x, y, z);
if(block instanceof RedBarrel)
((RedBarrel) block).explode(ball.worldObj, x, y, z);

View File

@ -284,7 +284,7 @@ public class GunRocketFactory {
bullet.incendiary = 0;
bullet.trail = 7;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
BulletConfigFactory.nuclearExplosion(bulletnt, x, y, z, ExplosionNukeSmall.PARAMS_MEDIUM);
};
@ -395,7 +395,7 @@ public class GunRocketFactory {
bullet.incendiary = 0;
bullet.trail = 7;
bullet.bntImpact = (bulletnt, x, y, z) -> {
bullet.bntImpact = (bulletnt, x, y, z, sideHit) -> {
if(bulletnt.worldObj.isRemote)
return;

View File

@ -23,6 +23,7 @@ import com.hbm.inventory.material.Mats;
import com.hbm.inventory.material.NTMMaterial;
import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior;
import com.hbm.items.ModItems;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.items.ItemEnums.EnumBriquetteType;
import com.hbm.items.ItemEnums.EnumCokeType;
import com.hbm.items.ItemEnums.EnumTarType;
@ -291,6 +292,7 @@ public class OreDictManager {
public static final DictGroup ANY_TAR = new DictGroup("Tar", KEY_OIL_TAR, KEY_COAL_TAR, KEY_CRACK_TAR, KEY_WOOD_TAR);
/** Any special post-RBMK gating material, namely bismuth and arsenic */
public static final DictFrame ANY_BISMOID = new DictFrame("AnyBismoid");
public static final DictFrame ANY_ASH = new DictFrame("Ash");
public static void registerOres() {
@ -458,6 +460,7 @@ public class OreDictManager {
for(int i = 0; i < 16; i++) { ANY_CONCRETE.any(new ItemStack(ModBlocks.concrete_colored_ext, 1, i)); }
ANY_COKE .gem(fromAll(coke, EnumCokeType.class)).block(fromAll(block_coke, EnumCokeType.class));
ANY_BISMOID .ingot(ingot_bismuth, ingot_arsenic).nugget(nugget_bismuth, nugget_arsenic).block(block_bismuth);
ANY_ASH .any(fromOne(ModItems.powder_ash, EnumAshType.WOOD), fromOne(ModItems.powder_ash, EnumAshType.COAL), fromOne(ModItems.powder_ash, EnumAshType.MISC));
/*
* TAR
@ -563,6 +566,10 @@ public class OreDictManager {
OreDictionary.registerOre("dye", new ItemStack(oil_tar, 1, OreDictionary.WILDCARD_VALUE));
OreDictionary.registerOre("dyeOrange", powder_cadmium);
OreDictionary.registerOre("dye", powder_cadmium);
OreDictionary.registerOre("dyeLightGray", fromOne(powder_ash, EnumAshType.WOOD));
OreDictionary.registerOre("dyeBlack", fromOne(powder_ash, EnumAshType.COAL));
OreDictionary.registerOre("dyeGray", fromOne(powder_ash, EnumAshType.MISC));
OreDictionary.registerOre("dye", new ItemStack(powder_ash, 1, OreDictionary.WILDCARD_VALUE));
OreDictionary.registerOre("blockGlass", glass_boron);
OreDictionary.registerOre("blockGlass", glass_lead);

View File

@ -0,0 +1,73 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotTakeOnly;
import com.hbm.tileentity.machine.TileEntityAshpit;
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;
public class ContainerAshpit extends Container {
protected TileEntityAshpit ashpit;
public ContainerAshpit(InventoryPlayer invPlayer, TileEntityAshpit ashpit) {
this.ashpit = ashpit;
this.ashpit.openInventory();
for(int i = 0; i < 5; i++) this.addSlotToContainer(new SlotTakeOnly(ashpit, i, 44 + i * 18, 27));
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, 86 + i * 18));
}
}
for(int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 144));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = null;
Slot slot = (Slot) this.inventorySlots.get(index);
if(slot != null && slot.getHasStack()) {
ItemStack originalStack = slot.getStack();
stack = originalStack.copy();
if(index <= 4) {
if(!this.mergeItemStack(originalStack, 5, this.inventorySlots.size(), true)) {
return null;
}
slot.onSlotChange(originalStack, stack);
} else {
return null;
}
if(originalStack.stackSize == 0) {
slot.putStack((ItemStack) null);
} else {
slot.onSlotChanged();
}
}
return stack;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return ashpit.isUseableByPlayer(player);
}
@Override
public void onContainerClosed(EntityPlayer player) {
super.onContainerClosed(player);
this.ashpit.closeInventory();
}
}

View File

@ -0,0 +1,41 @@
package com.hbm.inventory.gui;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerAshpit;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityAshpit;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;
public class GUIAshpit extends GuiInfoContainer {
private TileEntityAshpit firebox;
private final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_ashpit.png");
public GUIAshpit(InventoryPlayer invPlayer, TileEntityAshpit tedf) {
super(new ContainerAshpit(invPlayer, tedf));
firebox = tedf;
this.xSize = 176;
this.ySize = 168;
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.firebox.hasCustomInventoryName() ? this.firebox.getInventoryName() : I18n.format(this.firebox.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
}
}

View File

@ -22,6 +22,7 @@ import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.material.Mats.MaterialStack;
import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ModItems;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.util.Compat;
import net.minecraft.block.Block;
@ -85,6 +86,10 @@ public class MatDistribution extends SerializableRecipe {
registerEntry(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.LIMESTONE), MAT_FLUX, DUST.q(10));
registerEntry(ModItems.powder_flux, MAT_FLUX, DUST.q(1));
registerEntry(new ItemStack(Items.coal, 1, 1), MAT_CARBON, NUGGET.q(3));
registerEntry(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.WOOD), MAT_CARBON, NUGGET.q(1));
registerEntry(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.COAL), MAT_CARBON, NUGGET.q(2));
registerEntry(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.MISC), MAT_CARBON, NUGGET.q(1));
}
public static void registerEntry(Object key, Object... matDef) {

View File

@ -19,6 +19,7 @@ import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemWatzPellet.EnumWatzType;
import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre;
@ -368,9 +369,14 @@ public class CentrifugeRecipes extends SerializableRecipe {
recipes.put(new ComparableStack(ModBlocks.block_slag), new ItemStack[] {
new ItemStack(Blocks.gravel, 1),
new ItemStack(ModItems.powder_fire, 1),
new ItemStack(ModItems.powder_calcium), //temp
new ItemStack(ModItems.powder_calcium),
new ItemStack(ModItems.dust) });
recipes.put(new ComparableStack(ModItems.powder_ash, 1, EnumAshType.COAL.ordinal()), new ItemStack[] {
new ItemStack(ModItems.powder_coal_tiny, 2),
new ItemStack(ModItems.powder_boron_tiny, 1),
new ItemStack(ModItems.dust_tiny, 6)});
for(EnumBedrockOre ore : EnumBedrockOre.values()) {
int i = ore.ordinal();

View File

@ -18,6 +18,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.items.ItemEnums.EnumBriquetteType;
import com.hbm.items.ItemEnums.EnumCokeType;
import com.hbm.items.ItemEnums.EnumTarType;
@ -47,9 +48,9 @@ public class CombinationRecipes extends SerializableRecipe {
recipes.put(new ComparableStack(Items.glowstone_dust), new Pair(new ItemStack(ModItems.sulfur), new FluidStack(Fluids.CHLORINE, 100)));
recipes.put(new ComparableStack(DictFrame.fromOne(ModBlocks.stone_resource, EnumStoneType.BAUXITE)), new Pair(new ItemStack(ModItems.ingot_aluminium, 2), new FluidStack(Fluids.REDMUD, 250)));
recipes.put(KEY_LOG, new Pair(new ItemStack(Items.coal, 1 ,1), new FluidStack(Fluids.WOODOIL, 250)));
recipes.put(KEY_SAPLING, new Pair(null, new FluidStack(Fluids.WOODOIL, 50)));
recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.briquette, EnumBriquetteType.WOOD)), new Pair(new ItemStack(Items.coal, 1 ,1), new FluidStack(Fluids.WOODOIL, 500)));
recipes.put(KEY_LOG, new Pair(new ItemStack(Items.coal, 1 ,1), new FluidStack(Fluids.WOODOIL, 250)));
recipes.put(KEY_SAPLING, new Pair(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.WOOD), new FluidStack(Fluids.WOODOIL, 50)));
recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.briquette, EnumBriquetteType.WOOD)), new Pair(new ItemStack(Items.coal, 1 ,1), new FluidStack(Fluids.WOODOIL, 500)));
recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRUDE)), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.PETROLEUM), null));
recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.oil_tar, EnumTarType.CRACK)), new Pair(DictFrame.fromOne(ModItems.coke, EnumCokeType.PETROLEUM), null));

View File

@ -237,6 +237,13 @@ public class AnvilRecipes {
new OreDictStack(CU.ingot(), 8)
}, new AnvilOutput(new ItemStack(ModBlocks.heater_oven))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(
new AStack[] {
new ComparableStack(Blocks.stone, 8),
new OreDictStack(STEEL.plate(), 2),
new OreDictStack(IRON.ingot(), 4)
}, new AnvilOutput(new ItemStack(ModBlocks.machine_ashpit))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(
new AStack[] {
new ComparableStack(ModItems.tank_steel, 4),

View File

@ -186,7 +186,8 @@ public class ItemAmmoEnums {
FINNED("ammo_grenade_finned", AmmoItemTrait.PRO_GRAVITY, AmmoItemTrait.CON_RADIUS),
NUCLEAR("ammo_grenade_nuclear", AmmoItemTrait.PRO_NUCLEAR, AmmoItemTrait.PRO_RANGE, AmmoItemTrait.CON_HEAVY_WEAR),
TRACER("ammo_grenade_tracer", AmmoItemTrait.NEU_BLANK),
KAMPF("ammo_grenade_kampf", AmmoItemTrait.PRO_ROCKET_PROPELLED, AmmoItemTrait.PRO_RADIUS, AmmoItemTrait.PRO_ACCURATE1, AmmoItemTrait.CON_WEAR);
KAMPF("ammo_grenade_kampf", AmmoItemTrait.PRO_ROCKET_PROPELLED, AmmoItemTrait.PRO_RADIUS, AmmoItemTrait.PRO_ACCURATE1, AmmoItemTrait.CON_WEAR),
LEADBURSTER("ammo_grenade_leadburster", AmmoItemTrait.NEU_LEADBURSTER, AmmoItemTrait.CON_NO_EXPLODE1);
private final Set<AmmoItemTrait> traits;
private final String unloc;

View File

@ -23,6 +23,12 @@ public class ItemEnums {
PARAFFIN
}
public static enum EnumAshType {
WOOD,
COAL,
MISC
}
public static enum EnumBriquetteType {
COAL,
LIGNITE,

View File

@ -109,6 +109,7 @@ public class ModItems {
public static Item briquette;
public static Item coal_infernal;
public static Item cinnebar;
public static Item powder_ash;
public static Item niter;
public static Item ingot_copper;
@ -1522,6 +1523,7 @@ public class ModItems {
public static Item gun_panzerschreck;
public static Item gun_quadro;
public static Item gun_hk69;
public static Item gun_congolake;
public static Item gun_stinger;
public static Item gun_skystinger;
public static Item gun_revolver;
@ -2723,6 +2725,7 @@ public class ModItems {
powder_lignite = new Item().setUnlocalizedName("powder_lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lignite");
coal_infernal = new Item().setUnlocalizedName("coal_infernal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coal_infernal");
cinnebar = new Item().setUnlocalizedName("cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cinnebar");
powder_ash = new ItemEnumMulti(EnumAshType.class, true, true).setUnlocalizedName("powder_ash").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_ash");
ingot_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("ingot_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_gh336");
nugget_gh336 = new ItemCustomLore().setRarity(EnumRarity.epic).setUnlocalizedName("nugget_gh336").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":nugget_gh336");
@ -4127,6 +4130,7 @@ public class ModItems {
gun_panzerschreck = new ItemGunBase(GunRocketFactory.getPanzConfig()).setUnlocalizedName("gun_panzerschreck").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_panzerschreck");
gun_quadro = new ItemGunBase(GunRocketFactory.getQuadroConfig()).setUnlocalizedName("gun_quadro").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_quadro");
gun_hk69 = new ItemGunBase(GunGrenadeFactory.getHK69Config()).setUnlocalizedName("gun_hk69").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_hk69");
gun_congolake = new ItemGunCongo(GunGrenadeFactory.getCongoConfig()).setUnlocalizedName("gun_congolake").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_congolake");
gun_stinger = new ItemGunBase(GunRocketHomingFactory.getStingerConfig()).setUnlocalizedName("gun_stinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_stinger");
gun_skystinger = new ItemGunBase(GunRocketHomingFactory.getSkyStingerConfig()).setUnlocalizedName("gun_skystinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_skystinger");
gun_revolver = new ItemGunBase(Gun357MagnumFactory.getRevolverConfig()).setUnlocalizedName("gun_revolver").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver");
@ -5810,6 +5814,7 @@ public class ModItems {
GameRegistry.registerItem(dust, dust.getUnlocalizedName());
GameRegistry.registerItem(dust_tiny, dust_tiny.getUnlocalizedName());
GameRegistry.registerItem(fallout, fallout.getUnlocalizedName());
GameRegistry.registerItem(powder_ash, powder_ash.getUnlocalizedName());
//Powders
GameRegistry.registerItem(powder_fire, powder_fire.getUnlocalizedName());
@ -6992,6 +6997,7 @@ public class ModItems {
GameRegistry.registerItem(gun_panzerschreck, gun_panzerschreck.getUnlocalizedName());
GameRegistry.registerItem(gun_quadro, gun_quadro.getUnlocalizedName());
GameRegistry.registerItem(gun_hk69, gun_hk69.getUnlocalizedName());
GameRegistry.registerItem(gun_congolake, gun_congolake.getUnlocalizedName());
GameRegistry.registerItem(gun_stinger, gun_stinger.getUnlocalizedName());
GameRegistry.registerItem(gun_fatman, gun_fatman.getUnlocalizedName());
GameRegistry.registerItem(gun_proto, gun_proto.getUnlocalizedName());

View File

@ -62,7 +62,7 @@ public class ItemKitNBT extends Item {
list.add("Contains:");
for(ItemStack item : stacks) {
list.add("-" + item.getDisplayName());
list.add("-" + item.getDisplayName() + (item.stackSize > 1 ? (" x" + item.stackSize) : ""));
}
}
}

View File

@ -65,6 +65,7 @@ public class ItemAmmo extends ItemEnumMulti {
NEU_STARMETAL,
NEU_TRACER,
NEU_UHH,
NEU_LEADBURSTER,
NEU_WARCRIME1,
NEU_WARCRIME2,
PRO_ACCURATE1,

View File

@ -305,7 +305,7 @@ public class ItemAmmoArty extends Item {
this.itemTypes[CARGO] = new ArtilleryShell("ammo_arty_cargo", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) {
if(mop.typeOfHit == MovingObjectType.BLOCK) {
shell.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord);
shell.getStuck(mop.blockX, mop.blockY, mop.blockZ);
shell.getStuck(mop.blockX, mop.blockY, mop.blockZ, mop.sideHit);
}
}};

View File

@ -0,0 +1,37 @@
package com.hbm.items.weapon;
import com.hbm.handler.GunConfiguration;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationKeyframe;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.HbmAnimations.AnimType;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.item.ItemStack;
public class ItemGunCongo extends ItemGunBase {
public ItemGunCongo(GunConfiguration config) {
super(config);
}
@Override
@SideOnly(Side.CLIENT)
public BusAnimation getAnimation(ItemStack stack, AnimType type) {
if(type == AnimType.CYCLE) {
return new BusAnimation()
.addBus("RECOIL", new BusAnimationSequence()
.addKeyframe(new BusAnimationKeyframe(1, 0, 0, 50))
.addKeyframe(new BusAnimationKeyframe(0, 0, 0, 100)))
.addBus("PUMP", new BusAnimationSequence()
.addKeyframe(new BusAnimationKeyframe(0, 0, 0, 500))
.addKeyframe(new BusAnimationKeyframe(1, 0, 0, 100))
.addKeyframe(new BusAnimationKeyframe(0, 0, 0, 200)));
}
return null;
}
}

View File

@ -70,7 +70,7 @@ public class HbmCollection {
/** MIRV MINI-NUKES **/
public static final List<Integer> fatmanMIRV = ImmutableList.of(BulletConfigSyncingUtil.NUKE_MIRV_NORMAL, BulletConfigSyncingUtil.NUKE_MIRV_LOW, BulletConfigSyncingUtil.NUKE_MIRV_HIGH, BulletConfigSyncingUtil.NUKE_MIRV_SAFE, BulletConfigSyncingUtil.NUKE_MIRV_SPECIAL);
/** 40MM GRENADE **/
public static final List<Integer> grenade = ImmutableList.of(BulletConfigSyncingUtil.GRENADE_NORMAL, BulletConfigSyncingUtil.GRENADE_HE, BulletConfigSyncingUtil.GRENADE_INCENDIARY, BulletConfigSyncingUtil.GRENADE_PHOSPHORUS, BulletConfigSyncingUtil.GRENADE_CHEMICAL, BulletConfigSyncingUtil.GRENADE_CONCUSSION, BulletConfigSyncingUtil.GRENADE_FINNED, BulletConfigSyncingUtil.GRENADE_SLEEK, BulletConfigSyncingUtil.GRENADE_NUCLEAR, BulletConfigSyncingUtil.GRENADE_TRACER, BulletConfigSyncingUtil.GRENADE_KAMPF);
public static final List<Integer> grenade = ImmutableList.of(BulletConfigSyncingUtil.GRENADE_NORMAL, BulletConfigSyncingUtil.GRENADE_HE, BulletConfigSyncingUtil.GRENADE_INCENDIARY, BulletConfigSyncingUtil.GRENADE_PHOSPHORUS, BulletConfigSyncingUtil.GRENADE_CHEMICAL, BulletConfigSyncingUtil.GRENADE_CONCUSSION, BulletConfigSyncingUtil.GRENADE_FINNED, BulletConfigSyncingUtil.GRENADE_SLEEK, BulletConfigSyncingUtil.GRENADE_NUCLEAR, BulletConfigSyncingUtil.GRENADE_TRACER, BulletConfigSyncingUtil.GRENADE_KAMPF, BulletConfigSyncingUtil.GRENADE_LEADBURSTER);
/** 84MM ROCKET **/
public static final List<Integer> rocket = ImmutableList.of(BulletConfigSyncingUtil.ROCKET_NORMAL, BulletConfigSyncingUtil.ROCKET_HE, BulletConfigSyncingUtil.ROCKET_INCENDIARY, BulletConfigSyncingUtil.ROCKET_PHOSPHORUS, BulletConfigSyncingUtil.ROCKET_SHRAPNEL, BulletConfigSyncingUtil.ROCKET_EMP, BulletConfigSyncingUtil.ROCKET_GLARE, BulletConfigSyncingUtil.ROCKET_TOXIC, BulletConfigSyncingUtil.ROCKET_CANISTER, BulletConfigSyncingUtil.ROCKET_SLEEK, BulletConfigSyncingUtil.ROCKET_NUKE, BulletConfigSyncingUtil.ROCKET_CHAINSAW);
@ -133,8 +133,10 @@ public class HbmCollection {
METRO,
/**MWT Prototype Labs**/
MWT,
/**Naval Air Weapons Station**/
NAWS,
/**Erfurter Maschinenfabrik Geipel**/
NAZI,
ERFURT,
/**No manufacturer, just puts "-" **/
NONE,
/**OxfordEM Technologies**/

View File

@ -9,11 +9,14 @@ import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType;
import com.hbm.config.GeneralConfig;
import com.hbm.config.MobConfig;
import com.hbm.config.WorldConfig;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.saveddata.TomSaveData;
import com.hbm.tileentity.deco.TileEntityLanternBehemoth;
import com.hbm.tileentity.machine.storage.TileEntitySafe;
import com.hbm.tileentity.machine.storage.TileEntitySoyuzCapsule;
import com.hbm.util.LootGenerator;
import com.hbm.util.WeightedRandomGeneric;
import com.hbm.world.dungeon.AncientTomb;
import com.hbm.world.dungeon.Antenna;
@ -59,6 +62,7 @@ import net.minecraft.world.biome.BiomeGenJungle;
import net.minecraft.world.biome.BiomeGenRiver;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.IWorldGenerator;
public class HbmWorldGen implements IWorldGenerator {
@ -389,6 +393,29 @@ public class HbmWorldGen implements IWorldGenerator {
}
}
if(rand.nextInt(1000) == 0) {
int x = i + rand.nextInt(16);
int z = j + rand.nextInt(16);
int y = world.getHeightValue(x, z);
if(world.getBlock(x, y - 1, z).canPlaceTorchOnTop(world, x, y - 1, z) && world.getBlock(x, y, z).isReplaceable(world, x, y, z)) {
world.setBlock(x, y, z, ModBlocks.lantern_behemoth, 12, 3);
MultiblockHandlerXR.fillSpace(world, x, y, z, new int[] {4, 0, 0, 0, 0, 0}, ModBlocks.lantern_behemoth, ForgeDirection.NORTH);
TileEntityLanternBehemoth lantern = (TileEntityLanternBehemoth) world.getTileEntity(x, y, z);
lantern.isBroken = true;
if(rand.nextInt(2) == 0) {
LootGenerator.setBlock(world, x, y, z - 2);
LootGenerator.lootBooklet(world, x, y, z - 2);
}
if(GeneralConfig.enableDebugMode)
MainRegistry.logger.info("[Debug] Successfully spawned lantern at " + x + " " + (y) + " " + z);
}
}
if(GeneralConfig.enable528 && GeneralConfig.enable528BosniaSimulator && rand.nextInt(16) == 0) {
int x = i + rand.nextInt(16);
int z = j + rand.nextInt(16);
@ -629,7 +656,7 @@ public class HbmWorldGen implements IWorldGenerator {
int x = i + rand.nextInt(16);
int z = j + rand.nextInt(16);
int y = world.getHeightValue(x, z) - rand.nextInt(10);
(new Meteorite()).generate(world, rand, x, y, z, false, true, false);
(new Meteorite()).generate(world, rand, x, y, z, false, false, false);
}
if (GeneralConfig.enableNITAN) {

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 (4683)";
public static final String VERSION = "1.0.27 BETA (4690)";
//HBM's Beta Naming Convention:
//V T (X)
//V -> next release version

View File

@ -169,6 +169,8 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBobble.class, new RenderBobble());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySnowglobe.class, new RenderSnowglobe());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEmitter.class, new RenderEmitter());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLantern.class, new RenderLantern());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLanternBehemoth.class, new RenderLanternBehemoth());
//bombs
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeGadget.class, new RenderNukeGadget());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeBoy.class, new RenderNukeBoy());
@ -264,6 +266,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFurnaceCombination.class, new RenderFurnaceCombination());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterFirebox.class, new RenderFirebox());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterOven.class, new RenderHeatingOven());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAshpit.class, new RenderAshpit());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterOilburner.class, new RenderOilburner());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterElectric.class, new RenderElectricHeater());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterHeatex.class, new RenderHeaterHeatex());
@ -525,6 +528,7 @@ public class ClientProxy extends ServerProxy {
MinecraftForgeClient.registerItemRenderer(ModItems.gun_uac_pistol, new ItemRenderUACPistol());
MinecraftForgeClient.registerItemRenderer(ModItems.gun_coilgun, new ItemRenderWeaponCoilgun());
MinecraftForgeClient.registerItemRenderer(ModItems.gun_cryocannon, new ItemRenderWeaponCryoCannon());
MinecraftForgeClient.registerItemRenderer(ModItems.gun_congolake, new ItemRenderWeaponCongo());
//multitool
MinecraftForgeClient.registerItemRenderer(ModItems.multitool_dig, new ItemRenderMultitool());
MinecraftForgeClient.registerItemRenderer(ModItems.multitool_silk, new ItemRenderMultitool());

View File

@ -450,6 +450,7 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.lamp_tritium_green_off, 1), new Object[] { "GPG", "1T2", "GPG", 'G', KEY_ANYGLASS, 'P', P_RED.dust(), 'T', ModItems.cell_tritium, '1', "dustSulfur", '2', CU.dust() });
addRecipeAuto(new ItemStack(ModBlocks.lamp_tritium_blue_off, 1), new Object[] { "GPG", "1T2", "GPG", 'G', KEY_ANYGLASS, 'P',P_RED.dust(), 'T', ModItems.cell_tritium, '1', AL.dust(), '2', ST.dust() });
addRecipeAuto(new ItemStack(ModBlocks.lantern, 1), new Object[] { "PGP", " S ", " S ", 'P', KEY_ANYPANE, 'G', Items.glowstone_dust, 'S', ModBlocks.steel_beam });
addRecipeAuto(new ItemStack(ModBlocks.barbed_wire, 16), new Object[] { "AIA", "I I", "AIA", 'A', ModItems.wire_aluminium, 'I', IRON.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.barbed_wire_fire, 8), new Object[] { "BBB", "BIB", "BBB", 'B', ModBlocks.barbed_wire, 'I', P_RED.dust() });

View File

@ -955,6 +955,8 @@ public class MainRegistry {
WeaponConfig.loadFromConfig(config);
MobConfig.loadFromConfig(config);
StructureConfig.loadFromConfig(config);
config.save();
try {
if(GeneralConfig.enableThermosPreventer && Class.forName("thermos.Thermos") != null) {
@ -967,8 +969,6 @@ public class MainRegistry {
+ "change Thermos' config anyway so that extra change in NTM's config can't be that big of a burden.");
}
} catch(ClassNotFoundException e) { }
config.save();
}
private static HashSet<String> ignoreMappings = new HashSet();

View File

@ -306,6 +306,9 @@ public class ResourceManager {
public static Animation transition_seal_anim;
public static final WavefrontObjDisplayList fire_door = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/fire_door.obj")).asDisplayList();
//Lantern
public static final IModelCustom lantern = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/trinkets/lantern.obj"));
//Tesla Coil
public static final IModelCustom tesla = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/tesla.obj"));
public static final IModelCustom teslacrab = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/mobs/teslacrab.obj"));
@ -387,6 +390,7 @@ public class ResourceManager {
//Heaters
public static final ResourceLocation heater_firebox_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/firebox.png");
public static final ResourceLocation heater_oven_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/heating_oven.png");
public static final ResourceLocation ashpit_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/ashpit.png");
public static final ResourceLocation heater_oilburner_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/oilburner.png");
public static final ResourceLocation heater_electric_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/electric_heater.png");
public static final ResourceLocation heater_heatex_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/heater_heatex.png");
@ -664,6 +668,10 @@ public class ResourceManager {
public static final ResourceLocation transition_seal_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/transition_seal.png");
public static final ResourceLocation fire_door_tex = new ResourceLocation(RefStrings.MODID, "textures/models/doors/fire_door.png");
//Lantern
public static final ResourceLocation lantern_tex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/lantern.png");
public static final ResourceLocation lantern_rusty_tex = new ResourceLocation(RefStrings.MODID, "textures/models/trinkets/lantern_rusty.png");
//Tesla Coil
public static final ResourceLocation tesla_tex = new ResourceLocation(RefStrings.MODID, "textures/models/tesla.png");
public static final ResourceLocation teslacrab_tex = new ResourceLocation(RefStrings.MODID, "textures/entity/teslacrab.png");
@ -753,6 +761,7 @@ public class ResourceManager {
public static final IModelCustom coilgun = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/coilgun.obj")).asDisplayList();
public static final IModelCustom cryocannon = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/cryo_cannon.obj")).asDisplayList();
public static final IModelCustom uac_pistol = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/UAC pistol.obj")).asDisplayList();
public static final IModelCustom congolake = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/congolake.obj")).asDisplayList();
public static final IModelCustom lance = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/lance.obj"));
@ -848,6 +857,7 @@ public class ResourceManager {
public static final ResourceLocation coilgun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/coilgun.png");
public static final ResourceLocation cryocannon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/cryo_cannon.png");
public static final ResourceLocation uac_pistol_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/pistol_texture.png");
public static final ResourceLocation congolake_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/congolake.png");
public static final ResourceLocation lance_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lance.png");
@ -952,6 +962,7 @@ public class ResourceManager {
//Projectiles
public static final IModelCustom projectiles = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/projectiles/projectiles.obj"));
public static final IModelCustom leadburster = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/projectiles/leadburster.obj"));
public static final IModelCustom casings = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/effect/casings.obj"));
//Bomber
@ -1080,6 +1091,7 @@ public class ResourceManager {
public static final ResourceLocation rocket_mirv_tex = new ResourceLocation(RefStrings.MODID, "textures/models/projectiles/rocket_mirv.png");
public static final ResourceLocation mini_nuke_tex = new ResourceLocation(RefStrings.MODID, "textures/models/projectiles/mini_nuke.png");
public static final ResourceLocation mini_mirv_tex = new ResourceLocation(RefStrings.MODID, "textures/models/projectiles/mini_mirv.png");
public static final ResourceLocation leadburster_tex = new ResourceLocation(RefStrings.MODID, "textures/models/projectiles/leadburster.png");
public static final ResourceLocation casings_tex = new ResourceLocation(RefStrings.MODID, "textures/particle/casings.png");
//Bomber

View File

@ -3,7 +3,9 @@ package com.hbm.render.entity.projectile;
import java.util.Random;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import com.hbm.entity.projectile.EntityBulletBaseNT;
import com.hbm.entity.projectile.IBulletBase;
import com.hbm.handler.BulletConfiguration;
import com.hbm.items.ModItems;
@ -72,6 +74,7 @@ public class RenderBullet extends Render {
case BulletConfiguration.STYLE_BLADE: renderBlade(); break;
case BulletConfiguration.STYLE_BARREL: renderNuke(3); break;
case BulletConfiguration.STYLE_TAU: renderTau(bullet, trail, f1); break;
case BulletConfiguration.STYLE_LEADBURSTER: renderLeadburster(bullet, f1); break;
default: renderBullet(trail); break;
}
@ -589,6 +592,24 @@ public class RenderBullet extends Render {
iface.prevZ(pZ);
}
private void renderLeadburster(Entity bullet, float interp) {
EntityBulletBaseNT bulletnt = (EntityBulletBaseNT) bullet;
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glRotated(90, 0, 0, -1);
double scale = 0.05;
GL11.glScaled(scale, scale, scale);
bindTexture(ResourceManager.leadburster_tex);
ResourceManager.leadburster.renderPart("Based");
if(bulletnt.getStuckIn() != -1) {
GL11.glRotated((bullet.ticksExisted + interp) * -18, 0, 1, 0);
}
ResourceManager.leadburster.renderPart("Based.001");
ResourceManager.leadburster.renderPart("Backlight");
GL11.glPopMatrix();
}
@Override
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
return new ResourceLocation(RefStrings.MODID + ":textures/models/bullet.png");

View File

@ -0,0 +1,106 @@
package com.hbm.render.item.weapon;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.IItemRenderer;
public class ItemRenderWeaponCongo implements IItemRenderer {
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
switch(type) {
case EQUIPPED:
case EQUIPPED_FIRST_PERSON:
case ENTITY:
case INVENTORY:
return true;
default: return false;
}
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING);
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_LIGHTING);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.congolake_tex);
switch(type) {
case EQUIPPED_FIRST_PERSON:
double s0 = 0.25D;
GL11.glRotated(20, 0, 0, 1);
GL11.glTranslated(0.5, 0.0, -0.5);
GL11.glRotated(-10, 0, 1, 0);
GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(s0, s0, s0);
double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL");
GL11.glTranslated(0, 0, -recoil[0]);
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.congolake.renderPart("Gun");
double[] pump = HbmAnimations.getRelevantTransformation("PUMP");
GL11.glTranslated(0, 0, -pump[0]);
ResourceManager.congolake.renderPart("Pump_Pummp");
GL11.glShadeModel(GL11.GL_FLAT);
break;
case EQUIPPED:
double scale = 0.35D;
GL11.glScaled(scale, scale, scale);
GL11.glRotatef(15F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(15F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(15, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(1.25F, -1F, 1.5F);
break;
case ENTITY:
double s1 = 0.2D;
GL11.glScaled(s1, s1, s1);
break;
case INVENTORY:
double s = 2D;
GL11.glTranslated(6, 9, 0);
GL11.glRotated(-135, 0, 0, 1);
GL11.glRotated(-90, 0, 1, 0);
GL11.glScaled(s, s, -s);
break;
default: break;
}
if(type != ItemRenderType.EQUIPPED_FIRST_PERSON) {
GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.congolake.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
GL11.glPopMatrix();
}
}

View File

@ -0,0 +1,71 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.tileentity.machine.TileEntityAshpit;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
public class RenderAshpit extends TileEntitySpecialRenderer implements IItemRendererProvider {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
switch(tile.getBlockMetadata() - BlockDummyable.offset) {
case 3: GL11.glRotatef(0, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 2: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(270, 0F, 1F, 0F); break;
}
GL11.glRotatef(-90, 0F, 1F, 0F);
TileEntityAshpit oven = (TileEntityAshpit) tile;
bindTexture(ResourceManager.ashpit_tex);
ResourceManager.heater_oven.renderPart("Main");
GL11.glPushMatrix();
float door = oven.prevDoorAngle + (oven.doorAngle - oven.prevDoorAngle) * interp;
GL11.glTranslated(0, 0, door * 0.75D / 135D);
ResourceManager.heater_oven.renderPart("Door");
GL11.glPopMatrix();
if(oven.isFull) {
ResourceManager.heater_oven.renderPart("InnerBurning");
} else {
ResourceManager.heater_oven.renderPart("Inner");
}
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.machine_ashpit);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase() {
public void renderInventory() {
GL11.glTranslated(0, -1, 0);
GL11.glScaled(3.25, 3.25, 3.25);
}
public void renderCommon() {
bindTexture(ResourceManager.ashpit_tex);
ResourceManager.heater_oven.renderPart("Main");
ResourceManager.heater_oven.renderPart("Door");
}};
}
}

View File

@ -0,0 +1,69 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
public class RenderLantern extends TileEntitySpecialRenderer implements IItemRendererProvider {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
bindTexture(ResourceManager.lantern_tex);
ResourceManager.lantern.renderPart("Lantern");
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
GL11.glDisable(GL11.GL_LIGHTING);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
float mult = (float) (Math.sin(System.currentTimeMillis() / 200D) / 2 + 0.5) * 0.1F + 0.9F;
GL11.glColor3f(1F * mult, 1F * mult, 0.7F * mult);
ResourceManager.lantern.renderPart("Light");
GL11.glColor3f(1F, 1F, 1F);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.lantern);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase() {
public void renderInventory() {
GL11.glTranslated(0, -5, 0);
double scale = 2.75;
GL11.glScaled(scale, scale, scale);
}
public void renderCommon() {
bindTexture(ResourceManager.lantern_tex);
ResourceManager.lantern.renderPart("Lantern");
GL11.glDisable(GL11.GL_TEXTURE_2D);
float mult = (float) (Math.sin(System.currentTimeMillis() / 200D) / 2 + 0.5) * 0.1F + 0.9F;
GL11.glColor3f(1F * mult, 1F * mult, 0.7F * mult);
ResourceManager.lantern.renderPart("Light");
GL11.glColor3f(1F, 1F, 1F);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}};
}
}

View File

@ -0,0 +1,53 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.main.ResourceManager;
import com.hbm.tileentity.deco.TileEntityLanternBehemoth;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
public class RenderLanternBehemoth extends TileEntitySpecialRenderer {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5D, y, z + 0.5D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
TileEntityLanternBehemoth lantern = (TileEntityLanternBehemoth) tile;
if(lantern.isBroken) {
GL11.glRotated(5, 1, 0, 0);
GL11.glRotated(10, 0, 0, 1);
}
bindTexture(ResourceManager.lantern_rusty_tex);
ResourceManager.lantern.renderPart("Lantern");
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
GL11.glDisable(GL11.GL_LIGHTING);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
if(lantern.isBroken) {
float mult = (float) (Math.sin(System.currentTimeMillis() / 200D) / 2 + 0.5);
GL11.glColor3f(1F * mult, 0, 0);
} else {
float mult = (float) (Math.sin(System.currentTimeMillis() / 200D) / 2 + 0.5) * 0.5F + 0.5F;
GL11.glColor3f(0, 1F * mult, 0);
}
ResourceManager.lantern.renderPart("Light");
GL11.glColor3f(1F, 1F, 1F);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
GL11.glPopMatrix();
}
}

View File

@ -100,11 +100,22 @@ public class RenderLoot extends TileEntitySpecialRenderer {
GL11.glRotated(90, 1, 0, 0);
bindTexture(TextureMap.locationItemsTexture);
IIcon icon = stack.getIconIndex();
float f14 = icon.getMinU();
float f15 = icon.getMaxU();
float f4 = icon.getMinV();
float f5 = icon.getMaxV();
ItemRenderer.renderItemIn2D(Tessellator.instance, f15, f4, f14, f5, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
for(int i = 0; i < stack.getItem().getRenderPasses(stack.getItemDamage()); i++) {
IIcon icon = stack.getItem().getIcon(stack, i);
float f14 = icon.getMinU();
float f15 = icon.getMaxU();
float f4 = icon.getMinV();
float f5 = icon.getMaxV();
int k1 = stack.getItem().getColorFromItemStack(stack, i);
float f10 = (float) (k1 >> 16 & 255) / 255.0F;
float f11 = (float) (k1 >> 8 & 255) / 255.0F;
float f12 = (float) (k1 & 255) / 255.0F;
GL11.glColor4f(1.0F * f10, 1.0F * f11, 1.0F * f12, 1.0F);
ItemRenderer.renderItemIn2D(Tessellator.instance, f15, f4, f14, f5, icon.getIconWidth(), icon.getIconHeight(), 0.0625F);
}
}
}

View File

@ -182,6 +182,8 @@ public class TileMappings {
put(TileEntitySILEX.class, "tileentity_silex");
put(TileEntityFEL.class, "tileentity_fel");
put(TileEntityDemonLamp.class, "tileentity_demonlamp");
put(TileEntityLantern.class, "tileentity_lantern_ordinary");
put(TileEntityLanternBehemoth.class, "tileentity_lantern_behemoth");
put(TileEntityStorageDrum.class, "tileentity_waste_storage_drum");
put(TileEntityDeaerator.class, "tileentity_deaerator");
put(TileEntityCableBaseNT.class, "tileentity_ohgod"); // what?
@ -257,6 +259,7 @@ public class TileMappings {
private static void putMachines() {
put(TileEntityHeaterFirebox.class, "tileentity_firebox");
put(TileEntityHeaterOven.class, "tileentity_heating_oven");
put(TileEntityAshpit.class, "tileentity_ashpit");
put(TileEntityHeaterOilburner.class, "tileentity_oilburner");
put(TileEntityHeaterElectric.class, "tileentity_electric_heater");
put(TileEntityHeaterHeatex.class, "tileentity_heater_heatex");

View File

@ -4,6 +4,8 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.bomb.LaunchPad;
import com.hbm.inventory.container.ContainerLaunchPadTier1;
import com.hbm.inventory.gui.GUILaunchPadTier1;
import com.hbm.items.ModItems;
import com.hbm.items.tool.ItemDesingator;
import com.hbm.lib.Library;
import com.hbm.packet.AuxElectricityPacket;
import com.hbm.packet.PacketDispatcher;
@ -280,40 +282,54 @@ public class TileEntityLaunchPad extends TileEntityLoadedBase implements ISidedI
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyStored(Context context, Arguments args) {
return new Object[] {getPower()};
return new Object[] {getPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getMaxEnergy(Context context, Arguments args) {
return new Object[] {getMaxPower()};
return new Object[] {getMaxPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower()};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getCoords(Context context, Arguments args) {
if (slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) {
int xCoord2 = slots[1].stackTagCompound.getInteger("xCoord");
int zCoord2 = slots[1].stackTagCompound.getInteger("zCoord");
int xCoord2;
int zCoord2;
if (slots[1].stackTagCompound != null) {
xCoord2 = slots[1].stackTagCompound.getInteger("xCoord");
zCoord2 = slots[1].stackTagCompound.getInteger("zCoord");
} else
return new Object[] {false};
// Not sure if i should have this
/*
if(xCoord2 == xCoord && zCoord2 == zCoord) {
xCoord2 += 1;
}
*/
return new Object[] {xCoord2, zCoord2};
}
return new Object[] {"Designator not found"};
return new Object[] {false, "Designator not found"};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] setCoords(Context context, Arguments args) {
if (slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) {
slots[1].stackTagCompound = new NBTTagCompound();
slots[1].stackTagCompound.setInteger("xCoord", args.checkInteger(0));
slots[1].stackTagCompound.setInteger("zCoord", args.checkInteger(1));
return new Object[] {"Success"};
return new Object[] {true};
}
return new Object[] {"Designator not found"};
return new Object[] {false, "Designator not found"};
}
@Callback

View File

@ -2,6 +2,8 @@ package com.hbm.tileentity.bomb;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.bomb.LaunchPad;
import com.hbm.entity.missile.EntityMissileCustom;
import com.hbm.handler.MissileStruct;
import com.hbm.interfaces.IFluidAcceptor;
@ -28,9 +30,14 @@ import com.hbm.tileentity.TileEntityLoadedBase;
import api.hbm.energy.IEnergyUser;
import api.hbm.fluid.IFluidStandardReceiver;
import api.hbm.item.IDesignatorItem;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Callback;
import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
@ -43,7 +50,8 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver, IGUIProvider {
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISidedInventory, IEnergyUser, IFluidContainer, IFluidAcceptor, IFluidStandardReceiver, IGUIProvider, SimpleComponent {
private ItemStack slots[];
@ -597,6 +605,86 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide
return tanks;
}
// do some opencomputer stuff
@Override
public String getComponentName() {
return "large_launch_pad";
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyStored(Context context, Arguments args) {
return new Object[] {getPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getMaxEnergy(Context context, Arguments args) {
return new Object[] {getMaxPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower()};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getContents(Context context, Arguments args) {
return new Object[] {tanks[0].getFill(), tanks[0].getMaxFill(), tanks[0].getTankType().getName(), tanks[1].getFill(), tanks[1].getMaxFill(), tanks[1].getTankType().getName(), solid, maxSolid};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getLaunchInfo(Context context, Arguments args) {
return new Object[] {canLaunch(), isMissileValid(), hasDesignator(), hasFuel()};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] getCoords(Context context, Arguments args) {
if (slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) {
int xCoord2;
int zCoord2;
if (slots[1].stackTagCompound != null) {
xCoord2 = slots[1].stackTagCompound.getInteger("xCoord");
zCoord2 = slots[1].stackTagCompound.getInteger("zCoord");
} else
return new Object[] {false};
// Not sure if i should have this
/*
if(xCoord2 == xCoord && zCoord2 == zCoord) {
xCoord2 += 1;
}
*/
return new Object[] {xCoord2, zCoord2};
}
return new Object[] {false, "Designator not found"};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] setCoords(Context context, Arguments args) {
if (slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) {
slots[1].stackTagCompound = new NBTTagCompound();
slots[1].stackTagCompound.setInteger("xCoord", args.checkInteger(0));
slots[1].stackTagCompound.setInteger("zCoord", args.checkInteger(1));
return new Object[] {true};
}
return new Object[] {false, "Designator not found"};
}
@Callback
@Optional.Method(modid = "OpenComputers")
public Object[] launch(Context context, Arguments args) {
//worldObj.getBlock(xCoord, yCoord, zCoord).explode(worldObj, xCoord, yCoord, zCoord);
((LaunchPad) ModBlocks.launch_pad).explode(worldObj, xCoord, yCoord, zCoord);
return new Object[] {};
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerLaunchTable(player.inventory, this);

View File

@ -0,0 +1,53 @@
package com.hbm.tileentity.deco;
import java.util.List;
import com.hbm.entity.mob.EntityGlyphid;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
public class TileEntityLantern extends TileEntity {
@Override
public void updateEntity() {
if(!worldObj.isRemote && worldObj.getTotalWorldTime() % 20 == 0) {
List<EntityGlyphid> glyphids = worldObj.getEntitiesWithinAABB(EntityGlyphid.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5, yCoord + 5.5, zCoord + 0.5, xCoord + 0.5, yCoord + 5.5, zCoord + 0.5).expand(7.5, 7.5, 7.5));
for(EntityGlyphid glyphid : glyphids) {
glyphid.addPotionEffect(new PotionEffect(Potion.blindness.id, 100, 0));
}
}
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord,
yCoord,
zCoord,
xCoord + 1,
yCoord + 6,
zCoord + 1
);
}
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
}

View File

@ -0,0 +1,137 @@
package com.hbm.tileentity.deco;
import java.util.ArrayList;
import java.util.List;
import com.hbm.entity.missile.EntityBobmazon;
import com.hbm.inventory.OreDictManager;
import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.items.ModItems;
import com.hbm.items.special.ItemKitCustom;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.tileentity.IRepairable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class TileEntityLanternBehemoth extends TileEntity implements INBTPacketReceiver, IRepairable {
public boolean isBroken = false;
public int comTimer = -1;
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
if(comTimer == 360) worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.hornNearSingle", 10F, 1F);
if(comTimer == 280) worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.hornFarSingle", 10000F, 1F);
if(comTimer == 220) worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.hornNearDual", 10F, 1F);
if(comTimer == 100) worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.hornFarDual", 10000F, 1F);
if(comTimer == 0) {
EntityBobmazon shuttle = new EntityBobmazon(worldObj);
shuttle.posX = xCoord + 0.5 + worldObj.rand.nextGaussian() * 10;
shuttle.posY = 300;
shuttle.posZ = zCoord + 0.5 + worldObj.rand.nextGaussian() * 10;
ItemStack payload = ItemKitCustom.create("Supplies", null, 0xffffff, 0x008000,
new ItemStack(ModItems.circuit_aluminium, 4 + worldObj.rand.nextInt(4)),
new ItemStack(ModItems.circuit_copper, 4 + worldObj.rand.nextInt(2)),
new ItemStack(ModItems.circuit_red_copper, 2 + worldObj.rand.nextInt(3)),
new ItemStack(ModItems.circuit_gold, 1 + worldObj.rand.nextInt(2)),
worldObj.rand.nextInt(3) == 0 ? new ItemStack(ModItems.gem_alexandrite) : new ItemStack(Items.diamond, 6 + worldObj.rand.nextInt(6)),
new ItemStack(Blocks.red_flower));
shuttle.payload = payload;
worldObj.spawnEntityInWorld(shuttle);
}
if(comTimer >= 0) {
comTimer--;
}
NBTTagCompound data = new NBTTagCompound();
data.setBoolean("isBroken", isBroken);
INBTPacketReceiver.networkPack(this, data, 250);
}
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
this.isBroken = nbt.getBoolean("isBroken");
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
isBroken = nbt.getBoolean("isBroken");
comTimer = nbt.getInteger("comTimer");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setBoolean("isBroken", isBroken);
nbt.setInteger("comTimer", comTimer);
}
@Override
public boolean isDamaged() {
return isBroken;
}
List<AStack> repair = new ArrayList();
@Override
public List<AStack> getRepairMaterials() {
if(!repair.isEmpty())
return repair;
repair.add(new OreDictStack(OreDictManager.STEEL.plate(), 2));
repair.add(new ComparableStack(ModItems.circuit_copper, 1));
return repair;
}
@Override
public void repair() {
this.isBroken = false;
this.comTimer = 400;
this.markDirty();
}
@Override public void tryExtinguish(World world, int x, int y, int z, EnumExtinguishType type) { }
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord,
yCoord,
zCoord,
xCoord + 1,
yCoord + 6,
zCoord + 1
);
}
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
}

View File

@ -0,0 +1,175 @@
package com.hbm.tileentity.machine;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.inventory.container.ContainerAshpit;
import com.hbm.inventory.gui.GUIAshpit;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.items.ModItems;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class TileEntityAshpit extends TileEntityMachineBase implements IGUIProvider {
private int playersUsing = 0;
public float doorAngle = 0;
public float prevDoorAngle = 0;
public boolean isFull;
public int ashLevelWood;
public int ashLevelCoal;
public int ashLevelMisc;
public TileEntityAshpit() {
super(5);
}
@Override
public void openInventory() {
if(!worldObj.isRemote) this.playersUsing++;
}
@Override
public void closeInventory() {
if(!worldObj.isRemote) this.playersUsing--;
}
@Override
public String getName() {
return "container.ashpit";
}
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
int threshold = 2000;
if(processAsh(ashLevelWood, EnumAshType.WOOD, threshold)) ashLevelWood -= threshold;
if(processAsh(ashLevelCoal, EnumAshType.COAL, threshold)) ashLevelCoal -= threshold;
if(processAsh(ashLevelMisc, EnumAshType.MISC, threshold)) ashLevelMisc -= threshold;
isFull = false;
for(int i = 0; i < 5; i++) {
if(slots[i] != null) isFull = true;
}
NBTTagCompound data = new NBTTagCompound();
data.setInteger("playersUsing", this.playersUsing);
data.setBoolean("isFull", this.isFull);
this.networkPack(data, 50);
} else {
this.prevDoorAngle = this.doorAngle;
float swingSpeed = (doorAngle / 10F) + 3;
if(this.playersUsing > 0) {
this.doorAngle += swingSpeed;
} else {
this.doorAngle -= swingSpeed;
}
this.doorAngle = MathHelper.clamp_float(this.doorAngle, 0F, 135F);
}
}
protected boolean processAsh(int level, EnumAshType type, int threshold) {
if(level >= threshold) {
for(int i = 0; i < 5; i++) {
if(slots[i] == null) {
slots[i] = DictFrame.fromOne(ModItems.powder_ash, type);
ashLevelWood -= threshold;
return true;
} else if(slots[i].stackSize < slots[i].getMaxStackSize() && slots[i].getItem() == ModItems.powder_ash && slots[i].getItemDamage() == type.ordinal()) {
slots[i].stackSize++;
return true;
}
}
}
return false;
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
this.playersUsing = nbt.getInteger("playersUsing");
this.isFull = nbt.getBoolean("isFull");
}
@Override
public int[] getAccessibleSlotsFromSide(int meta) {
return new int[] { 0, 1, 2, 3, 4 };
}
@Override
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
return true;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.ashLevelWood = nbt.getInteger("ashLevelWood");
this.ashLevelCoal = nbt.getInteger("ashLevelCoal");
this.ashLevelMisc = nbt.getInteger("ashLevelMisc");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("ashLevelWood", ashLevelWood);
nbt.setInteger("ashLevelCoal", ashLevelCoal);
nbt.setInteger("ashLevelMisc", ashLevelMisc);
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 1,
yCoord,
zCoord - 1,
xCoord + 2,
yCoord + 1,
zCoord + 2
);
}
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerAshpit(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIAshpit(player.inventory, this);
}
}

View File

@ -279,13 +279,19 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyStored(Context context, Arguments args) {
return new Object[] {getPower()};
return new Object[] {getPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getMaxEnergy(Context context, Arguments args) {
return new Object[] {getMaxPower()};
return new Object[] {getMaxPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower()};
}
@Callback(direct = true, limit = 4)

View File

@ -202,20 +202,20 @@ public class TileEntityCoreInjector extends TileEntityMachineBase implements IFl
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] getFirstFuel(Context context, Arguments args) {
return new Object[] {tanks[0].getFill()};
public Object[] getFuel(Context context, Arguments args) {
return new Object[] {tanks[0].getFill(), tanks[1].getFill()};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] getSecondFuel(Context context, Arguments args) {
return new Object[] {tanks[1].getFill()};
public Object[] getTypes(Context context, Arguments args) {
return new Object[] {tanks[0].getTankType().getName(), tanks[1].getTankType().getName()};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {tanks[0].getFill(), tanks[1].getFill()};
return new Object[] {tanks[0].getFill(), tanks[0].getTankType().getName(), tanks[1].getFill(), tanks[1].getTankType().getName()};
}
@Override

View File

@ -194,13 +194,19 @@ public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEn
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getInput(Context context, Arguments args) {
return new Object[] {joules};
return new Object[] {joules, "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getOutput(Context context, Arguments args) {
return new Object[] {power};
return new Object[] {getPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {joules, getPower()}; //literally only doing this for the consistency between components
}
@Callback(direct = true, limit = 4)
@ -212,7 +218,7 @@ public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEn
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {joules, power, tank.getFill()};
return new Object[] {joules, getPower(), tank.getFill()};
}
@Override

View File

@ -176,13 +176,19 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyStored(Context context, Arguments args) {
return new Object[] {power};
return new Object[] {getPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getMaxEnergy(Context context, Arguments args) {
return new Object[] {maxPower};
return new Object[] {getMaxPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower()};
}
@Callback(direct = true, limit = 4)

View File

@ -308,6 +308,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn
if(this.tanks[3].getFill() < 100) return false;
ElectrolysisMetalRecipe recipe = ElectrolyserMetalRecipes.getRecipe(slots[14]);
if(recipe == null) return false;
if(leftStack != null) {
if(recipe.output1.material != leftStack.material) return false;

View File

@ -1,13 +1,17 @@
package com.hbm.tileentity.machine;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.pollution.PollutionHandler;
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
import com.hbm.inventory.fluid.FluidType;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.items.ItemEnums.EnumAshType;
import com.hbm.module.ModuleBurnTime;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachinePolluting;
import com.hbm.util.ItemStackUtil;
import api.hbm.fluid.IFluidStandardSender;
import api.hbm.tile.IHeatSource;
@ -15,6 +19,7 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.util.ForgeDirection;
@ -68,9 +73,21 @@ public abstract class TileEntityFireboxBase extends TileEntityMachinePolluting i
for(int i = 0; i < 2; i++) {
if(slots[i] != null) {
int fuel = (int) (getModule().getBurnTime(slots[i]) * getTimeMult());
int baseTime = getModule().getBurnTime(slots[i]);
if(fuel > 0) {
if(baseTime > 0) {
int fuel = (int) (baseTime * getTimeMult());
TileEntity below = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord);
if(below instanceof TileEntityAshpit) {
TileEntityAshpit ashpit = (TileEntityAshpit) below;
EnumAshType type = this.getAshFromFuel(slots[i]);
if(type == EnumAshType.WOOD) ashpit.ashLevelWood += baseTime;
if(type == EnumAshType.COAL) ashpit.ashLevelCoal += baseTime;
if(type == EnumAshType.MISC) ashpit.ashLevelMisc += baseTime;
}
this.maxBurnTime = this.burnTime = fuel;
this.burnHeat = getModule().getBurnHeat(getBaseHeat(), slots[i]);
slots[i].stackSize--;
@ -133,6 +150,22 @@ public abstract class TileEntityFireboxBase extends TileEntityMachinePolluting i
}
}
}
public EnumAshType getAshFromFuel(ItemStack stack) {
List<String> names = ItemStackUtil.getOreDictNames(stack);
for(String name : names) {
if(name.contains("Coke")) return EnumAshType.COAL;
if(name.contains("Coal")) return EnumAshType.COAL;
if(name.contains("Lignite")) return EnumAshType.COAL;
if(name.startsWith("log")) return EnumAshType.WOOD;
if(name.contains("Wood")) return EnumAshType.WOOD;
if(name.contains("Sapling")) return EnumAshType.WOOD;
}
return EnumAshType.MISC;
}
public abstract ModuleBurnTime getModule();
public abstract int getBaseHeat();

View File

@ -375,7 +375,7 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I
else if(type == Fluids.HOTSTEAM) {type_1 = "1";}
else if(type == Fluids.SUPERHOTSTEAM) {type_1 = "2";}
else if(type == Fluids.ULTRAHOTSTEAM) {type_1 = "3";}
else {type_1 = "Steam out-of-bounds";}
else {type_1 = "Unknown Error";}
return new Object[] {heat, steam.getFill(), steam.getMaxFill(), feed.getFill(), feed.getMaxFill(), type_1, xCoord, yCoord, zCoord};
}

View File

@ -312,19 +312,19 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getFillType(Context context, Arguments args) {
return new Object[] {feed.getTankType().getID()};
return new Object[] {feed.getTankType().getName()};
}
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getExportType(Context context, Arguments args) {
return new Object[] {steam.getTankType().getID()};
return new Object[] {steam.getTankType().getName()};
}
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {heat, feed.getFill(), feed.getMaxFill(), steam.getFill(), steam.getMaxFill(), feed.getTankType().getID(), steam.getTankType().getID(), xCoord, yCoord, zCoord};
return new Object[] {heat, feed.getFill(), feed.getMaxFill(), steam.getFill(), steam.getMaxFill(), feed.getTankType().getName(), steam.getTankType().getName(), xCoord, yCoord, zCoord};
}
@Callback(direct = true, limit = 8)

View File

@ -389,12 +389,12 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getTypeStored(Context context, Arguments args) {
return new Object[] {tank.getTankType().getUnlocalizedName()};
return new Object[] {tank.getTankType().getName()};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[]{tank.getFill(), tank.getMaxFill(), tank.getTankType().getUnlocalizedName()};
return new Object[]{tank.getFill(), tank.getMaxFill(), tank.getTankType().getName()};
}
}

View File

@ -392,19 +392,25 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I
// do some opencomputer stuff
@Override
public String getComponentName() {
return "ntm_energy_storage"; // need a way to somehow detect the first word of the energy storage block so people wont get confused when it comes to multiple energy storage blocks
return "ntm_energy_storage"; //ok if someone else can figure out how to do this that'd be nice (change the component name based on the type of storage block)
}
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyStored(Context context, Arguments args) {
return new Object[] {getPower()};
public Object[] getEnergyStored(Context context, Arguments args) { //TODO for gamma: when ready remove these deprecated functions in all components
return new Object[] {getPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getMaxEnergy(Context context, Arguments args) {
return new Object[] {getMaxPower()};
return new Object[] {getMaxPower(), "Consider switching to the main function 'getEnergyInfo', as this function is deprecated and will soon be removed."};
}
@Callback(direct = true, limit = 8)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyInfo(Context context, Arguments args) {
return new Object[] {getPower(), getMaxPower()};
}
@Callback(direct = true, limit = 8)

View File

@ -487,12 +487,12 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getTypeStored(Context context, Arguments args) {
return new Object[] {tank.getTankType().getUnlocalizedName()};
return new Object[] {tank.getTankType().getName()};
}
@Callback(direct = true, limit = 4)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[]{tank.getFill(), tank.getMaxFill(), tank.getTankType().getUnlocalizedName()};
return new Object[]{tank.getFill(), tank.getMaxFill(), tank.getTankType().getName()};
}
}

View File

@ -5,6 +5,7 @@ import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockLoot.TileEntityLoot;
import com.hbm.items.ModItems;
import com.hbm.items.special.ItemBookLore;
import com.hbm.items.ItemAmmoEnums.AmmoFatman;
import net.minecraft.item.Item;
@ -21,6 +22,15 @@ public class LootGenerator {
loot.addItem(stack, x + rand.nextGaussian() * 0.02, y, z + rand.nextGaussian() * 0.02);
}
public static void lootBooklet(World world, int x, int y, int z) {
TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y, z);
if(loot != null && loot.items.isEmpty()) {
loot.addItem(ItemBookLore.createBook("beacon", 12, 0x404040, 0xD637B3), 0, 0, 0);;
}
}
public static void lootCapNuke(World world, int x, int y, int z) {
TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y, z);

View File

@ -0,0 +1,44 @@
package com.hbm.util;
import cpw.mods.fml.relauncher.ReflectionHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityTracker;
import net.minecraft.entity.EntityTrackerEntry;
import net.minecraft.network.play.server.S18PacketEntityTeleport;
import net.minecraft.util.IntHashMap;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
/**
* This absolute fucking mess of a class is the direct consequence of mojank's terrible entity tracker that allows for 0 flexibility with how entities are synced.
*
* @author hbm
*/
public class TrackerUtil {
/** Grabs the tracker entry from the given entity */
public static EntityTrackerEntry getTrackerEntry(WorldServer world, int entityId) {
EntityTracker entitytracker = world.getEntityTracker();
IntHashMap map = ReflectionHelper.getPrivateValue(EntityTracker.class, entitytracker, "trackedEntityIDs", "field_72794_c");
EntityTrackerEntry entry = (EntityTrackerEntry) map.lookup(entityId);
return entry;
}
/** Force-teleports the given entity using the tracker, resetting the tick count to 0 to prevent movement during this tick */
public static void sendTeleport(World world, Entity e) {
if(world instanceof WorldServer) {
WorldServer server = (WorldServer) world;
EntityTrackerEntry entry = getTrackerEntry(server, e.getEntityId());
int xScaled = e.myEntitySize.multiplyBy32AndRound(e.posX);
int yScaled = MathHelper.floor_double(e.posY * 32.0D);
int zScaled = e.myEntitySize.multiplyBy32AndRound(e.posZ);
int yaw = MathHelper.floor_float(e.rotationYaw * 256.0F / 360.0F);
int pitch = MathHelper.floor_float(e.rotationPitch * 256.0F / 360.0F);
entry.func_151259_a(new S18PacketEntityTeleport(e.getEntityId(), xScaled, yScaled, zScaled, (byte)yaw, (byte)pitch));
//this prevents the tracker from sending movement updates in the same tick
entry.ticks = 0;
}
}
}

View File

@ -8,7 +8,6 @@ import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.WorldConfig;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.explosion.ExplosionNukeSmall;
import com.hbm.interfaces.Spaghetti;
import com.hbm.items.ModItems;
import com.hbm.lib.ModDamageSource;
@ -121,11 +120,6 @@ public class Meteorite {
generateSphere5x5(world, rand, x, y, z, list10);
setBlock(world, x, y, z, ModBlocks.taint, 9, 2);
return;
case 11:
// Atomic meteorite
ExplosionNukeSmall.explode(world, x + 0.5, y + 0.5, z + 0.5, safe ? ExplosionNukeSmall.PARAMS_SAFE : ExplosionNukeSmall.PARAMS_MEDIUM);
return;
case 12:
// Star Blaster
world.createExplosion(null, x + 0.5, y + 0.5, z + 0.5, 10F, !safe);

View File

@ -1010,6 +1010,7 @@ item.ammo_grenade_finned.name=40mm Granate (Geflügelt)
item.ammo_grenade_he.name=40mm Granate (HE)
item.ammo_grenade_incendiary.name=40mm Granate (Brand)
item.ammo_grenade_kampf.name=40mm Rakete
item.ammo_grenade_leadburster.name=40mm Leadburster
item.ammo_grenade_nuclear.name=40mm Granate (Привет)
item.ammo_grenade_phosphorus.name=40mm Granate (WP)
item.ammo_grenade_sleek.name=40mm Granate (IF-F&E)
@ -3942,6 +3943,8 @@ tile.lamp_tritium_blue_off.name=Blaue Tritiumlampe
tile.lamp_tritium_blue_on.name=Blaue Tritiumlampe
tile.lamp_tritium_green_off.name=Grüne Tritiumlampe
tile.lamp_tritium_green_on.name=Grüne Tritiumlampe
tile.lantern.name=Laterne
tile.lantern_behemoth.name=Alte Laterne
tile.launch_pad.name=Raketenabschussrampe
tile.launch_table.name=Große Startrampe
tile.leaves_layer.name=Totes Laub
@ -3950,6 +3953,8 @@ tile.machine_amgen.name=Umgebungsstrahlungs-Generator
tile.machine_arc_furnace_off.name=Lichtbogenofen
tile.machine_arc_furnace_on.name=Lichtbogenofen
tile.machine_armor_table.name=Rüstungsmodifikationstisch
tile.machine_ashpit.name=Ashekasten
tile.machine_ashpit.desc=Sammelt Asche von Feuerbüchsen und Heizöfen
tile.machine_assembler.name=Fertigungsmaschine
tile.machine_assemfac.name=Fertigungsfabrik
tile.machine_autocrafter.name=Automatische Werkbank

View File

@ -442,8 +442,8 @@ book_lore.beacon.page.5=light up red, otherwise it will light up green. Note tha
book_lore.beacon.page.6=Chapter 3: Fog Horn $ The fog horn is the primary communication device of the beacon. The beacon is designed for peer-to-peer (P2P) communication as well as for message broadcasting.
book_lore.beacon.page.7=Chapter 4: Peer-to-Peer $ For details on communication, refer to the communications handbook. A short rundown of establishing a P2P connection follows: First, the beacon has to give the "START CONNECTION" signal,
book_lore.beacon.page.8=being a single long tone. All available peers should respond with a single long tone as well (order specified by proximity, as well as the communication guidelines outlined in the handbook, section "Responding to a Connection")
book_lore.beacon.page.9=Once the desired peer has responded, give the "ACCEPT CONNECTION" signal, being two long tones, the peer will then also respond with two long tones. All communication afterwards has to happen using pre-negotiated signals,
book_lore.beacon.page.10=most commonly using the FAR-5M standard. Communication will end immediately if no standard has been negotiated, serving as a "ping". Should communication continue, the connection can be ended using another long single tone "END CONNECTION".
book_lore.beacon.page.9=Once the desired peer has responded, give the "ACCEPT CONNECTION" signal, being two long tones, the peer will then also respond with two long tones. All communication afterwards has to happen using pre-negotiated signals, most commonly
book_lore.beacon.page.10=using the FAR-5M standard. Communication will end immediately if no standard has been negotiated, serving as a "ping". Should communication continue, the connection can be ended using another long single tone "END CONNECTION".
book_lore.beacon.page.11=Chapter 5: Warranty $ [ page intentionally left blank ]
cannery.f1=[ Press F1 for help ]
@ -914,6 +914,7 @@ desc.item.ammo.neu_fun=* Fun for the whole family!
desc.item.ammo.neu_heavy_metal=* Heavy Metal
desc.item.ammo.neu_homing=* Homing
desc.item.ammo.neu_jolt=* Jolt
desc.item.ammo.neu_leadburster=* Attaches to surfaces and sprays bullets
desc.item.ammo.neu_less_bouncy=* Less bouncy
desc.item.ammo.neu_maskman_flechette=* Fires a tracer which summons a storm of DU-flechettes
desc.item.ammo.neu_maskman_meteorite=* Fires a high-damage round that summons a small meteorite
@ -1103,7 +1104,8 @@ gun.make.MANN=Open Mann Co.
gun.make.MAXIM=Hiram Maxim
gun.make.METRO=Metro Gunsmiths
gun.make.MWT=MWT Prototype Labs
gun.make.NAZI=Erfurter Maschinenfabrik Geipel
gun.make.NAWS=Kayarm Industries
gun.make.ERFURT=Erfurter Maschinenfabrik Geipel
gun.make.NONE=-
gun.make.RAYTHEON=Raytheon Missile Systems
gun.make.REMINGTON=Remington Arms
@ -1127,6 +1129,7 @@ gun.name.benelli=Benelli M4 Super 90
gun.name.benelliDrum=Benelli M4 Super 90 (Drum Magazine Modification)
gun.name.bio=RI No. 2 Mark 1
gun.name.bolter=Manticora Pattern Boltgun
gun.name.congoLake=Congo Lake Pump-Action Grenade Launcher
gun.name.cPython=Colt Python
gun.name.cz53=CZ53 Personal Minigun
gun.name.cz57=CZ57 Avenger Minigun
@ -1657,6 +1660,7 @@ item.ammo_grenade_finned.name=40mm Grenade (Finned)
item.ammo_grenade_he.name=40mm Grenade (HE)
item.ammo_grenade_incendiary.name=40mm Grenade (Incendiary)
item.ammo_grenade_kampf.name=40mm Rocket
item.ammo_grenade_leadburster.name=40mm Leadburster
item.ammo_grenade_nuclear.name=40mm Grenade (Привет)
item.ammo_grenade_phosphorus.name=40mm Grenade (WP)
item.ammo_grenade_sleek.name=40mm Grenade (IF-R&D)
@ -1736,6 +1740,7 @@ item.ams_focus_limiter.desc=Maximum performance for restriction field:$Standard
item.ams_lens.name=Stabilizer Lens
item.ams_muzzle.name=Ray-Emission Muzzle
item.ams_muzzle.desc=...it emits an energy-beam thingy.
item.analysis_tool.name=Analysis Tool
item.analyzer.name=Analyzer
item.anchor_remote.name=Recall Device
item.antiknock.name=Tetraethyllead Antiknock Agent
@ -2597,6 +2602,7 @@ item.gun_calamity_ammo.name=.50 BMG Round (LEGACY)
item.gun_calamity_dual.name=Saddle Gun
item.gun_chemthrower.name=Chemthrower
item.gun_coilgun.name=Coilgun
item.gun_congolake.name=Congo Lake
item.gun_cryolator.name=The Cryolator
item.gun_cryolator_ammo.name=Cryo Cell
item.gun_dampfmaschine.name=Totally Not a Joke Weapon
@ -3476,6 +3482,9 @@ item.powder_advanced_alloy.name=Advanced Alloy Powder
item.powder_aluminium.name=Aluminium Powder
item.powder_asbestos.name=Asbestos Powder
item.powder_asbestos.desc=§o\"Sniffffffff- MHHHHHHMHHHHHHHHH\"§r
item.powder_ash.coal.name=Coal Ash
item.powder_ash.misc.name=Ash
item.powder_ash.wood.name=Wood Ash
item.powder_astatine.name=Astatine Powder
item.powder_at209.name=Astatine-209 Powder
item.powder_au198.name=Gold-198 Powder
@ -4866,6 +4875,8 @@ tile.lamp_tritium_blue_off.name=Blue Tritium Lamp
tile.lamp_tritium_blue_on.name=Blue Tritium Lamp
tile.lamp_tritium_green_off.name=Green Tritium Lamp
tile.lamp_tritium_green_on.name=Green Tritium Lamp
tile.lantern.name=Lantern
tile.lantern_behemoth.name=Old Lantern
tile.launch_pad.name=Missile Launch Pad
tile.launch_table.name=Large Launch Pad
tile.leaves_layer.name=Fallen Leaves
@ -4874,6 +4885,8 @@ tile.machine_amgen.name=Ambience Radiation Generator
tile.machine_arc_furnace_off.name=Arc Furnace
tile.machine_arc_furnace_on.name=Arc Furnace
tile.machine_armor_table.name=Armor Modification Table
tile.machine_ashpit.name=Ashpit
tile.machine_ashpit.desc=Collects ashes from fireboxes and heating ovens
tile.machine_assembler.name=Assembly Machine
tile.machine_assemfac.name=Assembly Factory
tile.machine_autocrafter.name=Automatic Crafting Table

View File

@ -8,7 +8,7 @@ achievement.breeding.desc=谢谢你们,上帝保佑你们,上帝保佑美利
achievement.breeding=反话
achievement.bismuth.desc=还记得有人抱怨了一个月吗?我愿意。
achievement.bismuth=铋
achievement.blastFurnace.desc=他们为制造探险1号去打捞了一艘沉没的无畏舰。
achievement.blastFurnace.desc=他们为制造探险1号去打捞了一艘沉没的无畏舰。
achievement.blastFurnace=煤和铁
achievement.bossCreeper.desc=核爆爬行者? 那是个什么玩意?!
achievement.bossCreeper=四条腿的行走核弹
@ -350,7 +350,7 @@ book_lore.resignation_note.page.0=Management downsized our department again yest
book_lore.resignation_note.page.1=管理层昨天又对我们的部门进行裁员了。那群白痴要怪只能怪他们自己,我都不知道他们在那场惨败后还在期待什么。到底是谁他妈泄露了那种程度的信息?
book_lore.resignation_note.page.2=我们损失了几百万,而且现在失业的还是爷。老子希望你们这帮混蛋最后能从你们的一堆问题中学到点教训然后给爷滚去自闭。
book_lore.memo_stocks.name=公司内部备忘录
book_lore.memo_stocks.page.0=Investor Relations - $ $ There's been some glaring discrepancies in the figures provided for the latest quarterly report. It would be prudent for the financial department to make some adjustments, so there won't be any concern.
book_lore.memo_stocks.page.0=投资者关系 - $ $ 最新季度报告提供的数据存在一些明显差异。财务部门做出一些调整是谨慎的,所以不必有任何担忧。
book_lore.memo_schrab_gsa.name=内部备忘录
book_lore.memo_schrab_gsa.page.0=Contract Management - $ $ Legal has made a breakthrough with the DLA. They've awarded us with a 45 BILLION GSA Schedule for further procurement and research of saralloy. At current estimates, that would be at minimum
book_lore.memo_schrab_gsa.page.1=合同管理记录 - 法务部在与美国国防部后勤局的谈判中取得了突破。他们批准了450亿的联邦采购服务总署投资资金用于异变金属的采购与研究。
@ -377,13 +377,13 @@ book_lore.bf_bomb_2.page.1=And yet I can't even blame them. Swirlmat makes no go
book_lore.bf_bomb_2.page.2=Even worse, this thing is an energy source. The existence of our sample is a violation of ALARA: the lab was vacated when it arrived, and the only person brave enough (one Dr. Melfyn) donned a level A hazmat just to carry it 20 meters.
book_lore.bf_bomb_2.page.3=The empirical data isn't better, as we're breaking the first law of thermodynamics with how much energy it radiates. Being anywhere near that thing - even behind a meter of lead - was terrifying. We sprinted out of the chamber upon conclusion of the spectroscopy
book_lore.bf_bomb_2.page.4=and we got nothing new out of it. Those idiots in the science team, god, did not even waver after all that. Sitting through those "discussions" was horrible; that quack of a head researcher even rumored that the test ban would be lifted, that we could be
book_lore.bf_bomb_2.page.5=building bombs out of the shit in the coming weeks, who in their right mind would work on that? Hell, the one sane assistant (an Andrew) nicknamed it "balefire" - because burning to death on a funeral pyre would be painless by comparison.
book_lore.bf_bomb_2.page.5=building bombs out of the shit in the coming weeks, who in their right mind would work on that? Hell, the one sane assistant (an Andrew) nicknamed it "balefire" - because burning to death on a funeral pyre would be painless by comparison.
book_lore.bf_bomb_3.name=私人笔记
book_lore.bf_bomb_3.author=M. 波特
book_lore.bf_bomb_3.page.0=The team and I have made some breakthroughs. Emphasis on the separation - isolating myself from the more devout has made working there so much more bearable. While we still have no idea about the actual properties of balefire (it's difficult to analyze
book_lore.bf_bomb_3.page.1=a sample that fries your equipment) its interactions with other matter has proved fruitful. Notably, they synthesized a "gaseous" form: Andrew, of all people, informed me that it was really a colloid consisting of microscopic balefire particles, suspended in some
book_lore.bf_bomb_3.page.2=noble gas. Each particle is enveloped by a positively-charged 'bubble' of ionized gas, preventing it from settling. Who could've guessed that fatal gamma radiation had a benefit? Not me. $ I'm choosing not to think about how they transformed the sample into
book_lore.bf_bomb_3.page.3=particulate, but I can't understate the utility of this gaseous balefire - it's made it much safer to experiment on. $ Speaking of safety, the head researcher (in an act of callous disregard) made a discovery that also nearly took his head off.
book_lore.bf_bomb_3.page.3=particulate, but I can't understate the utility of this gaseous balefire - it's made it much safer to experiment on. $ Speaking of safety, the head researcher (in an act of callous disregard) made a discovery that also nearly took his head off.
book_lore.bf_bomb_3.page.4=He decided to get "dirty" by letting a cell of our new colloid interact directly with some very expensive antimatter: the resulting explosion turned the table it was on into a piece of radiation-bleached slag, carved a near-perfect hemisphere through
book_lore.bf_bomb_3.page.5=the top, and gave the head a healthy dose of ARS. I guess we know how to make it explode now, but god, some people...
book_lore.bf_bomb_4.name=私人笔记
@ -404,6 +404,20 @@ book_lore.bf_bomb_5.page.5=resigning, I just grabbed my shit and ran for the hil
book_lore.bf_bomb_5.page.6=There's a vital distinction to be made between dissection and VIVISECTION, one which was clearly lost on them. They can dissect metal or atoms as much as they like, but tearing into, vivisecting reality itself is only going to end in more Dr. Melfyns. Who knows!
book_lore.bf_bomb_5.page.7=The government wants to put this shit into bombs after all, maybe we'll see a couple more wars, couple more million resigned to a fate worse than death. They can't hide this forever. $ $ I don't care. Not anymore. Please, god, let me go back
book_lore.bf_bomb_5.page.8=to actual science. $ $ Goddamnit, Mae, get ahold of yourself...
book_lore.beacon.name=信号信标说明书
book_lore.beacon.author=Flim Flam工业
book_lore.beacon.page.0=感谢您购买Mk.2照明信号信标版本1.3)!这本小册子将简要介绍信标的操作及其内部工作原理。
book_lore.beacon.page.1=第1章建筑$每个单元由四个主要部分组成:控制电路、灯笼、雾灯和容纳其他部分的外壳。有关主电路的详细说明,请
book_lore.beacon.page.2=灯笼由聚碳酸酯外壳组成外壳内有一个标准200mm的双色250瓦卤素灯泡因此灯泡可以从我们的商店订购。
book_lore.beacon.page.3=不建议使用第三方灯泡,因为我们无法确保安全操作。外壳由专门的镀锌不锈钢制成,具有耐用性。
book_lore.beacon.page.4=第2章灯笼$灯笼的主要用途是在恶劣的天气条件下提供照明便于维护以及状态指示器。如果开机自检POST失败指示灯将
book_lore.beacon.page.5=亮起红色,否则就会亮起绿色。请注意,颜色可能因更换灯泡的不同而有所不同。
book_lore.beacon.page.6=第3章雾灯$雾灯是信标的主要通信设备。该信标被设计用于对等P2P通信以及消息广播。
book_lore.beacon.page.7=第4章对等$有关通信的详细信息请参阅通信手册。建立P2P连接的简要介绍如下首先信标必须给出“START connection”信号
book_lore.beacon.page.8=是单一的长音。所有可用的对等端也应使用一个长音进行响应(由接近度指定的顺序,以及手册“响应连接”一节中概述的通信指南)
book_lore.beacon.page.9=一旦所需对等端做出响应则给出“ACCEPT CONNECTION”信号即两个长音然后对等端也将用两个长音调进行响应。之后的所有通信都必须使用预先协商的信号来进行
book_lore.beacon.page.10=最常用的是FAR-5M标准。如果没有协商标准沟通将立即结束起到“ping”的作用。如果通信继续可以使用另一个长单音“END connection”结束连接。
book_lore.beacon.page.11=第5章保修$[页面故意留空]
cannery.f1=[按F1键获取帮助]
cannery.centrifuge=气体离心机
cannery.centrifuge.0=气体离心机可以使用通用流体管道传输流体。
@ -567,6 +581,11 @@ chem.VIT_LIQUID=液态核废料玻璃化
chem.XENON=林德循环制氙
chem.XENON_OXY=增强林德循环制氙
chem.YELLOWCAKE=黄饼生产
commands.satellite.no_satellite=未找到使用此频率的卫星!
commands.satellite.not_a_satellite=持有的物品不是卫星!
commands.satellite.satellite_descended=卫星成功降落。
commands.satellite.satellite_orbited=卫星发射。
commands.satellite.should_be_run_as_player=此命令应该由玩家运行!
container.amsBase=AMS基座(装饰)
container.amsEmitter=AMS发射极(装饰)
container.amsLimiter=AMS稳能器(装饰)
@ -592,6 +611,7 @@ container.craneUnboxer=输送带解包机
container.crateDesh=Desh箱
container.crateIron=铁箱
container.crateSteel=钢箱
container.crateTemplate=模板箱
container.crateTungsten=钨箱
container.crystallizer=矿物酸化器
container.cyclotron=回旋加速器
@ -636,6 +656,7 @@ container.machineCompressor=压缩机
container.machineCrucible=坩埚
container.machineDiesel=柴油发电机
container.machineElectricBoiler=电锅炉
container.machineElectrolyser=电解机
container.machineFEL=FEL
container.machineITER=聚变反应堆
container.machineLargeTurbine=工业汽轮机
@ -693,6 +714,7 @@ container.reactorResearch=研究型反应堆
container.reix=Rei-X主机
container.rtg=放射性同位素发电机
container.rtgFurnace=放射性同位素热力炉[RTG]
container.rttyCounter=红石无线项目计数器
container.rttyReceiver=无线红石接收器
container.rttySender=无线红石发射器
container.safe=保险箱
@ -980,6 +1002,11 @@ entity.hbm.entity_balls_o_tron_seg.name=机械蠕虫
entity.hbm.entity_bullet.name=子弹
entity.hbm.entity_rocket.name=火箭弹
entity.hbm.entity_schrabnel.name=Schrabnel
excavator.crusher=粉碎开关
excavator.drill=挖掘开关
excavator.silktouch=精准采集开关
excavator.veinminer=连锁挖矿开关
excavator.walling=填充开关
flare.ignition=点火装置
flare.valve=流量阀
fluid.acid_fluid=酸
@ -1007,6 +1034,7 @@ gun.make.CERIX=赛里克斯·马格努斯锻造世界
gun.make.COLT=柯尔特制造公司
gun.make.COMBINE=世界工会
gun.make.CUBE=Cube 2: Sauerbraten
gun.make.DRG=深岩银河
gun.make.ENZINGER=Enzinger工会
gun.make.EQUESTRIA=小马国导弹系统
gun.make.FLIMFLAM=FlimFlam“欺骗”工业
@ -1107,7 +1135,7 @@ gun.name.tommy9=M1A1冲锋枪9毫米型
gun.name.tommy=M1A1冲锋枪
gun.name.topaz=重型火焰燃烧器
gun.name.uacCarbine=UAC-41卡宾枪
gun.name.uacDeagle=UAC-H54 "Martian Raptor" Automag
gun.name.uacDeagle=UAC-H54“火星猛禽”大容量手枪
gun.name.uacDMR=UAC-30 精确射手步枪
gun.name.uacLMG=UAC-49轻机枪
gun.name.uacPistol=UAC-B950 .45 标准型手枪
@ -1221,6 +1249,7 @@ hbmfluid.heavyoil=重油
hbmfluid.heavyoil_vacuum=减压重油
hbmfluid.heavywater=重水
hbmfluid.helium3=氦-3
hbmfluid.helium4=氦-4
hbmfluid.hotcrackoil=热裂化油
hbmfluid.hotoil=热原油
hbmfluid.hotsteam=热蒸汽
@ -1259,7 +1288,7 @@ hbmfluid.plasma_dh3=氘-氦3 等离子体
hbmfluid.plasma_dt=氘-氚等离子体
hbmfluid.plasma_hd=氢-氘等离子体
hbmfluid.plasma_ht=氢-氚等离子体
hbmfluid.plasma_xm=氙-汞等离子体
hbmfluid.plasma_xm=液氧-氦-4等离子体
hbmfluid.potassium_chloride=氯化钾溶液
hbmfluid.puf6=六氟化钚
hbmfluid.radiosolvent=高性能溶剂
@ -1272,6 +1301,9 @@ hbmfluid.sas3=三硫化Sa
hbmfluid.schrabidic=Sa酸
hbmfluid.seedslurry=播种浆料
hbmfluid.smear=工业油
hbmfluid.smoke=烟雾
hbmfluid.smoke_leaded=含铅烟雾
hbmfluid.smoke_poison=有毒烟雾
hbmfluid.solvent=有机溶剂
hbmfluid.sourgas=高硫天然气
hbmfluid.spentsteam=低压蒸汽
@ -1392,6 +1424,7 @@ hbmmat.watzmud=毒泥浆
hbmmat.whitephosphorus=白磷
hbmmat.workersalloy=Desh
hbmmat.wroughtiron=锻铁
hbmmat.zirconium=锆
matshape.block=%s 块
matshape.blocks=%s 块
matshape.ingot=%s 锭
@ -1540,6 +1573,9 @@ item.ammo_arty_phosgene.name=16英寸光气炮弹
item.ammo_arty_phosphorus.name=16英寸磷炮弹
item.ammo_arty_phosphorus_multi.name=16英寸多弹头磷炮弹
item.ammo_cell.name=能量单元
item.ammo_coilgun.name=钨制线圈枪子弹
item.ammo_coilgun_du.name=铀铁合金制线圈枪子弹
item.ammo_coilgun_rubber.name=橡胶制线圈枪子弹
item.ammo_container.name=万能弹药盒
item.ammo_dart.name=塑料镖[凋零]
item.ammo_dart_nerf.name=NERF 飞镖
@ -2208,8 +2244,8 @@ item.crystal_phosphorus.name=磷晶体
item.crystal_plutonium.name=钚晶体
item.crystal_rare.name=稀土晶体
item.crystal_redstone.name=红石晶体
item.crystal_schrabidium.name=低丰度Sa326晶体
item.crystal_schraranium.name=Sa326晶体
item.crystal_schrabidium.name=Sa326晶体
item.crystal_schraranium.name=低丰度Sa326晶体
item.crystal_starmetal.name=星辉晶体
item.crystal_sulfur.name=硫晶体
item.crystal_thorium.name=钍晶体
@ -2309,6 +2345,7 @@ item.early_explosive_lenses.desc=8个炸药透镜的组装带有铝合金推
item.egg_balefire.name=野火蛋
item.egg_balefire.desc=什么样的鸟儿才会下带有放射性的蛋?
item.egg_balefire_shard.name=野火蛋碎片
item.egg_glyphid.name=Glyphid Egg
item.elec_axe.name=电锯
item.elec_pickaxe.name=冲击钻
item.elec_shovel.name=螺旋钻
@ -2316,6 +2353,10 @@ item.elec_sword.name=电棍
item.energy_core.name=临时能源核心
item.entanglement_kit.name=纠缠部件
item.entanglement_kit.desc=传送机制作零件$通过$铍增强型资源扫描仪实现尺寸转换。
item.envsuit_boots.name=M1TTY环保套装靴子
item.envsuit_helmet.name=M1TTY环保套装头盔
item.envsuit_legs.name=M1TTY环保套装护腿
item.envsuit_plate.name=M1TTY环保套装胸甲
item.euphemium_boots.name=Ep靴子
item.euphemium_capacitor.name=Ep电容
item.euphemium_capacitor.desc=允许被动分散累积的正能量。
@ -2430,11 +2471,14 @@ item.generator_front.name=发电机前部
item.generator_steel.name=发电机主体
item.glitch.name=故障
item.glowing_stew.name=发光真菌煲
item.glyphid_meat.name=异虫肉
item.glyphid_meat_grilled.name=熟异虫肉
item.goggles.name=护目镜
item.grenade_aschrab.name=可抛反Sa326
item.grenade_black_hole.name=黑洞手榴弹
item.grenade_breach.name=破甲手榴弹
item.grenade_burst.name=挖掘手榴弹
item.grenate_cats.name=猫猫手榴弹
item.grenade_cloud.name=一罐云
item.grenade_cluster.name=集束手榴弹
item.grenade_electric.name=闪电炸弹
@ -2479,6 +2523,7 @@ item.gun_avenger.name=CZ57复仇者机枪
item.gun_b92.name=§9B92能量手枪§r
item.gun_b92_ammo.name=§9B92能量单元§r
item.gun_b93.name=§cB93能量手枪§r
item.gun_benelli.name=Benelli自动喷枪Drum Mod
item.gun_bf.name=BEL
item.gun_bf_ammo.name=Mk.V小型AMAT-炮弹 –野火型
item.gun_bio_revolver.name=Atlas
@ -2492,6 +2537,7 @@ item.gun_calamity.name=希特勒的电锯
item.gun_calamity_ammo.name=.50BMG子弹
item.gun_calamity_dual.name=马鞍枪
item.gun_chemthrower.name=化学喷射器
item.gun_coilgun.name=线圈枪
item.gun_cryolator.name=冻结者
item.gun_cryolator_ammo.name=急冻单元
item.gun_dampfmaschine.name=绝对不是开玩笑的武器
@ -2585,6 +2631,7 @@ item.gun_super_shotgun.name="超级"猎枪
item.gun_super_shotgun.desc=超级烂!
item.gun_supershotgun.name=超级猎枪
item.gun_thompson.name=汤姆森冲锋枪
item.gun_uac_pistol.name=UAC .45手枪
item.gun_uboinik.name=Uboinik
item.gun_uboinik_ammo.name=12x70 鹿弹
item.gun_uzi.name=Uzi冲锋枪
@ -3066,6 +3113,9 @@ item.mysteryshovel.name=易碎锹
item.n2_charge.name=大型炸药
item.neutrino_lens.name=中子透镜
item.neutron_reflector.name=中子反射板
item.night_vision.name=夜视眼镜
item.night_vision.description.item=提供夜视功能(需要全套电动设备)
item.night_vision.description.in_armor=%s允许夜视
item.niter.name=硝石粉
item.no9.name=矿工头盔
item.nossy_hat.name=华丽的帽子
@ -3838,6 +3888,9 @@ item.singularity_super_heated.name=超热共振奇点
item.siox.name=SiOX抗癌药物
item.siox.desc=使用石棉的力量逆转间皮瘤!
item.siren_track.name=警报声轨
item.sliding_blast_door_skin.0.name=滑动防爆门 皮肤:默认
item.sliding_blast_door_skin.1.name=滑动防爆门 皮肤变型1
item.sliding_blast_door_skin.2.name=滑动防爆门 皮肤变型2
item.smashing_hammer.name=粉碎锤
item.solid_fuel.name=固体燃料
item.solid_fuel_bf.name=固体燃料(野火)
@ -4421,6 +4474,7 @@ tile.charge_semtex.name=塞姆汀采矿炸药
tile.charger.name=充电站
tile.cheater_virus.name=冻结Ep
tile.cheater_virus_seed.name=不稳定Ep Schrabide块
tile.chimney_brick.name=烟囱
tile.chlorine_gas.name=氯气
tile.cluster_aluminium.name=铝矿簇
tile.cluster_copper.name=铜矿簇
@ -4429,6 +4483,30 @@ tile.cluster_depth_titanium.name=深层钛矿簇
tile.cluster_depth_tungsten.name=深层钨矿簇
tile.cluster_iron.name=铁矿簇
tile.cluster_titanium.name=钛矿簇
tile.cm_block.alloy.name=高级合金机器外壳
tile.cm_block.desh.name=Desh机器外壳
tile.cm_block.steel.name=钢制机器外壳
tile.cm_block.tcalloy.name=锝钢机器外壳
tile.cm_circuit.aluminium.name=一级电路块
tile.cm_circuit.copper.name=二级电路块
tile.cm_circuit.gold.name=四级电路块
tile.cm_circuit.red_copper.name=三级电路块
tile.cm_circuit.schrabidium.name=五级电路块
tile.cm_engine.bismuth.name=铋电机组
tile.cm_engine.desh.name=DESH电机组
tile.cm_engine.standard.name=电机组
tile.cm_port.alloy.name=高级合金端口
tile.cm_port.desh.name=Desh端口
tile.cm_port.steel.name=钢制端口
tile.cm_port.tcalloy.name=锝钢端口
tile.cm_sheet.alloy.name=高级合金建筑板
tile.cm_sheet.desh.name=Desh建筑板
tile.cm_sheet.steel.name=钢建筑板
tile.cm_sheet.tcalloy.name=锝钢建筑板
tile.cm_tank.alloy.name=高级合金储罐
tile.cm_tank.desh.name=Desh储罐
tile.cm_tank.steel.name=钢制储罐
tile.cm_tank.tcalloy.name=锝钢储罐
tile.cmb_brick.name=CMB钢瓦块
tile.cmb_brick_reinforced.name=加固CMB钢砖块
tile.compact_launcher.name=紧凑型发射台
@ -4497,6 +4575,7 @@ tile.crate_lead.name=危险品补给箱
tile.crate_metal.name=机器补给箱
tile.crate_red.name=红色补给箱
tile.crate_steel.name=钢箱
tile.crate_template.name=模板箱
tile.crate_tungsten.name=钨箱
tile.crate_weapon.name=武器补给箱
tile.crystal_hardened.name=硬化黑水晶
@ -4595,11 +4674,14 @@ tile.flame_war.name=盒中论战
tile.float_bomb.name=悬浮炸弹
tile.fluid_duct.name=通用流体管道
tile.fluid_duct_box.name=通用流体管道(方形)
tile.fluid_duct_exhaust.name=排气管
tile.fluid_duct_gauge.name=流量计管
tile.fluid_duct_gauge.desc=显示每个游戏刻在管网有多少流体移动的管道$由桶或罐连接的分离网络被视为一个共享网络。
tile.fluid_duct_neo.name=通用流体管道
tile.fluid_duct_paintable.name=可喷漆涂层通用流体导管
tile.fluid_duct_solid.name=带涂层的通用流体导管
tile.fluid_switch.name=红石流体阀
tile.fluid_valve.name=流体阀
tile.foam_layer.name=泡沫层
tile.foundry_basin.name=铸造盘
tile.foundry_channel.name=铸造浇道
@ -4671,6 +4753,10 @@ tile.hadron_coil_neodymium.name=致密钕线圈
tile.hadron_coil_schrabidate.name=致密Sa酸铁线圈
tile.hadron_coil_schrabidium.name=密集Sa326线圈
tile.hadron_coil_starmetal.name=密集星辉线圈
tile.hadron_cooler.name=粒子加速器冷却装置
tile.hadron_cooler.desc=冷却功率10$过冷阈值10$冷却加成:+10%%$过冷惩罚:-25%%
tile.hadron_cooler_mk2.name=粒子加速器冷却装置-回文特制
tile.hadron_cooler_mk2.desc=冷却功率5$效率功能2-(冷却-152/225$最高惩罚:-90%%
tile.hadron_core.name=粒子加速器核心组件
tile.hadron_diode.name=肖基特二极管
tile.hadron_plating.name=粒子加速器镀层
@ -4769,6 +4855,7 @@ tile.machine_dineutronium_battery.name=Spark蓄电池
tile.machine_drill.name=自动采矿钻机
tile.machine_electric_furnace_off.name=电炉
tile.machine_electric_furnace_on.name=电炉
tile.machine_electrolyser.name=电解机
tile.machine_epress.name=电动锻压机
tile.machine_excavator.name=大型采矿钻机
tile.machine_fel.name=FEL自由电子激光器
@ -4782,6 +4869,8 @@ tile.machine_gascent.name=气体离心机
tile.machine_generator.name=核反应堆[旧]
tile.machine_geo.name=地热发电机
tile.machine_hephaestus.name=地热换热器
tile.machine_industrial_boiler.name=工业锅炉
tile.machine_industrial_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热率ΔT*0.01 TU/T$不会爆炸
tile.machine_industrial_generator.name=工业发电机
tile.machine_keyforge.name=锁匠桌
tile.machine_large_turbine.name=工业汽轮机
@ -4988,6 +5077,8 @@ tile.pribris.name=RBMK石墨式反应堆残骸
tile.pribris_burning.name=燃烧的RBMK反应堆残骸
tile.pribris_digamma.name=发黑的RBMK反应堆残骸
tile.pribris_radiating.name=阴燃的RBMK反应堆残骸
tile.radio_torch_counter.name=红石无线项目计数器
tile.radio_torch_counter.desc=平面或比较器兼容块上的标牌$根据匹配项目的数量发出信号
tile.radio_torch_receiver.name=无线红石信号接收器
tile.radio_torch_receiver.desc=可在平坦表面或与比较器兼容的方块上放置
tile.radio_torch_sender.name=无线红石信号发射器
@ -5080,6 +5171,7 @@ tile.sellafield.4.name=地狱般的放射性熔融凝固物
tile.sellafield.5.name=放射性熔融凝固物核心
tile.sellafield_slaked.name=消沉的放射性熔融凝固物
tile.semtex.name=塞姆汀塑胶炸药
tile.sliding_blast_door.name=滑动防爆门
tile.solar_mirror.name=定日镜
tile.soyuz_capsule.name=货物着陆舱
tile.soyuz_launcher.name=联盟号发射平台

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,500 @@
# Blender v2.79 (sub 0) OBJ File: 'lantern.blend'
# www.blender.org
o Light
v 0.187500 4.062500 0.187500
v 0.312500 4.812500 0.312500
v 0.187500 4.062500 -0.187500
v 0.312500 4.812500 -0.312500
v -0.181700 4.062500 0.187500
v -0.306700 4.812500 0.312500
v -0.181700 4.062500 -0.187500
v -0.306700 4.812500 -0.312500
vn 0.0000 -0.1644 0.9864
vn -0.9864 -0.1644 0.0000
vn 0.0000 -0.1644 -0.9864
vn 0.9864 -0.1644 0.0000
s off
f 2//1 5//1 1//1
f 7//2 6//2 8//2
f 3//3 8//3 4//3
f 1//4 4//4 2//4
f 2//1 6//1 5//1
f 7//2 5//2 6//2
f 3//3 7//3 8//3
f 1//4 3//4 4//4
o Lantern
v -0.125000 -0.250000 0.125000
v 0.125000 -0.250000 0.125000
v -0.125000 -0.250000 -0.125000
v 0.125000 -0.250000 -0.125000
v -0.125000 0.937500 0.125000
v 0.125000 0.937500 0.125000
v -0.125000 0.937500 -0.125000
v 0.125000 0.937500 -0.125000
v -0.062500 1.000000 0.062500
v 0.062500 1.000000 0.062500
v -0.062500 1.000000 -0.062500
v 0.062500 1.000000 -0.062500
v -0.125000 1.062500 0.125000
v 0.125000 1.062500 0.125000
v -0.125000 1.062500 -0.125000
v 0.125000 1.062500 -0.125000
v -0.125000 1.187500 0.125000
v 0.125000 1.187500 0.125000
v -0.125000 1.187500 -0.125000
v 0.125000 1.187500 -0.125000
v -0.062500 1.250000 0.062500
v 0.062500 1.250000 0.062500
v -0.062500 1.250000 -0.062500
v 0.062500 1.250000 -0.062500
v -0.062500 3.250000 -0.062500
v -0.062500 3.250000 0.062500
v 0.062500 3.250000 0.062500
v 0.062500 3.250000 -0.062500
v -0.125000 3.312500 -0.125000
v -0.125000 3.312500 0.125000
v 0.125000 3.312500 0.125000
v 0.125000 3.312500 -0.125000
v -0.125000 3.437500 -0.125000
v -0.125000 3.437500 0.125000
v 0.125000 3.437500 0.125000
v 0.125000 3.437500 -0.125000
v -0.062500 3.500000 -0.062500
v -0.062500 3.500000 0.062500
v 0.062500 3.500000 0.062500
v 0.062500 3.500000 -0.062500
v -0.062500 4.000000 -0.062500
v -0.062500 4.000000 0.062500
v 0.062500 4.000000 0.062500
v 0.062500 4.000000 -0.062500
v -0.250000 4.000000 0.250000
v 0.250000 4.000000 0.250000
v -0.250000 4.000000 -0.250000
v 0.250000 4.000000 -0.250000
v -0.250000 4.062500 -0.250000
v -0.250000 4.062500 0.250000
v 0.250000 4.062500 0.250000
v 0.250000 4.062500 -0.250000
v 0.250000 4.062500 0.250000
v 0.250000 4.062500 0.187500
v 0.187500 4.062500 0.250000
v 0.187500 4.062500 0.187500
v 0.375000 4.812500 0.375000
v 0.375000 4.812500 0.312500
v 0.312500 4.812500 0.375000
v 0.312500 4.812500 0.312500
v 0.250000 4.062500 -0.187500
v 0.250000 4.062500 -0.250000
v 0.187500 4.062500 -0.187500
v 0.187500 4.062500 -0.250000
v 0.375000 4.812500 -0.312500
v 0.375000 4.812500 -0.375000
v 0.312500 4.812500 -0.312500
v 0.312500 4.812500 -0.375000
v -0.181700 4.062500 0.250000
v -0.181700 4.062500 0.187500
v -0.244200 4.062500 0.250000
v -0.244200 4.062500 0.187500
v -0.306700 4.812500 0.375000
v -0.306700 4.812500 0.312500
v -0.369200 4.812500 0.375000
v -0.369200 4.812500 0.312500
v -0.181700 4.062500 -0.187500
v -0.181700 4.062500 -0.250000
v -0.244200 4.062500 -0.187500
v -0.244200 4.062500 -0.250000
v -0.306700 4.812500 -0.312500
v -0.306700 4.812500 -0.375000
v -0.369200 4.812500 -0.312500
v -0.369200 4.812500 -0.375000
v 0.375000 4.812500 0.375000
v 0.375000 4.812500 -0.375000
v -0.369200 4.812500 0.375000
v -0.369200 4.812500 -0.375000
v 0.375000 4.875000 0.375000
v 0.375000 4.875000 -0.375000
v -0.369200 4.875000 0.375000
v -0.369200 4.875000 -0.375000
v 0.125000 5.000000 -0.125000
v 0.125000 5.000000 0.125000
v -0.119200 5.000000 0.125000
v -0.119200 5.000000 -0.125000
v -0.059600 5.000000 0.062500
v 0.065400 5.000000 0.062500
v -0.059600 5.000000 -0.062500
v 0.065400 5.000000 -0.062500
v -0.059600 5.500000 0.062500
v 0.065400 5.500000 0.062500
v -0.059600 5.500000 -0.062500
v 0.065400 5.500000 -0.062500
vt 0.764706 0.176471
vt 1.000000 0.235294
vt 0.764706 0.235294
vt 0.294118 0.279412
vt 0.117647 0.294118
vt 0.058824 0.279412
vt 0.294118 -0.000000
vt 0.058824 0.279412
vt 0.058824 -0.000000
vt 0.294118 -0.000000
vt 0.058824 0.279412
vt 0.058824 -0.000000
vt 0.294118 -0.000000
vt 0.058824 -0.000000
vt 0.294118 -0.000000
vt 0.058824 0.279412
vt 0.058824 -0.000000
vt 0.235294 0.294118
vt 0.058824 0.308824
vt 0.117647 0.294118
vt 0.294118 0.279412
vt 0.117647 0.294118
vt 0.294118 0.279412
vt 0.294118 0.279412
vt 0.117647 0.294118
vt 0.294118 0.308824
vt 0.058824 0.338235
vt 0.058824 0.308824
vt 0.235294 0.294118
vt 0.235294 0.294118
vt 0.058824 0.308824
vt 0.235294 0.294118
vt 0.058824 0.308824
vt 0.294118 0.338235
vt 0.117647 0.352941
vt 0.058824 0.338235
vt 0.294118 0.308824
vt 0.294118 0.308824
vt 0.058824 0.338235
vt 0.294118 0.308824
vt 0.058824 0.338235
vt 0.235294 0.352941
vt 0.117647 0.823529
vt 0.117647 0.352941
vt 0.294118 0.338235
vt 0.117647 0.352941
vt 0.294118 0.338235
vt 0.294118 0.338235
vt 0.117647 0.352941
vt 0.117647 0.823529
vt 0.294118 0.838235
vt 0.058824 0.838235
vt 0.235294 0.352941
vt 0.117647 0.823529
vt 0.235294 0.352941
vt 0.235294 0.352941
vt 0.117647 0.823529
vt 0.058824 0.867647
vt 0.294118 0.838235
vt 0.058824 0.838235
vt 0.294118 0.838235
vt 0.058824 0.838235
vt 0.294118 0.838235
vt 0.058824 0.838235
vt 0.294118 0.867647
vt 0.117647 0.882353
vt 0.058824 0.867647
vt 0.058824 0.867647
vt 0.058824 0.867647
vt 0.235294 0.882353
vt 0.117647 1.000000
vt 0.117647 0.882353
vt 0.294118 0.867647
vt 0.117647 0.882353
vt 0.294118 0.867647
vt 0.294118 0.867647
vt 0.117647 0.882353
vt 0.235294 0.882353
vt 0.117647 1.000000
vt 0.235294 0.882353
vt 0.117647 1.000000
vt 0.235294 0.882353
vt 0.117647 1.000000
vt 0.764706 -0.000000
vt 0.294118 0.117647
vt 0.294118 -0.000000
vt 0.294118 0.132353
vt 0.764706 0.250000
vt 0.294118 0.250000
vt 0.764706 0.117647
vt 0.764706 0.117647
vt 0.294118 0.132353
vt 0.294118 0.117647
vt 0.764706 0.117647
vt 0.294118 0.132353
vt 0.294118 0.117647
vt 0.764706 0.117647
vt 0.294118 0.132353
vt 0.294118 0.117647
vt 0.882353 0.000000
vt 0.823529 0.176471
vt 0.823529 0.000000
vt 0.764706 0.176471
vt 0.764706 0.000000
vt 1.000000 0.176471
vt 0.941176 0.000000
vt 1.000000 0.000000
vt 0.941176 0.176471
vt 0.823529 0.000000
vt 0.764706 0.176471
vt 0.764706 0.000000
vt 0.941176 0.000000
vt 1.000000 0.176471
vt 0.941176 0.176471
vt 0.882353 0.000000
vt 0.823529 0.176471
vt 0.941176 0.176471
vt 0.882353 0.000000
vt 0.941176 0.000000
vt 0.823529 0.176471
vt 0.823529 0.000000
vt 0.764706 0.176471
vt 0.764706 0.000000
vt 1.000000 0.176471
vt 1.000000 0.000000
vt 1.000000 0.176471
vt 0.941176 0.000000
vt 1.000000 0.000000
vt 0.882353 0.000000
vt 0.941176 0.176471
vt 0.882353 0.176471
vt 0.823529 0.176471
vt 0.823529 0.000000
vt 0.764706 0.176471
vt 0.764706 0.000000
vt 0.294118 0.426471
vt 1.000000 0.250000
vt 1.000000 0.426471
vt 0.294118 0.617647
vt 0.764706 0.558824
vt 1.000000 0.617647
vt 1.000000 0.426471
vt 0.294118 0.441176
vt 0.294118 0.426471
vt 0.294118 0.441176
vt 1.000000 0.426471
vt 0.294118 0.441176
vt 0.294118 0.426471
vt 1.000000 0.426471
vt 0.294118 0.441176
vt 0.294118 0.426471
vt 0.529412 0.500000
vt 0.764706 0.500000
vt 1.000000 0.441176
vt 0.529412 0.558824
vt 0.529412 0.735294
vt 0.411765 0.617647
vt 0.529412 0.617647
vt 0.764706 0.735294
vt 0.647059 0.617647
vt 0.764706 0.617647
vt 0.647059 0.735294
vt 0.411765 0.735294
vt 0.294118 0.617647
vt 0.411765 0.764706
vt 0.529412 0.764706
vt 1.000000 0.176471
vt 0.235294 0.823529
vt 0.235294 0.823529
vt 0.235294 0.823529
vt 0.235294 0.823529
vt 0.235294 1.000000
vt 0.235294 1.000000
vt 0.235294 1.000000
vt 0.235294 1.000000
vt 0.764706 0.132353
vt 0.764706 0.132353
vt 0.764706 0.132353
vt 0.764706 0.132353
vt 0.882353 0.176471
vt 1.000000 0.000000
vt 0.882353 0.176471
vt 0.882353 0.176471
vt 0.294118 0.250000
vt 1.000000 0.441176
vt 1.000000 0.441176
vt 1.000000 0.441176
vt 0.294118 0.735294
vn 0.0000 -1.0000 0.0000
vn 0.7071 0.7071 0.0000
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
vn 0.0000 -0.7071 -0.7071
vn -0.7071 0.7071 0.0000
vn 0.0000 0.7071 -0.7071
vn 0.0000 0.7071 0.7071
vn 0.0000 -0.7071 0.7071
vn 0.7071 -0.7071 0.0000
vn -0.7071 -0.7071 0.0000
vn 0.0000 1.0000 0.0000
vn 0.0000 -0.1644 0.9864
vn -0.9864 0.1644 0.0000
vn 0.0000 0.1644 -0.9864
vn 0.9864 -0.1644 0.0000
vn 0.0000 0.1644 0.9864
vn 0.0000 -0.1644 -0.9864
vn -0.9864 -0.1644 0.0000
vn 0.9864 0.1644 0.0000
vn -0.4472 0.8944 0.0000
vn 0.4472 0.8944 0.0000
vn 0.0000 0.8944 -0.4472
vn 0.0000 0.8944 0.4472
s off
f 11/1/5 10/2/5 9/3/5
f 16/4/6 18/5/6 14/6/6
f 11/7/7 16/8/7 12/9/7
f 10/10/8 13/11/8 9/12/8
f 12/13/9 14/6/9 10/14/9
f 9/15/10 15/16/10 11/17/10
f 19/18/11 24/19/11 20/20/11
f 13/21/12 19/22/12 15/16/12
f 15/23/13 20/20/13 16/8/13
f 14/24/14 17/25/14 13/11/14
f 22/26/8 25/27/8 21/28/8
f 18/29/15 21/28/15 17/25/15
f 20/30/16 22/31/16 18/5/16
f 17/32/17 23/33/17 19/22/17
f 28/34/6 30/35/6 26/36/6
f 24/37/9 26/36/9 22/31/9
f 21/38/10 27/39/10 23/33/10
f 23/40/7 28/41/7 24/19/7
f 31/42/7 36/43/7 32/44/7
f 25/45/12 31/46/12 27/39/12
f 27/47/13 32/44/13 28/41/13
f 26/48/14 29/49/14 25/27/14
f 35/50/16 40/51/16 39/52/16
f 30/53/8 34/54/8 29/49/8
f 32/55/9 35/50/9 30/35/9
f 29/56/10 33/57/10 31/46/10
f 40/51/9 43/58/9 39/52/9
f 33/57/17 38/59/17 37/60/17
f 36/43/11 37/61/11 40/62/11
f 34/54/15 39/63/15 38/64/15
f 41/65/13 48/66/13 44/67/13
f 38/59/10 41/68/10 37/60/10
f 37/61/7 44/67/7 40/62/7
f 39/63/8 42/69/8 38/64/8
f 48/70/9 51/71/9 47/72/9
f 43/73/14 46/74/14 42/69/14
f 44/75/6 47/72/6 43/58/6
f 42/76/12 45/77/12 41/68/12
f 46/78/10 49/79/10 45/77/10
f 45/80/7 52/81/7 48/66/7
f 47/82/8 50/83/8 46/74/8
f 55/84/5 54/85/5 53/86/5
f 59/87/18 57/88/18 58/89/18
f 56/90/9 59/87/9 54/85/9
f 53/91/10 57/92/10 55/93/10
f 55/94/7 60/95/7 56/96/7
f 54/97/8 58/98/8 53/99/8
f 61/100/19 67/101/19 63/102/19
f 63/102/20 68/103/20 64/104/20
f 68/105/21 62/106/21 64/107/21
f 66/108/22 61/100/22 62/106/22
f 69/109/23 75/110/23 71/111/23
f 72/112/20 75/113/20 76/114/20
f 76/114/24 70/115/24 72/112/24
f 70/115/22 73/116/22 69/109/22
f 81/117/19 79/118/19 77/119/19
f 79/118/25 84/120/25 80/121/25
f 80/121/21 82/122/21 78/123/21
f 82/124/26 77/119/26 78/125/26
f 89/126/23 87/127/23 85/128/23
f 88/129/25 91/130/25 92/131/25
f 88/129/24 90/132/24 86/133/24
f 86/133/26 89/134/26 85/135/26
f 93/136/5 96/137/5 94/138/5
f 99/139/27 104/140/27 100/141/27
f 95/142/10 100/143/10 96/144/10
f 94/138/9 97/145/9 93/136/9
f 96/146/7 98/147/7 94/148/7
f 93/149/8 99/150/8 95/151/8
f 104/140/18 102/152/18 101/153/18
f 98/154/28 102/152/28 97/145/28
f 100/141/29 101/153/29 98/154/29
f 97/145/30 103/155/30 99/139/30
f 112/156/9 106/157/9 108/158/9
f 109/159/10 107/160/10 105/161/10
f 111/162/7 108/158/7 107/160/7
f 110/163/8 105/164/8 106/157/8
f 109/165/18 112/156/18 111/166/18
f 11/1/5 12/167/5 10/2/5
f 16/4/6 20/30/6 18/5/6
f 11/7/7 15/23/7 16/8/7
f 10/10/8 14/24/8 13/11/8
f 12/13/9 16/4/9 14/6/9
f 9/15/10 13/21/10 15/16/10
f 19/18/11 23/40/11 24/19/11
f 13/21/12 17/32/12 19/22/12
f 15/23/13 19/18/13 20/20/13
f 14/24/14 18/29/14 17/25/14
f 22/26/8 26/48/8 25/27/8
f 18/29/15 22/26/15 21/28/15
f 20/30/16 24/37/16 22/31/16
f 17/32/17 21/38/17 23/33/17
f 28/34/6 32/55/6 30/35/6
f 24/37/9 28/34/9 26/36/9
f 21/38/10 25/45/10 27/39/10
f 23/40/7 27/47/7 28/41/7
f 31/42/7 33/168/7 36/43/7
f 25/45/12 29/56/12 31/46/12
f 27/47/13 31/42/13 32/44/13
f 26/48/14 30/53/14 29/49/14
f 35/50/16 36/169/16 40/51/16
f 30/53/8 35/170/8 34/54/8
f 32/55/9 36/169/9 35/50/9
f 29/56/10 34/171/10 33/57/10
f 40/51/9 44/75/9 43/58/9
f 33/57/17 34/171/17 38/59/17
f 36/43/11 33/168/11 37/61/11
f 34/54/15 35/170/15 39/63/15
f 41/65/13 45/80/13 48/66/13
f 38/59/10 42/76/10 41/68/10
f 37/61/7 41/65/7 44/67/7
f 39/63/8 43/73/8 42/69/8
f 48/70/9 52/172/9 51/71/9
f 43/73/14 47/82/14 46/74/14
f 44/75/6 48/70/6 47/72/6
f 42/76/12 46/78/12 45/77/12
f 46/78/10 50/173/10 49/79/10
f 45/80/7 49/174/7 52/81/7
f 47/82/8 51/175/8 50/83/8
f 55/84/5 56/90/5 54/85/5
f 59/87/18 60/176/18 57/88/18
f 56/90/9 60/176/9 59/87/9
f 53/91/10 58/177/10 57/92/10
f 55/94/7 57/178/7 60/95/7
f 54/97/8 59/179/8 58/98/8
f 61/100/19 65/180/19 67/101/19
f 63/102/20 67/101/20 68/103/20
f 68/105/21 66/108/21 62/106/21
f 66/108/22 65/180/22 61/100/22
f 69/109/23 73/116/23 75/110/23
f 72/112/20 71/181/20 75/113/20
f 76/114/24 74/182/24 70/115/24
f 70/115/22 74/182/22 73/116/22
f 81/117/19 83/183/19 79/118/19
f 79/118/25 83/183/25 84/120/25
f 80/121/21 84/120/21 82/122/21
f 82/124/26 81/117/26 77/119/26
f 89/126/23 91/130/23 87/127/23
f 88/129/25 87/127/25 91/130/25
f 88/129/24 92/131/24 90/132/24
f 86/133/26 90/132/26 89/134/26
f 93/136/5 95/184/5 96/137/5
f 99/139/27 103/155/27 104/140/27
f 95/142/10 99/185/10 100/143/10
f 94/138/9 98/154/9 97/145/9
f 96/146/7 100/186/7 98/147/7
f 93/149/8 97/187/8 99/150/8
f 104/140/18 103/155/18 102/152/18
f 98/154/28 101/153/28 102/152/28
f 100/141/29 104/140/29 101/153/29
f 97/145/30 102/152/30 103/155/30
f 112/156/9 110/163/9 106/157/9
f 109/159/10 111/162/10 107/160/10
f 111/162/7 112/156/7 108/158/7
f 110/163/8 109/188/8 105/164/8
f 109/165/18 110/163/18 112/156/18

File diff suppressed because it is too large Load Diff

View File

@ -54,6 +54,10 @@
"block.damage": {"category": "block", "sounds": ["block/dam1", "block/dam2", "block/dam3", "block/dam4"]},
"block.electricHum": {"category": "block", "sounds": [{"name": "block/electricHum", "stream": false}]},
"block.boiler": {"category": "block", "sounds": [{"name": "block/boiler", "stream": false}]},
"block.hornNearSingle": {"category": "block", "sounds": [{"name": "block/hornNearSingle", "stream": false}]},
"block.hornNearDual": {"category": "block", "sounds": [{"name": "block/hornNearDual", "stream": false}]},
"block.hornFarSingle": {"category": "block", "sounds": [{"name": "block/hornFarSingle", "stream": false}]},
"block.hornFarDual": {"category": "block", "sounds": [{"name": "block/hornFarDual", "stream": false}]},
"door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]},
"door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]},
@ -180,6 +184,8 @@
"weapon.hicalShot": {"category": "player", "sounds": [{"name": "weapon/hicalShot", "stream": false}]},
"weapon.coilgunReload": {"category": "player", "sounds": [{"name": "weapon/coilgunReload", "stream": false}]},
"weapon.coilgunShoot": {"category": "player", "sounds": [{"name": "weapon/coilgunShoot", "stream": false}]},
"weapon.glReload": {"category": "player", "sounds": [{"name": "weapon/glReload", "stream": false}]},
"weapon.glShoot": {"category": "player", "sounds": [{"name": "weapon/glShoot", "stream": false}]},
"weapon.dFlash": {"category": "player", "sounds": [{"name": "weapon/dFlash", "stream": false}]},

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

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